Mealie/docker-compose.yml

136 lines
5.2 KiB
YAML
Raw Permalink Normal View History

2025-11-30 17:03:18 +00:00
2025-11-23 17:23:56 +00:00
services:
mealie:
image: ghcr.io/mealie-recipes/mealie:latest
container_name: mealie
restart: always
networks:
- traefik
- internal
volumes:
- ./mealie-data:/app/data
2025-12-01 07:54:20 +00:00
#orts:
# - "9011:9000" # ← ADD THIS LINE
2025-11-23 17:23:56 +00:00
environment:
# Backend settings
ALLOW_SIGNUP: "false"
PUID: 1000
PGID: 1000
2025-11-30 17:03:18 +00:00
TZ: Europe/Ljubljana # <-- Already set here
2025-11-23 17:23:56 +00:00
BASE_URL: https://mealie.rozic-dev.com
# Database
DB_ENGINE: postgres
POSTGRES_USER: mealie
POSTGRES_PASSWORD: mealie
2025-12-01 07:54:20 +00:00
POSTGRES_SERVER: postgres_mealie
2025-11-23 17:23:56 +00:00
POSTGRES_PORT: 5432
POSTGRES_DB: mealie
depends_on:
2025-12-01 07:54:20 +00:00
postgres_mealie:
2025-11-23 17:23:56 +00:00
condition: service_healthy
# -----------------------------
# Traefik Reverse Proxy Labels
# -----------------------------
labels:
2025-11-30 17:45:48 +00:00
# ──────────────────────────────
# Enable Traefik for this container
# ──────────────────────────────
2025-11-23 17:23:56 +00:00
- "traefik.enable=true"
2025-11-30 17:11:15 +00:00
2025-11-30 17:45:48 +00:00
# ──────────────────────────────
# HTTP → HTTPS redirect router
# ──────────────────────────────
2025-11-30 17:11:15 +00:00
- "traefik.http.routers.mealie-http.entrypoints=web"
- "traefik.http.routers.mealie-http.rule=Host(`mealie.rozic-dev.com`)"
2025-11-30 17:45:48 +00:00
- "traefik.http.routers.mealie-http.middlewares=mealie-redirect"
2025-11-30 17:11:15 +00:00
2025-11-30 17:45:48 +00:00
# ──────────────────────────────
# HTTPS router (the real one)
# ──────────────────────────────
2025-11-23 17:23:56 +00:00
- "traefik.http.routers.mealie.entrypoints=websecure"
2025-11-30 17:11:15 +00:00
- "traefik.http.routers.mealie.rule=Host(`mealie.rozic-dev.com`)"
2025-11-23 17:23:56 +00:00
- "traefik.http.routers.mealie.tls=true"
2025-11-30 17:45:48 +00:00
- "traefik.http.routers.mealie.tls.certresolver=letsencrypt" # ← change only if your resolver has a different name
- "traefik.http.routers.mealie.middlewares=mealie-chain"
2025-11-30 17:11:15 +00:00
2025-11-30 17:45:48 +00:00
# ──────────────────────────────
# Service (where Traefik forwards the traffic)
# ──────────────────────────────
2025-11-23 17:23:56 +00:00
- "traefik.http.services.mealie.loadbalancer.server.port=9000"
2025-11-30 17:11:15 +00:00
2025-11-30 17:45:48 +00:00
# ──────────────────────────────
# Middleware: redirect HTTP → HTTPS
# ──────────────────────────────
- "traefik.http.middlewares.mealie-redirect.redirectscheme.scheme=https"
- "traefik.http.middlewares.mealie-redirect.redirectscheme.permanent=true"
# ──────────────────────────────
# Middleware: security headers
# ──────────────────────────────
2025-11-30 17:11:15 +00:00
- "traefik.http.middlewares.mealie-security.headers.stsSeconds=63072000"
- "traefik.http.middlewares.mealie-security.headers.stsIncludeSubdomains=true"
- "traefik.http.middlewares.mealie-security.headers.stsPreload=true"
- "traefik.http.middlewares.mealie-security.headers.contentTypeNosniff=true"
- "traefik.http.middlewares.mealie-security.headers.browserXssFilter=true"
- "traefik.http.middlewares.mealie-security.headers.referrerPolicy=same-origin"
2025-11-30 17:45:48 +00:00
- "traefik.http.middlewares.mealie-security.headers.customResponseHeaders.X-Robots-Tag=none"
# ──────────────────────────────
# Chain: redirect + security headers (applied only to HTTPS router)
# ──────────────────────────────
- "traefik.http.middlewares.mealie-chain.chain.middlewares=mealie-security"
2025-11-30 17:11:15 +00:00
deploy:
resources:
limits:
cpus: '1.0'
memory: 1024M
2025-11-23 17:23:56 +00:00
2025-12-01 07:54:20 +00:00
postgres_mealie:
2025-11-23 17:23:56 +00:00
image: postgres:15
container_name: mealie-postgres
restart: always
networks:
- internal
2025-12-01 07:54:20 +00:00
# - traefik
2025-11-23 17:23:56 +00:00
environment:
2025-12-01 07:54:20 +00:00
#POSTGRES_USER: mealie # keeps your app user
2025-11-23 17:23:56 +00:00
POSTGRES_DB: mealie
POSTGRES_USER: mealie
POSTGRES_PASSWORD: mealie
2025-12-01 07:54:20 +00:00
PGUSER: mealie
2025-11-30 17:03:18 +00:00
# Added for Time Zone consistency (Suggestion 2)
TZ: Europe/Ljubljana
PGTZ: Europe/Ljubljana
2025-11-23 17:23:56 +00:00
volumes:
- ./mealie-pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "mealie"]
interval: 30s
timeout: 10s
retries: 5
2025-12-01 07:54:20 +00:00
# labels:
# - "traefik.enable=false" # <-- add this single line
# - "traefik.enable=false" # already good, keeps Traefik away
# - "io.portainer.docker.compose.skip=true" # <-- ADD THIS
# - "netdata.disable=true" # <-- AND THIS (if you use Netdata)
2025-11-23 17:23:56 +00:00
# ------------------
# NETWORKS & VOLUMES
# ------------------
networks:
traefik:
external: true
2025-11-30 17:03:18 +00:00
name: traefik_default
2025-11-23 17:23:56 +00:00
internal:
driver: bridge
volumes:
mealie-data:
2025-11-30 17:05:33 +00:00
driver: local
mealie-pgdata:
driver: local