安企CMS的安装-同一服务器多站点部署

安企CMS 支持在同一台服务器上运行多个独立站点,每个站点拥有独立的域名、数据库、模板和管理员。本章详细介绍多站点配置的完整步骤和注意事项。


方案一:多站点管理(推荐)

适用条件:已有一个安装好并运行的 AnQiCMS 主站点。

此方案使用 AnQiCMS 内置的 多站点管理 功能,所有站点共用同一个 AnQiCMS 程序,但各自独立运行。不需要复制多份代码。

前置准备

  1. 已部署并正常运行一个 AnQiCMS 主站点(端口 8001)
  2. 主站后台有 多站点管理 菜单权限(默认安装的站点具备)
  3. 新站点的域名已解析到服务器
  4. 准备好新站点的数据库信息(可在安装过程中自动创建)

在宝塔面板中创建新站点入口

  1. 宝塔面板 → 网站添加站点
  2. PHP 版本 选择 纯静态
  3. FTP数据库 均选择 不创建
  4. 域名填写新站点的域名(如 study.ykbh168.com
  5. 记录站点根目录(如 /www/wwwroot/study.ykbh168.com
  6. 点击 提交

在 AnQiCMS 后台添加新站点

  1. 登录主站后台
  2. 左侧菜单 → 多站点管理/website
  3. 点击 添加新站点
  4. 填写以下信息:
字段 说明
站点名称 方便区分的名称,如"学习博客"
网站地址 新站点的域名,https://study.ykbh168.com
站点根目录 上一步记录的目录,如 /www/wwwroot/study.ykbh168.com
管理员账号 新站点的管理员用户名
管理员密码 新站点的管理员密码
数据库名称 新数据库名称(不要与已有库重复)
复用数据库账号 如主站使用 root 账号,建议勾选,免去重复填写
  1. 点击 确定

配置新站点的 Nginx

  1. 宝塔面板 → 新站点 → 设置
  2. 网站目录 → 运行目录设置为 /public → 保存
  1. 伪静态 → 填写反向代理规则:
nginx 复制代码
location @AnqiCMS {
    proxy_pass http://127.0.0.1:8001;
    proxy_set_header   Host             $host;
    proxy_set_header   X-Real-IP        $remote_addr;
    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
}
error_page 404 =200  @AnqiCMS;
location / {
    try_files $uri $uri/index.html @AnqiCMS;
}

如果使用 Apache,在 反向代理 中填写目标 URL http://127.0.0.1:8001 即可。

Apache 伪静态配置详解

如果 Nginx 不可用,使用 Apache 作为 Web 服务器,配置方式如下:

  1. 宝塔面板 → 新站点 → 设置伪静态 → 清空伪静态规则
  2. 选择 反向代理 Tab
  3. 目标 URL 填写 http://127.0.0.1:8001
  4. 点击 保存

Apache 虚拟主机配置示例(手动编辑 httpd-vhosts.conf):

apache 复制代码
<VirtualHost *:80>
    ServerName study.ykbh168.com
    DocumentRoot /www/wwwroot/study.ykbh168.com/public
    
    ProxyPass / http://127.0.0.1:8001/
    ProxyPassReverse / http://127.0.0.1:8001/
    
    <Directory /www/wwwroot/study.ykbh168.com/public>
        Options FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>
    
    ErrorLog /var/log/httpd/study-error.log
    CustomLog /var/log/httpd/study-access.log combined
</VirtualHost>

注意 :使用 Apache 需要启用 mod_proxymod_proxy_http 模块:

bash 复制代码
a2enmod proxy proxy_http
systemctl restart apache2

验证新站点

  1. 浏览器访问新站点域名
  2. 应正常显示网站首页
  3. 访问 新域名/system/ 进入后台
  4. 使用新站点独立的管理员账号登录

方案二:独立多进程部署

适用条件:需要完全隔离运行环境(如不同客户、不同版本的 AnQiCMS)。

此方案为每个站点运行一个独立的 AnQiCMS 进程,互不干扰。

Step 1:复制多份代码

将 AnQiCMS 程序复制到多个目录:

bash 复制代码
# 站点 A
cp -r /data/wwwroot/anqicms /data/wwwroot/site-a
# 站点 B
cp -r /data/wwwroot/anqicms /data/wwwroot/site-b

Step 2:修改端口

编辑每个站点的 config.json,分配不同的端口:

json 复制代码
# 站点 A - config.json
{
    "server": {
        "port": 8001
    }
}

# 站点 B - config.json
{
    "server": {
        "port": 8002
    }
}

# 站点 C - config.json
{
    "server": {
        "port": 8003
    }
}

Step 3:重命名可执行文件

为了避免进程名冲突,将可执行文件重命名为有辨识度的名称(建议使用域名中间字母):

bash 复制代码
# 站点 A(域名为 taobaoke.com)
mv /data/wwwroot/site-a/anqicms /data/wwwroot/site-a/taobaoke

# 站点 B(域名为 jianshu.com)
mv /data/wwwroot/site-b/anqicms /data/wwwroot/site-b/jianshu

Step 4:修改启动脚本

编辑每个站点的 start.sh,将 BINNAME 改为对应的新名称,BINPATH 改为对应目录:

bash 复制代码
# 站点 A start.sh
BINNAME=taobaoke
BINPATH=/data/wwwroot/site-a

# 站点 B start.sh
BINNAME=jianshu
BINPATH=/data/wwwroot/site-b

同时修改 grep '\<anqicms\>' 中的 anqicms 为新的 BINNAME

Step 5:配置 Nginx

为每个站点配置独立的 Nginx 反向代理,proxy_pass 指向各自的端口:

nginx 复制代码
# 站点 A
server {
    server_name taobaoke.com;
    root /data/wwwroot/site-a/public;
    
    location @AnqiCMS {
        proxy_pass http://127.0.0.1:8001;  # 对应站点 A 的端口
        ...
    }
    ...
}

# 站点 B
server {
    server_name jianshu.com;
    root /data/wwwroot/site-b/public;
    
    location @AnqiCMS {
        proxy_pass http://127.0.0.1:8002;  # 对应站点 B 的端口
        ...
    }
    ...
}

Step 6:添加计划任务

为每个站点添加独立的 crontab 保活任务:

bash 复制代码
# crontab 中添加
*/1 * * * * /data/wwwroot/site-a/start.sh
*/1 * * * * /data/wwwroot/site-b/start.sh

方案三:Docker 环境多站点

适用条件:已通过 Docker 部署了 AnQiCMS(宝塔 Docker / 1Panel / aaPanel 均可),希望通过反向代理在同一台服务器上添加更多站点,无需再创建新容器。

此方案适用于 Docker 部署的 AnQiCMS,利用宝塔(或 1Panel)的反向代理功能,将多个域名指向同一个 Docker 容器的 8001 端口,再通过 AnQiCMS 内置的多站点管理功能区分不同站点。

Step 1:添加反向代理站点

宝塔面板操作:

  1. 宝塔面板 → 网站反向代理添加反代
  2. 填写以下配置:
配置项 填写内容
域名 新站点的域名(如 dev.anqicms.com
目标 URL http://127.0.0.1:8001(Docker 容器映射的端口)
  1. 点击 确定 完成创建

1Panel 操作:

  1. 1Panel → 网站创建网站 → 选择 反向代理
  2. 主域名填写新站点域名,代理地址填写 127.0.0.1:8001
  3. 点击 确认

Step 2:在 AnQiCMS 后台添加新站点

  1. 登录主站后台 → 多站点管理添加新站点
  2. 填写以下信息(注意与普通部署的区别):
字段 说明
站点名称 根据实际填写
站点根目录 /app/ 开头,如 /app/dev_anqicms.com(Docker 容器的根目录,不要使用宿主机路径)
网站地址 新站点域名,如 http://dev.anqicms.com
管理员账号 新站点的管理员账号
管理员密码 新站点的管理员密码
数据库名称 新数据库名称,如 dev_anqicms_com(不要与已有库重复)
数据库信息复用 选择 复用默认数据库账号信息(Docker 环境拥有完整数据库权限)
选择使用的模板 根据需求选择

关键区别 :Docker 环境下,站点根目录是容器内的路径(/app/...),而不是宿主机的路径(如 /www/wwwroot/...)。

Step 3:使用新站点

创建完成后,新站点即可直接访问。后台地址为 http://新域名/system/


方案对比

对比项 多站点管理(方案一) 独立多进程(方案二) Docker 多站点(方案三)
管理方式 统一后台管理 各自独立管理 统一后台管理
资源占用 低(共享进程) 高(独立进程) 低(共享进程)
配置复杂度 简单 较复杂 简单
隔离性 共享程序代码 完全隔离 共享 Docker 容器
版本统一 统一版本 可各自独立版本 统一版本
适用场景 同一客户多个站点 不同客户、不同项目 Docker 部署环境

建议 :绝大多数情况下,推荐使用 方案一(多站点管理),管理方便,资源占用低。


❓ 方案一的多站点管理,站点之间的数据是完全隔离的吗?管理员可以各自独立管理吗?

数据方面:数据库是完全隔离的。每个站点使用独立的数据库,一个站点的文章、分类、用户等数据不会泄露到其他站点。

管理员方面:管理权限是独立的。每个站点的管理员只能管理自己的站点,无法看到或操作其他站点的内容。

但需要注意的是,所有站点共享同一个 AnQiCMS 程序,所以:

  • 版本升级会同时影响所有站点
  • 模板文件放在同一个 template/ 目录下
  • 后台管理入口都是 域名/system/

如果希望彻底隔离(不同客户、不同版本需求),请使用方案二。

❓ 方案二中,启动脚本检测不到进程(始终显示 0 个),但程序实际在运行,怎么办?

这是 start.sh 中的 grep 模式不匹配导致的。默认启动脚本中写死了 grep '\<anqicms\>',但如果你将可执行文件重命名为其他名称(如 taobaoke),就需要同步修改启动脚本。

修改方法

bash 复制代码
# 编辑对应站点的 start.sh
# 找到这行:
exists=`ps -ef | grep '\<anqicms\>' |grep -v grep |wc -l`
# 将 anqicms 改为新的进程名:
exists=`ps -ef | grep '\<taobaoke\>' |grep -v grep |wc -l`

同理,stop.sh 中的 kill 命令也需要对应修改。

避免这个问题的最好方法 :重命名时直接使用有意义的名字,而不是随意改动,确保 start.sh 中的进程名与 BINNAME 完全一致。

❓ 多站点模式下,每个站点的后台入口都是 /system/ 吗?如果两个站点域名不同,它们能共用同一个 /system/ 地址吗?

是的,每个站点的后台入口都是 https://该站点域名/system/。因为 Nginx 反向代理会根据域名将请求分发到对应的站点,所以:

  • 访问 https://site-a.com/system/ → 进入站点 A 的后台
  • 访问 https://site-b.com/system/ → 进入站点 B 的后台

这是两个完全不同的地址,不存在冲突。Nginx 通过 server_name 来区分。

❓ 疑问解答 ④:方案一中添加新站点时,提示"数据库名称已存在"怎么办?

这说明之前已经有一个同名的数据库存在了。解决方案:

方式 操作 推荐
换个名称 在添加站点时,填写一个新的、没有用过的数据库名称 ✅ 最简单
删除旧库重来 通过 MySQL 命令行删除旧数据库后再安装 ⚠️ 会丢失旧数据
使用已有库 手动在后台填入已有的数据库名称(需确保表结构兼容) ❌ 不推荐
相关推荐
Sinclair1 小时前
安企CMS的安装-Docker 部署
运维·docker·容器
Sinclair1 小时前
安企CMS的安装-服务器手动部署
运维·后端
shujudang1 小时前
业务闭环视角下的营销自动化(MA)平台选型逻辑
大数据·运维·数据分析·自动化·营销自动化
Sinclair2 小时前
安企CMS的安装-PHPStudy(小皮面板)部署
前端·后端
Sinclair2 小时前
安企CMS的安装-宝塔面板部署
服务器·后端
会飞的特洛伊2 小时前
IAM身份认证
前端·后端
开飞机的舒克_2 小时前
FastAPI 异步 ORM 实战:从核心特性到图书 CRUD 最佳实践
后端
码栈研说2 小时前
Go 语言大白话入门 7 - 函数:把重复代码收起来
后端·程序员
程序员天天困2 小时前
后端视角看 EventBus:发布订阅总线的原理、场景与用法
java·后端