fuck Lemmy

This commit is contained in:
2026-02-11 20:57:50 -07:00
parent 4f5a75d936
commit 6934a7319d
6 changed files with 216 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
# Lemmy
This is like my 3rd attempt to make Lemmy do anything, but it is fundamentally
unable to run alongside other apps for no reason? I don't know.
Modified from official instructions and resources at
https://join-lemmy.org/docs/administration/install_docker.html
1. Copy all files (ReadMe.md unnecessary) to the target location.
2. Make changes in docker-compose.yml
3. Make changes in config.hjson
4. `mkdir -p volumes/pictrs volumes/lemmy-ui/extra_themes volumes/postgres`
5. `sudo chown 991:991 volumes/pictrs`
+23
View File
@@ -0,0 +1,23 @@
# TODO: Replace YOUR_POSTGRES_PASSWORD and YOUR_DOMAIN
{
# for more info about the config, check out the documentation
# https://join-lemmy.org/docs/en/administration/configuration.html
database: {
host: postgres
password: "YOUR_POSTGRES_PASSWORD"
# Alternative way:
#uri: "postgresql://lemmy:YOUR_POSTGRES_PASSWORD@postgres/lemmy"
}
hostname: "YOUR_DOMAIN"
pictrs: {
url: "http://pictrs:8080/"
api_key: "YOUR_POSTGRES_PASSWORD"
}
email: {
smtp_server: "postfix:25"
smtp_from_address: "noreply@YOUR_DOMAIN"
tls_type: "none"
}
}
+91
View File
@@ -0,0 +1,91 @@
# TODO change ALL_CAPS environment variables in all locations
# YOUR_DOMAIN and YOUR_POSTGRES_PASSWORD
x-logging: &default-logging
driver: "json-file"
options:
max-size: "50m"
max-file: "4"
services:
#proxy:
#image: nginx:1-alpine
# ports:
# Listen for outside connections on port 10633. You can freely change the left-side
# number to a different port, eg using port 80 if you don't need a reverse proxy.
# - "10633:8536"
#volumes:
#- ./nginx_internal.conf:/etc/nginx/nginx.conf:ro,Z
#- ./proxy_params:/etc/nginx/proxy_params:ro,Z
#restart: always
#logging: *default-logging
#depends_on:
#- pictrs
#- lemmy-ui
lemmy:
image: dessalines/lemmy:0.19.15
hostname: lemmy
restart: always
logging: *default-logging
environment:
- RUST_LOG="warn"
volumes:
- ./config.hjson:/config/config.hjson:Z
depends_on:
- postgres
- pictrs
lemmy-ui:
image: dessalines/lemmy-ui:0.19.15
environment:
- LEMMY_UI_LEMMY_INTERNAL_HOST=lemmy:8536
- LEMMY_UI_LEMMY_EXTERNAL_HOST=YOUR_DOMAIN
- LEMMY_UI_HTTPS=true
volumes:
- ./volumes/lemmy-ui/extra_themes:/app/extra_themes
depends_on:
- lemmy
restart: always
logging: *default-logging
pictrs:
image: asonix/pictrs:0.5.21
# this needs to match the pictrs url in lemmy.hjson
hostname: pictrs
# we can set options to pictrs like this, here we set max. image size and forced format for conversion
# entrypoint: /sbin/tini -- /usr/local/bin/pict-rs -p /mnt -m 4 --image-format webp
environment:
- PICTRS_OPENTELEMETRY_URL=http://otel:4137
- PICTRS__SERVER__API_KEY=YOUR_POSTGRES_PASSWORD
- RUST_BACKTRACE=full
- PICTRS__MEDIA__VIDEO__VIDEO_CODEC=vp9
- PICTRS__MEDIA__ANIMATION__MAX_WIDTH=256
- PICTRS__MEDIA__ANIMATION__MAX_HEIGHT=256
- PICTRS__MEDIA__ANIMATION__MAX_FRAME_COUNT=400
user: 991:991
volumes:
- ./volumes/pictrs:/mnt:Z
restart: always
logging: *default-logging
postgres:
image: pgautoupgrade/pgautoupgrade:18-alpine
hostname: postgres
environment:
- POSTGRES_USER=lemmy
- POSTGRES_PASSWORD=YOUR_POSTGRES_PASSWORD
- POSTGRES_DB=lemmy
shm_size: 1g
volumes:
- ./volumes/postgres:/var/lib/postgresql:Z
# - ./customPostgresql.conf:/etc/postgresql.conf
restart: always
logging: *default-logging
postfix:
image: mwader/postfix-relay
environment:
- POSTFIX_myhostname=YOUR_DOMAIN
restart: "always"
logging: *default-logging
+85
View File
@@ -0,0 +1,85 @@
worker_processes auto;
events {
worker_connections 1024;
}
http {
# Docker internal DNS IP so we always get the newer containers without having to
# restart/reload the docker container / nginx configuration
resolver 127.0.0.11 valid=5s;
# set the real_ip when from docker internal ranges. Ensuring our internal nginx
# container can always see the correct ips in the logs
set_real_ip_from 10.0.0.0/8;
set_real_ip_from 172.16.0.0/12;
set_real_ip_from 192.168.0.0/16;
# We construct a string consistent of the "request method" and "http accept header"
# and then apply soem ~simply regexp matches to that combination to decide on the
# HTTP upstream we should proxy the request to.
#
# Example strings:
#
# "GET:application/activity+json"
# "GET:text/html"
# "POST:application/activity+json"
#
# You can see some basic match tests in this regex101 matching this configuration
# https://regex101.com/r/vwMJNc/1
#
# Learn more about nginx maps here http://nginx.org/en/docs/http/ngx_http_map_module.html
map "$request_method:$http_accept" $proxpass {
# If no explicit matches exists below, send traffic to lemmy-ui
default "http://lemmy-ui:1234";
# GET/HEAD requests that accepts ActivityPub or Linked Data JSON should go to lemmy.
#
# These requests are used by Mastodon and other fediverse instances to look up profile information,
# discover site information and so on.
"~^(?:GET|HEAD):.*?application\/(?:activity|ld)\+json" "http://lemmy:8536";
# All non-GET/HEAD requests should go to lemmy
#
# Rather than calling out POST, PUT, DELETE, PATCH, CONNECT and all the verbs manually
# we simply negate the GET|HEAD pattern from above and accept all possibly $http_accept values
"~^(?!(GET|HEAD)).*:" "http://lemmy:8536";
}
server {
set $lemmy_ui "lemmy-ui:1234";
set $lemmy "lemmy:8536";
# this is the port inside docker, not the public one yet
listen 1236;
listen 8536;
# change if needed, this is facing the public web
server_name localhost;
server_tokens off;
# Upload limit, relevant for pictrs
client_max_body_size 20M;
# Send actual client IP upstream
include proxy_params;
# frontend general requests
location / {
proxy_pass $proxpass;
rewrite ^(.+)/+$ $1 permanent;
}
# security.txt
location = /.well-known/security.txt {
proxy_pass "http://$lemmy_ui";
}
# backend
location ~ ^/(api|pictrs|feeds|nodeinfo|.well-known|version|sitemap.xml) {
proxy_pass "http://$lemmy";
# Send actual client IP upstream
include proxy_params;
}
}
}
+4
View File
@@ -0,0 +1,4 @@
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;