Docker系列 尝试使用nextcloud(十) 迁移Nextcloud
本文最后更新于 654 天前,如有失效请评论区留言。

本博客由Faconhost大力赞助!如何更快地访问本站?有需要可加电报群获得更多帮助。本博客用什么VPS?创作不易,请支持苯苯!推荐购买本博客的VIP喔,10元/年即可畅享所有VIP专属内容!

前言

如果你看过《Docker系列 深度使用nextcloud(十)升级nextcloud》,就会发现升级Nextcloud可能会碰到很多复杂情况。最近我将Nextcloud从旧NAS里迁移至PVE的Openmediavault虚拟机时,发现迁移Nextcloud也可能会遇到很多问题。因此,这里我简单做一个备忘录,同时也希望对有这种需求的小伙伴提个醒,遇事不用慌!

这里的Nextcloud迁移是基于《Docker系列 搭建个人云盘服务nextcloud》安装的Docker版Nextcloud。如果你用的是其它方法安装Nextcloud,参考价值可能比较有限。

msedge_rdlAQCK0BA

准备工作

暂停应用

(可选)进入旧NAS里面,关闭Nextcloud的Stack。具体的做法是去到docker-compose.yml所在的Nextcloud根目录并运行docker-compose down。我当时备份的时候并没有执行这一步;不过暂时下线Stack后再迁移应该是最安全的方法。

拷贝目录

由于Nextcloud的数据库和某些文件夹的用户(组)比较复杂,为了避免复制遗漏,我建议使用root用户通过scp的方法复制整个根目录到新的位置

首先,我们进入新NAS,定义一个docker目录,比如:

work=/docker/

创建并进入目录:

mkdir -p $work && cd $work

接着,进入旧NAS的shell,将旧NAS的Nextcloud根目录(比如/oldnas/docker/nextcloud)通过scp复制到新NAS里。具体的命令类似:

# scp -r -p -P <新NAS的SSH端口号> <旧NAS Nextcloud根目录> <新NAS用户名>@<新NAS IP地址>:/docker/
scp -r -p -P 22 /oldnas/docker/nextcloud [email protected]:/docker/

这个过程可能会输入新NAS的该用户的密码,输入即可。用rsync(比如文章《如何在 Linux 中使用 rsync 传输文件》)也可以,并且可以挂后台,Nextcloud体积太大的小伙伴可以试试。印象中是这样用:

# rsync -a -P <新NAS的SSH端口号> <旧NAS Nextcloud根目录> <新NAS用户名>@<新NAS IP地址>:/docker/
rsync -a -P /oldnas/docker/nextcloud [email protected]:/docker/
bg # 放入后台。
disown %1# 将这个作业忽略HUP信号

这样即便是关闭了当前的Shell,进程也不会终止。

无论scp或者rsync都要按需要改好端口号、文件夹等参数。

Image版本号

拷贝目录的时候,我们新开一个旧NAS的Shell并观察数据库和Nextcloud的镜像版本。如果新/旧NAS里的nextcloud/mariadb的版本相差太远,可能会导致Nextcloud无法在新NAS中正常使用。比如,我在迁移时就发现mariadb的最新版(10.11-rc)与10.6.5是不相兼容的——如果你在10.6.5的数据结构里强行使用10.11-rc的mariadb会出现clash错误。我暂时也不知道怎么升级到最新数据库,推测类似于nextcloud升级那样逐步升级,或者是利用phpmyadmin或mysqldump命令等方法将数据备份好再重新导入新数据库。

Nextcloud的镜像版本号可以在Portainer里面找。很多人安装镜像时会缺省标签或用latest的标签安装,所以还是要点击进去看:

msedge_tV6taNtSuZ

找到Image layers这一项,定位至ENV NEXTCLOUD_VERSION这个字段,上面有版本号:

image-20230203193244768

Mariadb也一样,如果标签是latest,就点进去找到ENV MARIADB_VERSION字样。我这里提示它的版本号是10.6.5

image-20230203193510274

另外,你最好在dockerhub里面核实一下镜像具体的版本号。比如,我最终确定两个镜像为:nextcloud:25.0.2mariadb:10.6.5-focal。你在新版的docker-compose.yml里记得修改为这两个tag再进行安装。

Redis的版本号似乎不重要。可能是因为Redis完全是个辅助,并不永久地保存数据和数据结构。

修改config.php

拷贝Nextcloud根目录完成后,如果你有修改域名的需求(比如我就暂时保留原来的Stack,换一个全新的域名),需要去新NAS的Nextcloud目录里修改config.php文件:

vim $work/app/config/config.php

下面的操作是Vim里进行。比如,我们将所有的旧域名(比如oldnextcloud.hwb0307.top)改为新域名(newnextcloud.hwb0307.top),旧的443端口(1234)改为新的443端口(4567):

:1,$s/oldnextcloud.hwb0307.top:1234/newnextcloud.hwb0307.top:4567/g
:1,$s/oldnextcloud.hwb0307.top/newnextcloud.hwb0307.top/g

新旧域名按自己的实际情况修改即可。

如果你在旧NAS里曾经添加过proxy,最好先注释/删除proxy,或更换成可以在新NAS里生效的proxy:

MobaXterm1_CHS_1oPTg5KOvq

这样Nextcloud就不会因为网络连接异常而产生许多bug。

修改文件权限

更改nextcloud对应的文件夹(比如$work/app)权限即可:

sudo chown -R 33:33 $work/app

可能不是必须的。

添加后台作业

我们在《Docker系列 搭建个人云盘服务nextcloud》里也介绍过,不要忘记新NAS里还没有它噢!

我们打开crontab:

vim /etc/crontab

加入定时任务:

# run nextcloud cron task every 5 min。 这个nextcloud-app-1要按实际情况修改
*/5 * * * * root docker exec -u 33 nextcloud-app-1 php -f /var/www/html/cron.php 2>&1 /dev/null

上线Nextcloud

前面的工作完成后,直接cd $work && docker-compose up -d上线Nextcloud即可:

msedge_rdlAQCK0BA

完美!

Onlyoffice

如果你使用Onlyoffice的话,需要在管理--ONLYOFFICE里修改ONLYOFFICE Docs地址,否则Onlyoffice的使用会有bug:

msedge_2jkk3gHnbM

一般是从https://旧域名:旧端口号/apps/documentserver_community改为https://新域名:新端口号/apps/documentserver_community

如果你在修改之后不小心出现类似这种bug:

onlyoffice Failed to connect to XXX: Connection refused (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for https://XXX/apps/documentserver_community/healthcheck)

这是Nextcloud与互联网的连接障碍所致。只要从数据库里删除错误设置的record即可:

# 格式为: docker exec <nextcloud的数据库name> mysql <nextcloud的数据库名> -p<$MYSQL_ROOT_PASSWORD> -e "delete from oc_appconfig where appid='onlyoffice' AND configkey='settings_error'"
docker exec nextcloud-db-1 mysql nextcloud -p123456789 -e "delete from oc_appconfig where appid='onlyoffice' AND configkey='settings_error'"

数据库丢失索引

如果在管理——概览——安全与设置警告里:

msedge_bdJV47dEUd

看到类似下面的信息:

数据库丢失了一些索引。由于给大的数据表添加索引会耗费一些时间,因此程序没有自动对其进行修复。您可以在 Nextcloud 运行时通过命令行手动执行 "occ db:add-missing-indices" 命令修复丢失的索引。索引修复后会大大提高相应表的查询速度。
...

如它所描述的,就是数据库丢失了一些索引。你可以运行类似命令进行修复:

# 格式为:docker exec -u 33 <nextcloud容器name> /var/www/html/occ db:add-missing-indices
docker exec -u 33 nextcloud-app-1 /var/www/html/occ db:add-missing-indices

输出结果类似于:

Check indices of the share table.
Check indices of the filecache table.
Check indices of the twofactor_providers table.
Check indices of the login_flow_v2 table.
Check indices of the whats_new table.
Check indices of the cards table.
Check indices of the cards_properties table.
Check indices of the calendarobjects_props table.
Check indices of the schedulingobjects table.
Check indices of the oc_properties table.
Adding properties_pathonly_index index to the oc_properties table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_jobs table.
Adding job_lastcheck_reserved index to the oc_jobs table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_direct_edit table.
Adding direct_edit_timestamp index to the oc_direct_edit table, this can take some time...
oc_direct_edit table updated successfully.
Check indices of the oc_preferences table.
Adding preferences_app_key index to the oc_preferences table, this can take some time...
oc_properties table updated successfully.
Check indices of the oc_mounts table.

小结

这就是目前我迁移Nextcloud所遇到的问题和相应的解决方案。以后有新的发现再来更新。虽然Nextcloud的Bug挺多的,但好在官方文档和论坛支持不错,仔细找可以找到不少好方法。个人感觉还是WordPress那种商业软件优化得好一些 (ฅ´ω`ฅ)

扩展阅读

---------------
完结,撒花!如果您点一下广告,可以养活苯苯😍😍😍

感谢Faconhost的友情赞助 (ฅ´ω`ฅ) 本博客基于m2w创作。版权声明:除特殊说明,博客文章均为Bensz原创,依据CC BY-SA 4.0许可证进行授权,转载请附上出处链接及本声明。VIP内容严禁转载!由于可能会成为AI模型(如chatGPT)的训练样本,本博客禁止将AI自动生成内容作为文章上传(特别声明时除外)。如有需要,请至学习地图系统学习本博客的教程。加Telegram群可获得更多帮助喔! | 博客订阅:RSS | 广告招租请留言 | 博客VPS | 致谢渺软公益CDN |

评论

  1. ovst
    Windows Edge 119.0.0.0
    12 月前
    2023-12-12 15:06:50

    我上周日刚刚完成nextcloud版本更新,从25.0更新到27.0;耗时将近10小时。
    各种乱七八糟的小问题,例如原来的账户用了二次验证,升级后就登入不了了;升级后的提升,登入次数过多等等。
    真不容易

    • 博主
      ovst
      Windows Edge 120.0.0.0
      11 月前
      2023-12-12 20:01:46

      辛苦 ~ 我觉得1年升级4次左右应该差不多,基本不会落下太多版本

      • ovst
        Bensz
        Android Chrome 119.0.0.0
        11 月前
        2023-12-12 20:12:13

        今天遇到个问题安装插件talk后,无法进入对话关于phone number的错误。
        和我用的数据库为SQL5.74太老了有关么?
        似乎找不到现有的解决教程

      • 博主
        ovst
        Windows Edge 120.0.0.0
        11 月前
        2023-12-12 20:13:02

        没安装过这个插件,不太了解噢!

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇