name: ghost services: ghost: build: context: . dockerfile: ./.docker/Dockerfile target: development ports: - "2368:2368" # Ghost - "4200:4200" # Admin - "4201:4201" # Admin tests - "4173:4173" # Lexical - "41730:41730" # Lexical HTTPS - "4175:4175" # Portal - "4176:4176" # Portal HTTPS - "4177:4177" # Announcement bar - "4178:4178" # Search - "6174:6174" # Signup form - "7173:7173" # Comments - "7174:7174" # Comments HTTPS profiles: [full] volumes: - .:/home/ghost tty: true depends_on: mysql: condition: service_healthy redis: condition: service_healthy environment: - DEBUG=${DEBUG:-} - GHOST_DEV_APP_FLAGS=${GHOST_DEV_APP_FLAGS:-} - STRIPE_SECRET_KEY=${STRIPE_SECRET_KEY:-} - STRIPE_PUBLISHABLE_KEY=${STRIPE_PUBLISHABLE_KEY:-} - STRIPE_ACCOUNT_ID=${STRIPE_ACCOUNT_ID:-} mysql: image: mysql:8.0.35 container_name: ghost-mysql # We'll need to look into how we can further fine tune the memory usage/performance here command: --innodb-buffer-pool-size=1G --innodb-log-buffer-size=500M --innodb-change-buffer-max-size=50 --innodb-flush-log-at-trx_commit=0 --innodb-flush-method=O_DIRECT ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: ghost restart: always volumes: # Turns out you can drop .sql or .sql.gz files in here, cool! - ./.docker/mysql-preload:/docker-entrypoint-initdb.d - mysql-data:/var/lib/mysql healthcheck: test: "mysql -uroot -proot ghost -e 'select 1'" interval: 1s retries: 120 redis: image: redis:7.0 container_name: ghost-redis ports: - "6379:6379" restart: always volumes: - redis-data:/data healthcheck: test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ] interval: 1s retries: 120 prometheus: profiles: [monitoring] image: prom/prometheus:v2.30.3 container_name: ghost-prometheus ports: - "9090:9090" restart: always volumes: - ./.docker/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml grafana: profiles: [monitoring] image: grafana/grafana:8.3.0 container_name: ghost-grafana ports: - "3000:3000" restart: always environment: - GF_AUTH_ANONYMOUS_ENABLED=true - GF_AUTH_ANONYMOUS_ORG_ROLE=Admin volumes: - ./.docker/grafana/datasources:/etc/grafana/provisioning/datasources - ./.docker/grafana/dashboard.yml:/etc/grafana/provisioning/dashboards/main.yaml - ./.docker/grafana/dashboards:/var/lib/grafana/dashboards pushgateway: profiles: [monitoring] image: prom/pushgateway:v1.6.0 container_name: ghost-pushgateway ports: - "9091:9091" volumes: mysql-data: redis-data: