SpipCP
Deploys

Deploy from GitHub

Wire a GitHub (or GitLab / Gitea) push to an automatic, health-gated deploy in a few minutes β€” generate a deploy key, add the webhook, push.

This guide connects a push to a repository to an automatic deploy of a site, with the same cutover and rollback as a manual deploy. It uses GitHub; GitLab and Gitea work the same way (the signature header differs, noted below).

1. Connect the repository

On the site's Deploys tab:

  1. Paste the repository SSH URL (git@github.com:owner/repo.git) and the branch to track.
  2. Click Generate deploy key. Copy the public key shown.

2. Add the deploy key on GitHub

In the repo: Settings β†’ Deploy keys β†’ Add deploy key. Paste the public key, give it a title, leave Allow write access unchecked (deploys only read). Save.

A deploy key, not a personal account key

This key is scoped to this one repository and this one site. It cannot read any other repos, and it is not a personal SSH key. The private half stays encrypted in the panel.

3. Add the webhook

Back on the Deploys tab, click Enable webhook and copy the generated secret. Then in the repo: Settings β†’ Webhooks β†’ Add webhook:

  • Payload URL β€” https://<panel-host>/api/v1/sites/<site-id>/webhook (shown on the tab).
  • Content type β€” application/json.
  • Secret β€” paste the secret from the panel.
  • Events β€” Just the push event.

GitHub signs each delivery with X-Hub-Signature-256. The panel verifies it against the stored secret; an unsigned or wrong-signature delivery is rejected (401) and logged. For Gitea the header is the same (X-Hub-Signature-256); for GitLab set a Secret token instead (sent as X-Gitlab-Token).

4. Push

git commit --allow-empty -m "trigger deploy" && git push

The push fires the webhook β†’ the panel verifies it β†’ a deploy runs (fetch β†’ build β†’ smoke β†’ cutover). Watch it on the Deploys tab. A failed build never affects the running site; Roll back is one click.

Pushes during a deploy

Webhook deploys are serialized per site: two quick pushes, or a push while a deploy is running, leave the panel queuing exactly one follow-up β€” it never piles up, and the final state is always the latest commit.

Manual deploy

The Deploy now button on the tab runs the same pipeline without a push β€” handy for a first deploy or a re-run.

Test before relying on it

Deploy now handles a first deploy; a small push afterward confirms the webhook fires and the deploy runs end to end. Once one push-triggered deploy has succeeded, every later push works the same way.

On this page