From 08bd47c012b6c607ae6c030ae4219dd6a29bf5bc Mon Sep 17 00:00:00 2001 From: msnie Date: Sat, 1 Feb 2025 00:34:05 +0100 Subject: [PATCH] mastodon --- mastodon/docker-compose.linuxserver.yml | 371 ++++++++++++++++++++++++ 1 file changed, 371 insertions(+) create mode 100644 mastodon/docker-compose.linuxserver.yml diff --git a/mastodon/docker-compose.linuxserver.yml b/mastodon/docker-compose.linuxserver.yml new file mode 100644 index 0000000..01b39d4 --- /dev/null +++ b/mastodon/docker-compose.linuxserver.yml @@ -0,0 +1,371 @@ +version: '3.7' +services: + mastodon: + image: lscr.io/linuxserver/mastodon:latest + container_name: mastodon + environment: + - PUID=1000 + - PGID=1000 + - TZ=Etc/UTC + - LOCAL_DOMAIN=knast.cc + - REDIS_HOST=redis + - REDIS_PORT=6379 + - DB_HOST=db + - DB_USER=mastodon + - DB_NAME=mastodon + - DB_PASS=mastodon + - DB_PORT=5432 + - ES_ENABLED=false + - ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=48cb26b4254c56457e9279b877a11d9e43f9e8e4b63875f80390bfe132597bb61ea405c040a4ff1b16736290c40a9efc166986eb2502c00f77527c6ff22f5b9f + - ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=4da48ca5d54eb6222db3971d446dc9ad5d372ae6555c85b5221ceb56a88248f10977a1c00809a101d1bfcd6cb34aedaeee6fb471deb78912327c143f108f38d2 + - ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=24923f2e2296745137e79deb1bdaecf221406278ae7ebebd1c5d583cacb2455a5713c726dbdd107ef4b4c0ab52040b0d9c08af69cc5f75391b0cac49ea313b40 + - SECRET_KEY_BASE=29e52e5bd23fdeab4676ef27eafcac36b3db9a5842ec9e50910f78c350ac4c1d3d722003ab473936d67d68bc6c5702174effda71d94e27cdaea049d4c6958eb8 + - OTP_SECRET=48cb26b4254c56457e9279b877a11d9e43f9e8e4b63875f80390bfe132597bb61ea405c040a4ff1b16736290c40a9efc166986eb2502c00f77527c6ff22f5b9f + - VAPID_PRIVATE_KEY=4da48ca5d54eb6222db3971d446dc9ad5d372ae6555c85b5221ceb56a88248f10977a1c00809a101d1bfcd6cb34aedaeee6fb471deb78912327c143f108f38d2 +VAPID_PUBLIC_KEY=24923f2e2296745137e79deb1bdaecf221406278ae7ebebd1c5d583cacb2455a5713c726dbdd107ef4b4c0ab52040b0d9c08af69cc5f75391b0cac49ea313b40 + - VAPID_PUBLIC_KEY= + - SMTP_SERVER=mail.example.com + - SMTP_PORT=25 + - SMTP_LOGIN= + - SMTP_PASSWORD= + - SMTP_FROM_ADDRESS=mastodon@kvist.knast.cc + - S3_ENABLED=false + - WEB_DOMAIN=kvist.knast.cc #optional + # - 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= #optional + volumes: + - /path/to/mastodon/config:/config + ports: + - 8008:80 + - 443: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=8008 + + +# 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