nextcloud 安装部署升级
Nextcloud 是一款开源的私有云存储与协作平台,它不仅可以在本地或私有服务器上搭建,还能提供文件同步、共享、WebDAV、在线协作、日历、通讯录甚至办公套件(如 OnlyOffice)的支持,Nextcloud 就像是一个可以完全掌握在自己手里的「私人网盘 + 协作中心」。企业可以用来做为自己的私有知识库。
一、安装部署
以下安装以版本30.0.2为主,部署方式docker-compose
1、下载镜像
docker pull nextcloud:30.0.2
docker pull onlyoffice/documentserver
docker pull mysql:8.0.33
2、部署文件准备(参考)
# mysql docker-compose.yaml
--------------------
[root@localhost yaml]# cat mysql/docker-compose.yaml
version: "3.8"
services:mysql:restart: alwaysimage: mysql:8.0.33container_name: mysqlports:- 3306:3306environment:- MYSQL_ROOT_PASSWORD=XXXXXXX- TZ=Asia/Shanghaihealthcheck:test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]interval: 60sretries: 1volumes:- /data/mysql/data:/var/lib/mysql- /data/mysql/my.cnf:/etc/my.cnf # nextcloud docker-compose.yaml
--------------------
[root@localhost yaml]# cat nextcloud/docker-compose.yaml
version: '2'
services:app:container_name: "nextcloud"image: docker.io/library/nextcloud:31.0.9restart: alwaysports:- 8088:80volumes:- /data/nextcloud:/var/www/htmlenvironment:- MYSQL_PASSWORD=XXXXXXX- MYSQL_DATABASE=nextcloud- MYSQL_USER=root- MYSQL_HOST=XXXXXXX# onlyoffice docker-compose.yaml
--------------------
[root@localhost yaml]# cat onlyoffice/docker-compose.yaml
version: '3'
services:only-office:image: onlyoffice/documentservercontainer_name: onlyofficeenvironment:- JWT_SECRET=XXXXXXXports:- 8089:80volumes:- /data/onlyoffice:/var/www/onlyoffice/Data- /data/onlyoffice/logs:/var/log/onlyofficerestart: alwaysprivileged: true
# my.cnf 参考
-------------------
[root@localhost mysql]# cat my.cnf
[client]
socket=/var/run/mysql.sock
default-character-set=utf8[mysqld]
bind-address = 0.0.0.0
port=3306
character_set_server=utf8
server-id=10
secure_file_priv=/var/lib/data
datadir=/var/lib/data/mysql
socket=/var/lib/data/mysql/mysql.sock
log_error=/var/lib/data/mysql/mysql-error.log
slow_query_log=1
long_query_time=3
slow_query_log_file=/var/lib/data/mysql/mysql-slow.log
log_bin=/var/lib/data/mysql/mysql-bin
log_bin_index=/var/lib/data/mysql/mysql-bin.index
max_binlog_size=4096M
#max_binlog_files=0
expire_logs_days=1
max_connections=1000
innodb_buffer_pool_size=2G
max_connect_errors = 2000
default-storage-engine = InnoDB
wait_timeout = 600
gtid_mode=on
enforce_gtid_consistency=on
log_slave_updates=1
binlog_format=row
#skip-grant-tables
skip_slave_start=1
default-time-zone = '+08:00'
lower_case_table_names = 1
2、启动容器
# 依次启动容器(docker-compose命令不同版本有所差异),确保服务均正常运行
docker-compose up -d
3、初始化安装
# 访问 web页面,选择mysql即可进行初始化安装
4、配置onlyoffice插件
-
确保onlyoffice服务正常,上面服务映射的宿主机端口是8089,可以浏览器访问
-
去官方下载适配nextcloud版本的onlyoffice插件https://apps.nextcloud.com/apps/onlyoffice
![image-20250926175331392] -
把插件解压到nextcloud的apps目录
![image-20250926174219693] -
在nextcloud应用中启用onlyoffice插件
二、版本升级
升级策略:采用逐步升级,从 Nextcloud 30.0.2 升级到 30.0.15 后,再升级到 31.0.9,以确保系统稳定性。
升级步骤参考如下:
1、停止服务并检查
docker-compose down
3、备份重要文件
# Nextcloud目录下主要文件备份 (conf、data)
cd nextcloud && mkdir backup
cp -r conf ../backup
cp -r data ../backup# 数据库文件也要备份,方便回滚
4、删除其余文件
shopt -s extglob
ls -d !("config"|"data")
rm -rf !("config"|"data")
shopt -u extglob
5、下载官方镜像
# 下载官方镜像30.0.15,修改docker-compose文件中镜像为30.0.15
docker pull nextcloud:30.0.15
--------------------------------
[root@localhost nextcloud]# grep image docker-compose.yaml image: docker.io/library/nextcloud:30.0.15
6、启动容器
[root@localhost nextcloud]# docker-compose up -d
[+] Running 2/2⠿ Network nextcloud_default Created ⠿ Container nextcloud Started
7、进行升级
[root@localhost nextcloud]# docker ps
[root@localhost nextcloud]# docker exec -u www-data -it nextcloud bash
www-data@240514b911be:~/html$ php /var/www/html/occ upgrade
Nextcloud or one of the apps require upgrade - only a limited number of commands are available
You may use your browser or the occ upgrade command to do the upgrade
Setting log level to debug
Turned on maintenance mode
Updating database schema
Updated database
Disabled incompatible app: onlyoffice
Updating <theming> ...
Updated <theming> to 2.6.0
Updating <app_api> ...
Updated <app_api> to 4.0.6
Starting code integrity check...
Finished code integrity check
Update successful
Turned off maintenance mode
Resetting log level
www-data@240514b911be:~/html$ php /var/www/html/occ status- installed: true # 已经完成安装- version: 30.0.15.1 # 内部数据库用的构建号- versionstring: 30.0.15 # 正式版本号- edition: # 空的说明是社区版(Community Edition)- maintenance: false # 维护模式关闭,正常提供服务- needsDbUpgrade: false # 数据库已经升级成功不需要再做迁移- productname: Nextcloud # 产品名称- extendedSupport: false # 没有订阅扩展支持
www-data@240514b911be:~/html$ php /var/www/html/occ maintenance:repair------------#非必须,除非你动过 data 目录,重新扫描数据更新至数据库---------
www-data@240514b911be:~/html$ php /var/www/html/occ files:scan --all
Starting scan for user 1 out of 1 (admin)
+---------+-------+-----+---------+---------+--------+--------------+
| Folders | Files | New | Updated | Removed | Errors | Elapsed time |
+---------+-------+-----+---------+---------+--------+--------------+
| 7 | 54 | 0 | 0 | 0 | 0 | 00:00:01 |
+---------+-------+-----+---------+---------+--------+--------------+
8、继续升级
# 重复以上步骤将版本升级至31.0.9
[root@localhost nextcloud]# docker ps | grep nextcloud
240514b911be nextcloud:30.0.15 "/entrypoint.sh apac…" 27 minutes ago Up 27 minutes 0.0.0.0:8088->80/tcp nextcloud
[root@localhost nextcloud]# docker-compose down
[+] Running 2/2⠿ Container nextcloud Removed ⠿ Network nextcloud_default Removed ------------------------[root@localhost nextcloud]# docker ps | grep nextcloud
[root@localhost nextcloud]# vi docker-compose.yaml
[root@localhost nextcloud]# grep image docker-compose.yaml image: docker.io/library/nextcloud:31.0.9------------------------[root@localhost data]# cd nextcloud
[root@localhost nextcloud]# ls
3rdparty composer.json console.php cron.php dist lib occ package.json remote.php robots.txt version.php
apps composer.lock COPYING custom_apps index.html LICENSES ocs package-lock.json resources status.php
AUTHORS config core data index.php nextcloud-init-sync.lock ocs-provider public.php REUSE.toml themes
[root@localhost nextcloud]# shopt -s extglob
[root@localhost nextcloud]# ls -d !("config"|"data")
3rdparty composer.json COPYING custom_apps index.php nextcloud-init-sync.lock ocs-provider public.php REUSE.toml themes
apps composer.lock core dist lib occ package.json remote.php robots.txt version.php
AUTHORS console.php cron.php index.html LICENSES ocs package-lock.json resources status.php
[root@localhost nextcloud]# rm -rf !("config"|"data")
[root@localhost nextcloud]# ls
config data
[root@localhost nextcloud]# shopt -u extglob------------------------[root@localhost nextcloud]# docker-compose up -d
[+] Running 2/2⠿ Network nextcloud_default Created ⠿ Container nextcloud Started
[root@localhost nextcloud]# docker ps | grep nextcloud
1cd3e2fdaf98 nextcloud:31.0.9 "/entrypoint.sh apac…" 11 seconds ago Up 10 seconds 0.0.0.0:8088->80/tcp nextcloud------------------------
[root@localhost nextcloud]# docker exec -u www-data -it nextcloud bash
www-data@c1525f36aa55:~/html$ php /var/www/html/occ upgrade
No upgrade required.Note: This command triggers the upgrade actions associated with a new version. The new version's updated source files must be deployed in advance.
See the upgrade documentation: https://docs.nextcloud.com/server/31/go.php?to=admin-update for more information.
www-data@c1525f36aa55:~/html$ php /var/www/html/occ status- installed: true- version: 31.0.9.1- versionstring: 31.0.9- edition: - maintenance: false- needsDbUpgrade: false- productname: Nextcloud- extendedSupport: false
www-data@c1525f36aa55:~/html$ php /var/www/html/occ maintenance:repair
www-data@c1525f36aa55:~/html$ php /var/www/html/occ files:scan --all
Starting scan for user 1 out of 1 (admin)
+---------+-------+-----+---------+---------+--------+--------------+
| Folders | Files | New | Updated | Removed | Errors | Elapsed time |
+---------+-------+-----+---------+---------+--------+--------------+
| 7 | 54 | 0 | 0 | 0 | 0 | 00:00:01 |
+---------+-------+-----+---------+---------+--------+--------------+