From 3cfc943cd17dcc21f70b61a6d4505d03526d8e2e Mon Sep 17 00:00:00 2001 From: msnie Date: Sun, 2 Feb 2025 18:37:22 +0100 Subject: [PATCH] mastodon --- mastodon/docker-compose.yml | 476 ++++++++++++++++++------------------ 1 file changed, 238 insertions(+), 238 deletions(-) diff --git a/mastodon/docker-compose.yml b/mastodon/docker-compose.yml index 11fa520..7344873 100644 --- a/mastodon/docker-compose.yml +++ b/mastodon/docker-compose.yml @@ -1,4 +1,162 @@ -# version: '3.7' +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/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 @@ -6,128 +164,109 @@ # shm_size: 256mb # networks: # - internal_network +# healthcheck: +# test: ['CMD', 'pg_isready', '-U', 'postgres'] # 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 +# - ./postgres14:/var/lib/postgresql/data # 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 +# - ./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 -# # - 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" +# 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', 'wget -q --spider --proxy=off localhost:3000/health || exit 1'] +# 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 -# 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" +# - ./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 -# # - db.env -# env_file: +# # env_file: # - .env # - .env.production # - db.env -# command: node ./streaming -# environment: -# - 'REDIS_URL=redis://redis:6379' -# # ports: -# # - 4000:4000 +# command: node ./streaming/index.js # networks: # - traefik # - internal_network # healthcheck: # # prettier-ignore -# test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1'] +# 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=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 @@ -139,173 +278,34 @@ # - traefik # - internal_network # volumes: -# - /srv/mastodon/sidekiq:/mastodon/public/system +# - ./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 - - - - -# # 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 +# # traefik: +# # external: true