cross-posted from: https://lmmy.tvdl.dev/post/259
In 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:
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:
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: db:
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:
docker-compose up -d
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.
edit: Also note that this is for version 0.17.4. In case a new version releases you need to change the tag for both lemmy and lemmy-ui
Currently I'm on iOS, but I took this news to whip out my S10. Sync was always my preferred reddit client. Great to see it working on Lemmy now as well. Works great! Unfortunately it's not on iOS so won't be using it much