Skip to content

Deployment

Deployment

Normal deploy (push to main)

Terminal window
git push origin main

Woodpecker CI triggers automatically:

  1. build.yml — builds Docker image, pushes to Gitea registry
  2. trigger-deploy step — fires the deploy pipeline
  3. deploy.yml — SCPs docker-compose.yml to web VPS, pulls new image, recreates container

Monitor progress in Woodpecker at http://100.81.122.65:8000 (Tailscale access required).

Manual deploy

In Woodpecker, navigate to the level147/level147.net repo and click Run pipeline to trigger the deploy pipeline manually.

!!! note “Linter warnings” The deploy pipeline shows linter warnings about network_mode: host at the step level. These are cosmetic — the pipeline executes correctly. backend_options.docker.network_mode is not honoured by the installed Woodpecker agent version.

Verifying the deploy

Terminal window
# On web VPS
docker ps --filter "name=level147-net" --format "{{.Names}}\t{{.Status}}"
# Should show: level147-net Up X minutes (healthy)
# Check the app responds
docker exec level147-net node -e \
"require('http').get('http://localhost:3000/api/health', r => {console.log(r.statusCode); process.exit(0)}).on('error', e => {console.error(e.message); process.exit(1)})"
# Should print: 200

Rollback

The Gitea registry retains previous image tags only if they were pushed with distinct tags. The :prod tag is overwritten on each build. To rollback, rebuild from the previous git commit:

Terminal window
git revert HEAD
git push origin main