Files
hq/ghost/compose.yml
2025-06-15 23:31:21 +00:00

119 lines
3.0 KiB
YAML

services:
service:
image: ghost:5-alpine
labels:
- traefik.enable=true
- traefik.http.routers.ghost.entrypoints=websecure
- traefik.http.routers.ghost.rule=Host(`blog.rskio.com`)
- traefik.http.routers.ghost.middlewares=secureHeaders@file
- traefik.http.routers.ghost.tls=true
- traefik.http.routers.ghost.tls.options=internal@file
- traefik.http.routers.ghost.service=ghost@docker
- traefik.http.services.ghost.loadbalancer.server.port=2368
- traefik.http.routers.ghost.tls.certresolver=rskio_certresolver
environment:
- database__client
- database__connection__host
- database__connection__user
- database__connection__password
- database__connection__database
- url
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
restart: unless-stopped
networks:
- default
- traefik
mysql:
image: mysql:8.0.35
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
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
restart: always
volumes:
- ./mysql:/var/lib/mysql
healthcheck:
test: mysql -uroot -proot ghost -e 'select 1'
interval: 5s
retries: 120
networks:
- default
redis:
image: redis:7.0
restart: always
ports:
- 6379:6379
healthcheck:
test:
- CMD
- redis-cli
- --raw
- incr
- ping
interval: 1s
retries: 120
networks:
- default
pushgateway:
profiles: [monitoring]
image: prom/pushgateway:v1.6.0
container_name: ghost-pushgateway
ports:
- 9091:9091
mailhog:
image: mailhog/mailhog:latest
container_name: ghost-mailhog
profiles: [ghost]
ports:
- "1025:1025" # SMTP server
- "8025:8025" # Web interface
restart: always
networks:
- default
# 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
# networks:
# - default
# 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
# networks:
# - default
# - traefik
networks:
default: {}
traefik:
external: true