Files
app-catalog-felhom.eu/templates/mealie/docker-compose.yml
T
admin 4581a92781 app-email: smtp_mapping for vaultwarden + mealie
Vaultwarden via STARTTLS (accepts self-signed shim cert); Mealie via plaintext
(NONE) — no accept-invalid-cert option, spike-validated mode. Compose files
reference injected ${SMTP_*}. README documents the pattern.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 08:45:23 +02:00

66 lines
2.1 KiB
YAML

# Mealie - Recipe Manager & Meal Planner
# Domain: ${SUBDOMAIN}.${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://${SUBDOMAIN}.${DOMAIN}
# App-email (managed relay). Injected by the controller only when app-email is on
# (global + per-app); empty SMTP_HOST = Mealie mail stays disabled. Mealie has no
# accept-invalid-cert option, so the relay uses plaintext (NONE) to the on-box shim —
# the spike-validated mode. See .felhom.yml smtp_mapping.
- SMTP_HOST=${SMTP_HOST:-}
- SMTP_PORT=${SMTP_PORT:-25}
- SMTP_AUTH_STRATEGY=${SMTP_AUTH_STRATEGY:-NONE}
- SMTP_FROM_NAME=${SMTP_FROM_NAME:-}
- SMTP_FROM_EMAIL=${SMTP_FROM_EMAIL:-}
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(`${SUBDOMAIN}.${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