80 lines
2.4 KiB
YAML
80 lines
2.4 KiB
YAML
# OpenCRM – komplettes Setup: MariaDB + Backend/Frontend + Adminer
|
||
# Konfiguration über ./.env (siehe ./.env.example)
|
||
#
|
||
# Quick-Start (Compose v2):
|
||
# cp .env.example .env # Werte anpassen (Secrets rotieren!)
|
||
# docker compose up -d # erstes Mal: holt Images, baut Backend, startet alles
|
||
# Quick-Start (Compose v1, Legacy):
|
||
# docker-compose up -d
|
||
#
|
||
# Browser:
|
||
# http://localhost:${OPENCRM_PORT} # CRM
|
||
# http://localhost:${ADMINER_PORT} # DB-UI
|
||
#
|
||
# Daten liegen alle unter ./data/* – Bind-Mounts statt Volumes (auf Wunsch).
|
||
|
||
version: '3.8'
|
||
|
||
services:
|
||
db:
|
||
image: mariadb:10.11
|
||
container_name: opencrm-db
|
||
restart: unless-stopped
|
||
environment:
|
||
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD}
|
||
MARIADB_DATABASE: ${DB_NAME}
|
||
MARIADB_USER: ${DB_USER}
|
||
MARIADB_PASSWORD: ${DB_PASSWORD}
|
||
ports:
|
||
# Externe Erreichbarkeit für lokale DB-Tools (TablePlus etc.).
|
||
# Auf 127.0.0.1 binden – kein public exposure.
|
||
- "127.0.0.1:${DB_PORT:-3306}:3306"
|
||
volumes:
|
||
- ${DB_DATA_DIR:-./data/db}:/var/lib/mysql
|
||
healthcheck:
|
||
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
|
||
start_period: 20s
|
||
interval: 10s
|
||
timeout: 5s
|
||
retries: 5
|
||
|
||
opencrm:
|
||
build:
|
||
context: .
|
||
dockerfile: backend/Dockerfile
|
||
container_name: opencrm-app
|
||
restart: unless-stopped
|
||
depends_on:
|
||
db:
|
||
condition: service_healthy
|
||
environment:
|
||
# Connection ins Container-Netzwerk (Service-Name = Hostname)
|
||
DATABASE_URL: "mysql://root:${DB_ROOT_PASSWORD}@db:3306/${DB_NAME}"
|
||
JWT_SECRET: ${JWT_SECRET}
|
||
JWT_EXPIRES_IN: ${JWT_EXPIRES_IN:-7d}
|
||
ENCRYPTION_KEY: ${ENCRYPTION_KEY}
|
||
NODE_ENV: production
|
||
PORT: 3001
|
||
LISTEN_ADDR: 0.0.0.0
|
||
CORS_ORIGINS: ${CORS_ORIGINS:-}
|
||
RUN_SEED: ${RUN_SEED:-false}
|
||
ports:
|
||
- "${OPENCRM_PORT:-3010}:3001"
|
||
volumes:
|
||
# Bind-Mounts für persistente Daten unter ./data/
|
||
- ${UPLOADS_DIR:-./data/uploads}:/app/uploads
|
||
- ${FACTORY_DEFAULTS_DIR:-./data/factory-defaults}:/app/factory-defaults
|
||
- ${BACKUPS_DIR:-./data/backups}:/app/prisma/backups
|
||
|
||
adminer:
|
||
image: adminer:latest
|
||
container_name: opencrm-adminer
|
||
restart: unless-stopped
|
||
depends_on:
|
||
- db
|
||
environment:
|
||
ADMINER_DEFAULT_SERVER: db
|
||
ADMINER_DESIGN: ${ADMINER_DESIGN:-pepa-linha-dark}
|
||
ports:
|
||
- "127.0.0.1:${ADMINER_PORT:-8081}:8080"
|