94
Hosting Lemmy with Traefik as a reverse proxy - lmmytvdldev
lmmy.tvdl.devIn light of the ongoing Reddit blackout, many users are seeking alternative
platforms to host their communities. One popular option is Lemmy, a self-hosted
federated link aggregator. However, most of the available documentation on
running Lemmy involves using Nginx or Caddy as a reverse proxy. If you’re
utilizing Traefik with docker-compose and docker labels on your server, this
guide will walk you through the process of setting up a working Lemmy instance
without the need for Nginx or Caddy. Step-by-Step Guide: 1. Docker Compose
Configuration: To begin, create a new docker-compose.yml file and include the
necessary services for running Lemmy. Here’s a sample configuration to get you
started: yaml version: "3.7" services: web: image: dessalines/lemmy:0.17.4
restart: always logging: driver: journald options: tag: "{{.Name}}[{{.ID}}]"
environment: -
RUST_LOG="warn,lemmy_server=info,lemmy_api=info,lemmy_api_common=info,lemmy_api_crud=info,lemmy_apub=info,lemmy_db_schema=info,lemmy_db_views=info,lemmy_db_views_actor=info,lemmy_db_views_moderator=info,lemmy_routes=info,lemmy_utils=info,lemmy_websocket=info"
volumes: - ./lemmy.hjson:/config/config.hjson depends_on: - db networks: -
default - reverse_proxy labels: - traefik.enable=true -
traefik.http.routers.http_lemmyexamplecom.rule=Host(`lemmy.example.com`) &&
(PathPrefix(`/api`, `/pictrs`, `/feeds`, `/nodeinfo`, `/.well-known`) ||
Method(`POST`) || HeadersRegexp(`Accept`, `^[Aa]pplication/.*`)) -
traefik.http.routers.https_lemmyexamplecom.rule=Host(`lemmy.example.com`) &&
(PathPrefix(`/api`, `/pictrs`, `/feeds`, `/nodeinfo`, `/.well-known`) ||
Method(`POST`) || HeadersRegexp(`Accept`, `^[Aa]pplication/.*`)) -
traefik.http.routers.http_lemmyexamplecom.entrypoints=http -
traefik.http.routers.https_lemmyexamplecom.entrypoints=https -
traefik.http.routers.http_lemmyexamplecom.middlewares=https_redirect@file -
traefik.http.routers.https_lemmyexamplecom.tls.certresolver=letsencrypt
web-frontend: image: dessalines/lemmy-ui:0.17.4 environment: -
LEMMY_UI_LEMMY_INTERNAL_HOST=web:8536 -
LEMMY_UI_LEMMY_EXTERNAL_HOST=localhost:1236 - LEMMY_HTTPS=true depends_on: - web
restart: always logging: driver: journald options: tag: "{{.Name}}[{{.ID}}]"
networks: - default - reverse_proxy labels: - traefik.enable=true -
traefik.http.routers.http_lemmyexamplecom_static.rule=Host(`lemmy.example.com`)
-
traefik.http.routers.https_lemmyexamplecom_static.rule=Host(`lemmy.example.com`)
- traefik.http.routers.http_lemmyexamplecom_static.entrypoints=http -
traefik.http.routers.https_lemmyexamplecom_static.entrypoints=https -
traefik.http.routers.http_lemmyexamplecom_static.middlewares=https_redirect@file
- traefik.http.routers.https_lemmyexamplecom_static.tls.certresolver=letsencrypt
db: image: postgres:15-alpine hostname: db environment: - POSTGRES_USER=lemmy -
POSTGRES_PASSWORD=password volumes: - db:/var/lib/postgresql/data restart:
always logging: driver: journald options: tag: "{{.Name}}[{{.ID}}]" networks: -
default networks: reverse_proxy: external: true volumes: 2. Adjust Hostname:
Remember to replace the placeholder hostname in the configuration with the
actual hostname of your server. This ensures that Lemmy is accessible via the
correct URL. Start Lemmy: Save the changes to your docker-compose.yml file and
execute the following command in the terminal to start Lemmy: bash
docker-compose up -d 3. Verify Lemmy’s Availability: Once the containers are up
and running, access your Lemmy instance by navigating to the URL associated with
your server’s hostname. Please note that the instructions provided here assume a
basic understanding of Docker, Traefik, and server administration. Adjustments
may be necessary based on your specific setup and requirements.
Just wrote up a little post for those who want to self host a lemmy instance with docker-compose and traefik.
Cool. The formatting is messed up on my server but I can see it in the original. I do wonder if this approach could work for k8s traefik ingress.