- name: Create Docker container bind mount directories file: path: ["{{ nextcloud_root }}", "{{ nextcloud_dbroot }}"] state: directory - name: Create Nextcloud network docker_network: name: "{{ nextcloud_container }}" - name: Start Nextcloud's database container docker_container: name: "{{ nextcloud_dbcontainer }}" image: mariadb:{{ nextcloud_dbversion }} 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 docker_container: name: "{{ nextcloud_container }}" image: nextcloud:{{ nextcloud_version }} 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.docker.network: traefik traefik.enable: "true" - name: Grab Nextcloud container information docker_container_info: name: "{{ nextcloud_container }}" register: nextcloud_info - name: Wait for Nextcloud to become available wait_for: host: "{{ nextcloud_info.container.NetworkSettings.Networks.traefik.IPAddress }}" port: 80 - name: Check Nextcloud status command: "docker exec --user www-data {{ nextcloud_container }} php occ status" register: nextcloud_status args: removes: "{{ nextcloud_root }}/config/CAN_INSTALL" - name: Install Nextcloud 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 Domain 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 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 file: path: "{{ nextcloud_root }}/config/CAN_INSTALL" state: absent