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.

131 lines
3.2 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: Configure Mailcow IPv4 network
ansible.builtin.lineinfile:
path: "{{ mailcow_repo_dir }}/mailcow.conf"
regexp: "^IPV4_NETWORK="
line: "IPV4_NETWORK={{ mailcow_docker_subnet }}"
- 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 }}"