17
submitted 1 year ago by [email protected] to c/[email protected]

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:

  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:

    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:
    
  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:

    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.

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

top 2 comments
sorted by: hot top controversial new old
[-] [email protected] 1 points 11 months ago

Figured I'd ask to see if you know if this method is still working? I have mine setup very nearly identically to what you have here, and I have corrected my lemmy.hjson to have the correct hostname and password for the database. The only changes I have made thus far is to remove the HTTP redirection, and to change things like me cert resolver, the Lemmy version, and other small corrections.

However, all I am getting is a gateway timeout when I try to visit the url I have setup. Do you have any idea why this might be? I'll provide my docker-compose below.

version: "3.7"

services:
  web:
    image: dessalines/lemmy:latest
    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:
      - /mnt/lemmy/lemmy.hjson:/config/config.hjson
    depends_on:
      - db
    networks:
      - lemmy
      - traefik_default
    labels:
      - traefik.enable=true
      - traefik.http.routers.https_lemmy.rule=Host(`lem.domain.tld`) && (PathPrefix(`/api`, `/pictrs`, `/feeds`, `/nodeinfo`, `/.well-known`) || Method(`POST`) || HeadersRegexp(`Accept`, `^[Aa]pplication/.*`))
      - traefik.http.routers.https_lemmy.entrypoints=https
      - traefik.http.routers.https_lemmy.tls.certresolver=myresolver
  web-frontend:
    image: dessalines/lemmy-ui:latest
    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:
      - lemmy
      - traefik_default
    labels:
      - traefik.enable=true
      - traefik.http.routers.https_lemmy_static.rule=Host(`lem.domain.tld`)
      - traefik.http.routers.https_lemmy_static.entrypoints=https
      - traefik.http.routers.https_lemmy_static.tls.certresolver=myresolver
  db:
    image: postgres:15-alpine
    hostname: db
    environment:
      - POSTGRES_USER=lemmy
      - POSTGRES_PASSWORD=LONGstringOFcharacters
    volumes:
      - /mnt/lemmy/db:/var/lib/postgresql/data
      - ./customPostgresql.conf:/etc/postgresql.conf
    restart: always
    logging:
      driver: journald
      options:
        tag: "{{.Name}}[{{.ID}}]"
    networks:
      - lemmy

networks:
  traefik_default:
    external: true
  lemmy:
    driver: bridge
volumes:
  db:

[-] [email protected] 1 points 11 months ago

In one of the updates, I noticed in the traefik dashboard that traefik was forwarding to a different port. So I added the following label in my web labels:

      - traefik.http.services.web-lemmy.loadbalancer.server.port=8536

You might need to change the web-lemmy part to whatever the traefik service is named in your config.

this post was submitted on 13 Jun 2023
17 points (100.0% liked)

Selfhosted

37809 readers
507 users here now

A place to share alternatives to popular online services that can be self-hosted without giving up privacy or locking you into a service you don't control.

Rules:

  1. Be civil: we're here to support and learn from one another. Insults won't be tolerated. Flame wars are frowned upon.

  2. No spam posting.

  3. Posts have to be centered around self-hosting. There are other communities for discussing hardware or home computing. If it's not obvious why your post topic revolves around selfhosting, please include details to make it clear.

  4. Don't duplicate the full text of your blog or github here. Just post the link for folks to click.

  5. Submission headline should match the article title (don’t cherry-pick information from the title to fit your agenda).

  6. No trolling.

Resources:

Any issues on the community? Report it using the report flag.

Questions? DM the mods!

founded 1 year ago
MODERATORS