docs: align all installation docs with docker-compose.yaml

This commit is contained in:
Agent Zero
2026-08-07 00:03:31 +02:00
parent 5ac6fb36de
commit e9f990b039
6 changed files with 38 additions and 55 deletions
+8 -20
View File
@@ -11,7 +11,7 @@ COOLIFY_APP_UUID=
# Worker Service UUID (optional — resolved via API lookup by WORKER_NAME if absent)
COOLIFY_WORKER_UUID=
# Application name for API lookup
APP_NAME=leocrm-api
APP_NAME=leocrm
# Worker name for API lookup
WORKER_NAME=leocrm-worker
# App domain (required for deploy, used for health check and FQDN)
@@ -35,17 +35,17 @@ POSTGRES_DB=crm_db
# Database user (superuser/owner)
POSTGRES_USER=crm_user
# Database host (container name in Docker network)
DB_HOST=crm-postgres
DB_HOST=postgres
# Full database URLs (constructed from DB_PASSWORD/DB_HOST if not set explicitly)
DATABASE_URL=postgresql+asyncpg://crm_api:${DB_PASSWORD}@crm-postgres:5432/${POSTGRES_DB}
AUTH_DATABASE_URL=postgresql+asyncpg://crm_auth:${DB_PASSWORD}@crm-postgres:5432/${POSTGRES_DB}
WORKER_DATABASE_URL=postgresql+asyncpg://crm_worker:${DB_PASSWORD}@crm-postgres:5432/${POSTGRES_DB}
MIGRATION_DATABASE_URL=postgresql+asyncpg://crm_migration:${DB_PASSWORD}@crm-postgres:5432/${POSTGRES_DB}
DATABASE_URL=postgresql+asyncpg://crm_api:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB}
AUTH_DATABASE_URL=postgresql+asyncpg://crm_auth:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB}
WORKER_DATABASE_URL=postgresql+asyncpg://crm_worker:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB}
MIGRATION_DATABASE_URL=postgresql+asyncpg://crm_user:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB}
# === REDIS (required) ===
REDIS_PASSWORD=
REDIS_HOST=crm-redis
REDIS_URL=redis://:${REDIS_PASSWORD}@crm-redis:6379/0
REDIS_HOST=redis
REDIS_URL=redis://default:${REDIS_PASSWORD}@redis:6379/0
# === SECURITY (required) ===
# Secret key for signing, sessions (use a secure random string >= 32 chars)
@@ -71,18 +71,6 @@ FRONTEND_URL=https://crm.media-on.de
SESSION_COOKIE_SECURE=true
# === DOCKER COMPOSE (optional overrides) ===
# Container names
POSTGRES_CONTAINER_NAME=crm-postgres
REDIS_CONTAINER_NAME=crm-redis
APP_CONTAINER_NAME=crm-app
WORKER_CONTAINER_NAME=crm-worker
# Volume names
PGDATA_VOLUME_NAME=crm_pgdata
REDISDATA_VOLUME_NAME=crm_redisdata
STORAGE_VOLUME_NAME=crm_storage
# Network names
CRM_NETWORK_NAME=crm-net
COOLIFY_NETWORK_NAME=coolify
# Traefik host
APP_HOST=crm.media-on.de
APP_PORT=8000
+1 -1
View File
@@ -87,7 +87,7 @@ fehlenden Traefik-Labels → 503 Fehler.
```bash
export COOLIFY_API_TOKEN="dein-token"
export APP_DOMAIN="https://crm.media-on.de"
export COOLIFY_APP_UUID="dx4pqdziu4uj6x9fxs1u5z0x" # optional
export COOLIFY_APP_UUID="xf7smknlger3hvkrsb910tui" # optional
python scripts/deploy.py
```
+1 -1
View File
@@ -30,7 +30,7 @@ Keine separaten Coolify Services für DB/Redis/Worker. Alles in einem Stack.
# Umgebungsvariablen setzen
export COOLIFY_API_TOKEN="dein-token"
export APP_DOMAIN="https://crm.media-on.de"
export COOLIFY_APP_UUID="dx4pqdziu4uj6x9fxs1u5z0x" # optional, wird via APP_NAME gesucht
export COOLIFY_APP_UUID="xf7smknlger3hvkrsb910tui" # optional, wird via APP_NAME gesucht
# Redeploy via Coolify API
python scripts/deploy.py
+3 -6
View File
@@ -60,13 +60,10 @@ Open:
### Docker Compose
```bash
cp .env.example .env
# Edit .env — set DATABASE_URL, REDIS_URL, SECRET_KEY, CORS_ORIGINS
cp .env.docker.example .env.docker
# Edit .env.docker — set DB_PASSWORD, REDIS_PASSWORD, SECRET_KEY, APP_DOMAIN
# Set ENVIRONMENT=production, SESSION_COOKIE_SECURE=true
docker compose up -d
# Run migrations
docker compose exec api alembic upgrade head
docker compose --env-file .env.docker up --build -d
```
### Manual (without Docker)
+18 -18
View File
@@ -86,7 +86,7 @@ Der erste Alembic-Lauf auf einer leeren Datenbank MUSS als `crm_user` ausgeführ
weil `crm_migration` erst durch Migration 0085 erstellt wird.
```
MIGRATION_DATABASE_URL=postgresql+asyncpg://crm_user:<PASSWORT>@db:5432/crm_db
MIGRATION_DATABASE_URL=postgresql+asyncpg://crm_user:<PASSWORT>@postgres:5432/crm_db
```
Nach Migration 0085 kann MIGRATION_DATABASE_URL auf `crm_migration` umgestellt werden,
@@ -100,10 +100,10 @@ Nach Migration 0085 kann MIGRATION_DATABASE_URL auf `crm_migration` umgestellt w
| Variable | Wert | Beschreibung |
|----------|------|-------------|
| DATABASE_URL | postgresql+asyncpg://crm_api:PW@db:5432/crm_db | API-Abfragen (crm_api) |
| AUTH_DATABASE_URL | postgresql+asyncpg://crm_auth:PW@db:5432/crm_db | Login/Auth (crm_auth) |
| WORKER_DATABASE_URL | postgresql+asyncpg://crm_worker:PW@db:5432/crm_db | Worker-Jobs (crm_worker) |
| MIGRATION_DATABASE_URL | postgresql+asyncpg://crm_user:PW@db:5432/crm_db | Migrationen (crm_user für Bootstrap) |
| DATABASE_URL | postgresql+asyncpg://crm_api:PW@postgres:5432/crm_db | API-Abfragen (crm_api) |
| AUTH_DATABASE_URL | postgresql+asyncpg://crm_auth:PW@postgres:5432/crm_db | Login/Auth (crm_auth) |
| WORKER_DATABASE_URL | postgresql+asyncpg://crm_worker:PW@postgres:5432/crm_db | Worker-Jobs (crm_worker) |
| MIGRATION_DATABASE_URL | postgresql+asyncpg://crm_user:PW@postgres:5432/crm_db | Migrationen (crm_user für Bootstrap) |
| REDIS_URL | redis://default:PW@redis:6379/0 | Redis-Verbindung |
| SECRET_KEY | <mindestens 32 Zeichen> | Session-Verschlüsselung |
| ENVIRONMENT | production | Umgebung |
@@ -117,9 +117,9 @@ Nach Migration 0085 kann MIGRATION_DATABASE_URL auf `crm_migration` umgestellt w
| Variable | Wert | Beschreibung |
|----------|------|-------------|
| DATABASE_URL | postgresql+asyncpg://crm_worker:PW@db:5432/crm_db | Worker-DB (crm_worker) |
| WORKER_DATABASE_URL | postgresql+asyncpg://crm_worker:PW@db:5432/crm_db | Worker-DB (crm_worker) |
| MIGRATION_DATABASE_URL | postgresql+asyncpg://crm_user:PW@db:5432/crm_db | Plugin-Migrationen (crm_user) |
| DATABASE_URL | postgresql+asyncpg://crm_worker:PW@postgres:5432/crm_db | Worker-DB (crm_worker) |
| WORKER_DATABASE_URL | postgresql+asyncpg://crm_worker:PW@postgres:5432/crm_db | Worker-DB (crm_worker) |
| MIGRATION_DATABASE_URL | postgresql+asyncpg://crm_user:PW@postgres:5432/crm_db | Plugin-Migrationen (crm_user) |
| REDIS_URL | redis://default:PW@redis:6379/0 | Redis-Verbindung |
| SECRET_KEY | <mindestens 32 Zeichen> | Session-Verschlüsselung |
| ENVIRONMENT | production | Umgebung |
@@ -152,7 +152,7 @@ dasselbe Passwort verwenden wie `MIGRATION_DATABASE_URL`.
version: '3.8'
services:
db:
postgres:
image: pgvector/pgvector:pg16
restart: unless-stopped
environment:
@@ -180,10 +180,10 @@ services:
expose:
- '8000'
environment:
DATABASE_URL: postgresql+asyncpg://crm_api:${DB_PASSWORD}@db:5432/crm_db
AUTH_DATABASE_URL: postgresql+asyncpg://crm_auth:${DB_PASSWORD}@db:5432/crm_db
WORKER_DATABASE_URL: postgresql+asyncpg://crm_worker:${DB_PASSWORD}@db:5432/crm_db
MIGRATION_DATABASE_URL: postgresql+asyncpg://crm_user:${DB_PASSWORD}@db:5432/crm_db
DATABASE_URL: postgresql+asyncpg://crm_api:${DB_PASSWORD}@postgres:5432/crm_db
AUTH_DATABASE_URL: postgresql+asyncpg://crm_auth:${DB_PASSWORD}@postgres:5432/crm_db
WORKER_DATABASE_URL: postgresql+asyncpg://crm_worker:${DB_PASSWORD}@postgres:5432/crm_db
MIGRATION_DATABASE_URL: postgresql+asyncpg://crm_user:${DB_PASSWORD}@postgres:5432/crm_db
REDIS_URL: redis://default:${REDIS_PASSWORD}@redis:6379/0
SECRET_KEY: ${SECRET_KEY}
ENVIRONMENT: production
@@ -195,7 +195,7 @@ services:
volumes:
- api-storage:/data/storage
depends_on:
db:
postgres:
condition: service_healthy
redis:
condition: service_started
@@ -211,15 +211,15 @@ services:
restart: unless-stopped
entrypoint: /app/worker.sh
environment:
DATABASE_URL: postgresql+asyncpg://crm_worker:${DB_PASSWORD}@db:5432/crm_db
WORKER_DATABASE_URL: postgresql+asyncpg://crm_worker:${DB_PASSWORD}@db:5432/crm_db
MIGRATION_DATABASE_URL: postgresql+asyncpg://crm_user:${DB_PASSWORD}@db:5432/crm_db
DATABASE_URL: postgresql+asyncpg://crm_worker:${DB_PASSWORD}@postgres:5432/crm_db
WORKER_DATABASE_URL: postgresql+asyncpg://crm_worker:${DB_PASSWORD}@postgres:5432/crm_db
MIGRATION_DATABASE_URL: postgresql+asyncpg://crm_user:${DB_PASSWORD}@postgres:5432/crm_db
REDIS_URL: redis://default:${REDIS_PASSWORD}@redis:6379/0
SECRET_KEY: ${SECRET_KEY}
ENVIRONMENT: production
STORAGE_PATH: /data/storage
depends_on:
db:
postgres:
condition: service_healthy
redis:
condition: service_started
+7 -9
View File
@@ -3,19 +3,18 @@
## Coolify Deployment
### Application Info
- **Coolify App UUID:** `dx4pqdziu4uj6x9fxs1u5z0x`
- **App ID:** 12
- **Coolify App UUID:** `xf7smknlger3hvkrsb910tui`
- **Domain:** `https://crm.media-on.de`
- **Git Repo:** `https://forgejo.media-on.de/Leopoldadmin/leocrm.git`
- **Branch:** `main`
- **Build Pack:** Dockerfile (Multi-Stage: Frontend + Backend)
- **Build Pack:** docker-compose
- **Health Check:** `GET /api/v1/health` → 200
### Deploy Process
1. **Code pushen:** `git push origin main`
2. **Coolify Deploy triggern:**
- Option A: Coolify Dashboard → `https://server.media-on.de` → App → Deploy
- Option B: API: `POST https://server.media-on.de/api/v1/deploy` mit `{"uuid": "dx4pqdziu4uj6x9fxs1u5z0x"}`
- Option B: API: `POST https://server.media-on.de/api/v1/deploy` mit `{"uuid": "xf7smknlger3hvkrsb910tui"}`
3. **Build dauert ~2-5 Min** (Multi-Stage: npm install + vite build + pip install + runtime)
4. **Container wird automatisch ausgetauscht** wenn Build erfolgreich
@@ -25,12 +24,11 @@ Wenn Coolify den Build nicht ausführt:
ssh root@46.225.91.159
cd /tmp && git clone https://Leopoldadmin:<token>@forgejo.media-on.de/Leopoldadmin/leocrm.git leocrm-build
cd leocrm-build
docker build -t dx4pqdziu4uj6x9fxs1u5z0x:<commit-hash> .
cd /data/coolify/applications/dx4pqdziu4uj6x9fxs1u5z0x
docker build -t xf7smknlger3hvkrsb910tui:<commit-hash> .
cd /data/coolify/applications/xf7smknlger3hvkrsb910tui
# docker-compose.yaml Image-Tag aktualisieren
# .env SOURCE_COMMIT aktualisieren
docker compose up -d
docker stop <old-container> && docker rm <old-container>
```
### Bekannte Probleme
@@ -50,5 +48,5 @@ docker stop <old-container> && docker rm <old-container>
- **SSH Key:** `/a0/usr/workdir/.ssh/coolify-01-root`
- **Coolify API Token:** Set via `COOLIFY_API_TOKEN` environment variable
- **Coolify Dashboard:** `https://server.media-on.de`
- **PostgreSQL:** `crm-postgres` container (pgvector/pgvector:pg16)
- **Redis:** `crm-redis` container
- **PostgreSQL:** `postgres` container (pgvector/pgvector:pg16)
- **Redis:** `redis` container