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

📅 👁️ 1

安企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. 点击 提交

install-bt5.png

在 AnQiCMS 后台添加新站点

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

install-bt6.png

  1. 点击 确定

配置新站点的 Nginx

  1. 宝塔面板 → 新站点 → 设置
  2. 网站目录 → 运行目录设置为 /public → 保存

install-bt7.png

  1. 伪静态 → 填写反向代理规则:
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;
}

install-bt8.png

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

Apache 伪静态配置详解

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

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

install-bt10.png

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

<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 模块:

> 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,分配不同的端口:

# 站点 A - config.json
{
    "server": {
        "port": 8001
    }
}

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

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

Step 3:重命名可执行文件

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

# 站点 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 改为对应目录:

# 站点 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 指向各自的端口:

# 站点 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 保活任务:

# 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),就需要同步修改启动脚本。

修改方法

# 编辑对应站点的 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 命令行删除旧数据库后再安装 ⚠️ 会丢失旧数据
使用已有库 手动在后台填入已有的数据库名称(需确保表结构兼容) ❌ 不推荐

相关文章

安企CMS的安装-源码编译安装

适用人群 :需要二次开发、定制功能,或官方提供的二进制包无法满足需求的开发者。 难度 :⭐⭐⭐⭐(需要熟悉 GoLang 和命令行操作) 前置条件 软件 版本要求 说明 GoLang 1.13+(推荐 1.25+) 编译 Go 源码 Git 任意版本 克隆代码仓库 MySQL 5.6.35+ 运行数据库 如果尚未安装 GoLang,请访问 https://go.dev/dl/ 下载安装。 获取源码 # 从 GitHub 克隆(推荐) git clone https://github

2026-07-18

安企CMS的安装-Docker 部署

Docker 部署是 AnQiCMS 最快捷的安装方式,适合快速体验和测试环境。 Docker 镜像地址:https://hub.docker.com/r/anqicms/anqicms 方式一:Docker 命令行部署 适用于已安装 Docker 的环境(任何操作系统)。 快速启动 # 拉取最新镜像 docker pull anqicms/anqicms:latest # 运行容器 docker run -d --name anqicms -p 8001:8001

2026-07-18

安企CMS的安装-服务器手动部署

适用场景 :无面板的 Linux 服务器(如 CentOS / Ubuntu),适合熟悉命令行操作的用户。通过下载安装包、配置 Nginx 反向代理和 MySQL 数据库的方式完成部署。 前置准备 一台 Linux 服务器(CentOS 7+ 或 Ubuntu 20.04+) 已安装 Nginx 和 MySQL 5.6.35+(推荐使用 LNMP 一键安装包 ) 一个已解析到服务器的域名 已下载 AnQiCMS Linux 安装包 安装步骤 Step 1:下载并解压 # 登录服务器 ssh

2026-07-18

安企CMS的安装-PHPStudy(小皮面板)部署

适用场景 :Windows 本地开发环境或 Windows 服务器。PHPStudy(小皮面板)集成 Nginx、MySQL、PHP 等组件,AnQiCMS 在其中通过 Nginx 反向代理方式运行。 前置准备 已安装 PHPStudy(小皮面板) 软件运行模式切换为 Nginx + MySQL 套餐 一个本地测试域名(如 dev.anqicms.com )或使用 IP + 端口访问 已下载 AnQiCMS Windows 安装包 安装步骤 Step 1:创建站点 打开 PHPStudy

2026-07-18

安企CMS的安装-宝塔面板部署

2.2 宝塔面板部署 适用版本 :宝塔面板 7.9.3+。宝塔面板部署分为传统部署(上传安装包,配置反向代理)和 Docker 一键部署两种方式,本章先介绍传统部署方式。 前置准备 一台已安装宝塔面板的 Linux 服务器(CentOS / Ubuntu / Debian 均可) 一个已解析到服务器的域名(如 www.anqicms.com ) 已安装 MySQL 5.6.35+(推荐 5.7+ 或 8.0) 从官网或 GitHub 下载 AnQiCMS Linux 安装包 方式一:宝塔 7

2026-07-18

安企CMS的下载与安装

介绍安企CMS安装包的多种下载渠道(官网、GitHub、镜像站)、不同操作系统与架构的版本选择方法以及安装包的文件校验方式,确保下载到正确且完整的版本。

2026-07-10

安企CMS的安装-安装引导与初始化

首次启动 AnQiCMS 时,需要完成初始化安装,包括配置数据库连接信息、设置管理员账号密码、指定站点名称等关键步骤,是系统正式使用前的必经环节。 何时需要初始化 以下情况需要进行初始化安装: 场景 说明 首次部署 全新安装 AnQiCMS 恢复出厂状态 清空数据后重新安装 如果通过 宝塔 Docker 或 aaPanel Docker 安装,系统会自动完成初始化(默认账号 admin / 密码 123456),无需手动执行初始化流程。 初始化步骤 Step 1:启动 AnQiCMS 确保

2026-07-18

安企CMS的安装-常见安装问题排查

汇总安企CMS安装过程中的常见问题及解决方案,涵盖端口被占用、数据库连接失败、页面白屏、权限错误、依赖缺失等典型场景,帮助用户快速定位并解决问题。 问题 1:端口被占用 现象 :启动 AnQiCMS 后,网站无法访问。 原因 :默认端口 8001 被其他程序占用。 排查方法 : # Linux / MacOS:查看 8001 端口被谁占用 lsof -i:8001 # 输出示例: # COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME #

2026-07-18