Deploy auf VPS
Die GitHub Action Sitequest-Software/sitequest-deploy-vps-action macht ein atomares Release auf deinem VPS im Capistrano-Stil: Sie lädt ein Tarball hoch, entpackt es in ein nummeriertes Release-Verzeichnis und schaltet anschließend den current-Symlink um. Optional wird eine systemd-Unit neu gestartet.
Was es macht
- Packt
sourceauf dem Runner. - Lädt das Archiv über die Sitequest REST-API hoch.
- Entpackt es auf dem VPS nach
<target-base>/releases/<run-id>/. - Setzt optional den Eigentümer per
chownaufowner. - Schaltet
<target-base>/currentatomar auf das neue Release um. - Startet auf Wunsch
restart-serviceneu. - Räumt alte Releases auf (gesteuert über
keep-releases).
Inputs
| Input | Pflicht | Default | Beschreibung |
|---|---|---|---|
api-key |
Ja | — | Sitequest API-Key mit dem Scope vps:manage. |
vps-id |
Ja | — | ID des Ziel-VPS. |
source |
Nein | dist |
Lokales Verzeichnis, das deployt werden soll. |
target-base |
Ja | — | Absoluter Basispfad auf dem VPS. Releases landen unter <target-base>/releases/<run-id>/, der Symlink unter <target-base>/current. |
keep-releases |
Nein | 5 |
Anzahl alter Releases, die für Rollbacks aufbewahrt werden (0 = unbegrenzt). |
restart-service |
Nein | — | systemd-Unit, die nach dem Symlink-Wechsel neu gestartet wird (mehrere durch Komma getrennt). |
owner |
Nein | — | user:group für chown des Releases nach dem Entpacken. |
api-base |
Nein | https://panel.site.quest |
API-Basis-URL überschreiben (z. B. für Staging). |
Outputs
| Output | Beschreibung |
|---|---|
release-path |
Absoluter Pfad des neuen Release-Verzeichnisses auf dem VPS. |
bytes-uploaded |
Größe des hochgeladenen tar.gz-Archivs in Bytes. |
duration-ms |
Gesamtdauer des Deploys in Millisekunden. |
Beispiel-Workflow
name: Deploy to VPS
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm ci
- run: npm run build
- id: deploy
uses: Sitequest-Software/sitequest-deploy-vps-action@v1
with:
api-key: ${{ secrets.SITEQUEST_API_KEY }}
vps-id: ${{ vars.SITEQUEST_VPS_ID }}
source: dist
target-base: /var/www/myapp
keep-releases: 5
restart-service: myapp.service
owner: www-data:www-data
- run: echo "Deployed to ${{ steps.deploy.outputs.release-path }}"
Layout auf dem VPS
/var/www/myapp/
├── current → releases/9876543210/
└── releases/
├── 9876543210/ ← neuestes
├── 9876543200/
└── 9876543190/
Richte Nginx, deine systemd-Unit oder deinen Reverse-Proxy auf <target-base>/current/ aus. Ein Rollback ist ein einfaches ln -sfn <previous> current von Hand – oder du startest einfach einen früheren Workflow neu.
Benötigter Scope
Der API-Key braucht den Scope vps:manage. Lege ihn im Dashboard unter API / MCP (im Profilmenü) an.
Siehe auch
- Befehl ausführen – für einmalige Pre- oder Post-Hooks.
- API-Referenz: SFTP Write, Execute.