From 11fe863b6dd78469d0293a0470e976e7e59c2446 Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 14:56:02 +0200 Subject: [PATCH 1/9] Updates Nextcloud image to 31 --- templates/docker-compose.nextcloud.yml.j2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/docker-compose.nextcloud.yml.j2 b/templates/docker-compose.nextcloud.yml.j2 index 8b7f730..d0b7553 100644 --- a/templates/docker-compose.nextcloud.yml.j2 +++ b/templates/docker-compose.nextcloud.yml.j2 @@ -21,7 +21,7 @@ services: restart: unless-stopped nextcloud-app: - image: nextcloud:29-fpm-alpine + image: nextcloud:31-fpm-alpine restart: unless-stopped container_name: nextcloud-app depends_on: -- 2.45.3 From 93ed612a65f1b38fe9c05d36b493b02efb555029 Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:11:32 +0200 Subject: [PATCH 2/9] Explicitly handles maintenance mode around instance setup; Provides and runs database utils scripts --- defaults/main.yml | 2 + ...xtcloud-mysql-innodb-convert-row-format.sh | 16 ++++++++ tasks/main.yml | 38 +++++++++++++++++++ templates/docker-compose.nextcloud.yml.j2 | 1 + 4 files changed, 57 insertions(+) create mode 100755 files/nextcloud-mysql-innodb-convert-row-format.sh diff --git a/defaults/main.yml b/defaults/main.yml index fe3716d..889c32e 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,6 +9,8 @@ nextcloud_admin_user: admin nextcloud_admin_password: mynextcloud nextcloud_trusted_domains: localhost nextcloud_trusted_proxies: [ '172.18.0.0/16' ] +nextcloud_database_utils: + - nextcloud-mysql-innodb-convert-row-format.sh virtual_host: localhost letsencrypt_host: letsencrypt_email: diff --git a/files/nextcloud-mysql-innodb-convert-row-format.sh b/files/nextcloud-mysql-innodb-convert-row-format.sh new file mode 100755 index 0000000..e6360c4 --- /dev/null +++ b/files/nextcloud-mysql-innodb-convert-row-format.sh @@ -0,0 +1,16 @@ +#!/bin/sh + +# Source: https://help.nextcloud.com/t/upgrade-to-nextcloud-hub-10-31-0-0-incorrect-row-format-found-in-your-database/218366/13 + +# # Prompt for database credentials +# read -p "Enter Database Name: " MYSQL_DATABASE +# read -p "Enter Username: " MYSQL_USER +# read -s -p "Enter Password: " MYSQL_PASSWORD +# echo + +mysql -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" -Bse " +SELECT CONCAT('ALTER TABLE \`', TABLE_NAME, '\` ROW_FORMAT=DYNAMIC;') +FROM INFORMATION_SCHEMA.TABLES +WHERE TABLE_SCHEMA = '$MYSQL_DATABASE' +AND ENGINE = 'InnoDB' +" | mysql -u "$MYSQL_USER" -p"$MYSQL_PASSWORD" "$MYSQL_DATABASE" \ No newline at end of file diff --git a/tasks/main.yml b/tasks/main.yml index 93780d2..402aaa6 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -15,6 +15,25 @@ group: "{{ docker_user }}" mode: '0644' +- name: Ensure database utils scripts directory exists + file: + path: /home/{{ docker_user }}/nextcloud/utils + state: directory + owner: '{{ docker_user }}' + group: '{{ docker_user }}' + +- name: Provide database utils scripts + copy: + src: "{{ item }}" + dest: /home/{{ docker_user }}/nextcloud/utils/ + owner: "{{ docker_user }}" + group: "{{ docker_user }}" + mode: '0644' + loop: "{{ nextcloud_database_utils }}" + when: + - nextcloud_database_utils is defined + - nextcloud_database_utils | length > 0 + - name: Provide docker-compose.yml template: src: templates/docker-compose.nextcloud.yml.j2 @@ -131,6 +150,11 @@ host: "{{ nextcloud_ip }}" port: 80 +- name: "docker-compose: Enable maintenance mode using occ" + shell: + chdir: /home/{{ docker_user }}/nextcloud/ + cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ maintenance:mode --on' + - name: "docker-compose: Set overwriteprotocol using occ" shell: chdir: /home/{{ docker_user }}/nextcloud/ @@ -172,6 +196,20 @@ debug: var: "{{ nextcloud_app_install_result }}" +- name: "docker-compose: Run database utils" + shell: + chdir: /home/{{ docker_user }}/nextcloud/ + cmd: docker-compose exec -T mysqldb /bin/sh '/opt/utils/{{ item }}' + loop: "{{ nextcloud_database_utils }}" + when: + - nextcloud_database_utils is defined + - nextcloud_database_utils | length > 0 + +- name: "docker-compose: Disable maintenance mode using occ" + shell: + chdir: /home/{{ docker_user }}/nextcloud/ + cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ maintenance:mode --off' + - name: "Test whether Nextcloud is healthy from the outside" when: not ansible_check_mode become: false diff --git a/templates/docker-compose.nextcloud.yml.j2 b/templates/docker-compose.nextcloud.yml.j2 index d0b7553..fc48522 100644 --- a/templates/docker-compose.nextcloud.yml.j2 +++ b/templates/docker-compose.nextcloud.yml.j2 @@ -12,6 +12,7 @@ services: volumes: - mysqldb:/var/lib/mysql - /etc/localtime:/etc/localtime:ro + - ./utils/:/opt/utils:ro env_file: - db.env {% if nextcloud_enable_restic_compose_backup %} -- 2.45.3 From abbf7b50dc120f559cdd64d1e9b4b1789ba9d165 Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:12:21 +0200 Subject: [PATCH 3/9] Docker Compose should always pull --- tasks/main.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tasks/main.yml b/tasks/main.yml index 402aaa6..f1e1173 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -129,6 +129,7 @@ - name: "docker-compose: Start Nextcloud service" docker_compose: project_src: "/home/{{ docker_user }}/nextcloud/" + pull: true register: output tags: service_start -- 2.45.3 From 16304bd7c4921b4f10c035d69db4ed846d997295 Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:19:52 +0200 Subject: [PATCH 4/9] Sets default_phone_region --- defaults/main.yml | 1 + tasks/main.yml | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/defaults/main.yml b/defaults/main.yml index 889c32e..6a4693b 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -9,6 +9,7 @@ nextcloud_admin_user: admin nextcloud_admin_password: mynextcloud nextcloud_trusted_domains: localhost nextcloud_trusted_proxies: [ '172.18.0.0/16' ] +nextcloud_default_phone_region: DE nextcloud_database_utils: - nextcloud-mysql-innodb-convert-row-format.sh virtual_host: localhost diff --git a/tasks/main.yml b/tasks/main.yml index f1e1173..04fbfcb 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -197,6 +197,11 @@ debug: var: "{{ nextcloud_app_install_result }}" +- name: "docker-compose: Set default_phone_region using occ" + shell: + chdir: /home/{{ docker_user }}/nextcloud/ + cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ config:system:set default_phone_region --value="{{ nextcloud_default_phone_region }}"' + - name: "docker-compose: Run database utils" shell: chdir: /home/{{ docker_user }}/nextcloud/ -- 2.45.3 From 81b86deddcd0e158aa57def9488e53fe53835b8c Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:20:37 +0200 Subject: [PATCH 5/9] Maintenance activities should run at night between 01:00-05:00 UTC --- tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index 04fbfcb..d92e9d0 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -202,6 +202,11 @@ chdir: /home/{{ docker_user }}/nextcloud/ cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ config:system:set default_phone_region --value="{{ nextcloud_default_phone_region }}"' +- name: "docker-compose: Set maintenance_window_start to 1 using occ (This will run maintenance tasks between 01:00-05:00 UTC)" + shell: + chdir: /home/{{ docker_user }}/nextcloud/ + cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ config:system:set maintenance_window_start --value=1 --type=integer' + - name: "docker-compose: Run database utils" shell: chdir: /home/{{ docker_user }}/nextcloud/ -- 2.45.3 From a70efcf8e9e938b60d91dd99c80a0a8fafc3b426 Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:25:30 +0200 Subject: [PATCH 6/9] Runs maintenance:repair --include-expensive --- tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index d92e9d0..3a500bd 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -207,6 +207,11 @@ chdir: /home/{{ docker_user }}/nextcloud/ cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ config:system:set maintenance_window_start --value=1 --type=integer' +- name: "docker-compose: Run maintenance:repair --include-expensive using occ" + shell: + chdir: /home/{{ docker_user }}/nextcloud/ + cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ maintenance:repair --include-expensive' + - name: "docker-compose: Run database utils" shell: chdir: /home/{{ docker_user }}/nextcloud/ -- 2.45.3 From b8acfca98ea5b7209ff61d877da8d6ee473f35eb Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:36:15 +0200 Subject: [PATCH 7/9] Add missing indices --- tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index 3a500bd..b8493dc 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -207,6 +207,11 @@ chdir: /home/{{ docker_user }}/nextcloud/ cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ config:system:set maintenance_window_start --value=1 --type=integer' +- name: "docker-compose: Add missing indices using occ" + shell: + chdir: /home/{{ docker_user }}/nextcloud/ + cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ db:add-missing-indices' + - name: "docker-compose: Run maintenance:repair --include-expensive using occ" shell: chdir: /home/{{ docker_user }}/nextcloud/ -- 2.45.3 From f36c602a0e0312b16cd70664c0268247646f7d64 Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:37:23 +0200 Subject: [PATCH 8/9] Update all apps --- tasks/main.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/tasks/main.yml b/tasks/main.yml index b8493dc..cc5888b 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -207,6 +207,11 @@ chdir: /home/{{ docker_user }}/nextcloud/ cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ config:system:set maintenance_window_start --value=1 --type=integer' +- name: "docker-compose: Update all apps using occ" + shell: + chdir: /home/{{ docker_user }}/nextcloud/ + cmd: docker-compose exec -T -u www-data nextcloud-app /bin/sh -c './occ app:update --all' + - name: "docker-compose: Add missing indices using occ" shell: chdir: /home/{{ docker_user }}/nextcloud/ -- 2.45.3 From 23e504e481dc4d3a170944a59fcb9eefd9feaf23 Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:57:59 +0200 Subject: [PATCH 9/9] Always teardown the Docker Compose stack before updating it (will not delete any data) --- tasks/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tasks/main.yml b/tasks/main.yml index cc5888b..850dd63 100644 --- a/tasks/main.yml +++ b/tasks/main.yml @@ -120,11 +120,11 @@ CRON_SCHEDULE="{{ restic_cron_schedule }}" when: nextcloud_enable_restic_compose_backup == true -- name: "docker-compose: Teardown existing Nextcloud service" +- name: "docker-compose: Teardown existing Nextcloud service (will keep your volumes)" docker_compose: project_src: "/home/{{ docker_user }}/nextcloud/" state: absent - tags: ['never', 'teardown'] + tags: ['teardown'] - name: "docker-compose: Start Nextcloud service" docker_compose: -- 2.45.3