You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.0 KiB
YAML
125 lines
3.0 KiB
YAML
- name: Install required system packages # https://docs.mailcow.email/getstarted/install/
|
|
apt:
|
|
name:
|
|
- git
|
|
- openssl
|
|
- curl
|
|
- grep
|
|
- jq
|
|
state: latest
|
|
update_cache: true
|
|
|
|
- name: Open the necessary ports
|
|
community.general.ufw:
|
|
rule: allow
|
|
port: "{{item}}"
|
|
loop:
|
|
- 25
|
|
- 465
|
|
- 587
|
|
- 143
|
|
- 993
|
|
- 110
|
|
- 995
|
|
- 4190
|
|
|
|
- name: "Make sure that the storage dir exists"
|
|
file:
|
|
path: "{{ mailcow_storage_dir }}"
|
|
state: "directory"
|
|
|
|
- name: "Make sure that the storage dir exists for each volume"
|
|
file:
|
|
path: "{{ mailcow_storage_dir }}/{{item}}"
|
|
state: "directory"
|
|
loop:
|
|
- vmail-vol-1
|
|
- vmail-index-vol-1
|
|
- mysql-vol-1
|
|
- mysql-socket-vol-1
|
|
- redis-vol-1
|
|
- rspamd-vol-1
|
|
- postfix-vol-1
|
|
- postfix-tlspol-vol-1
|
|
- crypt-vol-1
|
|
- sogo-web-vol-1
|
|
- sogo-userdata-backup-vol-1
|
|
- clamd-db-vol-1
|
|
|
|
- name: Clone/checkout mailcow repo
|
|
ansible.builtin.git:
|
|
repo: "https://github.com/mailcow/mailcow-dockerized"
|
|
dest: "{{ mailcow_repo_dir }}"
|
|
version: "{{ mailcow_dockerized_commit }}"
|
|
update: false
|
|
|
|
- name: Read Docker daemon configuration
|
|
ansible.builtin.slurp:
|
|
src: /etc/docker/daemon.json
|
|
register: docker_daemon_json
|
|
failed_when: false
|
|
changed_when: false
|
|
|
|
- name: Enable Docker IPv6
|
|
ansible.builtin.copy:
|
|
dest: /etc/docker/daemon.json
|
|
content: >-
|
|
{{
|
|
(
|
|
(docker_daemon_json.content | default('e30=') | b64decode | from_json)
|
|
| combine({'ipv6': true})
|
|
)
|
|
| to_nice_json
|
|
}}
|
|
owner: root
|
|
group: root
|
|
mode: "0644"
|
|
notify: Restart Docker
|
|
|
|
- name: "Generate the config file"
|
|
shell:
|
|
cmd: "MAILCOW_HOSTNAME={{mailcow_hostname_fqdn}} MAILCOW_BRANCH=master MAILCOW_TZ={{mailcow_timezone}} ./generate_config.sh"
|
|
chdir: "{{ mailcow_repo_dir }}"
|
|
creates: "{{ mailcow_repo_dir }}/mailcow.conf"
|
|
|
|
- name: "Disable mailcow letsencrypt"
|
|
lineinfile:
|
|
path: "{{ mailcow_repo_dir }}/mailcow.conf"
|
|
regexp: "^SKIP_LETS_ENCRYPT="
|
|
line: SKIP_LETS_ENCRYPT=y
|
|
|
|
- name: "Create post-cert script for mailcow"
|
|
template:
|
|
src: "post-cert.sh"
|
|
dest: "{{ mailcow_repo_dir }}/post-cert.sh"
|
|
mode: "0777"
|
|
|
|
- name: "Setup post-cert renewal script to import certs into mailcow"
|
|
cron:
|
|
name: "import certs to mailcow"
|
|
minute: 45
|
|
hour: 2
|
|
job: "{{ mailcow_repo_dir }}/post-cert.sh"
|
|
|
|
- name: "docker compose down"
|
|
community.docker.docker_compose_v2:
|
|
state: "absent"
|
|
project_src: "{{ mailcow_repo_dir }}"
|
|
|
|
- name: Ensure HTTP_REDIRECT is set to 'n'
|
|
ansible.builtin.lineinfile:
|
|
path: "{{ mailcow_repo_dir }}/mailcow.conf" # Replace with the actual file path
|
|
regexp: "^HTTP_REDIRECT="
|
|
line: "HTTP_REDIRECT=n"
|
|
|
|
- name: "Generate docker-compose override"
|
|
template:
|
|
src: "docker-compose.override.yml.j2"
|
|
dest: "{{ mailcow_repo_dir }}/docker-compose.override.yml"
|
|
|
|
- name: "docker compose up -d mailcow"
|
|
community.docker.docker_compose_v2:
|
|
state: "present"
|
|
pull: missing
|
|
project_src: "{{ mailcow_repo_dir }}"
|