升級與遷移
線上升級(推薦)
後臺左下角會顯示當前版本號,點它就能檢測新版本並一鍵升級。整個過程不用碰伺服器。
升級前先備份資料庫。aaPanel(寶塔)使用者在 Database(資料庫)→ Backup(備份)點一下就行,幾秒鐘的事,出問題能救命。
Docker 使用者同樣可以在後臺線上升級,不需要換映像 —— 程式檔案在資料卷裡。
手動升級
線上升級失敗時才用這個。必須從你當前的版本開始,一個一個往上升,不能跳版本。
每個升級包解壓後是這樣:
| 內容 | 怎麼處理 |
|---|---|
file/ 資料夾 | 裡面的檔案複製到網站根目錄,覆蓋同名檔案 |
update.sql | 有這個檔案才需要執行,見下 |
update.sql 的處理:
- 用編輯器開啟,把裡面的
__PREFIX__全部替換成你的資料庫表字首(預設是acg_) - 到 phpMyAdmin 或資料庫工具裡執行這個 SQL
全部升完後,把 config/app.php 裡的 version 改成升級後的版本號。
手動升級很容易出錯,能用線上升級就別手動。
升級到 3.8.2 須知
3.8.2 有兩處和帳號安全有關的變化:
- 新增對接白名單 IP。 所有會員都能登記伺服器 IP,登記後對接介面只接受從這些 IP 來的餘額下單;沒登記的帳號和 3.8.1 時一樣。3.8.1 裡開了資金操作二次驗證的帳號完全不能透過對接介面消費餘額,3.8.2 起登記了 IP 就能對接下單。預設主題的會員中心多了「對接白名單」頁(在「安全日誌」左邊),其他主題放在「兩步驗證」頁。需要的資料表會在升級時自動建立,不用手動執行 SQL。網站套了 CDN 或反向代理的,請先到 網站設定 → 安全設定 設定好「IP 獲取方式」和「受信代理 IP」,否則會員只能把 CDN 的 IP 加進白名單。詳見 對接白名單 IP。
- 後臺的會員安全日誌只給主管理員看。 會員管理裡的「安全日誌」按鈕,現在只有主管理員帳號(安裝時建立的那個)能開啟,超級管理員、白班、夜班帳號點開會提示沒有權限。
升級到 3.8.1 須知
3.8.1 加強了帳號與登入安全,升級後會有下面幾處變化,都是正常的:
- 所有會員都要重新登入一次。 為了安全,會員的登入憑證全部重建,原本的登入狀態會失效。
- 密碼改用更強的雜湊儲存。 會員和管理員的密碼換成更強、也刻意算得更慢的雜湊,更難被暴力破解。每個帳號下次用密碼登入時會自動轉換,不用你做任何事。管理員帳號轉換的那一次,該帳號在其他裝置上的後臺登入會被登出一次,重新登入即可。
- 後臺閒置鎖定預設開啟。 管理員 15 分鐘沒有操作,後臺就會自動鎖定。時間在 網站設定 → 安全設定 的「後台閒置自動鎖定」裡調整,填
0就是關閉。升級本身不會讓管理員被登出。 - 資料庫改動自動完成。 線上升級會自己處理,不用手動執行 SQL。
升級到 3.8.1 之後,不要再把程式退回舊版本。 密碼已經轉換過的帳號,在舊版本裡無法再用密碼登入。
詳細說明見 帳號與登入安全。
站點搬家
把整個網站搬到另一臺伺服器:
- 打包原始碼 —— 整個網站目錄打包帶走
- 匯出資料庫 —— 用 phpMyAdmin 或
mysqldump匯出 - 在新伺服器上按 aaPanel 安裝 裝好環境(PHP 版本、擴充套件要對得上)
- 原始碼解壓到新站點根目錄,資料庫匯入
- 改
config/database.php—— 換成新伺服器的資料庫地址、帳號、密碼 - 重新配置偽靜態和目錄權限
搬完打不開,按這個順序查:
| 檢查項 | 說明 |
|---|---|
config/database.php | 資料庫連線資訊是不是還是舊的 |
| Redis | 舊站如果用了 Redis 存會話,新伺服器也得裝上,或者把 PHP 的 session 儲存改回檔案 |
| PHP 擴充套件 | bcmath 別漏了(aaPanel 內建,手動架設的環境要自己確認) |
| 目錄權限 | config、runtime、kernel/Install、assets/cache 要可寫 |
| 偽靜態 | 新伺服器要重新配 |
Docker 換映像
bash
docker pull ghcr.io/lizhipay/acg-faka:latest
docker stop faka && docker rm faka
docker run -d --name faka -p 80:80 -v acg_data:/data --restart unless-stopped ghcr.io/lizhipay/acg-faka:latest只要 -v acg_data:/data 這個卷名沒變,資料、配置、已裝的外掛全都還在。
升級後出問題
先看網站根目錄的 runtime.log,絕大多數問題的真實原因都在裡面。
