diff --git a/roles/docker/files/configs/mastodon/postgresql.conf b/roles/docker/files/configs/mastodon/postgresql.conf new file mode 100644 index 0000000..c0df75b --- /dev/null +++ b/roles/docker/files/configs/mastodon/postgresql.conf @@ -0,0 +1,20 @@ +# DB Version: 14 +# OS Type: linux +# DB Type: oltp +# Total Memory (RAM): 16 GB +# Connections num: 300 +# Data Storage: hdd + +listen_addresses = '*' +max_connections = 300 +shared_buffers = 4GB +effective_cache_size = 12GB +maintenance_work_mem = 1GB +checkpoint_completion_target = 0.9 +wal_buffers = 16MB +default_statistics_target = 100 +random_page_cost = 4 +effective_io_concurrency = 2 +work_mem = 6990kB +min_wal_size = 2GB +max_wal_size = 8GB \ No newline at end of file diff --git a/roles/docker/tasks/services/mastodon.yml b/roles/docker/tasks/services/mastodon.yml index 92f11a7..613b97a 100644 --- a/roles/docker/tasks/services/mastodon.yml +++ b/roles/docker/tasks/services/mastodon.yml @@ -16,16 +16,40 @@ src: files/configs/mastodon/env_file.j2 dest: "{{ services.mastodon.volume_folder }}/env_file" -- name: upload vhost config for root domain +- name: Upload vhost config for root domain template: src: files/configs/mastodon/vhost-mastodon dest: "{{ services.nginx_proxy.volume_folder }}/vhost/{{ services.mastodon.domain }}" +- name: Copy postgresql config + copy: + src: files/configs/mastodon/postgresql.conf + dest: "{{ services.mastodon.volume_folder }}/postgres_data/postgresql.conf" + - name: set up mastodon docker_compose: project_name: mastodon pull: yes definition: + + x-sidekiq: &sidekiq + image: "tootsuite/mastodon:{{ services.mastodon.version }}" + restart: always + env_file: "{{ services.mastodon.volume_folder }}/env_file" + depends_on: + db: + condition: "service_healthy" + redis: + condition: "service_healthy" + networks: + - postfix + - external_services + - internal_network + volumes: + - "{{ services.mastodon.volume_folder }}/mastodon_data:/mastodon/public/system" + healthcheck: + test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"] + version: '3' services: db: @@ -70,6 +94,8 @@ volumes: - "{{ services.mastodon.volume_folder }}/mastodon_data:/mastodon/public/system" environment: + MAX_THREADS: 10 + WEB_CONCURRENCY: 3 VIRTUAL_HOST: "{{ services.mastodon.domain }}" VIRTUAL_PORT: "3000" VIRTUAL_PATH: "/" @@ -95,30 +121,59 @@ redis: condition: "service_healthy" environment: + DB_POOL: 15 VIRTUAL_HOST: "{{ services.mastodon.domain }}" VIRTUAL_PORT: "4000" VIRTUAL_PATH: "/api/v1/streaming" - sidekiq: - image: "tootsuite/mastodon:{{ services.mastodon.version }}" - restart: always - env_file: "{{ services.mastodon.volume_folder }}/env_file" - command: bundle exec sidekiq -c 32 + # sidekiq-default-push-pull: DB_POOL = 25, -c 25 for 25 connections + sidekiq-default-push-pull: + <<: *sidekiq + command: bundle exec sidekiq -c 25 -q default -q push -q pull environment: - DB_POOL: 32 - depends_on: - db: - condition: "service_healthy" - redis: - condition: "service_healthy" - networks: - - postfix - - external_services - - internal_network - volumes: - - "{{ services.mastodon.volume_folder }}/mastodon_data:/mastodon/public/system" - healthcheck: - test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"] + DB_POOL: 25 + + # sidekiq-default-pull-push: DB_POOL = 25, -c 25 for 25 connections + sidekiq-default-pull-push: + <<: *sidekiq + command: bundle exec sidekiq -c 25 -q default -q pull -q push + environment: + DB_POOL: 25 + + # sidekiq-pull-default-push: DB_POOL = 25, -c 25 for 25 connections + sidekiq-pull-default-push: + <<: *sidekiq + command: bundle exec sidekiq -c 25 -q pull -q default -q push + environment: + DB_POOL: 25 + + # sidekiq-push-default-pull: DB_POOL = 25, -c 25 for 25 connections + sidekiq-push-default-pull: + <<: *sidekiq + command: bundle exec sidekiq -c 25 -q push -q default -q pull + environment: + DB_POOL: 25 + + # sidekiq-push-scheduler: DB_POOL = 5, -c 5 for 5 connections + sidekiq-push-scheduler: + <<: *sidekiq + command: bundle exec sidekiq -c 5 -q push -q scheduler + environment: + DB_POOL: 5 + + # sidekiq-push-mailers: DB_POOL = 5, -c 5 for 5 connections + sidekiq-push-mailers: + <<: *sidekiq + command: bundle exec sidekiq -c 5 -q push -q mailers + environment: + DB_POOL: 5 + + # sidekiq-push-ingress: DB_POOL = 10, -c 10 for 10 connections + sidekiq-push-ingress: + <<: *sidekiq + command: bundle exec sidekiq -c 10 -q push -q ingress + environment: + DB_POOL: 10 networks: external_services: