Files
pamietnik/infra
Christoph K. 257d1e4062 Add Gitea CI/CD pipeline and shared infra setup
- docker-compose.yml: remove bundled postgres, connect to shared
  postgres via host-gateway:5433, add uploads volume, configurable port
- .gitea/workflows/deploy.yml: Gitea Actions workflow for automated
  deploy on push to main
- infra/README.md: step-by-step setup guide for NAS deployment
  (shared postgres, pgAdmin, act_runner, Gitea secrets)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 15:42:58 +02:00
..

Infrastruktur & Deployment

Übersicht

Synology NAS
├── /volume2/docker/shared/          ← Geteilte Infrastruktur (PostgreSQL + pgAdmin)
│   ├── docker-compose.yml
│   ├── .env
│   ├── pgdata/                      ← PostgreSQL-Daten (persistent)
│   └── pgadmin/                     ← pgAdmin-Daten (persistent)
│
└── /volume2/docker/pamietnik/       ← Pamietnik-Deployment
    ├── docker-compose.yml           ← Kopie aus dem Repo (via CI/CD)
    ├── .env
    └── uploads/                     ← Hochgeladene Bilder (persistent)

1. Geteilte Infrastruktur einrichten (einmalig)

Verzeichnisse anlegen

sudo mkdir -p /volume2/docker/shared/pgdata
sudo mkdir -p /volume2/docker/shared/pgadmin
sudo chown -R 5050:5050 /volume2/docker/shared/pgadmin

docker-compose.yml anlegen

Datei /volume2/docker/shared/docker-compose.yml:

services:
  postgres:
    image: postgres:16-alpine
    restart: unless-stopped
    ports:
      - "5433:5432"
    environment:
      POSTGRES_USER: ${POSTGRES_USER:-postgres}
      POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?POSTGRES_PASSWORD is required}
    volumes:
      - /volume2/docker/shared/pgdata:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-postgres}"]
      interval: 5s
      timeout: 5s
      retries: 5

  pgadmin:
    image: dpage/pgadmin4:latest
    restart: unless-stopped
    ports:
      - "5050:8080"
    environment:
      PGADMIN_DEFAULT_EMAIL: ${PGADMIN_EMAIL}
      PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_PASSWORD}
      PGADMIN_LISTEN_PORT: 8080
    volumes:
      - /volume2/docker/shared/pgadmin:/var/lib/pgadmin

.env anlegen

Datei /volume2/docker/shared/.env:

POSTGRES_PASSWORD=<sicheres-passwort>
PGADMIN_EMAIL=deine@email.de
PGADMIN_PASSWORD=<pgadmin-passwort>

Starten

cd /volume2/docker/shared
sudo docker compose up -d

Datenbank & User anlegen

sudo docker exec -it shared-postgres-1 psql -U postgres
CREATE DATABASE pamietnik;
CREATE USER pamietnik WITH PASSWORD 'deinPasswort';
GRANT ALL PRIVILEGES ON DATABASE pamietnik TO pamietnik;
\q

2. Pamietnik-Deployment einrichten (einmalig)

sudo mkdir -p /volume2/docker/pamietnik/uploads

Datei /volume2/docker/pamietnik/.env:

DB_PASSWORD=<passwort-von-oben>
APP_PORT=9050

3. Gitea CI/CD einrichten (einmalig)

act_runner starten

Token holen: Gitea → Site-Administration → Actions → Runner → Runner erstellen

sudo docker run -d \
  --name gitea-runner \
  --restart unless-stopped \
  --network host \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /volume2/docker/gitea-runner:/data \
  -e GITEA_INSTANCE_URL=http://localhost:3000 \
  -e GITEA_RUNNER_REGISTRATION_TOKEN=<token-aus-gitea> \
  -e GITEA_RUNNER_NAME=nas-runner \
  -e GITEA_RUNNER_LABELS=self-hosted,linux,amd64 \
  gitea/act_runner:latest

Gitea Secrets & Variables setzen

Repository → Einstellungen → Actions → Secrets:

Secret Wert
DB_PASSWORD Passwort des pamietnik DB-Users
DEPLOY_DIR /volume2/docker/pamietnik

Repository → Einstellungen → Actions → Variables:

Variable Wert
DB_USER pamietnik
DB_NAME pamietnik
APP_PORT 9050

4. Dienste & URLs

Dienst URL
Pamietnik App http://<NAS-IP>:9050
pgAdmin http://<NAS-IP>:5050
PostgreSQL psql -h <NAS-IP> -p 5433 -U pamietnik -d pamietnik

5. Neues Projekt hinzufügen

sudo docker exec -it shared-postgres-1 psql -U postgres
CREATE DATABASE neuprojekt;
CREATE USER neuprojekt WITH PASSWORD 'passwort';
GRANT ALL PRIVILEGES ON DATABASE neuprojekt TO neuprojekt;
\q

In docker-compose.yml des neuen Projekts:

extra_hosts:
  - "host-gateway:host-gateway"
environment:
  DATABASE_URL: postgres://neuprojekt:passwort@host-gateway:5433/neuprojekt

6. Wartung

# Logs
sudo docker compose -f /volume2/docker/shared/docker-compose.yml logs -f
sudo docker compose -f /volume2/docker/pamietnik/docker-compose.yml logs -f api

# Backup
sudo docker exec shared-postgres-1 pg_dump -U postgres pamietnik \
  > /volume2/docker/shared/backup_$(date +%Y%m%d).sql

# Stoppen
sudo docker compose -f /volume2/docker/shared/docker-compose.yml down
sudo docker compose -f /volume2/docker/pamietnik/docker-compose.yml down