docs: align all installation docs with docker-compose.yaml
This commit is contained in:
+8
-20
@@ -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
@@ -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
|
||||||
```
|
```
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user