3
0
forked from jakub/ansible
Files
ansible_fencl/nextcloud_upgrade.yml
2025-10-03 13:36:35 +02:00

112 lines
3.8 KiB
YAML

---
- name: Upgrade Nextcloud to 31-apache (pull + recreate + occ)
hosts: proxmox
become: true
vars:
nc_container: nextcloud
nc_image_tag: "31-apache" # change to 32-apache when you step to next major
# Ports/volumes/env exactly as you use:
nc_root: /data/compose/nextcloud
nc_http_port: "8080:80"
tasks:
- name: Gather nextcloud container info
community.docker.docker_container_info:
name: "{{ nc_container }}"
register: nc_info
- name: Derive compose project & network from existing container
ansible.builtin.set_fact:
nc_project: "{{ nc_info.container.Config.Labels['com.docker.compose.project'] | default('nextcloud') }}"
nc_networks: "{{ (nc_info.container.NetworkSettings.Networks | default({})).keys() | list }}"
nc_net_primary: "{{ (nc_info.container.NetworkSettings.Networks | default({})).keys() | list | first }}"
when: nc_info.exists
- name: Enable maintenance mode
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ maintenance:mode --on
- name: Render one-off compose for nextcloud (single-service)
ansible.builtin.copy:
dest: /tmp/nc.yml
mode: '0644'
content: |
name: {{ nc_project }}
services:
nextcloud:
image: nextcloud:{{ nc_image_tag }}
container_name: {{ nc_container }}
restart: unless-stopped
networks: [cloud]
ports: ["{{ nc_http_port }}"]
volumes:
- {{ nc_root }}/config:/var/www/html/config
- {{ nc_root }}/data:/var/www/html/data
- {{ nc_root }}/custom_apps:/var/www/html/custom_apps
environment:
TZ: Europe/Prague
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: dbpassword
MYSQL_HOST: nextclouddb
REDIS_HOST: redis
NEXTCLOUD_ADMIN_USER: root
NEXTCLOUD_ADMIN_PASSWORD: '1234SilneHeslo.-.'
networks:
cloud:
external: true
name: {{ nc_net_primary }}
- name: Pull the new Nextcloud image
community.docker.docker_compose_v2:
project_name: "{{ nc_project }}"
files: ["/tmp/nc.yml"]
pull: always
state: present
- name: Recreate Nextcloud with the new image
community.docker.docker_compose_v2:
project_name: "{{ nc_project }}"
files: ["/tmp/nc.yml"]
recreate: always
state: present
- name: Run occ upgrade
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ upgrade
- name: Recommended DB maintenance (safe to run)
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ db:add-missing-indices
ignore_errors: true
- name: Convert filecache bigint (safe)
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ db:convert-filecache-bigint --no-interaction
ignore_errors: true
- name: Disable maintenance mode
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ maintenance:mode --off
- name: Show status
community.docker.docker_container_exec:
container: "{{ nc_container }}"
user: "www-data"
command: php occ status
register: nc_status
- name: Print status
ansible.builtin.debug:
msg: "{{ nc_status.stdout | default('no output') }}"