57 lines
1.5 KiB
YAML
57 lines
1.5 KiB
YAML
# Mealie - Recipe Manager & Meal Planner
|
|
# Domain: recipes.${DOMAIN}
|
|
# Database: None (SQLite, built-in)
|
|
# RAM: ~200MB (mem_limit: 1000M) | Pi-compatible: Yes (arm64 only)
|
|
#
|
|
# Environment variables:
|
|
# DOMAIN - Your domain (e.g., demo-felhom.eu)
|
|
#
|
|
# Storage layout:
|
|
# Recipe data/images → mealie_data (named volume, NVMe — moderate size)
|
|
#
|
|
# First-time setup:
|
|
# Default login: changeme@example.com / MyPassword
|
|
# Change immediately after first login!
|
|
|
|
services:
|
|
mealie:
|
|
image: ghcr.io/mealie-recipes/mealie:v3.10.2
|
|
container_name: mealie
|
|
restart: unless-stopped
|
|
environment:
|
|
- ALLOW_SIGNUP=false
|
|
- PUID=1000
|
|
- PGID=1000
|
|
- TZ=Europe/Budapest
|
|
- MAX_WORKERS=1
|
|
- WEB_CONCURRENCY=1
|
|
- BASE_URL=https://recipes.${DOMAIN}
|
|
volumes:
|
|
- mealie_data:/app/data/
|
|
networks:
|
|
- traefik-public
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 1000M
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "python3 -c \"import socket; s=socket.create_connection(('localhost',9000),2); s.close()\""]
|
|
interval: 30s
|
|
timeout: 5s
|
|
retries: 3
|
|
start_period: 60s
|
|
labels:
|
|
- "traefik.enable=true"
|
|
- "traefik.http.routers.mealie.rule=Host(`recipes.${DOMAIN}`)"
|
|
- "traefik.http.routers.mealie.entrypoints=websecure"
|
|
- "traefik.http.routers.mealie.tls=true"
|
|
- "traefik.http.routers.mealie.tls.certresolver=letsencrypt"
|
|
- "traefik.http.services.mealie.loadbalancer.server.port=9000"
|
|
|
|
volumes:
|
|
mealie_data:
|
|
|
|
networks:
|
|
traefik-public:
|
|
external: true
|