From 4fd9df6ff28c5ae1ff5d72f4c335dd023c51f406 Mon Sep 17 00:00:00 2001 From: msnie Date: Sun, 2 Feb 2025 18:12:46 +0100 Subject: [PATCH] mastodon --- mastodon/docker-compose copy.yml | 202 +++---- mastodon/docker-compose.ae3.yml | 172 +++--- mastodon/docker-compose.latest.yml | 65 +-- mastodon/docker-compose.linuxserver.yml | 732 ++++++++++++------------ mastodon/docker-compose.traefik.yml | 188 +++--- mastodon/docker-compose.yml | 502 ++++++++-------- 6 files changed, 902 insertions(+), 959 deletions(-) diff --git a/mastodon/docker-compose copy.yml b/mastodon/docker-compose copy.yml index 3208883..1b52759 100644 --- a/mastodon/docker-compose copy.yml +++ b/mastodon/docker-compose copy.yml @@ -1,106 +1,106 @@ -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' +# 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 +# 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" +# 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" +# 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"] +# 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 +# networks: +# traefik: +# name: traefik +# external: true +# internal_network: +# internal: true diff --git a/mastodon/docker-compose.ae3.yml b/mastodon/docker-compose.ae3.yml index fa31a9c..252a9c4 100644 --- a/mastodon/docker-compose.ae3.yml +++ b/mastodon/docker-compose.ae3.yml @@ -1,91 +1,91 @@ -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' +# 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 +# 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" +# 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" +# 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"] +# 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 \ No newline at end of file +# networks: +# traefik: +# external: true \ No newline at end of file diff --git a/mastodon/docker-compose.latest.yml b/mastodon/docker-compose.latest.yml index 3c99ea8..7b3ed01 100644 --- a/mastodon/docker-compose.latest.yml +++ b/mastodon/docker-compose.latest.yml @@ -1,5 +1,7 @@ -# 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 +# +# THIS IS THE FILE THAT WORKS +# + services: db: @@ -11,7 +13,6 @@ services: healthcheck: test: ['CMD', 'pg_isready', '-U', 'postgres'] volumes: - # - ./postgres14:/var/lib/postgresql/data - /srv/mastodon/postgres14:/var/lib/postgresql/data environment: - 'POSTGRES_HOST_AUTH_METHOD=trust' @@ -24,43 +25,10 @@ services: healthcheck: test: ['CMD', 'redis-cli', 'ping'] volumes: - # - ./redis:/data - /srv/mastodon/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.production @@ -78,8 +46,6 @@ services: - redis # - es volumes: - # - ./public/system:/mastodon/public/system - # /mastodon/public/system - /srv/mastodon/web:/mastodon/public/system labels: - traefik.enable=true @@ -89,10 +55,6 @@ services: - traefik.http.services.mastodonweb.loadbalancer.server.port=3000 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.production @@ -116,8 +78,6 @@ services: - traefik.http.services.mastodonstreaming.loadbalancer.server.port=4000 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.production @@ -134,23 +94,6 @@ services: 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: external: true diff --git a/mastodon/docker-compose.linuxserver.yml b/mastodon/docker-compose.linuxserver.yml index 054e6ae..40e9db0 100644 --- a/mastodon/docker-compose.linuxserver.yml +++ b/mastodon/docker-compose.linuxserver.yml @@ -1,383 +1,383 @@ -version: '3.7' -services: - mastodon: - image: lscr.io/linuxserver/mastodon:latest - container_name: mastodon - networks: - - traefik +# 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 +# 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 +# # - 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/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 +# - /srv/mastodon:/config # # 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 +# # - 8008:80 +# # - 4433:443 +# restart: unless-stopped # 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" +# - 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 -# 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"] +# # 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" -networks: - traefik: - external: true - # internal_network: - # internal: true +# # 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"] - - - - # 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 +# # 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: -# # external: true +# # # traefik: +# # traefik: +# # external: true +# # internal_network: +# # internal: true + +# # # networks: +# # # traefik: +# # # external: true diff --git a/mastodon/docker-compose.traefik.yml b/mastodon/docker-compose.traefik.yml index 1a3ed69..9f4483f 100644 --- a/mastodon/docker-compose.traefik.yml +++ b/mastodon/docker-compose.traefik.yml @@ -1,99 +1,99 @@ -version: "3" -services: - db: - restart: unless-stopped - image: postgres:14-alpine - shm_size: 256mb - networks: - - default - healthcheck: - test: ["CMD", "pg_isready", "-U", "postgres"] - volumes: - - ./postgres14:/var/lib/postgresql/data - environment: - - "POSTGRES_HOST_AUTH_METHOD=trust" +# version: "3" +# services: +# db: +# restart: unless-stopped +# image: postgres:14-alpine +# shm_size: 256mb +# networks: +# - default +# healthcheck: +# test: ["CMD", "pg_isready", "-U", "postgres"] +# volumes: +# - ./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 +# 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.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=proxy" +# 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.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=proxy" - 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.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=proxy" +# 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.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=proxy" - 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"] +# 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 +# networks: +# traefik: +# external: true diff --git a/mastodon/docker-compose.yml b/mastodon/docker-compose.yml index 43c7ac1..11fa520 100644 --- a/mastodon/docker-compose.yml +++ b/mastodon/docker-compose.yml @@ -1,162 +1,4 @@ -version: '3.7' -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 - - .env.production - - db.env - 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 - 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 - +# version: '3.7' # services: # db: # restart: always @@ -164,109 +6,128 @@ networks: # shm_size: 256mb # networks: # - internal_network -# healthcheck: -# test: ['CMD', 'pg_isready', '-U', 'postgres'] # volumes: -# - ./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 +# # env_file: db.env +# env_file: +# - .env +# - .env.production +# - db.env # 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: -# - ./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' +# - /srv/mastodon/redis:/data # 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_file: +# # - .env +# # - db.env +# env_file: # - .env # - .env.production # - db.env -# command: node ./streaming/index.js +# # 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', "curl -s --noproxy localhost localhost:4000/api/v1/streaming/health | grep -q 'OK' || exit 1"] -# ports: -# - '127.0.0.1:4000:4000' +# test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1'] # depends_on: # - db # - redis +# volumes: +# - /srv/mastodon/web:/mastodon/public +# 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: -# # 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_file: # - .env # - .env.production # - db.env @@ -278,34 +139,173 @@ 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"] -# ## 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 + + + + +# # 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: -# # external: true +# # # traefik: +# # traefik: +# # external: true +# # internal_network: +# # internal: true + +# # # networks: +# # # traefik: +# # # external: true