- 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>
4.5 KiB
4.5 KiB
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