initial commit
This commit is contained in:
parent
59158e48e0
commit
dfe1c69729
22
.drone.yml
Normal file
22
.drone.yml
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
---
|
||||||
|
kind: pipeline
|
||||||
|
name: default
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: ansible-latest
|
||||||
|
image: python:2.7
|
||||||
|
pull: always
|
||||||
|
commands:
|
||||||
|
- pip install ansible ansible-later -q
|
||||||
|
- git clone https://gitea.rknet.org/ansible/ansible-later-policy.git ~/policy
|
||||||
|
- git ls-files *[^LICENSE,.md] | xargs ansible-later -c ~/policy/config.ini
|
||||||
|
depends_on: [ clone ]
|
||||||
|
|
||||||
|
- name: ansible-master
|
||||||
|
image: python:2.7
|
||||||
|
pull: always
|
||||||
|
commands:
|
||||||
|
- pip install ansible ansible-later -q
|
||||||
|
- git clone https://gitea.rknet.org/ansible/ansible-later-policy.git ~/policy
|
||||||
|
- git ls-files *[^LICENSE,.md] | xargs ansible-later -c ~/policy/config.ini
|
||||||
|
depends_on: [ clone ]
|
98
defaults/main.yml
Normal file
98
defaults/main.yml
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
---
|
||||||
|
matrix_version: 0.34.1.1
|
||||||
|
|
||||||
|
matrix_user: matrix
|
||||||
|
matrix_user_home: "/home/{{ matrix_user }}"
|
||||||
|
# matrix_uid: # defaults to not set
|
||||||
|
matrix_group: "{{ matrix_user }}"
|
||||||
|
# matrix_gid: # defaults to not set
|
||||||
|
matrix_extra_groups: []
|
||||||
|
|
||||||
|
# Ensure EPEL repo is available at this server
|
||||||
|
matrix_dependencies:
|
||||||
|
- "@Development tools"
|
||||||
|
- libtiff-devel
|
||||||
|
- libjpeg-devel
|
||||||
|
- libzip-devel
|
||||||
|
- freetype-devel
|
||||||
|
- lcms2-devel
|
||||||
|
- libwebp-devel
|
||||||
|
- tcl-devel
|
||||||
|
- tk-devel
|
||||||
|
- redhat-rpm-config
|
||||||
|
- python-virtualenv
|
||||||
|
- libffi-devel
|
||||||
|
- openssl-devel
|
||||||
|
- postgresql-devel
|
||||||
|
- libpqxx-devel.x86_64
|
||||||
|
|
||||||
|
# Create separate LVM storage for matrix
|
||||||
|
matrix_lvm_enabled: False
|
||||||
|
# This variables are only necessary if matrix_lvm_enabled is 'True'
|
||||||
|
# Set physical volumes to use in LVM
|
||||||
|
# matrix_lvm_pvs: # ['/dev/sdb', '/dev/sdc']
|
||||||
|
# matrix_lvm_vg: # "vg_matrix"
|
||||||
|
# matrix_lvm_lv: # "lv_matrix"
|
||||||
|
# matrix_lvm_fstype: # ext4
|
||||||
|
# matrix_lvm_size: # "50G"
|
||||||
|
|
||||||
|
matrix_base_dir: "/opt/matrix"
|
||||||
|
matrix_conf_dir: "{{ matrix_base_dir }}/config"
|
||||||
|
|
||||||
|
matrix_base_url: http://localhost
|
||||||
|
matrix_bind_ip: 127.0.0.1
|
||||||
|
matrix_bind_port: 3000
|
||||||
|
|
||||||
|
matrix_postgres_enabled: False
|
||||||
|
matrix_postgres_tls_enabled: False
|
||||||
|
matrix_postgres_server: postgres.example.com
|
||||||
|
matrix_postgres_port: 5432
|
||||||
|
matrix_postgres_superuser: postgres
|
||||||
|
matrix_postgres_password: secure
|
||||||
|
|
||||||
|
matrix_postgres_db:
|
||||||
|
name: matrix
|
||||||
|
lc_collate: en_US.UTF-8
|
||||||
|
lc_ctype: en_US.UTF-8'
|
||||||
|
encoding: UTF-8
|
||||||
|
template: template0
|
||||||
|
login_host: localhost
|
||||||
|
login_user: "{{ matrix_postgres_superuser }}"
|
||||||
|
login_password: "{{ matrix_postgres_password }}"
|
||||||
|
# login_unix_socket: # defaults to not set
|
||||||
|
port: "{{ matrix_postgres_port }}"
|
||||||
|
# owner: # defaults to not set
|
||||||
|
state: present
|
||||||
|
|
||||||
|
matrix_postgres_user:
|
||||||
|
name: pgmatrix
|
||||||
|
password: matrix
|
||||||
|
encrypted: 'yes'
|
||||||
|
# priv: # defaults to not set
|
||||||
|
# role_attr_flags: # defaults to not set
|
||||||
|
db: "{{ matrix_postgres_db.name }}"
|
||||||
|
login_host: localhost
|
||||||
|
login_user: "{{ matrix_postgres_superuser }}"
|
||||||
|
login_password: "{{ matrix_postgres_password }}"
|
||||||
|
# login_unix_socket: # defaults to not set
|
||||||
|
port: "{{ matrix_postgres_port }}"
|
||||||
|
state: present
|
||||||
|
|
||||||
|
matrix_iptables_enabled: False
|
||||||
|
matrix_open_ports:
|
||||||
|
- name: allow_matrix_web
|
||||||
|
rules: |
|
||||||
|
-A INPUT -m state --state NEW -p tcp --dport {{ matrix_bind_port }} -j ACCEPT
|
||||||
|
state: present
|
||||||
|
|
||||||
|
matrix_tls_cert_source: mycert.pem
|
||||||
|
matrix_tls_key_source: mykey.pem
|
||||||
|
|
||||||
|
matrix_nginx_vhost_enabled: False
|
||||||
|
matrix_nginx_server: localhost
|
||||||
|
matrix_nginx_vhost_dir: /etc/nginx/sites-available
|
||||||
|
matrix_nginx_vhost_symlink: /etc/nginx/sites-enabled
|
||||||
|
matrix_nginx_iptables_enabled: False
|
||||||
|
matrix_nginx_tls_enabled: False
|
||||||
|
matrix_nginx_tls_cert_file: matrix-cert.pem
|
||||||
|
matrix_nginx_tls_key_file: matrix-key.pem
|
19
handlers/main.yml
Normal file
19
handlers/main.yml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
- name: Restart rocketchat service
|
||||||
|
systemd:
|
||||||
|
name: rocketchat
|
||||||
|
state: restarted
|
||||||
|
daemon_reload: yes
|
||||||
|
enabled: yes
|
||||||
|
listen: __rocketchat_restart
|
||||||
|
become: True
|
||||||
|
become_user: root
|
||||||
|
|
||||||
|
- name: Reload nginx
|
||||||
|
systemd:
|
||||||
|
state: reloaded
|
||||||
|
name: nginx
|
||||||
|
listen: __nginx_reload
|
||||||
|
delegate_to: "{{ rocketchat_nginx_server }}"
|
||||||
|
become: True
|
||||||
|
become_user: root
|
13
meta/main.yml
Normal file
13
meta/main.yml
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Standards: 0.1
|
||||||
|
---
|
||||||
|
galaxy_info:
|
||||||
|
author: Robert Kaussow
|
||||||
|
description:
|
||||||
|
license: Robert Kaussow
|
||||||
|
min_ansible_version: 2.6
|
||||||
|
platforms:
|
||||||
|
- name: EL
|
||||||
|
versions:
|
||||||
|
- 7
|
||||||
|
galaxy_tags:
|
||||||
|
dependencies: []
|
61
tasks/install.yml
Normal file
61
tasks/install.yml
Normal file
@ -0,0 +1,61 @@
|
|||||||
|
---
|
||||||
|
- name: Prepare base folders
|
||||||
|
file:
|
||||||
|
path: "{{ item }}"
|
||||||
|
state: directory
|
||||||
|
owner: "{{ matrix_user }}"
|
||||||
|
group: "{{ matrix_user }}"
|
||||||
|
mode: 0750
|
||||||
|
loop:
|
||||||
|
- "{{ matrix_base_dir }}"
|
||||||
|
- "{{ matrix_conf_dir }}"
|
||||||
|
become: True
|
||||||
|
become_user: root
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: Upgrade python dependencies
|
||||||
|
pip:
|
||||||
|
name: "{{ item }}"
|
||||||
|
virtualenv: "{{ matrix_base_dir }}/env"
|
||||||
|
virtualenv_command: virtualenv
|
||||||
|
extra_args: --upgrade
|
||||||
|
loop:
|
||||||
|
- pip
|
||||||
|
- setuptools
|
||||||
|
- psycopg2
|
||||||
|
|
||||||
|
- name: Install with pip and virtualenv
|
||||||
|
pip:
|
||||||
|
name: synapse
|
||||||
|
version: "{{ matrix_version }}"
|
||||||
|
virtualenv: "{{ matrix_base_dir }}/env"
|
||||||
|
virtualenv_command: virtualenv
|
||||||
|
|
||||||
|
- name: Copy global config files
|
||||||
|
template:
|
||||||
|
src: "opt/matrix/config/homeserver.yml.j2"
|
||||||
|
dest: "{{ matrix_conf_dir }}/homeserver.yml"
|
||||||
|
notify: __matrix_restart
|
||||||
|
become: True
|
||||||
|
become_user: "{{ matrix_user }}"
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: Copy systemd unit file
|
||||||
|
template:
|
||||||
|
src: "etc/systemd/system/matrix.service.j2"
|
||||||
|
dest: "/etc/systemd/system/matrix.service"
|
||||||
|
notify: __matrix_restart
|
||||||
|
|
||||||
|
- name: Open ports in iptables
|
||||||
|
iptables_raw:
|
||||||
|
name: "{{ item.name }}"
|
||||||
|
rules: "{{ item.rules }}"
|
||||||
|
state: "{{ item.state }}"
|
||||||
|
weight: "{{ item.weight | default(omit) }}"
|
||||||
|
table: "{{ item.table | default(omit) }}"
|
||||||
|
with_items: "{{ matrix_open_ports }}"
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.name }}"
|
||||||
|
when: matrix_iptables_enabled
|
||||||
|
become: True
|
||||||
|
become_user: root
|
8
tasks/main.yml
Normal file
8
tasks/main.yml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
- include_tasks: prepare.yml
|
||||||
|
- import_tasks: storage.yml
|
||||||
|
when: matrix_lvm_enabled
|
||||||
|
- include_tasks: install.yml
|
||||||
|
- import_tasks: nginx.yml
|
||||||
|
when: matrix_nginx_vhost_enabled
|
||||||
|
- include_tasks: post_tasks.yml
|
48
tasks/nginx.yml
Normal file
48
tasks/nginx.yml
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
---
|
||||||
|
- block:
|
||||||
|
- name: Copy certs and private key to nginx proxy
|
||||||
|
copy:
|
||||||
|
src: "{{ item.src }}"
|
||||||
|
dest: "{{ item.dest }}"
|
||||||
|
mode: "{{ item.mode }}"
|
||||||
|
with_items:
|
||||||
|
- { src: "{{ matrix_tls_key_source }}", dest: '/etc/pki/tls/private/{{ matrix_nginx_tls_key_file }}', mode: '0600' }
|
||||||
|
- { src: "{{ matrix_tls_cert_source }}", dest: '/etc/pki/tls/certs/{{ matrix_nginx_tls_cert_file }}', mode: '0750' }
|
||||||
|
loop_control:
|
||||||
|
label: "{{ item.dest }}"
|
||||||
|
notify: __nginx_reload
|
||||||
|
delegate_to: "{{ matrix_nginx_server }}"
|
||||||
|
when: matrix_nginx_tls_enabled
|
||||||
|
become: True
|
||||||
|
become_user: root
|
||||||
|
tags: tls_renewal
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: Add vhost configuration file
|
||||||
|
template:
|
||||||
|
src: nginx/vhost.j2
|
||||||
|
dest: "{{ matrix_nginx_vhost_dir }}/matrix"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
mode: 0640
|
||||||
|
notify: __nginx_reload
|
||||||
|
|
||||||
|
- name: Enable matrix vhost
|
||||||
|
file:
|
||||||
|
src: "{{ matrix_nginx_vhost_dir }}/matrix"
|
||||||
|
dest: "{{ matrix_nginx_vhost_symlink }}/matrix"
|
||||||
|
owner: root
|
||||||
|
group: root
|
||||||
|
state: link
|
||||||
|
notify: __nginx_reload
|
||||||
|
when: matrix_nginx_vhost_symlink is defined
|
||||||
|
|
||||||
|
- name: Open ports in iptables
|
||||||
|
iptables_raw:
|
||||||
|
name: allow_matrix_nginx_proxy
|
||||||
|
state: present
|
||||||
|
rules: '-A OUTPUT -m state --state NEW -p tcp -d {{ matrix_bind_ip }} --dport {{ matrix_bind_port }} -j ACCEPT'
|
||||||
|
when: matrix_nginx_iptables_enabled
|
||||||
|
delegate_to: "{{ matrix_nginx_server }}"
|
||||||
|
become: True
|
||||||
|
become_user: root
|
9
tasks/post_tasks.yml
Normal file
9
tasks/post_tasks.yml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
---
|
||||||
|
- name: Ensure matrix service is up and running
|
||||||
|
systemd:
|
||||||
|
state: started
|
||||||
|
daemon_reload: yes
|
||||||
|
enabled: yes
|
||||||
|
name: matrix
|
||||||
|
become: True
|
||||||
|
become_user: root
|
60
tasks/prepare.yml
Normal file
60
tasks/prepare.yml
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
---
|
||||||
|
- block:
|
||||||
|
- name: Create group '{{ matrix_group }}'
|
||||||
|
group:
|
||||||
|
name: "{{ matrix_group }}"
|
||||||
|
state: present
|
||||||
|
gid: "{{ matrix_gid | default(omit) }}"
|
||||||
|
|
||||||
|
- name: Create user '{{ matrix_user }}'
|
||||||
|
user:
|
||||||
|
comment: matrix
|
||||||
|
name: "{{ matrix_user }}"
|
||||||
|
home: "{{ matrix_user_home }}"
|
||||||
|
uid: "{{ matrix_uid | default(omit) }}"
|
||||||
|
group: "{{ matrix_group }}"
|
||||||
|
groups: "{{ matrix_extra_groups | join(',') }}"
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
package:
|
||||||
|
name: "{{ item }}"
|
||||||
|
state: present
|
||||||
|
loop: "{{ matrix_dependencies }}"
|
||||||
|
become: True
|
||||||
|
become_user: root
|
||||||
|
|
||||||
|
- block:
|
||||||
|
- name: Setup postgres db '{{ matrix_postgres_db.name }}'
|
||||||
|
postgresql_db:
|
||||||
|
name: "{{ matrix_postgres_db.name }}"
|
||||||
|
lc_collate: "{{ matrix_postgres_db.lc_collate | default('en_US.UTF-8') }}"
|
||||||
|
lc_ctype: "{{ matrix_postgres_db.lc_ctype | default('en_US.UTF-8') }}"
|
||||||
|
encoding: "{{ matrix_postgres_db.encoding | default('UTF-8') }}"
|
||||||
|
template: "{{ matrix_postgres_db.template | default('template0') }}"
|
||||||
|
login_host: "{{ matrix_postgres_db.login_host | default('localhost') }}"
|
||||||
|
login_password: "{{ matrix_postgres_db.login_password | default(omit) }}"
|
||||||
|
login_user: "{{ matrix_postgres_db.login_user | default(postgresql_user) }}"
|
||||||
|
login_unix_socket: "{{ matrix_postgres_db.login_unix_socket | default(omit) }}"
|
||||||
|
port: "{{ matrix_postgres_db.port | default(omit) }}"
|
||||||
|
owner: "{{ matrix_postgres_db.owner | default(omit) }}"
|
||||||
|
state: "{{ matrix_postgres_db.state | default('present') }}"
|
||||||
|
no_log: True
|
||||||
|
when: matrix_postgres_db is defined
|
||||||
|
|
||||||
|
- name: Setup postgres user '{{ matrix_postgres_user.name }}'
|
||||||
|
postgresql_user:
|
||||||
|
name: "{{ matrix_postgres_user.name }}"
|
||||||
|
password: "{{ 'md5' + (matrix_postgres_user.password + matrix_postgres_user.name) | hash('md5') }}"
|
||||||
|
encrypted: "{{ matrix_postgres_user.encrypted | default('yes') }}"
|
||||||
|
priv: "{{ matrix_postgres_user.priv | default(omit) }}"
|
||||||
|
role_attr_flags: "{{ matrix_postgres_user.role_attr_flags | default(omit) }}"
|
||||||
|
db: "{{ matrix_postgres_user.db | default(omit) }}"
|
||||||
|
login_host: "{{ matrix_postgres_user.login_host | default('localhost') }}"
|
||||||
|
login_password: "{{ matrix_postgres_user.login_password | default(omit) }}"
|
||||||
|
login_user: "{{ matrix_postgres_user.login_user | default(omit) }}"
|
||||||
|
login_unix_socket: "{{ matrix_postgres_user.login_unix_socket | default(omit) }}"
|
||||||
|
port: "{{ matrix_postgres_user.port | default(omit) }}"
|
||||||
|
state: "{{ matrix_postgres_user.state | default('present') }}"
|
||||||
|
no_log: True
|
||||||
|
when: matrix_postgres_user is defined
|
||||||
|
delegate_to: "{{ matrix_postgres_server }}"
|
27
tasks/storage.yml
Normal file
27
tasks/storage.yml
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
- block:
|
||||||
|
- name: Create volume group '{{ matrix_lvm_vg }}'
|
||||||
|
lvg:
|
||||||
|
vg: "{{ matrix_lvm_vg }}"
|
||||||
|
pvs: "{{ matrix_lvm_pvs | join(',') }}"
|
||||||
|
|
||||||
|
- name: Create logical volume '{{ matrix_lvm_lv }}'
|
||||||
|
lvol:
|
||||||
|
vg: "{{ matrix_lvm_vg }}"
|
||||||
|
lv: "{{ matrix_lvm_lv }}"
|
||||||
|
size: "{{ matrix_lvm_size }}"
|
||||||
|
|
||||||
|
- name: Create filesystem for '/dev/mapper/{{ matrix_lvm_vg }}-{{ matrix_lvm_lv }}'
|
||||||
|
filesystem:
|
||||||
|
fstype: "{{ matrix_lvm_fstype }}"
|
||||||
|
dev: "/dev/mapper/{{ matrix_lvm_vg }}-{{ matrix_lvm_lv }}"
|
||||||
|
resizefs: True
|
||||||
|
|
||||||
|
- name: Mount volume to '{{ matrix_base_dir }}'
|
||||||
|
mount:
|
||||||
|
path: "{{ matrix_base_dir }}"
|
||||||
|
src: "/dev/mapper/{{ matrix_lvm_vg }}-{{ matrix_lvm_lv }}"
|
||||||
|
fstype: "{{ matrix_lvm_fstype }}"
|
||||||
|
state: mounted
|
||||||
|
become: True
|
||||||
|
become_user: root
|
19
templates/etc/systemd/system/matrix.service.j2
Normal file
19
templates/etc/systemd/system/matrix.service.j2
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
#jinja2: lstrip_blocks: True
|
||||||
|
## {{ ansible_managed }}
|
||||||
|
[Unit]
|
||||||
|
Description=Matrix Synapse service
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=forking
|
||||||
|
WorkingDirectory=/opt/synapse/
|
||||||
|
ExecStart=/opt/synapse/bin/synctl start
|
||||||
|
ExecStop=/opt/synapse/bin/synctl stop
|
||||||
|
ExecReload=/opt/synapse/bin/synctl restart
|
||||||
|
Restart=always
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
SyslogIdentifier=synapse
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
38
templates/nginx/vhost.j2
Normal file
38
templates/nginx/vhost.j2
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
#jinja2: lstrip_blocks: True
|
||||||
|
# {{ ansible_managed }}
|
||||||
|
upstream backend_matrix {
|
||||||
|
server {{ matrix_bind_ip }}:{{ matrix_bind_port }};
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name {{ matrix_base_url | urlsplit('hostname') }};
|
||||||
|
|
||||||
|
client_max_body_size 200M;
|
||||||
|
|
||||||
|
{% if matrix_nginx_tls_enabled %}
|
||||||
|
return 301 https://$server_name$request_uri;
|
||||||
|
{% else %}
|
||||||
|
location / {
|
||||||
|
proxy_pass http://backend_matrix;
|
||||||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
|
}
|
||||||
|
{% endif %}
|
||||||
|
}
|
||||||
|
|
||||||
|
{% if matrix_nginx_tls_enabled %}
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
server_name {{ matrix_base_url | urlsplit('hostname') }};
|
||||||
|
|
||||||
|
client_max_body_size 200M;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://backend_matrix;
|
||||||
|
proxy_set_header X-Forwarded-For $remote_addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
ssl_certificate /etc/pki/tls/certs/{{ matrix_nginx_tls_cert_file }};
|
||||||
|
ssl_certificate_key /etc/pki/tls/private/{{ matrix_nginx_tls_key_file }};
|
||||||
|
}
|
||||||
|
{% endif %}
|
1
templates/opt/matrix/config/homeserver.yml.j2
Normal file
1
templates/opt/matrix/config/homeserver.yml.j2
Normal file
@ -0,0 +1 @@
|
|||||||
|
---
|
Loading…
Reference in New Issue
Block a user