Skip to content

daemonless/mealie

Repository files navigation

Mealie

Self-hosted recipe manager and meal planner on FreeBSD.

Port 9000
Registry ghcr.io/daemonless/mealie
Docs daemonless.io/images/mealie
Source https://github.com/mealie-recipes/mealie
Website https://mealie.io/

Deployment

Podman Compose

services:
  mealie:
    image: ghcr.io/daemonless/mealie:latest
    container_name: mealie
    environment:
      - BASE_URL=http://localhost:9000
      - PUID=1000
      - PGID=1000
      - TZ=UTC
    volumes:
      - /path/to/containers/mealie:/config
    ports:
      - 9000:9000
    restart: unless-stopped

Podman CLI

podman run -d --name mealie \
  -p 9000:9000 \
  -e BASE_URL=http://localhost:9000 \
  -e PUID=@PUID@ \
  -e PGID=@PGID@ \
  -e TZ=@TZ@ \
  -v /path/to/containers/mealie:/config \
  ghcr.io/daemonless/mealie:latest

Access at: http://localhost:9000

Ansible

- name: Deploy mealie
  containers.podman.podman_container:
    name: mealie
    image: ghcr.io/daemonless/mealie:latest
    state: started
    restart_policy: always
    env:
      BASE_URL: "http://localhost:9000"
      PUID: "@PUID@"
      PGID: "@PGID@"
      TZ: "@TZ@"
    ports:
      - "9000:9000"
    volumes:
      - "/path/to/containers/mealie:/config"

Configuration

Environment Variables

Variable Default Description
BASE_URL http://localhost:9000 The base URL for the application (e.g. https://mealie.example.com)
PUID 1000 User ID for the application process
PGID 1000 Group ID for the application process
TZ UTC Timezone for the container

Volumes

Path Description
/config Data directory (database, images)

Ports

Port Protocol Description
9000 TCP Web UI

Using PostgreSQL

By default, Mealie uses SQLite. For better performance with multiple users, use PostgreSQL:

services:
  mealie:
    image: ghcr.io/daemonless/mealie:latest
    container_name: mealie
    environment:
      - BASE_URL=http://localhost:@MEALIE_PORT@
      - PUID=@PUID@
      - PGID=@PGID@
      - TZ=@TZ@
      - DB_ENGINE=postgres
      - POSTGRES_USER=mealie
      - POSTGRES_PASSWORD=changeme
      - POSTGRES_SERVER=localhost
      - POSTGRES_PORT=5432
      - POSTGRES_DB=mealie
    volumes:
      - @CONTAINER_CONFIG_ROOT@/@MEALIE_CONFIG_PATH@:/config
    ports:
      - "@MEALIE_PORT@:9000"
    depends_on:
      - postgres
    network_mode: host
    restart: unless-stopped

  postgres:
    image: ghcr.io/daemonless/postgres:latest
    container_name: mealie-postgres
    environment:
      - POSTGRES_USER=mealie
      - POSTGRES_PASSWORD=changeme
      - POSTGRES_DB=mealie
    volumes:
      - @CONTAINER_CONFIG_ROOT@/mealie-postgres:/config
    network_mode: host
    restart: unless-stopped

Note: With network_mode: host, use localhost for POSTGRES_SERVER.

Migrating from Linux

SQLite: No issues, just copy your data.

PostgreSQL: You cannot copy the postgres data directory between Linux and FreeBSD due to locale incompatibilities. Use pg_dump/pg_restore instead:

# On Linux
podman exec mealie-postgres pg_dump -U mealie mealie > mealie.sql

# On FreeBSD (start fresh postgres first, then restore)
cat mealie.sql | podman exec -i mealie-postgres psql -U mealie -d mealie

See daemonless/postgres README for details.

Notes

  • Architectures: amd64
  • User: bsd (UID/GID set via PUID/PGID)
  • Base: Built on ghcr.io/daemonless/base (FreeBSD)

Releases

No releases published

Packages

 
 
 

Contributors