Skip to content

升级与迁移 ​

在线升级(推荐) ​

后台左下角会显示当前版本号,点它就能检测新版本并一键升级。整个过程不用碰服务器。

升级前先备份数据库。aaPanel(宝塔)用户在 Database(数据库)→ Backup(备份)点一下就行,几秒钟的事,出问题能救命。

Docker 用户同样可以在后台在线升级,不需要换镜像 —— 程序文件在数据卷里。

手动升级 ​

在线升级失败时才用这个。必须从你当前的版本开始,一个一个往上升,不能跳版本。

每个升级包解压后是这样:

内容怎么处理
file/ 文件夹里面的文件复制到网站根目录,覆盖同名文件
update.sql有这个文件才需要执行,见下

update.sql 的处理:

  1. 用编辑器打开,把里面的 __PREFIX__ 全部替换成你的数据库表前缀(默认是 acg_)
  2. 到 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 之后,不要再把程序回退到旧版本。 密码已经转换过的账号,在旧版本里无法再用密码登录。

详细说明见 账号与登录安全。

站点搬家 ​

把整个网站搬到另一台服务器:

  1. 打包源码 —— 整个网站目录打包带走
  2. 导出数据库 —— 用 phpMyAdmin 或 mysqldump 导出
  3. 在新服务器上按 aaPanel 安装 装好环境(PHP 版本、扩展要对得上)
  4. 源码解压到新站点根目录,数据库导入
  5. 改 config/database.php —— 换成新服务器的数据库地址、账号、密码
  6. 重新配置伪静态和目录权限

搬完打不开,按这个顺序查:

检查项说明
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,绝大多数问题的真实原因都在里面。

基于 MIT 协议开源