From 93ed612a65f1b38fe9c05d36b493b02efb555029 Mon Sep 17 00:00:00 2001 From: Jan Beilicke Date: Fri, 18 Apr 2025 21:11:32 +0200 Subject: [PATCH] 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 %}