Files
pamietnik/infra/README.md
Christoph K. 579597776c
Some checks failed
Deploy to NAS / deploy (push) Has been cancelled
Add infra/docker-compose.yml for shared postgres stack
Move compose config from README into its own file; README now references it.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 16:03:43 +02:00

166 lines
3.5 KiB
Markdown

# 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=<sicheres-passwort>
```
### 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=<passwort-von-oben>
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=<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` |
| PostgreSQL | `psql -h <NAS-IP> -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
```