--- - name: create mastodon volume folders ansible.builtin.file: name: '{{ services.mastodon.volume_folder }}/{{ volume }}' state: directory owner: '991' group: '991' loop: - postgres_data - redis_data - mastodon_data loop_control: loop_var: volume - name: Copy mastodon environment file ansible.builtin.template: src: files/configs/mastodon/env_file.j2 dest: '{{ services.mastodon.volume_folder }}/env_file' - name: upload vhost config for root domain ansible.builtin.template: src: files/configs/mastodon/vhost-mastodon dest: '{{ services.nginx_proxy.volume_folder }}/vhost/{{ services.mastodon.domain }}' - name: set up mastodon community.docker.docker_compose: project_name: mastodon pull: true definition: version: '3' services: db: restart: always image: postgres:14-alpine shm_size: 256mb networks: - internal_network healthcheck: test: [CMD, pg_isready, -U, postgres] volumes: - '{{ services.mastodon.volume_folder }}/postgres_data:/var/lib/postgresql/data' environment: - POSTGRES_HOST_AUTH_METHOD=trust redis: restart: always image: redis:6-alpine networks: - internal_network healthcheck: test: [CMD, redis-cli, ping] volumes: - '{{ services.mastodon.volume_folder }}/redis_data:/data' web: image: tootsuite/mastodon:{{ services.mastodon.version }} restart: always env_file: '{{ services.mastodon.volume_folder }}/env_file' command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000" networks: - external_services - internal_network healthcheck: test: | [CMD-SHELL, wget -q --spider --proxy=off localhost:3000/health || exit 1] depends_on: - db - redis volumes: - '{{ services.mastodon.volume_folder }}/mastodon_data:/mastodon/public/system' environment: VIRTUAL_HOST: '{{ services.mastodon.domain }}' VIRTUAL_PORT: '3000' VIRTUAL_PATH: / LETSENCRYPT_HOST: '{{ services.mastodon.domain }}' LETSENCRYPT_EMAIL: '{{ letsencrypt_email }}' streaming: image: tootsuite/mastodon:{{ services.mastodon.version }} restart: always env_file: '{{ services.mastodon.volume_folder }}/env_file' command: node ./streaming networks: - external_services - internal_network healthcheck: test: | [CMD-SHELL, wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1] ports: - 127.0.0.1:4000:4000 depends_on: - db - redis environment: 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 environment: DB_POOL: 32 depends_on: - db - redis 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"] networks: external_services: external: true postfix: external: true internal_network: internal: true