# Development stack for Civ. This stack can be used to develop and test the server and plugins locally. # Please note that this stack is NOT suitable for production use, as it exposes all service ports, and uses default passwords. services: ################# ### Minecraft ### ################# proxy: image: itzg/mc-proxy@sha256:e0536c92227905b6b0388eb04f640859e674c61068061d2a4db6ba631c79008b restart: unless-stopped tty: true stdin_open: true depends_on: mariadb: condition: service_healthy postgres: condition: service_healthy rabbitmq: condition: service_healthy environment: WATERFALL_VERSION: '1.20' TYPE: 'WATERFALL' REPLACE_ENV_VARIABLES: 'true' REPLACE_ENV_VARIABLE_PREFIX: 'CIV' CIV_POSTGRES_HOST: postgres CIV_POSTGRES_USERNAME: postgres CIV_POSTGRES_PASSWORD: postgres ports: - "25565:25577" volumes: - ./containers/data/proxy:/data - ./ansible/files/proxy-config:/config - ./ansible/build/proxy-plugins:/plugins paper: image: itzg/minecraft-server@sha256:ec899160155b3d15c243845bab9ef20ab800d1cc5f38765f45aca1dcc3ccd5c6 restart: unless-stopped tty: true stdin_open: true depends_on: mariadb: condition: service_healthy postgres: condition: service_healthy rabbitmq: condition: service_healthy environment: TYPE: 'paper' VERSION: '1.20.6' EULA: 'TRUE' REMOVE_OLD_MODS: 'TRUE' COPY_CONFIG_DEST: '/data' SYNC_SKIP_NEWER_IN_DESTINATION: 'false' REPLACE_ENV_DURING_SYNC: 'TRUE' REPLACE_ENV_VARIABLE_PREFIX: 'CIV' INIT_MEMORY: 1G MAX_MEMORY: 5G CIV_SERVER_NAME: local CIV_WORLD_GENERATOR: Terra:DEFAULT CIV_WORDBANK_SEED: wordbank CIV_MYSQL_HOST: mariadb CIV_MYSQL_USERNAME: mariadb CIV_MYSQL_PASSWORD: mariadb CIV_POSTGRES_HOST: postgres CIV_POSTGRES_USERNAME: postgres CIV_POSTGRES_PASSWORD: postgres CIV_RABBITMQ_HOST: rabbitmq CIV_RABBITMQ_USERNAME: rabbitmq CIV_RABBITMQ_PASSWORD: rabbitmq volumes: - ./containers/data/paper:/data - ./ansible/files/paper-config:/config - ./ansible/build/paper-plugins:/plugins ################# ### Databases ### ################# mariadb: image: mariadb:10.7.1 restart: unless-stopped command: --max-connections 500 healthcheck: test: [ "CMD-SHELL", 'mysqladmin ping --user "$$MYSQL_USER" --password="$$MYSQL_PASSWORD"' ] timeout: 20s retries: 10 ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: mariadb MYSQL_USER: mariadb MYSQL_PASSWORD: mariadb MYSQL_DATABASE: mariadb volumes: - ./containers/provisioning/mariadb/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:ro - ./containers/data/mariadb:/var/lib/mysql postgres: image: timescale/timescaledb:latest-pg14 restart: unless-stopped healthcheck: test: [ "CMD-SHELL", 'pg_isready -U "$$POSTGRES_USER"' ] interval: 10s timeout: 5s retries: 5 ports: - "5432:5432" environment: POSTGRES_USER: postgres POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres volumes: - ./containers/provisioning/postgres/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d:ro - ./containers/data/postgres:/var/lib/postgresql/data rabbitmq: image: rabbitmq:3.9.16-management restart: unless-stopped healthcheck: test: [ "CMD", "rabbitmq-diagnostics", "ping" ] interval: 60s timeout: 10s retries: 5 ports: - "5672:5672" - "15672:15672" environment: RABBITMQ_DEFAULT_USER: rabbitmq RABBITMQ_DEFAULT_PASS: rabbitmq ################## ### Monitoring ### ################## grafana: image: grafana/grafana-oss:latest restart: unless-stopped depends_on: postgres: condition: service_healthy profiles: - monitoring ports: - "3000:3000" environment: CIV_INFLUX_HOST: http://influx:8086 CIV_INFLUX_ORG: CivMC CIV_INFLUX_TOKEN: admintoken volumes: - ./containers/provisioning/grafana:/etc/grafana/provisioning:ro