A docker deploy for ansible
Go to file
Cody Robertson d00ab06541
Merge pull request #202 from sanatsathaye/main
Fix installation playbooks running on incompatible OSs
2023-12-04 13:13:05 -05:00
.github Adding ticoombs to codeowners. (#163) 2023-09-04 14:55:19 -04:00
examples Remove invalid temp_file_size line in customPostgresql.conf (#192) 2023-10-17 10:23:26 -04:00
files Fix incorrect/inconsistent usage of proxy_set_header in nginx_internal.conf 2023-09-02 19:50:41 -04:00
templates Redirect "/sitemap.xml" to backend 2023-11-09 16:40:25 +03:00
.gitignore Move password into domain folder. 2021-10-09 12:13:23 -04:00
.woodpecker.yml Add vars.yml to woodpecker pipeline (#176) 2023-09-27 14:47:04 -04:00
ansible.cfg Update ansible.cfg (#178) 2023-10-04 17:36:26 -04:00
lemmy-almalinux.yml Fix debian playbook running on non-debian system 2023-12-04 01:43:57 +05:30
lemmy.yml Fix debian playbook running on non-debian system 2023-12-04 01:43:57 +05:30
LICENSE Adding AGPL license. Fixes #37 (#39) 2022-05-09 22:45:52 +00:00
README.md Update README.md 2023-11-29 11:17:43 +01:00
requirements.yml Make firewalld operations idempotent (#173) 2023-10-04 19:33:31 -04:00
uninstall.yml Fix ansible-lint warnings 2023-09-11 11:51:58 +02:00
VERSION Updating VERSION 2023-09-29 07:39:19 -04:00


This provides an easy way to install Lemmy on any server. It automatically sets up an nginx server, letsencrypt certificates, docker containers, pict-rs, and email smtp.


To run this ansible playbook, you need to:

  • Have a Debian/AlmaLinux 9-based server / VPS where lemmy will run.
  • Supported CPU architectures are x86-64 and ARM64.
  • Configure a DNS A Record to point at your server's IP address.
  • Make sure you can ssh to it, with a sudo user: ssh <your-user>@<your-domain>
  • Install Ansible (>= 2.11.0 on your local machine (do not install it on your destination server).

Supported Distribution Playbook Matrix

These are the distributions we currently support. Anything not listed here is currently not supported.
If you wish to see another distribution on the list, please test on the latest commit in main and report your findings via an Issue.

Distribution Version Playbook
Debian 10 lemmy.yml
Debian 11 lemmy.yml
Debian 12 lemmy.yml
Ubuntu 22.04 LTS lemmy.yml
RHEL 9 lemmy-almalinux.yml


  1. Clone this repo & checkout latest tag

    git clone https://github.com/LemmyNet/lemmy-ansible.git
    cd lemmy-ansible
    git checkout $(git describe --tags)
  2. Make a directory to hold your config:

    mkdir -p inventory/host_vars/<your-domain>

  3. Copy the sample configuration file:

    cp examples/config.hjson inventory/host_vars/<your-domain>/config.hjson

    Edit that file and change the config to your liking. Note: Do not edit anything inside the {{ }} braces.

    Here are all the config options.

  4. Copy the sample inventory hosts file:

    cp examples/hosts inventory/hosts

    Edit the inventory hosts file (inventory/hosts) to your liking.

  5. Copy the sample postgresql.conf

    cp examples/customPostgresql.conf inventory/host_vars/<your-domain>/customPostgresql.conf

    You can use the PGTune tool to tune your postgres to meet your server memory and CPU.

  6. Copy the sample vars.yml file

    cp examples/vars.yml inventory/host_vars/<your-domain>/vars.yml

    Edit the inventory/host_vars/<your-domain>/vars.yml file to your liking.

  7. Run the playbook:

    Note: See the "Supported Distribution Playbook Matrix" section above if you should use lemmy.yml or not

    ansible-playbook -i inventory/hosts lemmy.yml

    Note: if you are not the root user or don't have password-less sudo, use this command:

    ansible-playbook -i inventory/hosts lemmy.yml --become --ask-become-pass

    Note: if you haven't set up ssh keys1, and ssh using a password, use the command:

    ansible-playbook -i inventory/hosts lemmy.yml --become --ask-pass --ask-become-pass

    Full ansible command-line docs

    If the command above fails, you may need to comment out this line In the ansible.cfg file:



Since version 1.1.0 we no longer default to using main but use tags to make sure deployments are versioned. With every new release all migration steps shall be written below so make sure you check out the Lemmy Releases Changelog to see if there are any config changes with the releases since your last read.

Upgrading to 1.2.1 (Lemmy 0.18.5)

This is a minor change which fixes the issue with the Postgres container not using the customPostgres.conf file.


  • Please regenerate your customPostgres.conf from examples/customPostgres.conf
  • OR
  • Add the following block to your current customPostgres file.
# Listen beyond localhost
listen_addresses = '*'

Upgrading to 1.2.0 (Lemmy 0.18.5)

Major changes:

  • All variables are not under a singular file so you will not need to modify anything: inventory/host_vars/{{ domain }}/vars.yml
  • --become is now optional instead of forced on


  • Run git pull && git checkout 1.2.0
  • When upgrading from older versions of these playbooks, you will need to do the following:
    • Rename inventory/host_vars/{{ domain }}/passwords/postgres file to inventory/host_vars/{{ domain }}/passwords/postgres.psk
    • Copy the examples/vars.yml file to inventory/host_vars/{{ domain }}/vars.yml
    • Edit your variables as desired
  • Run your regular deployment. Example: ansible-playbook -i inventory/hosts lemmy.yml --become

Upgrading to 1.1.0 (Lemmy 0.18.3)

  • No major changes should be required

Migrating your existing install to use this deploy

  • Follow this guide to backup your existing install.
  • Run docker-compose stop to stop lemmy.
  • Move your docker folders on the server to <lemmy_base_dir>/<your-domain>.
  • Copy your postgres password to inventory/host_vars/<your-domain>/passwords/postgres.
  • Follow the install guide above, making sure your config.hjson is the same as your backup.


ansible-playbook -i inventory/hosts uninstall.yml --become


  1. To create an ssh key pair with your host environment, you can follow the instructions here, and then copy the key to your host server. ↩︎