This commit is contained in:
msnie
2025-02-03 09:26:56 +01:00
parent dee44b47b8
commit 6b63d499e0
10 changed files with 29 additions and 1034 deletions
-17
View File
@@ -1,17 +0,0 @@
DOMAIN_NAME=knast.cc
DEFAULT_NETWORK=traefik
MYSQL_ROOT_PASSWORD=55pswex5gwg5ZhD97AvzTLNdWMBNbAcvwQqDdVtX
database__connection__password=L5qRYuUY6k5oBDZGXXw27Z4ZjMdPF4nvEU4Yqc2S
MYSQL_PASSWORD=565sCDJPkARAfsvfGvJ6THgG7KtJFMoV3rXeJhb7
LOCAL_DOMAIN=knast.cc
WEB_DOMAIN=kvist.knast.cc #This is optional and only needed if your instance is hosted on a subdomain, but you want the instance to be known by its domain.
SINGLE_USER_MODE=true #Optional, only needed if you're hosting for just yourself
# Sending mail
# ------------
SMTP_SERVER=<smtp host>
SMTP_PORT=587
SMTP_LOGIN=<username>
SMTP_PASSWORD=<password>
SMTP_FROM_ADDRESS=<address the mastodon instance will email from>
+7 -15
View File
@@ -23,23 +23,15 @@ NO_CHOWN=false
# ------- # -------
# Generate each with the `RAILS_ENV=production bundle exec rake secret` task (`docker-compose run --rm web bundle exec rake secret` if you use docker compose) # Generate each with the `RAILS_ENV=production bundle exec rake secret` task (`docker-compose run --rm web bundle exec rake secret` if you use docker compose)
# ------- # -------
# SECRET_KEY_BASE=29e52e5bd23fdeab4676ef27eafcac36b3db9a5842ec9e50910f78c350ac4c1d3d722003ab473936d67d68bc6c5702174effda71d94e27cdaea049d4c6958eb8
# OTP_SECRET=48cb26b4254c56457e9279b877a11d9e43f9e8e4b63875f80390bfe132597bb61ea405c040a4ff1b16736290c40a9efc166986eb2502c00f77527c6ff22f5b9f
# VAPID_PRIVATE_KEY=4da48ca5d54eb6222db3971d446dc9ad5d372ae6555c85b5221ceb56a88248f10977a1c00809a101d1bfcd6cb34aedaeee6fb471deb78912327c143f108f38d2 SECRET_KEY_BASE=2b1832e2492203dd4534236872515b71caac98629928b0b646fa236f92e110f5c0a13d7207f31776020efba52216fd0ddb4518805c6a7f873b0ec3f250908746
# VAPID_PUBLIC_KEY=24923f2e2296745137e79deb1bdaecf221406278ae7ebebd1c5d583cacb2455a5713c726dbdd107ef4b4c0ab52040b0d9c08af69cc5f75391b0cac49ea313b40 OTP_SECRET=e0975d841556dfa423d5162ebbfb4e12ff1b71eeec1b4b0f10d76d1b54f8f6c0659e1c841a485b1cde4a30097f32e1fb986ee32567ff0c92209071f74485f783
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=F8ZjNXamWbRC5hXkwUky9IXvnh08VVTY
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=ovgxY1PCrdvCZXdzXqOeKGaRJ65dSpE2
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=c2WCCEL2IgsPGBBUPNYCNqfchw5pZ1ne
VAPID_PRIVATE_KEY=RkBT4DNg9QJSANFKSpk9n93octTaWoqyIBLVixM70TE=
VAPID_PUBLIC_KEY=BHNebg8cPcoOycXApYtd0SBWoWaX2EXQ3DHDvFtvdRt93wZiyDxqapK5oVmpidzOFV4dLoH5Aoc7xI36xh-IR_0=
# ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=48cb26b4254c56457e9279b877a11d9e43f9e8e4b63875f80390bfe132597bb61ea405c040a4ff1b16736290c40a9efc166986eb2502c00f77527c6ff22f5b9f
# ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=4da48ca5d54eb6222db3971d446dc9ad5d372ae6555c85b5221ceb56a88248f10977a1c00809a101d1bfcd6cb34aedaeee6fb471deb78912327c143f108f38d2
# ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=24923f2e2296745137e79deb1bdaecf221406278ae7ebebd1c5d583cacb2455a5713c726dbdd107ef4b4c0ab52040b0d9c08af69cc5f75391b0cac49ea313b40
SECRET_KEY_BASE=7a9460bb531961c4b3eb4ef00942bab7f9af218d3867f47e5da51b6c707da4781b08db278f79c7383b0a6bf20317877bb72f5516b1347ed4d8b9feba8f16b83d
OTP_SECRET=abc17afe26fb72323073413b142d82e30c40643b09b202552e9ee0422708b9dbf7300ba561b06eab31b56ed2c6508229338fb914268e45027dffb3d0ab83142e
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=yl9EZMMokBmQdwqbbDIp7vttEOpBirks
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=aLBt84pULNQr1C1B2RJXWgj415PADNaQ
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=u7DB6BEIoOAkrAtM11HQyqpxJatwwOdv
VAPID_PRIVATE_KEY=tIB5Jt9LyvopqE9tOxOXi-3tFo07dsZw-uSyIjXTU_w=
VAPID_PUBLIC_KEY=BItV58p_YU4fbBAEdKrA5jX_mw2a9kWt2rnJ6p6my9Mu4Js2bfFu5a0YNTUtsUW6cgxCA4JKrFTtZP0wTeinaGQ=
# Registrations # Registrations
# ------------- # -------------
+22
View File
@@ -0,0 +1,22 @@
# Took me a weekend
First run:
```sh
docker compose run web bundle exec rake mastodon:setup
```
This will guide you through the setup.
Remember that without SMTP mailing setup, you can't create new users, so only an admin user will work.
Copy the values created in the setup guide to the `.env.production.yml` file.
commit the changes, push to repo, start the container
```sh
docker compose up --build
```
This should just spin up the container.
-15
View File
@@ -1,15 +0,0 @@
# PostgreSQL
# There might be some fancy way to de-dupe this, i just sent it.
# ----------
DB_HOST=db
DB_USER=postgres
DB_NAME=postgres
DB_PASS=FsQH5cTo7DzuaJB6kggksZHWj6DgvySBBmnMrvQP
DB_PORT=5432
# Needed so that the pgsql container creates the expected roles and dbs for you
POSTGRES_DB=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=FsQH5cTo7DzuaJB6kggksZHWj6DgvySBBmnMrvQP
REDIS_URL=redis://redis:6379
-106
View File
@@ -1,106 +0,0 @@
# version: '3.7'
# services:
# db:
# restart: always
# image: postgres:14-alpine
# shm_size: 256mb
# networks:
# - internal_network
# healthcheck:
# test: ['CMD', 'pg_isready', '-U', 'postgres']
# volumes:
# - ./postgres14:/var/lib/postgresql/data
# environment:
# - 'POSTGRES_HOST_AUTH_METHOD=trust'
# redis:
# restart: always
# image: redis:7-alpine
# networks:
# - internal_network
# healthcheck:
# test: ['CMD', 'redis-cli', 'ping']
# volumes:
# - ./redis:/data
# web:
# image: ghcr.io/glitch-soc/mastodon
# restart: always
# env_file: .env.production
# command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
# networks:
# - traefik
# - internal_network
# healthcheck:
# # prettier-ignore
# test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']
# depends_on:
# - db
# - redis
# # - es
# volumes:
# - ./public/system:/mastodon/public/system
# labels:
# - "traefik.enable=true"
# # Main Web Router
# - "traefik.http.routers.mstdn-web-rtr.entrypoints=websecure"
# - "traefik.http.routers.mstdn-web-rtr.rule=Host(`kvist.knast.cc`)"
# - "traefik.http.routers.mstdn-web-rtr.tls=true"
# - "traefik.http.routers.mstdn-web-rtr.tls.certResolver=letsencr"
# # Media Router
# - "traefik.http.routers.mstdn-media-rtr.entrypoints=websecure"
# - "traefik.http.routers.mstdn-media-rtr.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/system/media_attachments/`))"
# - "traefik.http.routers.mstdn-media-rtr.tls=true"
# - "traefik.http.routers.mstdn-media-rtr.tls.certResolver=letsencr"
# - "traefik.http.routers.mstdn-media-rtr.middlewares=mstdn-cors-media"
# # CORS Middleware
# - "traefik.http.middlewares.mstdn-cors-media.headers.contentSecurityPolicy=img-src *; media-src *;"
# - "traefik.http.middlewares.mstdn-cors-media.headers.accesscontrolallowheaders=*"
# - "traefik.http.middlewares.mstdn-cors-media.headers.accessControlAllowOriginList=*"
# # Service
# - "traefik.http.services.mstdn-web-svc.loadbalancer.server.port=3000"
# streaming:
# image: ghcr.io/glitch-soc/mastodon
# restart: always
# env_file: .env.production
# command: node ./streaming
# networks:
# - traefik
# - internal_network
# healthcheck:
# # prettier-ignore
# test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']
# depends_on:
# - db
# - redis
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.mstdn-streamer-rtr.entrypoints=websecure"
# - "traefik.http.routers.mstdn-streamer-rtr.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/api/v1/streaming`))"
# - "traefik.http.routers.mstdn-streamer-rtr.tls=true"
# - "traefik.http.routers.mstdn-streamer-rtr.tls.certResolver=letsencr"
# - "traefik.http.services.mstdn-streamer-svc.loadbalancer.server.port=4000"
# sidekiq:
# image: ghcr.io/glitch-soc/mastodon
# restart: always
# env_file: .env.production
# command: bundle exec sidekiq
# depends_on:
# - db
# - redis
# networks:
# - traefik
# - internal_network
# volumes:
# - ./public/system:/mastodon/public/system
# healthcheck:
# test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
# networks:
# traefik:
# name: traefik
# external: true
# internal_network:
# internal: true
-91
View File
@@ -1,91 +0,0 @@
version: '3'
services:
db:
restart: unless-stopped
image: postgres:14-alpine
shm_size: 256mb
networks:
- default
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'postgres']
volumes:
- /srv/mastodon/postgres14:/var/lib/postgresql/data
environment:
- 'POSTGRES_HOST_AUTH_METHOD=trust'
redis:
restart: unless-stopped
image: redis:7-alpine
networks:
- default
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
volumes:
- /srv/mastodon/redis:/data
web:
image: tootsuite/mastodon
restart: unless-stopped
env_file: .env.production
command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
networks:
- traefik
- default
healthcheck:
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']
depends_on:
- db
- redis
volumes:
- /srv/mastodon/public/system:/mastodon/public/system
labels:
- "traefik.enable=true"
- "traefik.http.routers.mastodon.entrypoints=https"
- "traefik.http.routers.mastodon.rule=(Host(`kvist.knast.cc`))"
- "traefik.http.routers.mastodon.tls=true"
- "traefik.http.routers.mastodon.tls.certresolver=http"
- "traefik.http.routers.mastodon.service=mastodon"
- "traefik.http.services.mastodon.loadbalancer.server.port=3000"
- "traefik.docker.network=traefik"
streaming:
image: tootsuite/mastodon
restart: unless-stopped
env_file: .env.production
command: node ./streaming/index.js
networks:
- default
- traefik
healthcheck:
test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']
depends_on:
- db
- redis
labels:
- "traefik.enable=true"
- "traefik.http.routers.mastodon-api.entrypoints=https"
- "traefik.http.routers.mastodon-api.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/api/v1/streaming`))"
- "traefik.http.routers.mastodon-api.tls=true"
- "traefik.http.routers.mastodon-api.tls.certresolver=http"
- "traefik.http.routers.mastodon-api.service=mastodon-api"
- "traefik.http.services.mastodon-api.loadbalancer.server.port=4000"
- "traefik.docker.network=traefik"
sidekiq:
image: tootsuite/mastodon
restart: unless-stopped
env_file: .env.production
command: bundle exec sidekiq
depends_on:
- db
- redis
networks:
- default
volumes:
- /srv/mastodon/public/system:/mastodon/public/system
healthcheck:
test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
networks:
traefik:
external: true
-101
View File
@@ -1,101 +0,0 @@
#
# THIS IS THE FILE THAT WORKS
#
services:
db:
restart: always
image: postgres:14-alpine
shm_size: 256mb
networks:
- internal_network
healthcheck:
test: ['CMD', 'pg_isready', '-U', 'postgres']
volumes:
- /srv/mastodon/postgres14:/var/lib/postgresql/data
environment:
- 'POSTGRES_HOST_AUTH_METHOD=trust'
redis:
restart: always
image: redis:7-alpine
networks:
- internal_network
healthcheck:
test: ['CMD', 'redis-cli', 'ping']
volumes:
- /srv/mastodon/redis:/data
web:
image: ghcr.io/mastodon/mastodon:v4.3.3
restart: always
env_file: .env.production
command: bundle exec puma -C config/puma.rb
networks:
- traefik
- internal_network
healthcheck:
# prettier-ignore
test: ['CMD-SHELL',"curl -s --noproxy localhost localhost:3000/health | grep -q 'OK' || exit 1"]
# ports:
# - '127.0.0.1:3000:3000'
depends_on:
- db
- redis
# - es
volumes:
- /srv/mastodon/web:/mastodon/public/system
labels:
- traefik.enable=true
- traefik.http.routers.mastodonweb.rule=Host(`kvist.knast.cc`)
- traefik.http.routers.mastodonweb.entrypoints=websecure
- traefik.http.routers.mastodonweb.tls.certresolver=letsencr
- traefik.http.services.mastodonweb.loadbalancer.server.port=3000
streaming:
image: ghcr.io/mastodon/mastodon-streaming:v4.3.3
restart: always
env_file: .env.production
command: node ./streaming/index.js
networks:
- traefik
- internal_network
healthcheck:
# prettier-ignore
test: ['CMD-SHELL', "curl -s --noproxy localhost localhost:4000/api/v1/streaming/health | grep -q 'OK' || exit 1"]
# ports:
# - '127.0.0.1:4000:4000'
depends_on:
- db
- redis
labels:
- traefik.enable=true
- traefik.http.routers.mastodonstreaming.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/api/v1/streaming`))
- traefik.http.routers.mastodonstreaming.entrypoints=websecure
- traefik.http.routers.mastodonstreaming.tls.certresolver=letsencr
- traefik.http.services.mastodonstreaming.loadbalancer.server.port=4000
sidekiq:
image: ghcr.io/mastodon/mastodon:v4.3.3
restart: always
env_file: .env.production
command: bundle exec sidekiq
depends_on:
- db
- redis
networks:
- traefik
- internal_network
volumes:
# - ./public/system:/mastodon/public/system
- /srv/mastodon/sidekiq:/mastodon/public/system
healthcheck:
test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
networks:
traefik:
external: true
internal_network:
internal: true
-383
View File
@@ -1,383 +0,0 @@
# version: '3.7'
# services:
# mastodon:
# image: lscr.io/linuxserver/mastodon:latest
# container_name: mastodon
# networks:
# - traefik
# environment:
# - PUID=1000
# - PGID=1000
# - TZ=Etc/UTC
# - LOCAL_DOMAIN=knast.cc
# - WEB_DOMAIN=kvist.knast.cc
# #
# # - REDIS_HOST=redis
# - REDIS_URL=redis://redis:6379
# - REDIS_PORT=6379
# #
# - DB_HOST=db
# - DB_USER=mastodon
# - DB_NAME=mastodon
# - DB_PASS=mastodon
# - DB_PORT=5432
# - ES_ENABLED=false
# #
# - SECRET_KEY_BASE=e0363e8219496e6c2ddf36b9305e48bc622873b8b97cff9af48c3be3134a479ef635647a86b0a550887b5fe06008081b7d491f6c0a447d3aeb297f513b6cb751
# - OTP_SECRET=029b6d01d97c2bc4209d5cdc8b3aa59a47f298e8beaeca94b4e0feedf586deb55621ed055aa5e0a6186a7e3d2ad2655203b87281bd9543290f1c1385e2a4b4c7
# #
# - ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=48cb26b4254c56457e9279b877a11d9e43f9e8e4b63875f80390bfe132597bb61ea405c040a4ff1b16736290c40a9efc166986eb2502c00f77527c6ff22f5b9f
# - ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=4da48ca5d54eb6222db3971d446dc9ad5d372ae6555c85b5221ceb56a88248f10977a1c00809a101d1bfcd6cb34aedaeee6fb471deb78912327c143f108f38d2
# - ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=24923f2e2296745137e79deb1bdaecf221406278ae7ebebd1c5d583cacb2455a5713c726dbdd107ef4b4c0ab52040b0d9c08af69cc5f75391b0cac49ea313b40
# #
# - VAPID_PRIVATE_KEY=4da48ca5d54eb6222db3971d446dc9ad5d372ae6555c85b5221ceb56a88248f10977a1c00809a101d1bfcd6cb34aedaeee6fb471deb78912327c143f108f38d2
# - VAPID_PUBLIC_KEY=24923f2e2296745137e79deb1bdaecf221406278ae7ebebd1c5d583cacb2455a5713c726dbdd107ef4b4c0ab52040b0d9c08af69cc5f75391b0cac49ea313b40
# #
# - SMTP_SERVER=mail.example.com
# - SMTP_PORT=25
# - SMTP_LOGIN=
# - SMTP_PASSWORD=
# - SMTP_FROM_ADDRESS=mastodon@kvist.knast.cc
# #
# - S3_ENABLED=false
# # - ES_HOST=es #optional
# # - ES_PORT=9200 #optional
# # - ES_USER=elastic #optional
# # - ES_PASS=elastic #optional
# # - S3_BUCKET= #optional
# # - AWS_ACCESS_KEY_ID= #optional
# # - AWS_SECRET_ACCESS_KEY= #optional
# # - S3_ALIAS_HOST= #optional
# # - SIDEKIQ_ONLY=false #optional
# # - SIDEKIQ_QUEUE= #optional
# # - SIDEKIQ_DEFAULT=false #optional
# # - SIDEKIQ_THREADS=5 #optional
# # - DB_POOL=5 #optional
# - NO_CHOWN=false
# volumes:
# - /srv/mastodon:/config
# # ports:
# # - 8008:80
# # - 4433:443
# restart: unless-stopped
# labels:
# - traefik.enable=true
# - traefik.http.routers.mastodon.rule=Host(`kvist.knast.cc`)
# - traefik.http.routers.mastodon.entrypoints=websecure
# - traefik.http.routers.mastodon.tls.certresolver=letsencr
# - traefik.http.services.mastodon.loadbalancer.server.port=80
# - traefik.http.services.mastodon.loadbalancer.server.port=443
# # services:
# # db:
# # restart: always
# # image: postgres:14-alpine
# # shm_size: 256mb
# # networks:
# # - internal_network
# # volumes:
# # - /srv/mastodon/postgres14:/var/lib/postgresql/data
# # # added from the default, otherwise you'll need to manually create a `mastodon` db and user/role
# # # env_file: db.env
# # env_file:
# # # - .env
# # # - db.env
# # - .env.production
# # environment:
# # - 'POSTGRES_HOST_AUTH_METHOD=trust'
# # - 'POSTGRES_USER=postgres'
# # redis:
# # restart: always
# # image: redis:7-alpine
# # networks:
# # - internal_network
# # env_file:
# # - .env.production
# # healthcheck:
# # test: ['CMD', 'redis-cli', 'ping']
# # # environment:
# # # - 'REDIS_URL=redis://redis:6379'
# # volumes:
# # - /srv/mastodon/redis:/data
# # web:
# # image: ghcr.io/mastodon/mastodon:v4.3.3
# # restart: always
# # # env_file:
# # # - .env
# # # - db.env
# # env_file:
# # # - .env
# # - .env.production
# # # - db.env
# # # ports:
# # # - 3000:3000
# # # environment:
# # # - PUID=1000
# # # - PGID=1000
# # command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
# # networks:
# # - traefik
# # - internal_network
# # healthcheck:
# # # prettier-ignore
# # test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']
# # depends_on:
# # - db
# # - redis
# # volumes:
# # - /srv/mastodon/web:/mastodon/public/system
# # labels:
# # - traefik.enable=true
# # - traefik.http.routers.mastodonweb.rule=Host(`kvist.knast.cc`)
# # - traefik.http.routers.mastodonweb.entrypoints=websecure
# # - traefik.http.routers.mastodonweb.tls.certresolver=letsencr
# # - traefik.http.services.mastodonweb.loadbalancer.server.port=3000
# # # labels:
# # # - "traefik.enable=true"
# # # # Main Web Router
# # # - "traefik.http.routers.mstdn-web-rtr.entrypoints=websecure"
# # # - "traefik.http.routers.mstdn-web-rtr.rule=Host(`kvist.knast.cc`)"
# # # - "traefik.http.routers.mstdn-web-rtr.tls=true"
# # # - "traefik.http.routers.mstdn-web-rtr.tls.certResolver=letsencr"
# # # # Media Router
# # # - "traefik.http.routers.mstdn-media-rtr.entrypoints=websecure"
# # # - "traefik.http.routers.mstdn-media-rtr.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/system/media_attachments/`))"
# # # - "traefik.http.routers.mstdn-media-rtr.tls=true"
# # # - "traefik.http.routers.mstdn-media-rtr.tls.certResolver=letsencr"
# # # - "traefik.http.routers.mstdn-media-rtr.middlewares=mstdn-cors-media"
# # # # CORS Middleware
# # # - "traefik.http.middlewares.mstdn-cors-media.headers.contentSecurityPolicy=img-src *; media-src *;"
# # # - "traefik.http.middlewares.mstdn-cors-media.headers.accesscontrolallowheaders=*"
# # # - "traefik.http.middlewares.mstdn-cors-media.headers.accessControlAllowOriginList=*"
# # # # Service
# # # - "traefik.http.services.mstdn-web-svc.loadbalancer.server.port=3344"
# # streaming:
# # image: ghcr.io/mastodon/mastodon-streaming:v4.3.3
# # restart: always
# # # env_file:
# # # - .env
# # # - db.env
# # env_file:
# # # - .env
# # - .env.production
# # # - db.env
# # command: node ./streaming
# # environment:
# # - 'REDIS_URL=redis://redis:6379'
# # # ports:
# # # - 4000:4000
# # networks:
# # - traefik
# # - internal_network
# # healthcheck:
# # # prettier-ignore
# # test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']
# # depends_on:
# # - db
# # - redis
# # labels:
# # - traefik.enable=true
# # - traefik.http.routers.mastodonstreaming.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/api/v1/streaming`))
# # - traefik.http.routers.mastodonstreaming.entrypoints=websecure
# # - traefik.http.routers.mastodonstreaming.tls.certresolver=letsencr
# # - traefik.http.services.mastodonstreaming.loadbalancer.server.port=4433
# # # labels:
# # # - "traefik.enable=true"
# # # - "traefik.http.routers.mstdn-streamer-rtr.entrypoints=websecure"
# # # - "traefik.http.routers.mstdn-streamer-rtr.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/api/v1/streaming`))"
# # # - "traefik.http.routers.mstdn-streamer-rtr.tls=true"
# # # - "traefik.http.routers.mstdn-streamer-rtr.tls.certResolver=letsencr"
# # # - "traefik.http.services.mstdn-streamer-svc.loadbalancer.server.port=4000"
# # sidekiq:
# # image: ghcr.io/mastodon/mastodon:v4.3.3
# # restart: always
# # env_file:
# # # - .env
# # - .env.production
# # # - db.env
# # command: bundle exec sidekiq
# # depends_on:
# # - db
# # - redis
# # networks:
# # - traefik
# # - internal_network
# # volumes:
# # - /srv/mastodon/sidekiq:/mastodon/public/system
# # healthcheck:
# # test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
# networks:
# traefik:
# external: true
# # internal_network:
# # internal: true
# # This file is designed for production server deployment, not local development work
# # For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/docs/DEVELOPMENT.md#docker
# # services:
# # db:
# # restart: always
# # image: postgres:14-alpine
# # shm_size: 256mb
# # networks:
# # - internal_network
# # healthcheck:
# # test: ['CMD', 'pg_isready', '-U', 'postgres']
# # volumes:
# # - ./postgres14:/var/lib/postgresql/data
# # environment:
# # - 'POSTGRES_HOST_AUTH_METHOD=trust'
# # redis:
# # restart: always
# # image: redis:7-alpine
# # networks:
# # - internal_network
# # healthcheck:
# # test: ['CMD', 'redis-cli', 'ping']
# # volumes:
# # - ./redis:/data
# # # es:
# # # restart: always
# # # image: docker.elastic.co/elasticsearch/elasticsearch:7.17.4
# # # environment:
# # # - "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true"
# # # - "xpack.license.self_generated.type=basic"
# # # - "xpack.security.enabled=false"
# # # - "xpack.watcher.enabled=false"
# # # - "xpack.graph.enabled=false"
# # # - "xpack.ml.enabled=false"
# # # - "bootstrap.memory_lock=true"
# # # - "cluster.name=es-mastodon"
# # # - "discovery.type=single-node"
# # # - "thread_pool.write.queue_size=1000"
# # # networks:
# # # - traefik
# # # - internal_network
# # # healthcheck:
# # # test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
# # # volumes:
# # # - ./elasticsearch:/usr/share/elasticsearch/data
# # # ulimits:
# # # memlock:
# # # soft: -1
# # # hard: -1
# # # nofile:
# # # soft: 65536
# # # hard: 65536
# # # ports:
# # # - '127.0.0.1:9200:9200'
# # web:
# # # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# # # build: .
# # image: ghcr.io/mastodon/mastodon:v4.3.3
# # restart: always
# # env_file:
# # - .env
# # - .env.production
# # - db.env
# # command: bundle exec puma -C config/puma.rb
# # networks:
# # - traefik
# # - internal_network
# # healthcheck:
# # # prettier-ignore
# # test: ['CMD-SHELL',"curl -s --noproxy localhost localhost:3000/health | grep -q 'OK' || exit 1"]
# # ports:
# # - '127.0.0.1:3000:3000'
# # depends_on:
# # - db
# # - redis
# # # - es
# # volumes:
# # - ./public/system:/mastodon/public/system
# # streaming:
# # # You can uncomment the following lines if you want to not use the prebuilt image, for example if you have local code changes
# # # build:
# # # dockerfile: ./streaming/Dockerfile
# # # context: .
# # image: ghcr.io/mastodon/mastodon-streaming:v4.3.3
# # restart: always
# # # env_file:
# # - .env
# # - .env.production
# # - db.env
# # command: node ./streaming/index.js
# # networks:
# # - traefik
# # - internal_network
# # healthcheck:
# # # prettier-ignore
# # test: ['CMD-SHELL', "curl -s --noproxy localhost localhost:4000/api/v1/streaming/health | grep -q 'OK' || exit 1"]
# # ports:
# # - '127.0.0.1:4000:4000'
# # depends_on:
# # - db
# # - redis
# # sidekiq:
# # # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# # # build: .
# # image: ghcr.io/mastodon/mastodon:v4.3.3
# # restart: always
# # # env_file:
# # - .env
# # - .env.production
# # - db.env
# # command: bundle exec sidekiq
# # depends_on:
# # - db
# # - redis
# # networks:
# # - traefik
# # - internal_network
# # volumes:
# # - ./public/system:/mastodon/public/system
# # healthcheck:
# # test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
# # ## Uncomment to enable federation with tor instances along with adding the following ENV variables
# # ## http_hidden_proxy=http://privoxy:8118
# # ## ALLOW_ACCESS_TO_HIDDEN_SERVICE=true
# # # tor:
# # # image: sirboops/tor
# # # networks:
# # # - traefik
# # # - internal_network
# # #
# # # privoxy:
# # # image: sirboops/privoxy
# # # volumes:
# # # - ./priv-config:/opt/config
# # # networks:
# # # - traefik
# # # - internal_network
# # networks:
# # # traefik:
# # traefik:
# # external: true
# # internal_network:
# # internal: true
# # # networks:
# # # traefik:
# # # external: true
-93
View File
@@ -1,93 +0,0 @@
version: "3"
services:
db:
restart: unless-stopped
image: postgres:14-alpine
shm_size: 256mb
networks:
- default
healthcheck:
test: ["CMD", "pg_isready", "-U", "postgres"]
volumes:
- /srv/mastodon/postgres14:/var/lib/postgresql/data
environment:
- "POSTGRES_HOST_AUTH_METHOD=trust"
redis:
restart: unless-stopped
image: redis:7-alpine
networks:
- default
healthcheck:
test: ["CMD", "redis-cli", "ping"]
volumes:
- /srv/mastodon/redis:/data
web:
image: ghcr.io/mastodon/mastodon:v4.3.3
restart: unless-stopped
env_file: .env.production
command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
networks:
- traefik
- default
healthcheck:
test:
[
"CMD-SHELL",
"wget -q --spider --proxy=off localhost:3000/health || exit 1",
]
depends_on:
- db
- redis
volumes:
- /srv/mastodon/web:/mastodon/public/system
labels:
- traefik.enable=true
- traefik.http.routers.mastodonweb.rule=Host(`kvist.knast.cc`)
- traefik.http.routers.mastodonweb.entrypoints=websecure
- traefik.http.routers.mastodonweb.tls.certresolver=letsencr
- traefik.http.services.mastodonweb.loadbalancer.server.port=3000
streaming:
image: ghcr.io/mastodon/mastodon-streaming:v4.3.3
restart: unless-stopped
env_file: .env.production
command: node ./streaming/index.js
networks:
- default
- traefik
healthcheck:
test:
[
"CMD-SHELL",
"wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1",
]
depends_on:
- db
- redis
labels:
- traefik.enable=true
- traefik.http.routers.mastodonstreaming.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/api/v1/streaming`))
- traefik.http.routers.mastodonstreaming.entrypoints=websecure
- traefik.http.routers.mastodonstreaming.tls.certresolver=letsencr
- traefik.http.services.mastodonstreaming.loadbalancer.server.port=4000
sidekiq:
image: tootsuite/mastodon
restart: unless-stopped
env_file: .env.production
command: bundle exec sidekiq
depends_on:
- db
- redis
networks:
- default
volumes:
- /srv/mastodon/sidekiq:/mastodon/public/system
healthcheck:
test: ["CMD-SHELL", "ps aux | grep '[s]idekiq\ 6' || false"]
networks:
traefik:
external: true
-213
View File
@@ -9,11 +9,8 @@ services:
volumes: volumes:
- /srv/mastodon/postgres14:/var/lib/postgresql/data - /srv/mastodon/postgres14:/var/lib/postgresql/data
# added from the default, otherwise you'll need to manually create a `mastodon` db and user/role # added from the default, otherwise you'll need to manually create a `mastodon` db and user/role
# env_file: db.env
env_file: env_file:
- .env
- ./.env.production - ./.env.production
- db.env
environment: environment:
- 'POSTGRES_HOST_AUTH_METHOD=trust' - 'POSTGRES_HOST_AUTH_METHOD=trust'
- 'POSTGRES_USER=postgres' - 'POSTGRES_USER=postgres'
@@ -27,26 +24,14 @@ services:
- ./.env.production - ./.env.production
healthcheck: healthcheck:
test: ['CMD', 'redis-cli', 'ping'] test: ['CMD', 'redis-cli', 'ping']
# environment:
# - 'REDIS_URL=redis://redis:6379'
volumes: volumes:
- /srv/mastodon/redis:/data - /srv/mastodon/redis:/data
web: web:
image: ghcr.io/mastodon/mastodon:v4.3.3 image: ghcr.io/mastodon/mastodon:v4.3.3
restart: always restart: always
# env_file:
# - .env
# - db.env
env_file: env_file:
# - .env
- ./.env.production - ./.env.production
# - db.env
# ports:
# - 3000:3000
# environment:
# - PUID=1000
# - PGID=1000
command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
networks: networks:
- traefik - traefik
@@ -66,41 +51,15 @@ services:
- "traefik.http.routers.mastodon.tls=true" - "traefik.http.routers.mastodon.tls=true"
- "traefik.http.routers.mastodon.tls.certresolver=letsencr" - "traefik.http.routers.mastodon.tls.certresolver=letsencr"
- "traefik.http.services.mastodon.loadbalancer.server.port=3000" - "traefik.http.services.mastodon.loadbalancer.server.port=3000"
# labels:
# - "traefik.enable=true"
# # Main Web Router
# - "traefik.http.routers.mstdn-web-rtr.entrypoints=websecure"
# - "traefik.http.routers.mstdn-web-rtr.rule=Host(`kvist.knast.cc`)"
# - "traefik.http.routers.mstdn-web-rtr.tls=true"
# - "traefik.http.routers.mstdn-web-rtr.tls.certResolver=letsencr"
# # Media Router
# - "traefik.http.routers.mstdn-media-rtr.entrypoints=websecure"
# - "traefik.http.routers.mstdn-media-rtr.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/system/media_attachments/`))"
# - "traefik.http.routers.mstdn-media-rtr.tls=true"
# - "traefik.http.routers.mstdn-media-rtr.tls.certResolver=letsencr"
# - "traefik.http.routers.mstdn-media-rtr.middlewares=mstdn-cors-media"
# # CORS Middleware
# - "traefik.http.middlewares.mstdn-cors-media.headers.contentSecurityPolicy=img-src *; media-src *;"
# - "traefik.http.middlewares.mstdn-cors-media.headers.accesscontrolallowheaders=*"
# - "traefik.http.middlewares.mstdn-cors-media.headers.accessControlAllowOriginList=*"
# # Service
# - "traefik.http.services.mstdn-web-svc.loadbalancer.server.port=3344"
streaming: streaming:
image: ghcr.io/mastodon/mastodon-streaming:v4.3.3 image: ghcr.io/mastodon/mastodon-streaming:v4.3.3
restart: always restart: always
# env_file:
# - .env
# - db.env
env_file: env_file:
# - .env
- ./.env.production - ./.env.production
# - db.env
command: node ./streaming/index.js command: node ./streaming/index.js
environment: environment:
- 'REDIS_URL=redis://redis:6379' - 'REDIS_URL=redis://redis:6379'
# ports:
# - 4000:4000
networks: networks:
- traefik - traefik
- internal_network - internal_network
@@ -118,24 +77,11 @@ services:
- traefik.http.routers.mastodon_streaming.tls.certresolver=letsencr - traefik.http.routers.mastodon_streaming.tls.certresolver=letsencr
- traefik.http.services.mastodon_streaming.loadbalancer.server.port=4000 - traefik.http.services.mastodon_streaming.loadbalancer.server.port=4000
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.mstdn-streamer-rtr.entrypoints=websecure"
# - "traefik.http.routers.mstdn-streamer-rtr.rule=(Host(`kvist.knast.cc`) && PathPrefix(`/api/v1/streaming`))"
# - "traefik.http.routers.mstdn-streamer-rtr.tls=true"
# - "traefik.http.routers.mstdn-streamer-rtr.tls.certResolver=letsencr"
# - "traefik.http.services.mstdn-streamer-svc.loadbalancer.server.port=4000"
sidekiq: sidekiq:
image: ghcr.io/mastodon/mastodon:v4.3.3 image: ghcr.io/mastodon/mastodon:v4.3.3
restart: always restart: always
env_file: env_file:
# - .env
- ./.env.production - ./.env.production
# - db.env
command: bundle exec sidekiq command: bundle exec sidekiq
depends_on: depends_on:
- db - db
@@ -155,162 +101,3 @@ networks:
internal_network: internal_network:
internal: true internal: true
# This file is designed for production server deployment, not local development work
# For a containerized local dev environment, see: https://github.com/mastodon/mastodon/blob/main/docs/DEVELOPMENT.md#docker
# services:
# db:
# restart: always
# image: postgres:14-alpine
# shm_size: 256mb
# networks:
# - internal_network
# healthcheck:
# test: ['CMD', 'pg_isready', '-U', 'postgres']
# volumes:
# - ./postgres14:/var/lib/postgresql/data
# environment:
# - 'POSTGRES_HOST_AUTH_METHOD=trust'
# redis:
# restart: always
# image: redis:7-alpine
# networks:
# - internal_network
# healthcheck:
# test: ['CMD', 'redis-cli', 'ping']
# volumes:
# - ./redis:/data
# # es:
# # restart: always
# # image: docker.elastic.co/elasticsearch/elasticsearch:7.17.4
# # environment:
# # - "ES_JAVA_OPTS=-Xms512m -Xmx512m -Des.enforce.bootstrap.checks=true"
# # - "xpack.license.self_generated.type=basic"
# # - "xpack.security.enabled=false"
# # - "xpack.watcher.enabled=false"
# # - "xpack.graph.enabled=false"
# # - "xpack.ml.enabled=false"
# # - "bootstrap.memory_lock=true"
# # - "cluster.name=es-mastodon"
# # - "discovery.type=single-node"
# # - "thread_pool.write.queue_size=1000"
# # networks:
# # - traefik
# # - internal_network
# # healthcheck:
# # test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
# # volumes:
# # - ./elasticsearch:/usr/share/elasticsearch/data
# # ulimits:
# # memlock:
# # soft: -1
# # hard: -1
# # nofile:
# # soft: 65536
# # hard: 65536
# # ports:
# # - '127.0.0.1:9200:9200'
# web:
# # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# # build: .
# image: ghcr.io/mastodon/mastodon:v4.3.3
# restart: always
# env_file:
# - .env
# - ./.env.production
# - db.env
# command: bundle exec puma -C config/puma.rb
# networks:
# - traefik
# - internal_network
# healthcheck:
# # prettier-ignore
# test: ['CMD-SHELL',"curl -s --noproxy localhost localhost:3000/health | grep -q 'OK' || exit 1"]
# ports:
# - '127.0.0.1:3000:3000'
# depends_on:
# - db
# - redis
# # - es
# volumes:
# - ./public/system:/mastodon/public/system
# streaming:
# # You can uncomment the following lines if you want to not use the prebuilt image, for example if you have local code changes
# # build:
# # dockerfile: ./streaming/Dockerfile
# # context: .
# image: ghcr.io/mastodon/mastodon-streaming:v4.3.3
# restart: always
# # env_file:
# - .env
# - ./.env.production
# - db.env
# command: node ./streaming/index.js
# networks:
# - traefik
# - internal_network
# healthcheck:
# # prettier-ignore
# test: ['CMD-SHELL', "curl -s --noproxy localhost localhost:4000/api/v1/streaming/health | grep -q 'OK' || exit 1"]
# ports:
# - '127.0.0.1:4000:4000'
# depends_on:
# - db
# - redis
# sidekiq:
# # You can uncomment the following line if you want to not use the prebuilt image, for example if you have local code changes
# # build: .
# image: ghcr.io/mastodon/mastodon:v4.3.3
# restart: always
# # env_file:
# - .env
# - ./.env.production
# - db.env
# command: bundle exec sidekiq
# depends_on:
# - db
# - redis
# networks:
# - traefik
# - internal_network
# volumes:
# - ./public/system:/mastodon/public/system
# healthcheck:
# test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
# ## Uncomment to enable federation with tor instances along with adding the following ENV variables
# ## http_hidden_proxy=http://privoxy:8118
# ## ALLOW_ACCESS_TO_HIDDEN_SERVICE=true
# # tor:
# # image: sirboops/tor
# # networks:
# # - traefik
# # - internal_network
# #
# # privoxy:
# # image: sirboops/privoxy
# # volumes:
# # - ./priv-config:/opt/config
# # networks:
# # - traefik
# # - internal_network
# networks:
# # traefik:
# traefik:
# external: true
# internal_network:
# internal: true
# # networks:
# # traefik:
# # external: true