- name: Install MySQL module for Ansible ansible.builtin.apt: name: python3-pymysql state: present - name: Create Nextcloud database community.mysql.mysql_db: name: "{{ nextcloud.DB_NAME | default('nextcloud') }}" state: present login_unix_socket: /var/run/mysqld/mysqld.sock - name: Create Nextcloud database user community.mysql.mysql_user: name: "{{ nextcloud.DB_USER | default('nextcloud') }}" password: "{{ nextcloud.DB_PASSWD }}" host: '%' state: present priv: "{{ nextcloud.DB_NAME | default('nextcloud') }}.*:ALL" login_unix_socket: /var/run/mysqld/mysqld.sock - name: Start Nextcloud service and enable on boot ansible.builtin.service: name: "{{ docker_compose_service }}@{{ nextcloud_name }}" state: started enabled: true when: nextcloud.ENABLE | default('false') - name: Grab Nextcloud container information community.general.docker_container_info: name: "{{ nextcloud_name }}" register: nextcloud_info - name: Wait for Nextcloud to become available ansible.builtin.wait_for: host: "{{ nextcloud_info.container.NetworkSettings.Networks.traefik.IPAddress }}" delay: 10 port: 80 - name: Check Nextcloud status ansible.builtin.command: "docker exec --user www-data {{ nextcloud_name }} php occ status" register: nextcloud_status changed_when: false - name: Install Nextcloud ansible.builtin.command: 'docker exec --user www-data {{ nextcloud_name }} php occ maintenance:install --database "mysql" --database-host "{{ nextcloud.DB_HOST | default(''host.docker.internal'') }}" --database-name "{{ nextcloud.DB_NAME | default(''nextcloud'') }}" --database-user "{{ nextcloud.DB_USER | default(''nextcloud'') }}" --database-pass "{{ nextcloud.DB_PASSWD }}" --admin-user "{{ nextcloud.ADMIN_USER | default(''admin'') }}" --admin-pass "{{ nextcloud.ADMIN_PASSWD }}"' register: nextcloud_install when: nextcloud_status.stderr[:26] == "Nextcloud is not installed" - 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: Install Nextcloud background jobs cron ansible.builtin.cron: name: Nextcloud background job minute: "*/5" job: "/usr/bin/docker exec -u www-data nextcloud /usr/local/bin/php -f /var/www/html/cron.php" user: root - name: Remove Nextcloud's CAN_INSTALL file ansible.builtin.file: path: "{{ nextcloud_root }}/config/CAN_INSTALL" state: absent