# Add New Service Runbook This runbook walks through a **clean, tested path** for adding a new service to the homelab using GitOps with Portainer. > ⚠️ **Prerequisites**: CI runner access, SSH to target hosts, SSO admin privilege. ## 1. Prepare Compose File ```bash # Generate a minimal stack template ../scripts/ci/workflows/gen-template.py --service myservice ``` Adjust `docker-compose.yml`: - Image name - Ports - Environment variables - Health‑check ## 2. Validate Configuration ```bash docker compose -f docker-compose.yml config > /tmp/merged.yml # Validate against OpenAPI specs if needed ``` ## 3. Commit Locally ```bash git add docker/compose/*.yml git commit -m "Add myservice stack" ``` ## 4. Push to Remote & Trigger GitOps ```bash git push origin main ``` The Portainer EE GitOps agent will automatically deploy. Monitor the stack via the Portainer UI or `portainer api`. ## 5. Post‑Deployment Verification | Check | Command | Expected Result | |-------|---------|----------------- | Service Running | `docker ps --filter "name=myservice"` | One container running | | Health Endpoint | `curl http://localhost:8080/health` | 200 OK | | Logs | `docker logs myservice` | No fatal errors | ## 6. Update Documentation 1. Add entry to `docs/services/VERIFIED_SERVICE_INVENTORY.md`. 2. Create a quick‑start guide in `docs/services//README.md`. 3. Publish to the shared wiki. ## 7. Optional – Terraform Sync If the service also needs infra changes (e.g., new VM), update the Terraform modules under `infra/` and run `terragrunt run-all apply`. --- **Gotchas** – - *Race conditions*: rebasing before push. - Health‑check failures: check Portainer Events. - Secrets: use Vault and reference in `secrets` section.