2020年6月27日 星期六

nextcloud 搬家升級重點筆記

我的 nextcloud 所在的那部 ubuntu 18.04 伺服器掛掉了, 還好硬碟資料都還在。 乾脆 (1) 作業系統升級到 ubuntu 20.04 (2) nextcloud 從 15 版升級到 18 版。

如果直接在 ubuntu 20.04 上面升級, 會因為 php 版本太新而失敗, 所以我開了一部 ubuntu 18.04 的 lxc/lxd container, 在這部 container 上, 照著 自己的行事曆和通訊錄自己管 那篇先把 lamp 等等相依套件裝好。 (但不必設定 apache2)

根據 這個問答, 對 nextcloud 來說, 可以直接把舊的資料庫目錄整個搬過來用。 根據 /etc/mysql/mysql.conf.d/mysqld.cnf 裡面的 datadir 設定, mysql 的資料檔放在 /var/lib/mysql 。 把這個目錄備份起來、 清空、 把舊的資料庫複製過來、 最後 chown -R mysql:mysql /var/lib/mysql

然後把舊的 nextcloud 整個子目錄複製到一個工作目錄下。 其實在這一階段的升級過程當中, 可以完全在命令列上執行、 完全不要理會 apache2, 所以並不需要放到 /var/www/html 底下。

Nextcloud 有一套半自動升級機制, 但是每次只能升一大級, 不能跳級 -- 例如我的 nextcloud 15 可以升級到 16, 但不能直接跳到 18。 (不想用最新的 19) 理想上, 每升一級只需要下這兩個指令:

sudo -u www-data php updater/updater.phar
sudo -u www-data php occ upgrade -v
# sudo -u www-data php occ db:add-missing-indice

前者 備份目前的版本、 下載新版、 解壓縮在原目錄下替換目前的版本; 後者 則整理修正設定檔 config/config.php 及資料庫等等真正處理升級時版本差異下所需的一切繁瑣工作。 事實上前者執行到最後, 它會問你是否要順便幫你執行後者。 如果 updater.phar 那句失敗, 手動解決問題之後, 才需要自己執行 occ upgrade 那句。 至於註解起來的第三句, 理論上不需要; 但建議還是執行一下, 可以減少後來遇到的問題。

那麼, 就這樣一路人工迴圈 15 => 16 => 17 => 18 步步高昇吧!

最後在新的 ubuntu 20.04 伺服器上大致重複 lxc/lxd container 的準備工作、 把舊的 apache2 設定檔複製過來 (先開靜態網頁確認 apache2 大致正確); 但這次把升級完成的 nextcloud/ 目錄複製到 /var/www/html 底下。 懷著期待的心情用瀏覽器檢查 nextcloud 的網址... 成功了嗎? 恭喜!

如果出現 internal server error 之類的錯誤, 那就照著 這篇 建立 /var/log/nextcloud.log 作為 log 檔、 並且設定 /var/www/html/nextcloud/config/config.php 指定 log 相關資訊、 重新啟動 apache2、 重新整理網頁, 就可以在 log 檔裡看著錯誤訊息除錯。

我在升級過程當中曾遇到這個錯誤: nextcloud Column not found: Unknown column 'entity' in field list ... 找到 這個問答, 以及遇到這個錯誤: Undefined index: name at /opt/nextcloud/core/templates/update.admin.php ... 找到 這個問答。 兩者的解決方式都是 sudo -u www-data php occ db:add-missing-indice。 (也就是前面在 「人工迴圈」 裡面註解起來, 但建議執行的那一句。)

沒有留言:

張貼留言

因為垃圾留言太多,現在改為審核後才發佈,請耐心等候一兩天。