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>
This commit is contained in:
155
infra/CLAUDE.md
Normal file
155
infra/CLAUDE.md
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
# 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`)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
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)
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
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_USER` — `pamietnik`
|
||||||
|
- `DB_NAME` — `pamietnik`
|
||||||
|
- `APP_PORT` — `9050`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Dienste & URLs
|
||||||
|
|
||||||
|
| Dienst | URL |
|
||||||
|
|--------|-----|
|
||||||
|
| Pamietnik | `http://<NAS-IP>:9050` |
|
||||||
|
| Gitea | `http://<NAS-IP>:3000` |
|
||||||
|
| PostgreSQL | `<NAS-IP>:5433` |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Wichtige Befehle
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# 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.
|
||||||
@@ -24,8 +24,6 @@ Synology NAS
|
|||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo mkdir -p /volume2/docker/shared/pgdata
|
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
|
### docker-compose.yml anlegen
|
||||||
@@ -49,18 +47,6 @@ services:
|
|||||||
interval: 5s
|
interval: 5s
|
||||||
timeout: 5s
|
timeout: 5s
|
||||||
retries: 5
|
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
|
### .env anlegen
|
||||||
@@ -69,8 +55,6 @@ Datei `/volume2/docker/shared/.env`:
|
|||||||
|
|
||||||
```env
|
```env
|
||||||
POSTGRES_PASSWORD=<sicheres-passwort>
|
POSTGRES_PASSWORD=<sicheres-passwort>
|
||||||
PGADMIN_EMAIL=deine@email.de
|
|
||||||
PGADMIN_PASSWORD=<pgadmin-passwort>
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Starten
|
### Starten
|
||||||
@@ -154,7 +138,6 @@ sudo docker run -d \
|
|||||||
| Dienst | URL |
|
| Dienst | URL |
|
||||||
|--------|-----|
|
|--------|-----|
|
||||||
| Pamietnik App | `http://<NAS-IP>:9050` |
|
| Pamietnik App | `http://<NAS-IP>:9050` |
|
||||||
| pgAdmin | `http://<NAS-IP>:5050` |
|
|
||||||
| PostgreSQL | `psql -h <NAS-IP> -p 5433 -U pamietnik -d pamietnik` |
|
| PostgreSQL | `psql -h <NAS-IP> -p 5433 -U pamietnik -d pamietnik` |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
Reference in New Issue
Block a user