2022-11-19 16:31:16 +01:00
|
|
|
---
|
2022-11-19 21:55:50 +01:00
|
|
|
- name: Create Mastodon folder
|
|
|
|
file:
|
2022-11-19 19:49:16 +01:00
|
|
|
path: "{{ mastodon_composer_folder }}"
|
2022-11-19 21:55:50 +01:00
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: Create Mastodon database folder
|
|
|
|
file:
|
|
|
|
path: "{{ mastodon_composer_folder }}/database"
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: Create Mastodon postgresql folder
|
|
|
|
file:
|
|
|
|
path: "{{ mastodon_composer_folder }}/database/postgresql"
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: Create Mastodon redis folder
|
|
|
|
file:
|
|
|
|
path: "{{ mastodon_composer_folder }}/database/redis"
|
|
|
|
state: directory
|
2022-11-19 19:49:16 +01:00
|
|
|
|
2022-11-19 21:55:50 +01:00
|
|
|
- name: Create Mastodon elasticsearch folder
|
|
|
|
file:
|
|
|
|
path: "{{ mastodon_composer_folder }}/database/elasticsearch"
|
|
|
|
owner: 1000
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: Create Mastodon web folder
|
|
|
|
file:
|
|
|
|
path: "{{ mastodon_composer_folder }}/web"
|
|
|
|
owner: 991
|
|
|
|
group: 991
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: Create Mastodon web public folder
|
|
|
|
file:
|
|
|
|
path: "{{ mastodon_composer_folder }}/web/public"
|
|
|
|
owner: 991
|
|
|
|
group: 991
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: Create Mastodon web system folder
|
|
|
|
file:
|
|
|
|
path: "{{ mastodon_composer_folder }}/web/system"
|
|
|
|
owner: 991
|
|
|
|
group: 991
|
|
|
|
state: directory
|
2022-11-19 17:30:33 +01:00
|
|
|
|
|
|
|
- name: Copy Dockerfile from Mastodon repo
|
|
|
|
copy:
|
2022-11-19 17:56:21 +01:00
|
|
|
src: files/Dockerfile
|
2022-11-19 17:30:33 +01:00
|
|
|
dest: "{{ mastodon_composer_folder }}/Dockerfile"
|
2022-11-19 17:24:45 +01:00
|
|
|
|
|
|
|
- name: Ensure mastodon folder exists
|
|
|
|
file:
|
|
|
|
path: "{{ mastodon_composer_folder }}"
|
|
|
|
state: directory
|
|
|
|
|
|
|
|
- name: Create docker-compose.yaml file
|
2022-11-19 19:54:26 +01:00
|
|
|
template:
|
|
|
|
src: templates/docker-compose.yml.j2
|
2022-11-19 17:24:45 +01:00
|
|
|
dest: "{{ mastodon_composer_folder }}/docker-compose.yml"
|
2022-11-19 16:31:16 +01:00
|
|
|
|
2022-11-19 21:55:50 +01:00
|
|
|
- name: Ensure mastodon application configuration is present
|
2022-11-19 16:47:52 +01:00
|
|
|
template:
|
2022-11-19 21:55:50 +01:00
|
|
|
src: templates/application.env.j2
|
|
|
|
dest: "{{ mastodon_composer_folder }}/application.env.production"
|
|
|
|
mode: 0600
|
2022-11-19 19:41:40 +01:00
|
|
|
|
2022-11-19 21:55:50 +01:00
|
|
|
- name: Ensure mastodon database configuration is present
|
|
|
|
template:
|
|
|
|
src: templates/database.env.j2
|
|
|
|
dest: "{{ mastodon_composer_folder }}/database.env.production"
|
|
|
|
mode: 0600
|
2022-11-19 19:41:40 +01:00
|
|
|
|
2022-11-19 19:06:51 +01:00
|
|
|
- name: Generate secret key
|
|
|
|
shell: docker-compose run --rm web bundle exec rake secret
|
2022-11-19 19:16:26 +01:00
|
|
|
args:
|
|
|
|
chdir: "{{ mastodon_composer_folder }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
register: secret_key_cmd
|
|
|
|
when: mastodon_secret_key_base == ''
|
|
|
|
|
2022-11-19 19:23:42 +01:00
|
|
|
- name: Set mastodon_secret_key_base
|
|
|
|
set_fact:
|
|
|
|
mastodon_secret_key_base: "{{ secret_key_cmd.stdout }}"
|
|
|
|
when: mastodon_secret_key_base == ''
|
|
|
|
|
2022-11-19 19:06:51 +01:00
|
|
|
- name: Add secret key to Mastodon config
|
|
|
|
lineinfile:
|
2022-11-19 21:55:50 +01:00
|
|
|
path: "{{ mastodon_composer_folder }}/application.env.production"
|
2022-11-19 19:23:42 +01:00
|
|
|
line: "SECRET_KEY_BASE={{ mastodon_secret_key_base }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
regexp: "^SECRET_KEY_BASE="
|
|
|
|
backup: yes
|
2022-11-19 21:55:50 +01:00
|
|
|
mode: 0600
|
2022-11-19 19:06:51 +01:00
|
|
|
|
|
|
|
- name: Generate OTP secret key
|
|
|
|
shell: docker-compose run --rm web bundle exec rake secret
|
2022-11-19 19:16:26 +01:00
|
|
|
args:
|
|
|
|
chdir: "{{ mastodon_composer_folder }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
register: otp_key_cmd
|
|
|
|
when: mastodon_otp_secret == ''
|
|
|
|
|
2022-11-19 19:23:42 +01:00
|
|
|
- name: Set mastodon_otp_secret
|
|
|
|
set_fact:
|
|
|
|
mastodon_otp_secret: "{{ otp_key_cmd.stdout }}"
|
|
|
|
when: mastodon_otp_secret == ''
|
|
|
|
|
2022-11-19 19:06:51 +01:00
|
|
|
- name: Add OTP key to Mastodon config
|
|
|
|
lineinfile:
|
2022-11-19 21:55:50 +01:00
|
|
|
path: "{{ mastodon_composer_folder }}/application.env.production"
|
2022-11-19 19:23:42 +01:00
|
|
|
line: "OTP_SECRET={{ mastodon_otp_secret }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
regexp: "^OTP_SECRET="
|
|
|
|
backup: yes
|
2022-11-19 21:55:50 +01:00
|
|
|
mode: 0600
|
2022-11-19 19:06:51 +01:00
|
|
|
|
|
|
|
- name: Generate Paperclip secret key
|
|
|
|
shell: docker-compose run --rm web bundle exec rake secret
|
2022-11-19 19:16:26 +01:00
|
|
|
args:
|
|
|
|
chdir: "{{ mastodon_composer_folder }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
register: paperclip_key_cmd
|
|
|
|
when: mastodon_paperclip_secret == ''
|
|
|
|
|
2022-11-19 19:23:42 +01:00
|
|
|
- name: Set mastodon_paperclip_secret
|
|
|
|
set_fact:
|
|
|
|
mastodon_paperclip_secret: "{{ otppaperclip_key_cmd_key_cmd.stdout }}"
|
|
|
|
when: mastodon_paperclip_secret == ''
|
|
|
|
|
2022-11-19 19:06:51 +01:00
|
|
|
- name: Add Paperclip key to Mastodon config
|
|
|
|
lineinfile:
|
2022-11-19 21:55:50 +01:00
|
|
|
path: "{{ mastodon_composer_folder }}/application.env.production"
|
2022-11-19 19:23:42 +01:00
|
|
|
line: "PAPERCLIP_SECRET={{ mastodon_paperclip_secret }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
regexp: "^PAPERCLIP_SECRET="
|
|
|
|
backup: yes
|
2022-11-19 21:55:50 +01:00
|
|
|
mode: 0600
|
2022-11-19 19:06:51 +01:00
|
|
|
|
|
|
|
- name: Generate VAPID keypair
|
2022-11-19 19:16:26 +01:00
|
|
|
shell: 'docker-compose run --rm web bundle exec rake mastodon:webpush:generate_vapid_key'
|
|
|
|
args:
|
|
|
|
chdir: "{{ mastodon_composer_folder }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
register: vapid_key_cmd
|
|
|
|
when: vapid_public_key == ''
|
|
|
|
|
2022-11-19 19:23:42 +01:00
|
|
|
- name: Set vapid_public_key
|
|
|
|
set_fact:
|
|
|
|
vapid_public_key: "{{ vapid_key_cmd.stdout_lines[1] }}"
|
|
|
|
when: vapid_public_key == ''
|
|
|
|
|
|
|
|
- name: Set vapid_private_key
|
|
|
|
set_fact:
|
|
|
|
vapid_private_key: "{{ vapid_key_cmd.stdout_lines[0] }}"
|
|
|
|
when: vapid_private_key == ''
|
|
|
|
|
2022-11-19 19:06:51 +01:00
|
|
|
- name: Add Paperclip private key to Mastodon config
|
|
|
|
lineinfile:
|
2022-11-19 21:55:50 +01:00
|
|
|
path: "{{ mastodon_composer_folder }}/application.env.production"
|
2022-11-19 19:23:42 +01:00
|
|
|
line: "{{ vapid_private_key }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
regexp: "^VAPID_PRIVATE_KEY="
|
2022-11-19 21:55:50 +01:00
|
|
|
mode: 0600
|
2022-11-19 19:06:51 +01:00
|
|
|
backup: yes
|
|
|
|
|
|
|
|
- name: Add Paperclip public key to Mastodon config
|
|
|
|
lineinfile:
|
2022-11-19 21:55:50 +01:00
|
|
|
path: "{{ mastodon_composer_folder }}/application.env.production"
|
2022-11-19 19:23:42 +01:00
|
|
|
line: "{{ vapid_public_key }}"
|
2022-11-19 19:06:51 +01:00
|
|
|
regexp: "^VAPID_PUBLIC_KEY="
|
2022-11-19 21:55:50 +01:00
|
|
|
mode: 0600
|
2022-11-19 19:06:51 +01:00
|
|
|
backup: yes
|
2022-11-19 19:14:41 +01:00
|
|
|
|
2022-11-19 21:55:50 +01:00
|
|
|
- name: Build Mastodon container to include secrets
|
2022-11-19 19:20:35 +01:00
|
|
|
community.docker.docker_compose:
|
2022-11-19 19:28:29 +01:00
|
|
|
project_name: mastodon
|
|
|
|
project_src: "{{ mastodon_composer_folder }}/"
|
|
|
|
state: present
|
2022-11-19 19:38:23 +01:00
|
|
|
stopped: true
|
2022-11-19 19:28:29 +01:00
|
|
|
build: true
|
2022-11-19 19:20:35 +01:00
|
|
|
|
2022-11-19 19:41:40 +01:00
|
|
|
- name: Stop mastodon_web_1 container
|
|
|
|
docker_container:
|
|
|
|
name: mastodon_web_1
|
|
|
|
state: stopped
|
|
|
|
|
|
|
|
- name: Stop mastodon_streaming_1 container
|
|
|
|
docker_container:
|
|
|
|
name: mastodon_streaming_1
|
|
|
|
state: stopped
|
|
|
|
|
|
|
|
- name: Stop mastodon_sidekiq_1 container
|
|
|
|
docker_container:
|
|
|
|
name: mastodon_sidekiq_1
|
|
|
|
state: stopped
|
|
|
|
|
2022-11-19 21:55:50 +01:00
|
|
|
- name: Start mastodon_redis_1 container
|
2022-11-19 19:41:40 +01:00
|
|
|
docker_container:
|
|
|
|
name: mastodon_redis_1
|
2022-11-19 21:55:50 +01:00
|
|
|
state: started
|
2022-11-19 19:41:40 +01:00
|
|
|
|
2022-11-19 21:55:50 +01:00
|
|
|
- name: Start mastodon_db_1 container
|
2022-11-19 19:41:40 +01:00
|
|
|
docker_container:
|
|
|
|
name: mastodon_db_1
|
2022-11-19 21:55:50 +01:00
|
|
|
state: started
|
2022-11-19 19:41:40 +01:00
|
|
|
|
2022-11-19 19:14:41 +01:00
|
|
|
- name: Set up database
|
2022-11-19 21:55:50 +01:00
|
|
|
shell: "docker-compose -f '{{ mastodon_composer_folder }}' run --rm shell bundle exec rake db:setup && echo 'Database ready' > /var/lib/mastodon_db_setup"
|
2022-11-19 19:14:41 +01:00
|
|
|
args:
|
2022-11-19 19:16:26 +01:00
|
|
|
creates: /var/lib/mastodon_db_setup
|
|
|
|
chdir: "{{ mastodon_composer_folder }}"
|
2022-11-19 21:55:50 +01:00
|
|
|
when: mastodon_initial_setup
|
|
|
|
|
|
|
|
- name: Migrate database
|
|
|
|
shell: "docker-compose -f '{{ mastodon_composer_folder }}' run --rm shell bundle exec rake db:migrate && echo 'Database migrated' > /var/lib/mastodon_db_migrated"
|
|
|
|
args:
|
|
|
|
creates: /var/lib/mastodon_db_migrated
|
|
|
|
chdir: "{{ mastodon_composer_folder }}"
|
|
|
|
when: not mastodon_initial_setup
|
|
|
|
|
|
|
|
- name: Start mastodon_web_1 container
|
|
|
|
docker_container:
|
|
|
|
name: mastodon_web_1
|
|
|
|
state: started
|
|
|
|
|
|
|
|
- name: Start mastodon_streaming_1 container
|
|
|
|
docker_container:
|
|
|
|
name: mastodon_streaming_1
|
|
|
|
state: started
|
|
|
|
|
|
|
|
- name: Start mastodon_sidekiq_1 container
|
|
|
|
docker_container:
|
|
|
|
name: mastodon_sidekiq_1
|
|
|
|
state: started
|
|
|
|
|
|
|
|
- name: Create initial user
|
|
|
|
shell: "docker-compose -f /opt/mastodon/docker-compose.yml run --rm shell bin/tootctl accounts create '{{ mastodon_owner }}' --email '{{ mastodon_owner_email }}' --confirmed --role Owner && echo 'Owner account created' > /var/lib/mastodon_owner_created"
|
|
|
|
args:
|
|
|
|
creates: /var/lib/mastodon_owner_created
|
|
|
|
chdir: "{{ mastodon_composer_folder }}"
|
|
|
|
register: owner_result
|
|
|
|
when: mastodon_initial_setup
|
|
|
|
|
|
|
|
- name: Show owner password
|
|
|
|
debug:
|
|
|
|
var: owner_result
|
|
|
|
when: mastodon_initial_setup
|