2026-05-23 12:43:51 +02:00
# FlixCooks auf Coolify deployen
Zwei getrennte Ressourcen: **PostgreSQL** und **PHP-Web-App** (dieses Repo als Dockerfile).
## Architektur
```
┌──────────────────── Coolify Server ────────────────────┐
│ │
│ ┌──────────────┐ ┌─────────────────────────┐ │
│ │ PostgreSQL │◄────────│ FlixCooks (dieses Image) │ │
│ │ (Service B) │ :5432 │ Apache + PHP 8.3 │ │
│ └──────────────┘ │ Port 80 → Traefik/HTTPS │ │
│ ▲ └─────────────────────────┘ │
2026-06-18 09:53:39 +02:00
│ │ │
│ Volume (Daten) │
2026-05-23 12:43:51 +02:00
└─────────────────────────────────────────────────────────┘
```
2026-06-18 09:53:39 +02:00
Die App startet **nicht** , wenn `DATABASE_URL` fehlt oder Postgres nicht erreichbar ist. Rezepte, Impressum und Datenschutz liegen komplett in Postgres.
2026-05-23 12:43:51 +02:00
---
## 1. PostgreSQL in Coolify anlegen
1. Neues **Database** → PostgreSQL (16).
2. Notieren:
2026-05-23 12:59:36 +02:00
- Benutzer, Passwort, Datenbankname
- **Internal URL** (Host ist oft der Service-Name, z. B. `postgresql-xxxxx` oder was Coolify anzeigt)
2026-05-23 12:43:51 +02:00
3. Format für die App:
```text
postgresql://USER:PASSWORD@HOST:5432/DATABASE
```
Beispiel (Platzhalter durch Coolify-Werte ersetzen):
```text
postgresql://flixcooks:geheim@postgresql-flixcooks:5432/flixcooks
```
**Wichtig:** In der App den **internen** Hostnamen verwenden (gleiches Coolify-Netzwerk), nicht `127.0.0.1` .
---
## 2. Web-App in Coolify anlegen
1. Neues **Application** → Build Pack: **Dockerfile** (Repository dieses Projekts).
2. Dockerfile-Pfad: `Dockerfile` (Root).
3. Port: **80** (Container exponiert Apache auf 80).
4. Health Check (optional, empfohlen):
2026-05-23 12:59:36 +02:00
- Path: `/health.php`
- Erwartet HTTP 200 mit `{"status":"ok"}`
2026-05-23 12:43:51 +02:00
### Environment Variables (Pflicht)
2026-05-23 12:59:36 +02:00
| Variable | Beschreibung |
| --------------------- | --------------------------------- |
| `DATABASE_URL` | Interne Postgres-URL von Coolify |
2026-05-23 12:43:51 +02:00
| `FLIXCOOKS_ADMIN_KEY` | Starkes Passwort für `/admin.php` |
2026-05-23 12:59:36 +02:00
2026-05-23 12:43:51 +02:00
### Environment Variables (optional)
2026-05-23 12:59:36 +02:00
2026-06-18 09:53:39 +02:00
| Variable | Default | Beschreibung |
| ------------------- | ------- | ---------------------------------------------------------------------------- |
| `DB_WAIT_MAX_TRIES` | `30` | Warteversuche bis Postgres da ist (à 2 s) |
2026-05-23 12:59:36 +02:00
2026-06-18 09:53:39 +02:00
### Persistent Storage
2026-05-23 12:43:51 +02:00
2026-06-18 09:53:39 +02:00
Nur PostgreSQL benötigt persistenten Speicher. Für die Web-App selbst ist kein `/var/www/html/data` -Volume mehr nötig, weil Rezepte und Site-Settings in Postgres liegen.
2026-05-23 12:43:51 +02:00
---
## 3. Erstes Deployment (Checkliste)
1. Postgres-Service läuft (healthy).
2. App mit `DATABASE_URL` + `FLIXCOOKS_ADMIN_KEY` deployen.
2026-06-18 09:53:39 +02:00
3. `https://deine-domain/health.php` → `{"status":"ok"}` .
4. `https://deine-domain/admin.php` → Rezepte anlegen, Impressum/Datenschutz unter „Site settings" befüllen.
2026-05-23 12:43:51 +02:00
### Schema ohne Seed
2026-06-18 09:53:39 +02:00
Tabellen legt der Container beim Start automatisch an (`scripts/schema.sql` via `require_database()` ). Eine leere DB ist kein Fehler — die Site startet mit Platzhalter-Impressum/Datenschutz und zeigt eine leere Rezeptliste. Inhalte werden ausschließlich über `/admin.php` gepflegt.
2026-05-23 12:43:51 +02:00
---
## 4. Lokaler Test vor Coolify
```bash
export FLIXCOOKS_ADMIN_KEY = "dein-geheimes-passwort"
docker compose build
docker compose up -d
curl http://127.0.0.1:8080/health.php
```
---
## 5. Updates / Redeploy
- Neues Image bauen lassen (Git push → Coolify rebuild).
- Postgres-Volume bleibt → Daten bleiben.
- Kein manuelles `db-seed` bei Updates, außer du leerst die DB bewusst.
---
## 6. Sicherheit
- `.env` wird **nicht** ins Image kopiert (`.dockerignore` ).
2026-05-23 13:29:35 +02:00
- Admin-Key **nur** über `FLIXCOOKS_ADMIN_KEY` in Coolify setzen. Ohne diese Variable ist `/admin.php` deaktiviert.
2026-05-23 12:43:51 +02:00
- Postgres nicht öffentlich exponieren, wenn nicht nötig (nur interne URL).
---
## 7. Troubleshooting
2026-05-23 12:59:36 +02:00
2026-06-18 09:53:39 +02:00
| Problem | Lösung |
| ------------------------------- | --------------------------------------------------------------- |
| Container startet nicht | Logs: DB nicht erreichbar → `DATABASE_URL` Host/Passwort prüfen |
| 503 „Datenbank nicht verfügbar“ | Gleiches Netzwerk in Coolify? Internal URL? |
| Leere Seite, Health OK | Rezepte über `/admin.php` anlegen, Site-Settings befüllen |
| Admin geht nicht | `FLIXCOOKS_ADMIN_KEY` gesetzt? |
2026-05-23 12:59:36 +02:00