A rambling list of notes to myself about hosting a Lemmy instance like this one
Basic Setup
Docker guide: https://lemmy.villa-straylight.social/post/1849#
However, I like the docker-compose.yml in the official docs better as a starting point. The docs pages aren’t automatically published when a PR is merged, so refer to the Github Repo for the latest version.
This docker-compose.yml is mostly intended for development work, so you will need to replace the following lines:
build:
context: ../
dockerfile: docker/Dockerfile
with
image: dessalines/lemmy:0.17.4
Likewise, update the lemmy-ui image to dessalines/lemmy-ui:0.17.4.
I use basically the nginx.conf added by Just-Insane to the docker install page here.
Reverse Proxy
Lemmy uses websockets (for now anyway, that’s changing soon) and websockets are kind of dumb. If you put this setup behind a reverse proxy, you need to make sure the reverse proxy properly handles web sockets. For nginx, this essentially means you need to copy the settings in the docker nginx.conf into your fronting reverse proxy.
Example:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name lemmy.villa-straylight.social;
ssl_certificate /etc/letsencrypt/live/villa-straylight.social/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/villa-straylight.social/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# frontend general requests
location / {
proxy_pass "http://localhost:[docker nginx port]";
rewrite ^(.+)/+$ $1 permanent;
# Send actual client IP upstream
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# backend
location ~ ^/(api|pictrs|feeds|nodeinfo|.well-known) {
proxy_pass "http://localhost:[docker nginx port]";
# proxy common stuff
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
# Send actual client IP upstream
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
Custom Themes
In docker-compose.yml, add a new volume to lemmy-ui, with /app/extra_themes as the path in the image. (Thanks to @[email protected] for pointing that out)
Example:
lemmy-ui:
image: dessalines/lemmy-ui:0.17.3
volumes:
- ./volumes/lemmy_themes:/app/extra_themes/
You can then drop .css files in there (e.g. a copy of one of the default themes) and they will appear as an option in the user’s settings. The name of the theme is the file-name of the .css file.

