version: '2' services: ctfd: build: . user: root restart: always ports: - "0.0.0.0:8000:8000" environment: - UPLOAD_FOLDER=${UPLOAD_FOLDER} - DATABASE_URL=${DATABASE_URL} - REDIS_URL=${REDIS_URL} - WORKERS=${WORKERS} - LOG_FOLDER=${LOG_FOLDER} - ACCESS_LOG=${ACCESS_LOG} - ERROR_LOG=${ERROR_LOG} - REVERSE_PROXY=${REVERSE_PROXY} volumes: - .data/CTFd/logs:/var/log/CTFd - .data/CTFd/uploads:/var/uploads - .:/opt/CTFd:ro depends_on: - db networks: default: internal: nginx: image: nginx:stable restart: always volumes: - ./conf/nginx/http.conf:/etc/nginx/nginx.conf - ./conf/nginx/fullchain.pem:/certificates/fullchain.pem:ro - ./conf/nginx/privkey.pem:/certificates/privkey.pem:ro ports: - 80:80 - 443:443 depends_on: - ctfd db: image: mariadb:10.4.12 restart: always environment: - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_DATABASE=${MYSQL_DATABASE} volumes: - .data/mysql:/var/lib/mysql networks: internal: # This command is required to set important mariadb defaults command: [mysqld, --character-set-server=utf8mb4, --collation-server=utf8mb4_unicode_ci, --wait_timeout=28800, --log-warnings=0] cache: image: redis:4 restart: always volumes: - .data/redis:/data networks: internal: web1: build: context: ./tasks/test_web dockerfile: Dockerfile restart: always volumes: - ./tasks/test_web:/app ports: - "0.0.0.0:5000:5000" depends_on: - db - cache web2: build: context: ./tasks/test_web2 dockerfile: Dockerfile restart: always volumes: - ./tasks/test_web2:/app ports: - "0.0.0.0:5001:5001" depends_on: - db - cache web3: build: context: ./tasks/test_web3 dockerfile: Dockerfile restart: always volumes: - ./tasks/test_web3:/app ports: - "0.0.0.0:5002:5002" depends_on: - db - cache networks: default: internal: internal: true