- name: Create Nextcloud network community.general.docker_network: name: "{{ nextcloud_container }}" - name: Start Nextcloud's database container community.general.docker_container: name: "{{ nextcloud_dbcontainer }}" image: mariadb:{{ nextcloud_dbversion }} state: started restart_policy: always volumes: "{{ nextcloud_dbroot }}:/var/lib/mysql" networks_cli_compatible: true networks: - name: "{{ nextcloud_container }}" env: MYSQL_RANDOM_ROOT_PASSWORD: "true" MYSQL_DATABASE: "{{ nextcloud_dbname }}" MYSQL_USER: "{{ nextcloud_dbuser }}" MYSQL_PASSWORD: "{{ nextcloud_dbpass }}" - name: Start Nextcloud container community.general.docker_container: name: "{{ nextcloud_container }}" image: nextcloud:{{ nextcloud_version }} state: started restart_policy: always volumes: "{{ nextcloud_root }}:/var/www/html" networks_cli_compatible: true networks: - name: "{{ nextcloud_container }}" - name: traefik labels: traefik.http.routers.nextcloud.rule: "Host(`{{ nextcloud_domain }}`)" traefik.http.routers.nextcloud.entrypoints: websecure traefik.http.routers.nextcloud.tls.certresolver: letsencrypt traefik.http.routers.nextcloud.middlewares: "securehttps@file,nextcloud-webdav" traefik.http.middlewares.nextcloud-webdav.redirectregex.regex: "https://(.*)/.well-known/(card|cal)dav" traefik.http.middlewares.nextcloud-webdav.redirectregex.replacement: "https://${1}/remote.php/dav/" traefik.http.middlewares.nextcloud-webdav.redirectregex.permanent: "true" traefik.docker.network: traefik traefik.enable: "true" - name: Grab Nextcloud database container information community.general.docker_container_info: name: "{{ nextcloud_dbcontainer }}" register: nextcloud_dbinfo - name: Grab Nextcloud container information community.general.docker_container_info: name: "{{ nextcloud_container }}" register: nextcloud_info - name: Wait for Nextcloud to become available ansible.builtin.wait_for: host: "{{ nextcloud_info.container.NetworkSettings.Networks.traefik.IPAddress }}" port: 80 - name: Check Nextcloud status ansible.builtin.command: "docker exec --user www-data {{ nextcloud_container }} php occ status" register: nextcloud_status args: removes: "{{ nextcloud_root }}/config/CAN_INSTALL" - name: Wait for Nextcloud database to become available ansible.builtin.wait_for: host: "{{ nextcloud_dbinfo.container.NetworkSettings.Networks.nextcloud.IPAddress }}" port: 3306 - name: Install Nextcloud ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_container }} php occ maintenance:install --database "mysql" --database-host "{{ nextcloud_dbcontainer }}" --database-name "{{ nextcloud_dbname }}" --database-user "{{ nextcloud_dbuser }}" --database-pass "{{ nextcloud_dbpass }}" --admin-user "{{ nextcloud_admin }}" --admin-pass "{{ nextcloud_pass }}"' register: nextcloud_install when: - nextcloud_status.stdout[:26] == "Nextcloud is not installed" - nextcloud_domain is defined - name: Set Nextcloud's Trusted Proxy ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_container }} php occ config:system:set trusted_proxies 0 --value="{{ traefik_name }}"' when: nextcloud_install.changed - name: Set Nextcloud's Trusted Domain ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_container }} php occ config:system:set trusted_domains 0 --value="{{ nextcloud_domain }}"' when: nextcloud_install.changed - name: Preform Nextcloud database maintenance ansible.builtin.command: "docker exec --user www-data {{ nextcloud_container }} {{ item }}" loop: - "php occ maintenance:mode --on" - "php occ db:add-missing-indices" - "php occ db:convert-filecache-bigint" - "php occ maintenance:mode --off" when: nextcloud_install.changed - name: Remove Nextcloud's CAN_INSTALL file ansible.builtin.file: path: "{{ nextcloud_root }}/config/CAN_INSTALL" state: absent