[Unit] Description=GenRecon web app (PWA + reconstruction API) After=network.target [Service] Type=simple # Only kill the web process on stop/restart — detached reconstruction runners # (run_job.py, own session) keep going so a redeploy never strands an in-flight # scan; the next startup re-attaches to them. KillMode=process WorkingDirectory=/opt/genrecon/app/backend Environment=GENRECON_JOBS_DIR=/srv/jobs Environment=GENRECON_FRONTEND_DIR=/opt/genrecon/app/frontend Environment=GENRECON_SAMPLE_GLB=/opt/genrecon/app/sample/scene.glb Environment=GENRECON_SRC=/opt/genrecon/src Environment=GENRECON_CKPTS=/opt/genrecon/ckpts Environment=GENRECON_CONDA_ENV=genrecon Environment=GENRECON_CUDA_DEVICE=5 # Flip to 1 to serve the bundled demo scene without the GPU pipeline: Environment=GENRECON_MOCK=0 ExecStart=/usr/bin/env bash -lc 'uvicorn app:app --host 0.0.0.0 --port 8000' Restart=on-failure RestartSec=3 User=root [Install] WantedBy=multi-user.target