# SuiteCRM Docker Compose Environment # ==================================== # Start: docker compose up -d # Stop: docker compose down # Data persists in Docker volumes unless you run: docker compose down -v services: # --- SuiteCRM Application --- suitecrm: build: context: . dockerfile: Dockerfile image: suitecrm:7.15.1 container_name: suitecrm-app restart: unless-stopped ports: - "${SUITECRM_PORT:-8080}:80" environment: - DATABASE_HOST=mariadb - DATABASE_PORT=3306 - DATABASE_NAME=${MYSQL_DATABASE:-suitecrm} - DATABASE_USER=${MYSQL_USER:-suitecrm} - DATABASE_PASSWORD=${MYSQL_PASSWORD:-suitecrm_secret} - SUITECRM_SITE_URL=${SUITECRM_SITE_URL:-http://localhost:8080} volumes: - suitecrm_data:/var/www/html/upload - suitecrm_custom:/var/www/html/custom - suitecrm_config:/var/www/html/config_override.php depends_on: mariadb: condition: service_healthy networks: - suitecrm-net # --- MariaDB Database --- mariadb: image: mariadb:10.11 container_name: suitecrm-db restart: unless-stopped ports: - "${MYSQL_PORT:-3307}:3306" environment: - MARIADB_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD:-root_secret} - MARIADB_DATABASE=${MYSQL_DATABASE:-suitecrm} - MARIADB_USER=${MYSQL_USER:-suitecrm} - MARIADB_PASSWORD=${MYSQL_PASSWORD:-suitecrm_secret} volumes: - mariadb_data:/var/lib/mysql command: - --character-set-server=utf8mb4 - --collation-server=utf8mb4_unicode_ci - --max-allowed-packet=64M - --innodb-buffer-pool-size=256M healthcheck: test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"] interval: 10s timeout: 5s retries: 5 networks: - suitecrm-net # --- Redis Cache (optional) --- redis: image: redis:7-alpine container_name: suitecrm-redis restart: unless-stopped ports: - "${REDIS_PORT:-6379}:6379" volumes: - redis_data:/data command: redis-server --appendonly yes --maxmemory 256mb --maxmemory-policy allkeys-lru networks: - suitecrm-net profiles: - full - redis volumes: suitecrm_data: suitecrm_custom: suitecrm_config: mariadb_data: redis_data: networks: suitecrm-net: driver: bridge