- name: create Mastodon Docker user ansible.builtin.user: name: "{{ mastodon_docker_user }}" shell: /bin/bash home: "{{ mastodon_docker_home }}" create_home: true state: present - name: Create directories ansible.builtin.file: path: "{{ item }}" state: directory mode: "0777" loop: - "{{ mastodon_docker_postgres_storage }}" - "{{ mastodon_docker_redis_storage }}" - "{{ mastodon_docker_elasticsearch_storage }}" - "{{ mastodon_docker_system_storage }}" - "{{ mastodon_docker_backup_storage }}" - "{{ mastodon_docker_cache_storage }}" - name: Make sure data directories are backed up lineinfile: path: "/backup-dirs" line: "{{ item }}" loop: - "{{ mastodon_docker_postgres_storage }}" - "{{ mastodon_docker_redis_storage }}" - "{{ mastodon_docker_elasticsearch_storage }}" - "{{ mastodon_docker_system_storage }}" - "{{ mastodon_docker_backup_storage }}" # cache storage intentionally omitted - name: Copy the docker compose file to server template: src: "docker-compose.yml.j2" dest: "{{ mastodon_docker_home }}/docker-compose.yml" register: compose_file - name: Copy the Dockerfile to server template: src: "Dockerfile" dest: "{{ mastodon_docker_home }}/Dockerfile" register: compose_file - name: Copy the env file to server template: src: "env.production.j2" dest: "{{ mastodon_docker_home }}/env" register: env_file - name: Copy the tootctl file to server template: src: "tootctl" dest: "{{ mastodon_docker_home }}/tootctl" mode: "0770" - name: Copy the bundle file to server template: src: "bundle" dest: "{{ mastodon_docker_home }}/bundle" mode: "0770" - name: "Stop mastodon_docker services" community.docker.docker_compose_v2: state: "absent" project_src: "{{ mastodon_docker_home }}" when: compose_file.changed or env_file.changed - name: run the setup command command: cmd: "bash -c 'docker compose run --rm web bundle exec rails db:setup && touch db_setup.mark'" chdir: "{{ mastodon_docker_home }}" creates: "db_setup.mark" - name: "docker compose up -d" community.docker.docker_compose_v2: state: "present" build: "always" pull: missing project_src: "{{ mastodon_docker_home }}" - name: Add Mastodon Postgres backup cron cron: name: "Mastodon Postgres backup: {{ mastodon_docker_domain }}" user: root minute: "0" hour: "3" job: > /bin/sh -c '/usr/bin/docker compose --project-directory {{mastodon_docker_home}} exec -T db pg_dump -U mastodon mastodon_production > {{mastodon_docker_backup_storage}}/mastodon_backup.sql' - name: Add Mastodon media attachments cache cleanup cron: name: "Mastodon media attachments cleanup backup: {{ mastodon_docker_domain }}" user: root minute: "0" hour: "1" job: > /bin/sh -c '/usr/bin/docker compose --project-directory {{mastodon_docker_home}} exec web bin/tootctl media remove --days {{ mastodon_docker_media_cleanup_days }}' - name: Add Mastodon media headers cache cleanup cron: name: "Mastodon media headers cleanup backup: {{ mastodon_docker_domain }}" user: root minute: "30" hour: "1" job: > /bin/sh -c '/usr/bin/docker compose --project-directory {{mastodon_docker_home}} exec web bin/tootctl media remove --days {{ mastodon_docker_media_cleanup_days }} --remove-headers'