Before deploying, ensure your host environment is ready. See the Quick Start Guide for host setup instructions, including the security model for host vs. container privileges.
Deployment
Database Where the app keeps its data. The default needs nothing else running.
mealie:latest — data in /containers/mealie
A file in the app's config folder. Right for one person, nothing extra to run.
name:mealieservices:mealie:image:ghcr.io/daemonless/mealie:latestcontainer_name:mealierestart:unless-stoppedenvironment:-BASE_URL=http://localhost:9000-PUID=1000-PGID=1000-TZ=UTC# The database, from the Database choice; sqlite needs nothing else.-DB_ENGINE=${DB_ENGINE:-sqlite}-POSTGRES_SERVER=${POSTGRES_SERVER:-}-POSTGRES_PORT=${POSTGRES_PORT:-5432}-POSTGRES_USER=${POSTGRES_USER:-}-POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-}-POSTGRES_DB=${POSTGRES_DB:-}volumes:-"/containers/mealie:/config"ports:-"9000:9000"
Then run podman-compose up -d.
mealie:latest · postgres:17 — data in /containers/mealie, /containers/mealie/postgres
One more container, its data in its own folder. For a household, or an app that wants it.
name:mealieservices:mealie:depends_on:[postgres]image:ghcr.io/daemonless/mealie:latestcontainer_name:mealierestart:unless-stoppedenvironment:-BASE_URL=http://localhost:9000-PUID=1000-PGID=1000-TZ=UTC# The database, from the Database choice; sqlite needs nothing else.-DB_ENGINE=${DB_ENGINE:-sqlite}-POSTGRES_SERVER=${POSTGRES_SERVER:-}-POSTGRES_PORT=${POSTGRES_PORT:-5432}-POSTGRES_USER=${POSTGRES_USER:-}-POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-}-POSTGRES_DB=${POSTGRES_DB:-}volumes:-"/containers/mealie:/config"ports:-"9000:9000"postgres:image:ghcr.io/daemonless/postgres:17restart:alwaysannotations:org.freebsd.jail.allow.sysvipc:"true"environment:-POSTGRES_USER=${POSTGRES_USER}-POSTGRES_PASSWORD=${POSTGRES_PASSWORD}-POSTGRES_DB=${POSTGRES_DB}volumes:-"${DATABASE_LOCATION}:/var/lib/postgresql/data"
Then run podman-compose up -d.
mealie:latest · your own database — data in /containers/mealie
A database you already run, here or on another machine. Nothing extra runs; you give the address and the account.
1. Save as .env and fill in Kind, Host, Port, User, Password, Database:
name:mealieservices:mealie:image:ghcr.io/daemonless/mealie:latestcontainer_name:mealierestart:unless-stoppedenvironment:-BASE_URL=http://localhost:9000-PUID=1000-PGID=1000-TZ=UTC# The database, from the Database choice; sqlite needs nothing else.-DB_ENGINE=${DB_ENGINE:-sqlite}-POSTGRES_SERVER=${POSTGRES_SERVER:-}-POSTGRES_PORT=${POSTGRES_PORT:-5432}-POSTGRES_USER=${POSTGRES_USER:-}-POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-}-POSTGRES_DB=${POSTGRES_DB:-}volumes:-"/containers/mealie:/config"ports:-"9000:9000"
Then run podman-compose up -d.
Database Where the app keeps its data. The default needs nothing else running.
mealie:latest — data in /containers/mealie
A file in the app's config folder. Right for one person, nothing extra to run.
# The jail PostgreSQL runs in: SysV shared memory, which a jail does not
# get by default. ip4/ip6 are set here because the director's ip4_inherit
# option is a no-op in AppJail 5.5.0.
exec.start: "/bin/sh /etc/rc"
exec.stop: "/bin/sh /etc/rc.shutdown jail"
sysvmsg: new
sysvsem: new
sysvshm: new
mount.devfs
persist
ip4: inherit
ip6: inherit
Save the files above, then run appjail-director up.
mealie:latest · your own database — data in /containers/mealie
A database you already run, here or on another machine. Nothing extra runs; you give the address and the account.
# On Linuxpodmanexecmealie-postgrespg_dump-Umealiemealie>mealie.sql
# On FreeBSD (start fresh postgres first, then restore)catmealie.sql|podmanexec-imealie-postgrespsql-Umealie-dmealie