5.5 KiB
5.5 KiB
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 │ │
│ ▲ └─────────────────────────┘ │
│ │ ▲ │
│ Volume (Daten) Volume optional: │
│ data/ (site.json) │
└─────────────────────────────────────────────────────────┘
Die App startet nicht, wenn DATABASE_URL fehlt oder Postgres nicht erreichbar ist.
1. PostgreSQL in Coolify anlegen
- Neues Database → PostgreSQL (16).
- Notieren:
- Benutzer, Passwort, Datenbankname
- Internal URL (Host ist oft der Service-Name, z. B.
postgresql-xxxxxoder was Coolify anzeigt)
- Format für die App:
postgresql://USER:PASSWORD@HOST:5432/DATABASE
Beispiel (Platzhalter durch Coolify-Werte ersetzen):
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
- Neues Application → Build Pack: Dockerfile (Repository dieses Projekts).
- Dockerfile-Pfad:
Dockerfile(Root). - Port: 80 (Container exponiert Apache auf 80).
- Health Check (optional, empfohlen):
- Path:
/health.php - Erwartet HTTP 200 mit
{"status":"ok"}
Environment Variables (Pflicht)
| Variable | Beschreibung |
|---|---|
DATABASE_URL |
Interne Postgres-URL von Coolify |
FLIXCOOKS_ADMIN_KEY |
Starkes Passwort für /admin.php |
Environment Variables (optional)
| Variable | Default | Beschreibung |
|---|---|---|
RUN_DB_SEED |
false |
Einmalig true setzen → importiert data/recipes.json beim Start |
DB_WAIT_MAX_TRIES |
30 |
Warteversuche bis Postgres da ist (à 2 s) |
Nach dem ersten erfolgreichen Deploy: RUN_DB_SEED wieder auf false oder entfernen.
Persistent Storage (empfohlen)
Mount für Impressum/Datenschutz (data/site.json):
| Mount Path (Container) | Inhalt |
|---|---|
/var/www/html/data |
site.json bleibt nach Redeploy erhalten |
Rezepte liegen in Postgres – kein Volume für Rezepte nötig.
3. Erstes Deployment (Checkliste)
- Postgres-Service läuft (healthy).
- App mit
DATABASE_URL+FLIXCOOKS_ADMIN_KEYdeployen. - Einmalig
RUN_DB_SEED=true→ Redeploy → Rezepte prüfen auf der Startseite. RUN_DB_SEEDdeaktivieren.https://deine-domain/admin.phptesten.https://deine-domain/health.php→{"status":"ok"}.
Schema ohne Seed
Tabellen legt der Container beim Start automatisch an (scripts/schema.sql via require_database()). Ohne Seed ist die DB leer → Seite lädt, aber keine Rezepte, bis du im Admin anlegst oder seedest.
4. Lokaler Test vor Coolify
# Starkes Admin-Passwort setzen
export FLIXCOOKS_ADMIN_KEY="dein-geheimes-passwort"
# Mit Seed
export RUN_DB_SEED=true
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.
data/-Volume bleibt → Site-Settings bleiben.- Kein manuelles
db-seedbei Updates, außer du leerst die DB bewusst.
6. Sicherheit
.envwird nicht ins Image kopiert (.dockerignore).- Admin-Key nur über
FLIXCOOKS_ADMIN_KEYin Coolify setzen. Ohne diese Variable ist/admin.phpdeaktiviert. - Postgres nicht öffentlich exponieren, wenn nicht nötig (nur interne URL).
7. Troubleshooting
| 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 | RUN_DB_SEED=true einmalig oder Admin-Rezepte anlegen |
| Admin geht nicht | FLIXCOOKS_ADMIN_KEY gesetzt? |
site.json verloren nach Deploy |
Volume auf /var/www/html/data mounten |