Files
pamietnik/infra/CLAUDE.md
Christoph K. 1fb015b0fc Remove pgAdmin from shared infra setup
Start without UI; pgAdmin can be added later as optional service.

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

4.4 KiB

CLAUDE.md — Pamietnik Infrastruktur

Diese Datei ist Kontext für eine dedizierte Infra-Session. Hier ist alles beschrieben, was zum Aufbau und Betrieb der Infrastruktur auf der Synology NAS notwendig ist.


Umgebung

  • NAS: Synology DiskStation, DSM 7.x
  • Docker-Datenpfad: /volume2/docker/ (alle Container-Daten hier ablegen)
  • Docker-Socket: /var/run/docker.sock
  • Gitea: läuft als Docker-Container auf der NAS, erreichbar unter http://localhost:3000
  • SSH-Zugriff: ssh jacek@<NAS-IP>, sudo-Befehle erforderlich für Docker

Architektur

Synology NAS
├── Gitea (Docker)                   :3000  — Git-Server + CI/CD
├── act_runner (Docker)                     — Gitea Actions Runner
│
├── /volume2/docker/shared/
│   └── postgres:16-alpine           :5433  — Geteilte DB für alle Projekte
│
└── /volume2/docker/pamietnik/
    └── api (Go + SPA)               :9050  — Pamietnik App

Verbindung App → Datenbank: über host-gateway:5433 (Docker-interner Alias für den NAS-Host)


Verzeichnisse auf der NAS

Pfad Inhalt
/volume2/docker/shared/pgdata PostgreSQL-Daten (persistent)
/volume2/docker/shared/.env Secrets: POSTGRES_PASSWORD
/volume2/docker/shared/docker-compose.yml Shared Stack (Postgres + pgAdmin)
/volume2/docker/pamietnik/uploads Hochgeladene Bilder (persistent)
/volume2/docker/pamietnik/.env DB_PASSWORD, APP_PORT
/volume2/docker/pamietnik/docker-compose.yml Wird via CI/CD aus dem Repo kopiert
/volume2/docker/gitea-runner/ act_runner Konfiguration & Daten

Shared Stack (/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


Pamietnik Stack (docker-compose.yml im Repo-Root)

services:
  api:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "${APP_PORT:-9050}:8080"
    extra_hosts:
      - "host-gateway:host-gateway"
    environment:
      DATABASE_URL: postgres://${DB_USER:-pamietnik}:${DB_PASSWORD:?DB_PASSWORD is required}@host-gateway:5433/${DB_NAME:-pamietnik}?sslmode=disable
      LISTEN_ADDR: :8080
      UPLOAD_DIR: /uploads
    volumes:
      - /volume2/docker/pamietnik/uploads:/uploads
    restart: unless-stopped

CI/CD: Gitea Actions

Workflow: .gitea/workflows/deploy.yml — wird bei Push auf main ausgeführt.

Runner: gitea/act_runner Container auf der NAS mit --network host und Docker-Socket-Mount.

Gitea Secrets (Repository → Einstellungen → Actions → Secrets):

  • DB_PASSWORD — Passwort des pamietnik DB-Users
  • DEPLOY_DIR/volume2/docker/pamietnik

Gitea Variables (Repository → Einstellungen → Actions → Variables):

  • DB_USERpamietnik
  • DB_NAMEpamietnik
  • APP_PORT9050

Dienste & URLs

Dienst URL
Pamietnik http://<NAS-IP>:9050
Gitea http://<NAS-IP>:3000
PostgreSQL <NAS-IP>:5433

Wichtige Befehle

# Shared Stack starten
cd /volume2/docker/shared && sudo docker compose up -d

# 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

# Datenbank-User anlegen
sudo docker exec -it shared-postgres-1 psql -U postgres

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

Synology-spezifische Hinweise

  • Docker-Befehle erfordern sudo
  • Ports unter 1024 können Container nicht binden → PGADMIN_LISTEN_PORT: 8080 nötig
  • pgAdmin-Verzeichnis braucht UID 5050: sudo chown -R 5050:5050 /volume2/docker/shared/pgadmin
  • Docker-Socket ist unter /var/run/docker.sock erreichbar
  • Container Manager UI unterstützt keinen Datei-Mount für den Docker-Socket → docker run via SSH nutzen

Vollständige Setup-Anleitung

Siehe infra/README.md im Repo.