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) # Worker Service UUID (optional — resolved via API lookup by WORKER_NAME if absent)
COOLIFY_WORKER_UUID= COOLIFY_WORKER_UUID=
# Application name for API lookup # Application name for API lookup
APP_NAME=leocrm-api APP_NAME=leocrm
# Worker name for API lookup # Worker name for API lookup
WORKER_NAME=leocrm-worker WORKER_NAME=leocrm-worker
# App domain (required for deploy, used for health check and FQDN) # App domain (required for deploy, used for health check and FQDN)
@@ -35,17 +35,17 @@ POSTGRES_DB=crm_db
# Database user (superuser/owner) # Database user (superuser/owner)
POSTGRES_USER=crm_user POSTGRES_USER=crm_user
# Database host (container name in Docker network) # 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) # 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} DATABASE_URL=postgresql+asyncpg://crm_api:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB}
AUTH_DATABASE_URL=postgresql+asyncpg://crm_auth:${DB_PASSWORD}@crm-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}@crm-postgres:5432/${POSTGRES_DB} WORKER_DATABASE_URL=postgresql+asyncpg://crm_worker:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB}
MIGRATION_DATABASE_URL=postgresql+asyncpg://crm_migration:${DB_PASSWORD}@crm-postgres:5432/${POSTGRES_DB} MIGRATION_DATABASE_URL=postgresql+asyncpg://crm_user:${DB_PASSWORD}@postgres:5432/${POSTGRES_DB}
# === REDIS (required) === # === REDIS (required) ===
REDIS_PASSWORD= REDIS_PASSWORD=
REDIS_HOST=crm-redis REDIS_HOST=redis
REDIS_URL=redis://:${REDIS_PASSWORD}@crm-redis:6379/0 REDIS_URL=redis://default:${REDIS_PASSWORD}@redis:6379/0
# === SECURITY (required) === # === SECURITY (required) ===
# Secret key for signing, sessions (use a secure random string >= 32 chars) # 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 SESSION_COOKIE_SECURE=true
# === DOCKER COMPOSE (optional overrides) === # === 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 # Traefik host
APP_HOST=crm.media-on.de APP_HOST=crm.media-on.de
APP_PORT=8000 APP_PORT=8000
+1 -1
View File
@@ -87,7 +87,7 @@ fehlenden Traefik-Labels → 503 Fehler.
```bash ```bash
export COOLIFY_API_TOKEN="dein-token" export COOLIFY_API_TOKEN="dein-token"
export APP_DOMAIN="https://crm.media-on.de" export APP_DOMAIN="https://crm.media-on.de"
export COOLIFY_APP_UUID="dx4pqdziu4uj6x9fxs1u5z0x" # optional export COOLIFY_APP_UUID="xf7smknlger3hvkrsb910tui" # optional
python scripts/deploy.py 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 # Umgebungsvariablen setzen
export COOLIFY_API_TOKEN="dein-token" export COOLIFY_API_TOKEN="dein-token"
export APP_DOMAIN="https://crm.media-on.de" 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 # Redeploy via Coolify API
python scripts/deploy.py python scripts/deploy.py
+3 -6
View File
@@ -60,13 +60,10 @@ Open:
### Docker Compose ### Docker Compose
```bash ```bash
cp .env.example .env cp .env.docker.example .env.docker
# Edit .env — set DATABASE_URL, REDIS_URL, SECRET_KEY, CORS_ORIGINS # Edit .env.docker — set DB_PASSWORD, REDIS_PASSWORD, SECRET_KEY, APP_DOMAIN
# Set ENVIRONMENT=production, SESSION_COOKIE_SECURE=true # Set ENVIRONMENT=production, SESSION_COOKIE_SECURE=true
docker compose up -d docker compose --env-file .env.docker up --build -d
# Run migrations
docker compose exec api alembic upgrade head
``` ```
### Manual (without Docker) ### 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. 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, 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 | | Variable | Wert | Beschreibung |
|----------|------|-------------| |----------|------|-------------|
| DATABASE_URL | postgresql+asyncpg://crm_api:PW@db:5432/crm_db | API-Abfragen (crm_api) | | DATABASE_URL | postgresql+asyncpg://crm_api:PW@postgres:5432/crm_db | API-Abfragen (crm_api) |
| AUTH_DATABASE_URL | postgresql+asyncpg://crm_auth:PW@db:5432/crm_db | Login/Auth (crm_auth) | | AUTH_DATABASE_URL | postgresql+asyncpg://crm_auth:PW@postgres:5432/crm_db | Login/Auth (crm_auth) |
| WORKER_DATABASE_URL | postgresql+asyncpg://crm_worker:PW@db:5432/crm_db | Worker-Jobs (crm_worker) | | WORKER_DATABASE_URL | postgresql+asyncpg://crm_worker:PW@postgres: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) | | 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 | | REDIS_URL | redis://default:PW@redis:6379/0 | Redis-Verbindung |
| SECRET_KEY | <mindestens 32 Zeichen> | Session-Verschlüsselung | | SECRET_KEY | <mindestens 32 Zeichen> | Session-Verschlüsselung |
| ENVIRONMENT | production | Umgebung | | ENVIRONMENT | production | Umgebung |
@@ -117,9 +117,9 @@ Nach Migration 0085 kann MIGRATION_DATABASE_URL auf `crm_migration` umgestellt w
| Variable | Wert | Beschreibung | | Variable | Wert | Beschreibung |
|----------|------|-------------| |----------|------|-------------|
| DATABASE_URL | postgresql+asyncpg://crm_worker:PW@db:5432/crm_db | Worker-DB (crm_worker) | | DATABASE_URL | postgresql+asyncpg://crm_worker:PW@postgres:5432/crm_db | Worker-DB (crm_worker) |
| WORKER_DATABASE_URL | postgresql+asyncpg://crm_worker:PW@db: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@db:5432/crm_db | Plugin-Migrationen (crm_user) | | 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 | | REDIS_URL | redis://default:PW@redis:6379/0 | Redis-Verbindung |
| SECRET_KEY | <mindestens 32 Zeichen> | Session-Verschlüsselung | | SECRET_KEY | <mindestens 32 Zeichen> | Session-Verschlüsselung |
| ENVIRONMENT | production | Umgebung | | ENVIRONMENT | production | Umgebung |
@@ -152,7 +152,7 @@ dasselbe Passwort verwenden wie `MIGRATION_DATABASE_URL`.
version: '3.8' version: '3.8'
services: services:
db: postgres:
image: pgvector/pgvector:pg16 image: pgvector/pgvector:pg16
restart: unless-stopped restart: unless-stopped
environment: environment:
@@ -180,10 +180,10 @@ services:
expose: expose:
- '8000' - '8000'
environment: environment:
DATABASE_URL: postgresql+asyncpg://crm_api:${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}@db: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}@db: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}@db: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 REDIS_URL: redis://default:${REDIS_PASSWORD}@redis:6379/0
SECRET_KEY: ${SECRET_KEY} SECRET_KEY: ${SECRET_KEY}
ENVIRONMENT: production ENVIRONMENT: production
@@ -195,7 +195,7 @@ services:
volumes: volumes:
- api-storage:/data/storage - api-storage:/data/storage
depends_on: depends_on:
db: postgres:
condition: service_healthy condition: service_healthy
redis: redis:
condition: service_started condition: service_started
@@ -211,15 +211,15 @@ services:
restart: unless-stopped restart: unless-stopped
entrypoint: /app/worker.sh entrypoint: /app/worker.sh
environment: environment:
DATABASE_URL: postgresql+asyncpg://crm_worker:${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}@db: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}@db: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 REDIS_URL: redis://default:${REDIS_PASSWORD}@redis:6379/0
SECRET_KEY: ${SECRET_KEY} SECRET_KEY: ${SECRET_KEY}
ENVIRONMENT: production ENVIRONMENT: production
STORAGE_PATH: /data/storage STORAGE_PATH: /data/storage
depends_on: depends_on:
db: postgres:
condition: service_healthy condition: service_healthy
redis: redis:
condition: service_started condition: service_started
+7 -9
View File
@@ -3,19 +3,18 @@
## Coolify Deployment ## Coolify Deployment
### Application Info ### Application Info
- **Coolify App UUID:** `dx4pqdziu4uj6x9fxs1u5z0x` - **Coolify App UUID:** `xf7smknlger3hvkrsb910tui`
- **App ID:** 12
- **Domain:** `https://crm.media-on.de` - **Domain:** `https://crm.media-on.de`
- **Git Repo:** `https://forgejo.media-on.de/Leopoldadmin/leocrm.git` - **Git Repo:** `https://forgejo.media-on.de/Leopoldadmin/leocrm.git`
- **Branch:** `main` - **Branch:** `main`
- **Build Pack:** Dockerfile (Multi-Stage: Frontend + Backend) - **Build Pack:** docker-compose
- **Health Check:** `GET /api/v1/health` → 200 - **Health Check:** `GET /api/v1/health` → 200
### Deploy Process ### Deploy Process
1. **Code pushen:** `git push origin main` 1. **Code pushen:** `git push origin main`
2. **Coolify Deploy triggern:** 2. **Coolify Deploy triggern:**
- Option A: Coolify Dashboard → `https://server.media-on.de` → App → Deploy - 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) 3. **Build dauert ~2-5 Min** (Multi-Stage: npm install + vite build + pip install + runtime)
4. **Container wird automatisch ausgetauscht** wenn Build erfolgreich 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 ssh root@46.225.91.159
cd /tmp && git clone https://Leopoldadmin:<token>@forgejo.media-on.de/Leopoldadmin/leocrm.git leocrm-build cd /tmp && git clone https://Leopoldadmin:<token>@forgejo.media-on.de/Leopoldadmin/leocrm.git leocrm-build
cd leocrm-build cd leocrm-build
docker build -t dx4pqdziu4uj6x9fxs1u5z0x:<commit-hash> . docker build -t xf7smknlger3hvkrsb910tui:<commit-hash> .
cd /data/coolify/applications/dx4pqdziu4uj6x9fxs1u5z0x cd /data/coolify/applications/xf7smknlger3hvkrsb910tui
# docker-compose.yaml Image-Tag aktualisieren # docker-compose.yaml Image-Tag aktualisieren
# .env SOURCE_COMMIT aktualisieren # .env SOURCE_COMMIT aktualisieren
docker compose up -d docker compose up -d
docker stop <old-container> && docker rm <old-container>
``` ```
### Bekannte Probleme ### Bekannte Probleme
@@ -50,5 +48,5 @@ docker stop <old-container> && docker rm <old-container>
- **SSH Key:** `/a0/usr/workdir/.ssh/coolify-01-root` - **SSH Key:** `/a0/usr/workdir/.ssh/coolify-01-root`
- **Coolify API Token:** Set via `COOLIFY_API_TOKEN` environment variable - **Coolify API Token:** Set via `COOLIFY_API_TOKEN` environment variable
- **Coolify Dashboard:** `https://server.media-on.de` - **Coolify Dashboard:** `https://server.media-on.de`
- **PostgreSQL:** `crm-postgres` container (pgvector/pgvector:pg16) - **PostgreSQL:** `postgres` container (pgvector/pgvector:pg16)
- **Redis:** `crm-redis` container - **Redis:** `redis` container