[教程]nextcloud从代码部署迁移到docker部署
写在前面
听说docker方便,很久以前就听说nextcloud有docker版本,但是一直对docker有点怕(不熟练,233)
纯代码部署迁移实在麻烦,以至于我的nextcloud还停留在14版本。
这回感觉nextcloud20版本功能似乎增加了不少。于是想着给它升级一下。
开始吧
一.对原来的数据库文件进行备份,我原料用的是宝塔,备份很方便。
下载下来,是gz压缩包。解压得到.sql的数据库文件
二.在新服务器上进行
1.安装docker:
apt -y update #centos用apt换成yum
apt -y install curl #centos用apt换成yum
curl -sSL https://get.docker.com/ | sh
systemctl start docker
systemctl enable docker
2.安装docker-compose:
curl -L https://github.com/docker/compose/releases/download/1.25.4/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
3.docker nextcloud相关内容要存放的位置,我给他设定在/www/docker下
不确定是否需要提前创建好目录,在此,我先建好了相关目录
mkdir -p /www/docker
mkdir -p /www/docker/config
mkdir -p /www/docker/data
mkdir -p /www/docker/www
4.新建docker-compose配置文件
nano /www/docker/docker-compose.yml
5.粘贴配置文件内容:
version: '2'
services:
db:
image: mariadb
restart: always
volumes:
- /www/docker/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_PASSWORD=nextcloud
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud:14.0.14 (备注,括号的都要删除,别留着配置文件中:20.0.0,设置你要的版本号。建议选择和你原来代码部署同版本,nextclud提示,逐级升级,如14->15->16……)
ports:
- 7009:80
links:
- db
volumes:
- /www/docker/www:/var/www/html
- /www/docker/data/:/var/www/html/data
- /www/docker/config:/var/www/html/config
restart: always
6.拉取
docker-compose up -d
到这里,如果不是迁移,只是新玩docker nextcloud的话,已经可以通过ip:7009访问,并新装nextcloud了(数据库位置不是localhost,而是db)
7.导入数据库
把备份的sql数据库文件,先上传到小鸡的某个地方,如,我的,/www/docker/yun.sql
运行一下,看看自己的容器名是啥
docker ps
你docker-compose配置文件yml,放的和我不同名目录下,在此应该能看到你自己的容器名。
然后拷贝数据库备份至容器应用中:
docker cp /www/docker/yun.sql docker_db_1:/opt/yun.sql
进入数据库容器,并恢复数据库:
#进入数据库容器
docker exec -it docker_db_1 /bin/bash
#导入数据
mysql -u root -p
#输入密码 root
mysql> use nextcloud
mysql> source /opt/yun.sql
#退出数据库操作
mysql> exit
#在退出数据库容器
exit
8.进入nextcloud容器,并恢复/config/config.php配置文件
你自己的config.php,如有一下,把他注释掉或删掉,可能会存在问题:
docker exec -it docker_app_1 /bin/bash
#我喜欢用nano,nextcloud容器没有,安装它
apt update
apt install nano -y
#回复配置文件config.php
nano /var/www/html/config/config.php
#把原来代码部署的该文件中内容贴进去,建议用你自己原来的,开了
大致如下:
'passwordsalt' => '一大串文本',
'secret' => '一大串文本',
'datadirectory' => '/var/www/html/data',
'overwrite.cli.url' => 'http://127.0.0.1:7009',
'dbtype' => 'mysql',
'version' => '14.0.14',
'dbname' => 'nextcloud',
'dbhost' => 'db',
'dbport' => '',
'dbtableprefix' => 'oc_',
'dbuser' => 'nextcloud',
'dbpassword' => 'nextcloud',
'installed' => true,
'theme' => '',
'loglevel' => 0,
'maintenance' => false,
8.2还有一种办法,不去docker里搞,直接在/www/docker/config/config.php也可以
但需要更正一下权限
进到docker_app_1容器里去修改的权限
docker exec -it docker_app_1 /bin/bash
chown -R www-data /var/www/html/config/config.php
9.升级数据库,以后,每升级一个版本,都需运行一下下面的命令,一下不行,二下,三下。
版本17->18实在不行,往下看
docker exec -u www-data -ti docker_app_1 php occ upgrade
应该已经能正常访问了ip:7009
更改docker-compose.yml中的nextcloud版本号,逐级,如原14,改成15
运行,即可拉取并运行新一个版本的nextcloud,别忘记升级一下数据库
docker-compose down && docker-compose up -d
docker exec -u www-data -ti docker_app_1 php occ upgrade
10.在升级过程中,有几个版本有报错,再次运行这升级命令,得到解决。
但是在17->18时,再次运行升级命令也无效,放狗搜索了下,得到解决办法
Upgrade fails with – Column name “oc_flow_operations.entity” is “NotNull”, but has empty string or null as default
https://github.com/nextcloud/server/issues/23174
解决办法如下,一条条运行:
docker exec -u docker_db_1 /bin/bash
mysql -u root -p
use nextcloud
alter table oc_flow_operations add column entity character varying(256) not null;
再次使用升级命令,成功升级
docker exec -u www-data -ti docker_app_1 php occ upgrade
写在下面:
目前,我已经把nextcloud版本14->15->16->17->18->19->20,逐级升级到了20.0