- 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 }}"