ansible/roles/docker/tasks/services/mastodon.yml

127 lines
3.9 KiB
YAML

---
- 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