CI runs the same build/deploy lifecycle as manual commands. Choose where to build, then configure access and the release branch. First placement and routine updates have different steps.
Choose delivery
Set CI provider and Image delivery in Deployment → Defaults. Create a profile in Environments with server, domain and storage settings.
| Delivery | Build location | What reaches the VPS |
|---|---|---|
| Source + GitLab | One VPS, inside the Deploy job | Exact-commit source; images are built on that host |
| Archive + GitLab/GitHub | Runner | Ready release JSON and Docker image archive |
| Registry + GitLab/GitHub | Runner | Release metadata referencing registry images |
Source also supports manual use without CI. Source + GitHub is not currently supported. Registry choice is independent of CI provider, and backup is independent of delivery.
Prepare access
Complete Server and domain preparation once. Ordinary CI reads the generated profile and custom overlay from Git; a full JSON secret is unnecessary. SSH keys and registry credentials use separate protected variables.
Source additionally requires server access to the GitLab repository. That key is separate from CI → VPS access. Set the existing server Git checkout path in UI. Source CI jobs using the same Unix user share a host build queue; project data remains separate.
First and subsequent releases
A new installation needs Provision and its first Deploy. Routine updates need Deploy only. Generate writes files; it does not update the server or transfer local content.
GitLab Release branch is authored in UI, defaulting to main. Deploy is manual by default; Automatic deploy is a separate setting. Source has no standalone Build job: build runs inside Deploy. Archive/Registry first run Build and deploy its artifact.
| Change | Action |
|---|---|
| Code/model | Commit → release branch → Deploy |
| Server records/content | Save in the administration interface |
| Supported delivery/backup configuration | Explicit reconfigure |
| Initial local data | Separate one-time transfer |
GitLab setup · GitHub setup · Application updates
If a job is interrupted, inspect environment state first. A new pipeline does not undo completed server steps: use Operation recovery. Old images and archives are not automatically cleaned; follow Disk cleanup.