Files
Portainer/ghost-me/docker-compose.yml
T
2026-08-09 16:56:56 +00:00

92 lines
3.5 KiB
YAML

services:
ghost-me-db:
image: ${GHOST_ME_DB_IMAGE}
container_name: ghost-me-db
restart: unless-stopped
labels:
prune.protect: "true"
environment:
MYSQL_ROOT_PASSWORD: ${GHOST_ME_DB_ROOT_PASSWORD}
MYSQL_DATABASE: ${GHOST_ME_DB_NAME}
MYSQL_USER: ${GHOST_ME_DB_USER}
MYSQL_PASSWORD: ${GHOST_ME_DB_PASSWORD}
TZ: ${TZ}
volumes:
- ${GHOST_ME_DB_DATA_PATH}:/var/lib/mysql:Z
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -u${GHOST_ME_DB_USER} -p${GHOST_ME_DB_PASSWORD} --silent"]
interval: 10s
timeout: 5s
retries: 20
start_period: 30s
networks:
- ghost_me_internal
ghost-me:
image: ${GHOST_ME_IMAGE}
container_name: ghost-me
restart: unless-stopped
depends_on:
ghost-me-db:
condition: service_healthy
environment:
NODE_ENV: production
TZ: ${TZ}
url: https://${GHOST_ME_DOMAIN}
database__client: mysql
database__connection__host: ghost-me-db
database__connection__user: ${GHOST_ME_DB_USER}
database__connection__password: ${GHOST_ME_DB_PASSWORD}
database__connection__database: ${GHOST_ME_DB_NAME}
mail__transport: SMTP
mail__from: ${GHOST_ME_MAIL_FROM}
mail__options__host: mail-relay
mail__options__port: 587
mail__options__secure: "false"
mail__options__ignoreTLS: "true"
volumes:
- ${GHOST_ME_CONTENT_PATH}:/var/lib/ghost/content:Z
- ${GHOST_ME_ROUTES_PATH}:/var/lib/ghost/content/settings/routes.yaml:Z
- ./theme-source-personal:/var/lib/ghost/content/themes/source-personal:Z
networks:
- ghost_me_internal
- proxy
- mail_internal
labels:
prune.protect: "true"
traefik.enable: "true"
traefik.docker.network: "${TRAEFIK_DOCKER_NETWORK}"
traefik.http.routers.ghost-me.rule: "Host(`${GHOST_ME_DOMAIN}`)"
traefik.http.routers.ghost-me.entrypoints: "${TRAEFIK_ENTRYPOINT_SECURE}"
traefik.http.routers.ghost-me.tls: "true"
traefik.http.routers.ghost-me.tls.certresolver: "${TRAEFIK_CERTRESOLVER}"
traefik.http.routers.ghost-me.service: "ghost-me"
traefik.http.routers.ghost-me.middlewares: "crowdsec-bouncer@file"
traefik.http.services.ghost-me.loadbalancer.server.port: "2368"
traefik.http.routers.ghost-me-alt.rule: "Host(`${GHOST_ME_DOMAIN_ALT}`)"
traefik.http.routers.ghost-me-alt.entrypoints: "${TRAEFIK_ENTRYPOINT_SECURE}"
traefik.http.routers.ghost-me-alt.tls: "true"
traefik.http.routers.ghost-me-alt.tls.certresolver: "${TRAEFIK_CERTRESOLVER}"
traefik.http.routers.ghost-me-alt.service: "ghost-me"
traefik.http.routers.ghost-me-alt.middlewares: "crowdsec-bouncer@file,ghost-me-alt-redirect"
traefik.http.middlewares.ghost-me-alt-redirect.redirectregex.permanent: "true"
traefik.http.middlewares.ghost-me-alt-redirect.redirectregex.regex: "^https://${GHOST_ME_DOMAIN_ALT}(:443)?/(.*)"
traefik.http.middlewares.ghost-me-alt-redirect.redirectregex.replacement: "https://${GHOST_ME_DOMAIN}/$${2}"
homepage.group: "Personal"
homepage.name: "Me"
homepage.icon: "https://cdn.jsdelivr.net/gh/homarr-labs/dashboard-icons/svg/ghost.svg"
homepage.description: "Sitio personal y CV de Eduardo Paredes"
homepage.href: "https://${GHOST_ME_DOMAIN}/"
homepage.siteMonitor: "http://ghost-me:2368/"
homepage.weight: "140"
networks:
ghost_me_internal:
driver: bridge
labels:
prune.protect: "true"
mail_internal:
external: true
proxy:
external: true