diff --git a/mastodon/docker-compose.yml b/mastodon/docker-compose.yml new file mode 100644 index 0000000..c4c3526 --- /dev/null +++ b/mastodon/docker-compose.yml @@ -0,0 +1,159 @@ +version: '3.9' + +services: + db: + image: postgres:14-alpine + restart: unless-stopped + shm_size: 256mb + volumes: + - /home/nick/configs/mastodon/db:/var/lib/postgresql/data + environment: + POSTGRES_HOST_AUTH_METHOD: trust + POSTGRES_USER: mastodon + POSTGRES_PASSWORD: mastodon + + redis: + image: redis:7-alpine + restart: unless-stopped + volumes: + - /home/nick/configs/mastodon/redis:/data + + es: + image: docker.elastic.co/elasticsearch/elasticsearch:7.17.4 + restart: unless-stopped + volumes: + - /home/nick/configs/mastodon/es:/usr/share/elasticsearch/data + 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 + ELASTIC_PASSWORD: mastodon + ulimits: + memlock: + soft: -1 + hard: -1 + nofile: + soft: 65536 + hard: 65536 + + mastodon: + image: ghcr.io/mastodon/mastodon + restart: unless-stopped + command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" + volumes: + - /home/nick/configs/mastodon/public/system:/mastodon/public/system + environment: + LOCAL_DOMAIN: mastodon.karaolidis.com + SINGLE_USER_MODE: true + RAILS_ENV: production + REDIS_HOST: redis + REDIS_PORT: 6379 + DB_HOST: db + DB_USER: mastodon + DB_NAME: mastodon + DB_PASS: mastodon + DB_PORT: 5432 + ES_ENABLED: true + ES_HOST: es + ES_PORT: 9200 + ES_USER: elastic + ES_PASS: mastodon + SECRET_KEY_BASE: ${SECRET_KEY_BASE} + OTP_SECRET: ${OTP_SECRET} + VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY} + VAPID_PUBLIC_KEY: ${VAPID_PUBLIC_KEY} + SMTP_SERVER: ${SMTP_SERVER} + SMTP_PORT: ${SMTP_PORT} + SMTP_LOGIN: ${SMTP_LOGIN} + SMTP_PASSWORD: ${SMTP_PASSWORD} + SMTP_FROM_ADDRESS: ${SMTP_FROM_ADDRESS} + networks: + - default + - routing + depends_on: + - db + - redis + - es + + mastodon-streaming: + image: ghcr.io/mastodon/mastodon + restart: unless-stopped + command: node ./streaming + environment: + LOCAL_DOMAIN: mastodon.karaolidis.com + SINGLE_USER_MODE: true + RAILS_ENV: production + REDIS_HOST: redis + REDIS_PORT: 6379 + DB_HOST: db + DB_USER: mastodon + DB_NAME: mastodon + DB_PASS: mastodon + DB_PORT: 5432 + ES_ENABLED: true + ES_HOST: es + ES_PORT: 9200 + ES_USER: elastic + ES_PASS: mastodon + SECRET_KEY_BASE: ${SECRET_KEY_BASE} + OTP_SECRET: ${OTP_SECRET} + VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY} + VAPID_PUBLIC_KEY: ${VAPID_PUBLIC_KEY} + SMTP_SERVER: ${SMTP_SERVER} + SMTP_PORT: ${SMTP_PORT} + SMTP_LOGIN: ${SMTP_LOGIN} + SMTP_PASSWORD: ${SMTP_PASSWORD} + SMTP_FROM_ADDRESS: ${SMTP_FROM_ADDRESS} + networks: + - default + - routing + depends_on: + - db + - redis + + sidekiq: + image: ghcr.io/mastodon/mastodon + restart: unless-stopped + command: bundle exec sidekiq + volumes: + - /home/nick/configs/mastodon/public/system:/mastodon/public/system + environment: + LOCAL_DOMAIN: mastodon.karaolidis.com + SINGLE_USER_MODE: true + RAILS_ENV: production + REDIS_HOST: redis + REDIS_PORT: 6379 + DB_HOST: db + DB_USER: mastodon + DB_NAME: mastodon + DB_PASS: mastodon + DB_PORT: 5432 + ES_ENABLED: true + ES_HOST: es + ES_PORT: 9200 + ES_USER: elastic + ES_PASS: mastodon + SECRET_KEY_BASE: ${SECRET_KEY_BASE} + OTP_SECRET: ${OTP_SECRET} + VAPID_PRIVATE_KEY: ${VAPID_PRIVATE_KEY} + VAPID_PUBLIC_KEY: ${VAPID_PUBLIC_KEY} + SMTP_SERVER: ${SMTP_SERVER} + SMTP_PORT: ${SMTP_PORT} + SMTP_LOGIN: ${SMTP_LOGIN} + SMTP_PASSWORD: ${SMTP_PASSWORD} + SMTP_FROM_ADDRESS: ${SMTP_FROM_ADDRESS} + depends_on: + - db + - redis + +networks: + routing: + external: true + name: routing