From 22100520ba5d0a81c371627cd05071e7b013366e Mon Sep 17 00:00:00 2001 From: msnie Date: Fri, 31 Jan 2025 20:28:00 +0100 Subject: [PATCH] mastodon --- mastodon/docker-compose copy.yml | 257 +++++-------------------------- mastodon/docker-compose.yml | 219 ++++++++++++++++++++++++-- 2 files changed, 245 insertions(+), 231 deletions(-) diff --git a/mastodon/docker-compose copy.yml b/mastodon/docker-compose copy.yml index 798476e..3208883 100644 --- a/mastodon/docker-compose copy.yml +++ b/mastodon/docker-compose copy.yml @@ -1,4 +1,4 @@ -version: '3' +version: '3.7' services: db: restart: always @@ -6,43 +6,27 @@ services: 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: db.env healthcheck: test: ['CMD', 'redis-cli', 'ping'] - # environment: - # - 'REDIS_URL=redis://redis:6379' volumes: - - /srv/mastodon/redis:/data + - ./redis:/data web: - image: ghcr.io/mastodon/mastodon:v4.3.3 + image: ghcr.io/glitch-soc/mastodon restart: always - # env_file: - # - .env - # - db.env - env_file: - - .env - - .env.production - - db.env - ports: - - 3344:3000 + env_file: .env.production command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" networks: - traefik @@ -53,30 +37,34 @@ services: 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=3344 + - ./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/mastodon/mastodon-streaming:v4.3.3 + image: ghcr.io/glitch-soc/mastodon restart: always - # env_file: - # - .env - # - db.env - env_file: - - .env - - .env.production - - db.env + env_file: .env.production command: node ./streaming - environment: - - 'REDIS_URL=redis://redis:6379' - ports: - - 4433:4000 networks: - traefik - internal_network @@ -86,21 +74,18 @@ services: 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 + image: ghcr.io/glitch-soc/mastodon restart: always - env_file: - - .env - - .env.production - - db.env + env_file: .env.production command: bundle exec sidekiq depends_on: - db @@ -109,173 +94,13 @@ services: - 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"] - networks: traefik: + name: 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 diff --git a/mastodon/docker-compose.yml b/mastodon/docker-compose.yml index 3208883..6c1c91d 100644 --- a/mastodon/docker-compose.yml +++ b/mastodon/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.7' +version: '3' services: db: restart: always @@ -6,27 +6,43 @@ services: 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: db.env healthcheck: test: ['CMD', 'redis-cli', 'ping'] + # environment: + # - 'REDIS_URL=redis://redis:6379' volumes: - - ./redis:/data + - /srv/mastodon/redis:/data web: - image: ghcr.io/glitch-soc/mastodon + image: ghcr.io/mastodon/mastodon:v4.3.3 restart: always - env_file: .env.production + # env_file: + # - .env + # - db.env + env_file: + - .env + - .env.production + - db.env + ports: + - 3344:3000 command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" networks: - traefik @@ -37,9 +53,8 @@ services: depends_on: - db - redis - # - es volumes: - - ./public/system:/mastodon/public/system + - /srv/mastodon/web:/mastodon/public/system labels: - "traefik.enable=true" # Main Web Router @@ -61,10 +76,20 @@ services: - "traefik.http.services.mstdn-web-svc.loadbalancer.server.port=3000" streaming: - image: ghcr.io/glitch-soc/mastodon + image: ghcr.io/mastodon/mastodon-streaming:v4.3.3 restart: always - env_file: .env.production + # env_file: + # - .env + # - db.env + env_file: + - .env + - .env.production + - db.env command: node ./streaming + environment: + - 'REDIS_URL=redis://redis:6379' + ports: + - 4433:4000 networks: - traefik - internal_network @@ -82,10 +107,14 @@ services: - "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 + image: ghcr.io/mastodon/mastodon:v4.3.3 restart: always - env_file: .env.production + env_file: + - .env + - .env.production + - db.env command: bundle exec sidekiq depends_on: - db @@ -94,13 +123,173 @@ services: - 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: - name: 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