SWAOS
QUICK EXPLANATION
In order for the system to properly function with all background workers, the deployment needs to be transferred to docker compose. This file explains the proccess. I do not have access to the VPS so I figured I would create a guide.
- The reason the session is not working currently is because the API runs within docker compose and all the workers can not function (auth for example).
Deploy via Docker (Gitea Actions)
This document lists the changes needed to switch your deployment to Docker Compose so all services (api, web, scheduler, postgres, etc.) start automatically on deploy.
1) Replace the deploy workflow steps
Update .gitea/workflows/deploy.yml so it:
- Pulls the repo on the VPS (or uses the runner workspace)
- Builds and starts containers with Docker Compose
- Runs migrations inside the running API container
- Reloads Nginx (or Caddy)
Recommended deploy.yml (Docker-based):
name: Deploy
on:
push:
branches: [main]
jobs:
deploy:
runs-on: vps-host
steps:
- uses: actions/checkout@v4
- name: Deploy with Docker Compose
run: |
# Adjust to your deployment directory
APP_DIR=/opt/skymoney
mkdir -p $APP_DIR
# Sync repo contents to server folder
rsync -a --delete ./ $APP_DIR/
cd $APP_DIR
# Build + start all services
docker compose up -d --build
# Run Prisma migrations inside API container
docker compose exec -T api npx prisma migrate deploy
- name: Reload Nginx
run: sudo systemctl reload nginx
If you use Caddy instead of Nginx, replace the reload step accordingly.
2) Ensure docker-compose.yml is production-safe
Double‑check these:
- The API service exposes the correct port
- The web service is either served by Nginx (static build) or a container
- Scheduler/worker services are included
Example pattern:
services:
api:
build: ./api
env_file:
- ./.env
ports:
- "8080:8080"
scheduler:
build: ./api
command: node dist/worker/rollover.js
env_file:
- ./.env
web:
build: ./web
# or copy build output to nginx
3) Update Nginx upstream
Make sure your proxy matches the API port:
location /api/ {
proxy_pass http://127.0.0.1:8080/;
}
4) Add Docker/Compose to VPS if missing
sudo apt update
sudo apt install -y docker.io docker-compose-plugin
sudo systemctl enable --now docker
5) Update environment files
Your .env should exist at /opt/skymoney/.env and contain:
- DATABASE_URL
- JWT_SECRET (>=32 chars)
- COOKIE_SECRET (>=32 chars)
- CORS_ORIGIN
- NODE_ENV=production
6) Verify after deploy
docker compose ps
curl -i http://127.0.0.1:8080/health
Optional: logs
docker compose logs -f api
docker compose logs -f scheduler
If you want, I can also adapt the deploy workflow to use docker compose pull + docker compose up without rebuilding every time, or split API/web deploys.