Last active 1736107024

README.md Raw

Lemmy Instance in Docker

This is how SudoVanilla's Lemmy server is setup.

Create a folder for your Lemmy instance and change over to it in your terminal:

mkdir lemmy
cd lemmy

Add the files below in this Gist to the folder.

Then create the pictrs volume and set it's permissiosn:

mkdir volumes/pictrs
chown -R 991:991 volumes/pictrs

Then start your Lemmy instance, using the compose command:

docker compose up

Please wait at least 2 - 5 minutes, going to your instance's URL may show an error message if you look too soon. This is because the database is still starting up, this is the case for when you startup the instance again in the future too.

Once the instance is done booting and the database is finished starting up, go to your instance and login to your admin user to confirm setup is complete. The URL with this setup is at http://localhost:3080.

docker-compose.yml Raw
1services:
2 nginx_lemmy:
3 image: nginx:mainline-alpine
4 restart: always
5 ports:
6 - 3080:80
7 depends_on:
8 - lemmy
9 volumes:
10 - ./nginx.conf:/etc/nginx/nginx.conf:ro
11
12 lemmy:
13 image: dessalines/lemmy:0.19.8
14 restart: always
15 environment:
16 - RUST_LOG="warn,lemmy_server=info,lemmy_api=info,lemmy_api_common=info,lemmy_api_crud=info,lemmy_apub=info,lemmy_db_queries=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"
17 volumes:
18 - ./lemmy.hjson:/config/config.hjson
19 depends_on:
20 - postgres
21 - pictrs
22
23 lemmy-ui:
24 image: dessalines/lemmy-ui:0.19.8
25 restart: always
26 environment:
27 - LEMMY_UI_LEMMY_INTERNAL_HOST=lemmy:8536
28 - LEMMY_UI_LEMMY_EXTERNAL_HOST=lemmy
29 - LEMMY_UI_HTTPS=true
30 volumes:
31 - ./volumes/lemmy-ui/extra_themes:/app/extra_themes
32 depends_on:
33 - lemmy
34
35 postgres:
36 image: postgres:15-alpine
37 environment:
38 - POSTGRES_USER=lemmy
39 - POSTGRES_PASSWORD=PASSWORD_HERE
40 - POSTGRES_DB=lemmy
41 volumes:
42 - ./volumes/postgres:/var/lib/postgresql/data
43 restart: always
44
45 pictrs:
46 image: asonix/pictrs:latest
47 user: 991:991
48 volumes:
49 - ./volumes/pictrs:/mnt
50 restart: always
51 mem_limit: 200m
lemmy.hjson Raw
1{
2 setup: {
3 admin_username: "Admin_Username"
4 admin_password: "SUPER_SECURE_PASSWORD_HERE"
5 site_name: "A selfhosted place"
6 }
7
8 hostname: "lemmy.example.org"
9 bind: "0.0.0.0"
10 port: 8536
11 tls_enabled: true
12
13 pictrs: {
14 url: "http://pictrs:8080/"
15 api_key: "API_KEY_HERE"
16 }
17
18 database: {
19 host: postgres
20 port: 5432
21 pool_size: 5
22 uri: "postgresql://lemmy:PASSWORD_HERE@postgres/lemmy"
23 }
24
25 email: {
26 smtp_server: "smtp.resend.com:587"
27 smtp_login: "resend"
28 smtp_password: "PASSWORD_HERE"
29 smtp_from_address: "no-reply@example.org"
30 tls_type: "starttls"
31 }
32}
nginx.conf Raw
1worker_processes 1;
2events {
3 worker_connections 1024;
4}
5http {
6 upstream lemmy {
7 server "lemmy:8536";
8 }
9 upstream lemmy-ui {
10 server "lemmy-ui:1234";
11 }
12
13 server {
14 listen 80;
15 server_name localhost;
16 server_tokens off;
17
18 gzip on;
19 gzip_types text/css application/javascript image/svg+xml;
20 gzip_vary on;
21
22 client_max_body_size 20M;
23
24 add_header X-Frame-Options SAMEORIGIN;
25 add_header X-Content-Type-Options nosniff;
26 add_header X-XSS-Protection "1; mode=block";
27
28 location / {
29 set $proxpass "http://lemmy-ui";
30
31 if ($http_accept = "application/activity+json") {
32 set $proxpass "http://lemmy";
33 }
34 if ($http_accept = "application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"") {
35 set $proxpass "http://lemmy";
36 }
37 if ($request_method = POST) {
38 set $proxpass "http://lemmy";
39 }
40 proxy_pass $proxpass;
41
42 rewrite ^(.+)/+$ $1 permanent;
43 proxy_set_header X-Real-IP $remote_addr;
44 proxy_set_header Host $host;
45 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
46 }
47
48 location ~ ^/(api|pictrs|feeds|nodeinfo|.well-known) {
49 proxy_pass "http://lemmy";
50 proxy_http_version 1.1;
51 proxy_set_header Upgrade $http_upgrade;
52 proxy_set_header Connection "upgrade";
53
54 proxy_set_header X-Real-IP $remote_addr;
55 proxy_set_header Host $host;
56 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
57 }
58 }
59}