# 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 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`: ```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 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`: ```env POSTGRES_PASSWORD= PGADMIN_EMAIL=deine@email.de PGADMIN_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` | | pgAdmin | `http://:5050` | | 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 ```