[Unit] Description=Backup Dashboard API After=network.target [Service] User=backupdash Group=backupdash WorkingDirectory=/opt/backup-dashboard/backend # Settings live in this file so manage.py reads exactly the same ones (see deploy/backup-dashboard.env) EnvironmentFile=/etc/backup-dashboard/backup-dashboard.env # Bound to localhost: only nginx can reach it, so nginx's auth can't be bypassed from outside. # One worker is plenty at this scale and keeps SQLite writes simple. ExecStart=/opt/backup-dashboard/venv/bin/uvicorn --factory app.main:create_app --host 127.0.0.1 --port 8000 --proxy-headers Restart=on-failure StateDirectory=backup-dashboard NoNewPrivileges=true ProtectSystem=strict ProtectHome=true PrivateTmp=true [Install] WantedBy=multi-user.target