112 lines
3.2 KiB
YAML
Executable File
112 lines
3.2 KiB
YAML
Executable File
---
|
|
# Basic
|
|
- name: install requirements for mailcow
|
|
apt:
|
|
update_cache: yes
|
|
state: "{% if cloud_update | bool %}latest{% else %}present{% endif %}"
|
|
install_recommends: yes
|
|
pkg:
|
|
- python3-openssl
|
|
|
|
# Mailcow Setup
|
|
- name: clone mailcow repository
|
|
git:
|
|
repo: https://github.com/mailcow/mailcow-dockerized
|
|
dest: "{{ mailcow_folder }}"
|
|
update: no
|
|
|
|
# Mailcow Config
|
|
- name: setup mailcow config
|
|
template:
|
|
src: opt/mailcow/mailcow.conf.j2
|
|
dest: "{{ mailcow_folder }}/mailcow.conf"
|
|
mode: 0600
|
|
notify: restart mailcow docker containers
|
|
|
|
- name: setup env link to mailcow conf
|
|
file:
|
|
src: "{{ mailcow_folder }}/mailcow.conf"
|
|
dest: "{{ mailcow_folder }}/.env"
|
|
state: link
|
|
|
|
- name: setup ssl folder
|
|
file:
|
|
path: "{{ mailcow_ssl_path }}"
|
|
state: directory
|
|
|
|
- name: generate dh params
|
|
openssl_dhparam:
|
|
path: "{{ mailcow_ssl_path }}/dhparams.pem"
|
|
size: 2048
|
|
notify: restart mailcow docker containers
|
|
when: not (mailcow_use_letsencrypt | default('false'))
|
|
|
|
- name: use predefined dh params
|
|
copy:
|
|
remote_src: yes
|
|
src: "{{ mailcow_folder }}/data/assets/ssl-example/dhparams.pem"
|
|
dest: "{{ mailcow_ssl_path }}/dhparams.pem"
|
|
notify: restart mailcow docker containers
|
|
when: (mailcow_use_letsencrypt | default('false'))
|
|
|
|
- name: generate ssl private key
|
|
openssl_privatekey:
|
|
path: "{{ mailcow_ssl_path }}/key.pem"
|
|
size: 4096
|
|
register: key_generation
|
|
notify: restart mailcow docker containers
|
|
|
|
- name: generate ssl cert request
|
|
openssl_csr:
|
|
path: "{{ mailcow_ssl_path }}/csr.pem"
|
|
privatekey_path: "{{ mailcow_ssl_path }}/key.pem"
|
|
common_name: "{{ mailcow_cert_subjects.CN }}"
|
|
country_name: "{{ mailcow_cert_subjects.C }}"
|
|
locality_name: "{{ mailcow_cert_subjects.L }}"
|
|
organization_name: "{{ mailcow_cert_subjects.O }}"
|
|
organizational_unit_name: "{{ mailcow_cert_subjects.OU }}"
|
|
state_or_province_name: "{{ mailcow_cert_subjects.ST }}"
|
|
when: key_generation.changed
|
|
register: cert_request
|
|
|
|
- name: generate selfsigned certificate
|
|
openssl_certificate:
|
|
provider: selfsigned
|
|
path: "{{ mailcow_ssl_path }}/cert.pem"
|
|
privatekey_path: "{{ mailcow_ssl_path }}/key.pem"
|
|
csr_path: "{{ mailcow_ssl_path }}/csr.pem"
|
|
when: cert_request.changed
|
|
notify: restart mailcow docker containers
|
|
|
|
- name: set http redirect to https
|
|
template:
|
|
src: opt/mailcow/data/conf/nginx/redirect.conf.j2
|
|
dest: "{{ mailcow_folder }}/data/conf/nginx/redirect.conf"
|
|
notify: restart mailcow docker containers
|
|
when: mailcow_no_http
|
|
|
|
# Mailcow build
|
|
- name: check mailcow image availability
|
|
command: docker image list
|
|
changed_when: false
|
|
register: docker_image_list
|
|
|
|
- name: pull images for mailcow containers
|
|
command:
|
|
cmd: docker-compose pull
|
|
chdir: "{{ mailcow_folder }}/"
|
|
when: "'mailcow' not in docker_image_list.stdout"
|
|
|
|
- name: find running mailcow containers
|
|
command:
|
|
cmd: "{% raw %}docker ps --format '{{.Image}}'{% endraw %}"
|
|
chdir: "{{ mailcow_folder }}/"
|
|
changed_when: false
|
|
register: docker_running_list
|
|
|
|
- name: start mailcow containers if not running
|
|
command:
|
|
cmd: docker-compose up -d
|
|
chdir: "{{ mailcow_folder }}/"
|
|
when: "'mailcow' not in docker_running_list.stdout"
|
|
register: mailcow_start |