To install Mealie on your server there are a few steps for proper configuration. Let's go through them.
Don't need step by step? Checkout the
To deploy mealie on your local network it is highly recommended to use docker to deploy the image straight from dockerhub. Using the docker-compose templates provided, you should be able to get a stack up and running easily by changing a few default values and deploying. You can deploy with either SQLite (default) or Postgres. SQLite is sufficient for most use cases. Additionally, with Mealie's automated backup and restore functionality, you can easily move between SQLite and Postgres as you wish.
Due to a build dependency limitation, Mealie is not supported on 32bit ARM systems. If you're running into this limitation on a newer Raspberry Pi, please consider upgrading to a 64bit operating system on the Raspberry Pi.
Step 1: Deployment Type
SQLite is a popular, open source, self-contained, zero-configuration database that is the ideal choice for Mealie when you have 1-20 Users and your concurrent write operations will be some-what limited.
PostgreSQL might be considered if you need to support many concurrent users. In addition, some features are only enabled on PostgreSQL, such as fuzzy search.
You can find the relevant ready to use docker-compose files for supported installations at the links below.
Step 2: Setting up your files.
The following steps were tested on a Ubuntu 20.04 server, but should work for most other Linux distributions. These steps are not required, but is how I generally will setup services on my server.
- SSH into your server and navigate to the home directory of the user you want to run Mealie as. If that is your current user, you can use
cd ~to ensure you're in the right directory.
- Create a directory called
dockerand navigate into it:
mkdir docker && cd docker(this is optional, if you organizer your docker installs separate from everything else)
- Do the same for mealie:
mkdir mealie && cd mealie
- Create a docker-compose.yaml file in the mealie directory:
- Use the text editor or your choice to edit the file and copy the contents of the docker-compose template for the deployment type you want to use:
Step 2: Customizing The
After you've decided setup the files it's important to set a few ENV variables to ensure that you can use all the features of Mealie. I recommend that you verify and check that:
- You've configured the relevant ENV variables for your database selection in the
- You've configured the SMTP server settings (used for invitations, password resets, etc). You can setup a google app password if you want to send email via gmail.
- Verified the port mapped on the
mealie-frontendcontainer is an open port on your server (Default: 9925)
- You've set the
- You've set the
- Make any theme changes on the frontend container. See Frontend Config
Step 3: Startup
After you've configured your database, and updated the
docker-compose.yaml files, you can start Mealie by running the following command in the directory where you've added your
$ docker-compose up -d
You should see the containers start up without error. You should now be able to access the Mealie frontend at http://localhost:9925.
Step 4: Validate Installation
After the startup is complete you should see a login screen. Use the default credentials above to login and navigate to
/admin/site-settings. Here you'll find a summary of your configuration details and their respective status. Before proceeding you should validate that the configuration is correct. For any warnings or errors the page will display an error and notify you of what you need to verify.
Mealie uses a shared data-volume between the Backend and Frontend containers for images and assets. Ensure that this is configured correctly by using the "Docker Volume Test" section in the settings page. Running this validation will ensure that you have configured your volumes correctly. Mealie will not work correctly without this configured correctly.
Step 5: Backup
While v1.0.0 is a great step to data-stability and security, it's not a backup. Mealie provides a full site data backup mechanism through the UI.
These backups are just plain .zip files that you can download from the UI or access via the mounted volume on your system. For complete data protection you MUST store these backups somewhere safe, and outside of the server where they are deployed.
These are the tags for the latest beta release of the frontend docker-container. These are currently considered the latest and most stable releases and the recommended way of using Mealie.
The nightly build are the latest and greatest builds that are built directly off of every commit to the
mealie-next branch and as such may contain bugs. These are great to help the community catch bugs before they hit the stable release or if you like living on the edge.
While the docker-compose file should work without modification, some users want to tailor it to their installation. This diagram shows network and volume architecture for the default setup. You can use this to help you customize your configuration.
In the diagram above there's a few crucial things to note.
- Port 9925 is the host port, this can be anything you want. The important part is that it's mapped to the mealie-frontend container at port 3000.
- The mealie-frontend container communicated with the mealie-api container through the INTERNAL docker network. This requires that the two containers are on the same network and that the network supports name resolution (anything but the default bridge network). The resolution URL can be specified in the docker-compose as the
API_URLenvironment variable. The API_URL must match the network name of the mealie-backend container, which should be the same as the container name (e.g. a container renamed to
my-apishould have an
http://my-api:<backend port, default 9000)
- The mealie-data volume is mounted to BOTH the mealie-frontend and mealie-api containers. This is REQUIRED to ensure that images and assets are served up correctly. While the default configuration is a docker-volume, that same can be accomplished by using a local directory mounted to the containers.