[Unit] Description=RPA Vision V3 - Upload API (FastAPI) After=network-online.target Wants=network-online.target [Service] Type=simple # ---- Runtime ---- User=dom Group=dom WorkingDirectory=/home/dom/ai/rpa_vision_v3 EnvironmentFile=/home/dom/ai/rpa_vision_v3/.env.local Environment="PYTHONUNBUFFERED=1" Environment="ENVIRONMENT=production" Environment="RPA_SERVICE_NAME=rpa-vision-v3-api" # Service grounding persistant — socket + répertoire d'images partagés via /run/rpa/. # Si le service rpa-grounding n'est pas démarré, le client retombe automatiquement # sur le subprocess one-shot (cf. ui_tars_grounder.py). Environment="RPA_GROUNDING_SOCKET=/run/rpa/grounding.sock" Environment="RPA_GROUNDING_IMG_DIR=/run/rpa" ExecStart=/home/dom/ai/rpa_vision_v3/.venv/bin/python3 server/api_upload.py # ---- Resilience ---- Restart=on-failure RestartSec=3 TimeoutStopSec=30 # ---- Hardening ---- NoNewPrivileges=true PrivateTmp=true # /run/rpa/ partagé avec rpa-grounding pour le socket et les images grounding. # Le service rpa-grounding crée le répertoire ; ici on l'expose au /run du service. RuntimeDirectory=rpa RuntimeDirectoryMode=0755 RuntimeDirectoryPreserve=yes # Logs -> journald StandardOutput=journal StandardError=journal SyslogIdentifier=rpa-vision-v3-api [Install] WantedBy=multi-user.target