# 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 ```bash sudo mkdir -p /volume2/docker/shared/pgdata ``` ### docker-compose.yml kopieren ```bash sudo cp infra/docker-compose.yml /volume2/docker/shared/docker-compose.yml ``` ### .env anlegen Datei `/volume2/docker/shared/.env`: ```env POSTGRES_PASSWORD= ``` ### Starten ```bash cd /volume2/docker/shared sudo docker compose up -d ``` ### Datenbank & User anlegen ```bash sudo docker exec -it shared-postgres-1 psql -U postgres ``` ```sql CREATE DATABASE pamietnik; CREATE USER pamietnik WITH PASSWORD 'deinPasswort'; GRANT ALL PRIVILEGES ON DATABASE pamietnik TO pamietnik; \q ``` --- ## 2. Pamietnik-Deployment einrichten (einmalig) ```bash sudo mkdir -p /volume2/docker/pamietnik/uploads ``` Datei `/volume2/docker/pamietnik/.env`: ```env DB_PASSWORD= APP_PORT=9050 ``` --- ## 3. Gitea CI/CD einrichten (einmalig) ### act_runner starten Token holen: **Gitea → Site-Administration → Actions → Runner → Runner erstellen** ```bash 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= \ -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://:9050` | | PostgreSQL | `psql -h -p 5433 -U pamietnik -d pamietnik` | --- ## 5. Neues Projekt hinzufügen ```bash sudo docker exec -it shared-postgres-1 psql -U postgres ``` ```sql 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: ```yaml extra_hosts: - "host-gateway:host-gateway" environment: DATABASE_URL: postgres://neuprojekt:passwort@host-gateway:5433/neuprojekt ``` --- ## 6. Wartung ```bash # 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 ```