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

Selfhosted

40165 readers
1107 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
 

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

all 1 comments
sorted by: hot top controversial new old