188 lines
5.2 KiB
YAML
188 lines
5.2 KiB
YAML
---
|
||
#We need to enable the service first or we will not have the appropriate folders generated.
|
||
- name: "Start and enable NGINX service"
|
||
become: true
|
||
#Workaround for "Interactive authentication required" issue
|
||
become_user: root
|
||
service: "name={{ item }} state=started enabled=yes"
|
||
with_items:
|
||
- nginx
|
||
|
||
- name: "Set NGINX to run under {{ mastodon_user }} to avoid permission issues"
|
||
become: true
|
||
lineinfile:
|
||
dest: "/etc/nginx/nginx.conf"
|
||
regexp: "ˆuser"
|
||
line: "user mastodon;"
|
||
state: present
|
||
|
||
- name: "Ensure that NGINX doesn't run under the user nginx"
|
||
become: true
|
||
lineinfile:
|
||
dest: "/etc/nginx/nginx.conf"
|
||
regexp: "user.nginx;"
|
||
line: "user nginx;"
|
||
state: absent
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
|
||
- name: "Ensure that NGINX doesn't run under the user www-data"
|
||
become: true
|
||
lineinfile:
|
||
dest: "/etc/nginx/nginx.conf"
|
||
regexp: "user.www-data;"
|
||
line: "user www-data;"
|
||
state: absent
|
||
when:
|
||
- ansible_os_family == "Debian"
|
||
|
||
- name: Copy nginx config
|
||
template:
|
||
src: ../files/nginx/mastodon.conf.j2
|
||
dest: /etc/nginx/sites-available/mastodon.conf
|
||
when:
|
||
- ansible_os_family == "Debian"
|
||
- mastodon_host is defined
|
||
|
||
- name: Symlink enabled site
|
||
file:
|
||
src: "/etc/nginx/sites-available/mastodon.conf"
|
||
dest: "/etc/nginx/sites-enabled/mastodon.conf"
|
||
state: link
|
||
when:
|
||
- ansible_os_family == "Debian"
|
||
- mastodon_host is defined
|
||
|
||
- name: Copy nginx config with RHEL folder stucture
|
||
template:
|
||
src: ../files/nginx/mastodon.conf.j2
|
||
dest: /etc/nginx/conf.d/mastodon.conf
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
- mastodon_host is defined
|
||
|
||
- name: Create folder structure for Mastodon public folder
|
||
file:
|
||
path: "{{ mastodon_nginx_symlink }}"
|
||
state: directory
|
||
owner: "{{ mastodon_user }}"
|
||
group: "nginx"
|
||
recurse: true
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
- mastodon_host is defined
|
||
|
||
- name: Create folder structure for Mastodon public folder
|
||
file:
|
||
path: "{{ mastodon_nginx_symlink }}"
|
||
state: directory
|
||
owner: "{{ mastodon_user }}"
|
||
group: "www-data"
|
||
recurse: true
|
||
when:
|
||
- ansible_os_family == "Debian"
|
||
- mastodon_host is defined
|
||
|
||
- name: Create a symbolic link of Mastodon public folder to comply with SELinux policy
|
||
become: true
|
||
file:
|
||
src: "{{ mastodon_home }}/{{ mastodon_path }}/public"
|
||
dest: "{{ mastodon_nginx_symlink }}"
|
||
state: link
|
||
owner: "{{ mastodon_user }}"
|
||
group: "nginx"
|
||
force: true
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
- mastodon_host is defined
|
||
|
||
- name: Create a symbolic link of Mastodon public folder
|
||
become: true
|
||
file:
|
||
src: "{{ mastodon_home }}/{{ mastodon_path }}/public"
|
||
dest: "{{ mastodon_nginx_symlink }}"
|
||
state: link
|
||
owner: "{{ mastodon_user }}"
|
||
group: "www-data"
|
||
force: true
|
||
when:
|
||
- ansible_os_family == "Debian"
|
||
- mastodon_host is defined
|
||
|
||
- name: Permit NGINX SELinux permission to access filesystem
|
||
become: true
|
||
shell: "setsebool -P httpd_read_user_content 1"
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
- mastodon_host is defined
|
||
|
||
- name: Permit SELinux permission to allow NGINX to make proxy connections with httpd_can_network_connect
|
||
become: true
|
||
shell: "setsebool -P httpd_can_network_connect 1"
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
- mastodon_host is defined
|
||
|
||
- name: Permit SELinux permission to allow NGINX to make proxy connections with httpd_can_network_relay
|
||
become: true
|
||
shell: "setsebool -P httpd_can_network_relay 1"
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
- mastodon_host is defined
|
||
|
||
#Reading and writing into users home directories as a web server or executing any binary as systemd service is
|
||
#really pretty anomalous behaviour. SELinux is completely right to flag this as it looks like we're an attacker.
|
||
#Potential security issue?
|
||
|
||
- name: Permit SELinux permission to allow NGINX to read contents of home folders (Required for Mastodon)
|
||
become: true
|
||
shell: "setsebool -P httpd_enable_homedirs on"
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
- mastodon_host is defined
|
||
|
||
- name: Change SELinux properties of Mastodon symlink
|
||
become: true
|
||
shell: "chcon -Rt httpd_sys_content_t {{ mastodon_nginx_symlink }}"
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
- mastodon_host is defined
|
||
|
||
- name: "Ensure that we have correct file permissions for /var/lib/nginx/ as we are not running NGINX under default user"
|
||
become: true
|
||
become_user: root
|
||
file:
|
||
path: "/var/lib/nginx/"
|
||
owner: "{{ mastodon_user }}"
|
||
group: "nginx"
|
||
recurse: true
|
||
when:
|
||
- ansible_os_family == "RedHat"
|
||
|
||
- name: "Ensure that we have correct file permissions for /var/lib/nginx/ as we are not running NGINX under default user"
|
||
become: true
|
||
become_user: root
|
||
file:
|
||
path: "/var/lib/nginx/"
|
||
owner: "{{ mastodon_user }}"
|
||
group: "www-data"
|
||
recurse: true
|
||
when:
|
||
- ansible_os_family == "Debian"
|
||
|
||
- name: Restart nginx
|
||
become: true
|
||
#Workaround for "Interactive authentication required" issue
|
||
become_user: root
|
||
service: name=nginx state=restarted
|
||
tags:
|
||
- systemd
|
||
|
||
- name: Check if Mastodon instance is up and running
|
||
uri:
|
||
url: 'https://{{ mastodon_host }}/about'
|
||
validate_certs: no
|
||
register: result
|
||
until: 'result.status == 200'
|
||
retries: 5
|
||
delay: 5
|