diff --git a/.env.example b/.env.example index 02b0143..4ece17a 100644 --- a/.env.example +++ b/.env.example @@ -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 diff --git a/COOLIFY_SETUP.md b/COOLIFY_SETUP.md index e0e963c..c4e4639 100644 --- a/COOLIFY_SETUP.md +++ b/COOLIFY_SETUP.md @@ -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 ``` diff --git a/DEPLOY.md b/DEPLOY.md index d03a936..b628a06 100644 --- a/DEPLOY.md +++ b/DEPLOY.md @@ -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 diff --git a/README.md b/README.md index 3ca4a82..5ebdb3b 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/docs/INSTALL.md b/docs/INSTALL.md index 4661936..f420384 100644 --- a/docs/INSTALL.md +++ b/docs/INSTALL.md @@ -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:@db:5432/crm_db +MIGRATION_DATABASE_URL=postgresql+asyncpg://crm_user:@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 | | 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 | | 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 diff --git a/docs/deployment-guide.md b/docs/deployment-guide.md index 817f8b5..62b7f43 100644 --- a/docs/deployment-guide.md +++ b/docs/deployment-guide.md @@ -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:@forgejo.media-on.de/Leopoldadmin/leocrm.git leocrm-build cd leocrm-build -docker build -t dx4pqdziu4uj6x9fxs1u5z0x: . -cd /data/coolify/applications/dx4pqdziu4uj6x9fxs1u5z0x +docker build -t xf7smknlger3hvkrsb910tui: . +cd /data/coolify/applications/xf7smknlger3hvkrsb910tui # docker-compose.yaml Image-Tag aktualisieren # .env SOURCE_COMMIT aktualisieren docker compose up -d -docker stop && docker rm ``` ### Bekannte Probleme @@ -50,5 +48,5 @@ docker stop && docker rm - **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