2. Shell 部署
推荐服务器配置
以下配置用于单机运行全部基础服务和 7 个后端服务。
| 项目 | 推荐配置 |
|---|---|
| 操作系统 | Linux 64 位,Debian / Ubuntu |
| CPU | 4 核及以上 |
| 内存 | 16 GB 及以上 |
| 磁盘 | 至少 40 GB 可用空间,数据量增长时扩容 |
| Java / Maven | Java 21 / Maven 3.9 |
| 其它工具 | Bash、flock、curl、Nginx |
| 网络 | 可访问 Maven Central,并能连接基础服务 |
Shell 脚本管理宿主机 Java 进程,Nginx 托管前端。完成首次配置后,只需执行:
bash builds/script/shell/deploy.sh deploy一、目录说明
1. 源码与发布文件
所有部署命令在 mesh-platform 后端项目根目录执行。
mesh-platform/
├── pom.xml
├── supports/
├── services/
└── builds/
├── data/
│ ├── sql/ # 六份业务库初始化脚本
│ └── nacos/
│ └── nacos_config.zip
├── web/ # 前端产物,包含 index.html
└── script/shell/
├── deploy.sh # 编译和批量启停
└── run.sh # 单服务进程管理2. 服务器运行目录
所有 JAR 和 run.sh 放在同一层级,不创建单独的服务子目录;连接配置统一由 Nacos 提供。
/opt/server/
├── mesh-gateway.jar
├── mesh-uaa-biz.jar
├── mesh-upms-biz.jar
├── mesh-bpm-biz.jar
├── mesh-app-biz.jar
├── mesh-ai-biz.jar
├── mesh-crm-biz.jar
├── run.sh
├── logs/
└── backup/| 路径 | 用途 |
|---|---|
/opt/server/*.jar | deploy.sh 自动复制的运行包 |
/opt/server/logs/ | 每个服务独立的日志 |
/opt/server/backup/ | 更新前自动备份的旧 JAR |
/opt/server/*.pid | 每个服务的进程记录,脚本自动管理 |
/var/www/mesh-platform/ | Nginx 托管的前端产物 |
二、首次准备
1. 安装运行环境
| 软件 | 版本要求 | 安装参考 |
|---|---|---|
| JDK | 21 | Temurin 官方安装说明 |
| Maven | 3.9 | Maven 3.9.9 发布包 |
| Nginx | 支持静态文件和反向代理 | Nginx 安装 |
| Bash / flock / curl | 系统工具 | Debian / Ubuntu 安装 bash、util-linux、curl |
安装后先确认版本:
java -version
mvn -version两条命令均应使用 Java 21。Java、Maven 的可执行文件需已加入系统命令路径,部署命令中无需额外传入参数。
2. 准备基础服务
| 服务 | 版本 | 默认地址 | 初始化要求 |
|---|---|---|---|
| MySQL | 8.0.32 | 127.0.0.1:3306 | 创建六个业务库并导入 SQL |
| Redis | 7.2.4 | 127.0.0.1:6379 | 设置访问密码 |
| Elasticsearch | 9.5.1 | 127.0.0.1:9200 | 安装同版本 analysis-icu,设置内核参数 |
| Nacos | 2.3.2 | 127.0.0.1:8848 | 创建命名空间并导入配置 |
独立安装基础服务时,按下表准备数据:
| 数据库 | 导入文件 |
|---|---|
| mesh_ai | builds/data/sql/mesh_ai.sql |
| mesh_app | builds/data/sql/mesh_app.sql |
| mesh_bpm | builds/data/sql/mesh_bpm.sql |
| mesh_crm | builds/data/sql/mesh_crm.sql |
| mesh_uaa | builds/data/sql/mesh_uaa.sql |
| mesh_upms | builds/data/sql/mesh_upms.sql |
数据库使用 utf8mb4 字符集。Nacos 创建与后端 pom.xml 一致的命名空间(Shell 当前默认 ID 为 single),将 builds/data/nacos/nacos_config.zip 导入该空间的 DEFAULT_GROUP。运行 profile 保持 dev,以加载配置包中的 *-dev.yaml;profile 与命名空间是两个不同配置项。
ES 所在服务器执行:
printf 'vm.max_map_count=262144\n' | sudo tee /etc/sysctl.d/99-mesh-es.conf
sudo sysctl --system如果希望用 Docker 准备四个基础服务,可先按 Docker 教程 安装工具并在 Compose 中设置密码,再执行兼容的基础服务命令:
bash builds/script/docker/deploy.sh base此命令只启动基础服务,并将配置导入 pro 空间,业务 JAR 仍由 Shell 管理。按下一节统一 Nacos 命名空间,并在 Nacos 中将连接地址调整为宿主机可访问的地址。
3. 准备前端产物和运行目录
builds/web/ 必须包含生产构建的 index.html 和静态资源,接口前缀为 /pro-api。缺少产物时,在前端仓库执行 pnpm install --frozen-lockfile && pnpm run build:prod,将 dist 目录内容复制到后端 builds/web。
为当前部署用户创建运行目录:
sudo install -d -o "$(id -un)" -g "$(id -gn)" /opt/server三、配置 Nacos
数据库、Redis、ES、MCP 和业务配置统一在 Nacos 中维护,运行目录只保留 JAR、run.sh、日志和备份,无需新增本机连接配置文件。
1. 确认项目连接的 Nacos
构建前检查后端根目录 pom.xml 的 dev profile。项目会将这些参数写入 JAR,用于首次连接配置中心:
| 参数 | 当前默认值 | 配置要求 |
|---|---|---|
config.server-addr / discovery.server-addr | 127.0.0.1:8848 | 配置中心和服务发现均使用实际 Nacos 地址 |
config.namespace / discovery.namespace | single | 两处均填写导入配置的命名空间 ID |
config.group / discovery.group | DEFAULT_GROUP | 与导入配置的分组一致 |
profile.name | dev | 对应配置包中的 *-dev.yaml |
默认使用 single 空间;如果用 Docker 的 base 命令初始化了 pro 空间,将两处 namespace 改为 pro。修改后执行下一节 deploy 命令重新编译即可,连接信息不需要通过环境变量传入。
2. 在 Nacos 修改服务配置
进入项目使用的命名空间,检查以下配置:
| 配置文件 | 配置内容 | Shell 部署要求 |
|---|---|---|
mesh-environment-dev.yaml | 数据库地址、账号密码,Redis / ES 地址和服务端口 | 使用 Java 所在宿主机可访问的地址 |
各服务的 *-dev.yaml | 数据源配置、spring.data.redis.password | 与实际数据库、Redis 一致;保留公共配置引用 |
mesh-ai-biz-dev.yaml | spring.ai.mcp.client.servers.crm.url | CRM 在同机时为 http://127.0.0.1:8090/mcp |
各服务的 *-dev.yaml | mesh.job.xxl.enabled | 未部署任务中心时设置为 false |
| 公共或服务配置 | management.endpoint.health.access | 设置为 unrestricted,供部署脚本检查健康状态 |
数据库、Redis、ES 位于同机时使用本机地址,位于其它服务器时使用对应内网地址。由 Docker 初始化的配置中若包含 mysql、redis、elasticsearch、mesh-crm 等容器名,需在 Nacos 中改为宿主机可访问的地址。跨主机连接 Nacos 时需放通 8848、9848。
确认配置已发布后,再启动后端服务。若之前按旧教程创建过本机覆盖配置,迁移所需值到 Nacos 并取消重复覆盖,保证服务读取 Nacos 中的配置。
四、一键部署后端
bash builds/script/shell/deploy.sh deploy执行顺序:编译 → 检查全部 JAR → 暂存运行包 → 停止旧进程 → 备份并替换 JAR → 逐个启动并检查健康状态。
CRM 在 APP 服务就绪后启动。旧脚本启动且没有本脚本 PID 文件的进程,首次迁移前先通过原方式停止。
各服务的 HTTP、WebSocket 端口统一在 Nacos 中配置,可按部署环境调整,以实际发布的配置为准。调整后,同步更新 deploy.sh 中用于健康检查的 APP_PORTS,以及 Nginx、MCP 等相关连接地址。
五、部署前端
1. 复制前端文件
sudo mkdir -p /var/www/mesh-platform
sudo cp -a builds/web/. /var/www/mesh-platform/2. 配置 Nginx
创建 /etc/nginx/conf.d/mesh-platform.conf:
下方代理地址中的端口仅为示例,请替换为 Nacos 中配置的实际网关端口。
server {
listen 80;
server_name _;
root /var/www/mesh-platform;
client_max_body_size 512m;
location / {
try_files $uri $uri/ /index.html;
}
location /pro-api/ {
proxy_pass http://127.0.0.1:8080/;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 300s;
proxy_buffering off;
}
}新安装的 Nginx 若启用了默认欢迎站点,取消对应启用链接,避免访问 IP 时进入欢迎页;Debian / Ubuntu 的默认链接为 /etc/nginx/sites-enabled/default。
3. 启动 Nginx
sudo nginx -t && sudo systemctl enable --now nginx
sudo systemctl reload nginx服务器放行 TCP 80,访问 http://服务器IP/。
六、检查与日常操作
bash builds/script/shell/deploy.sh status
curl -fsS http://127.0.0.1/pro-api/actuator/health统一使用 bash builds/script/shell/deploy.sh 参数。
| 参数 | 作用 |
|---|---|
| deploy | 编译、备份替换并启动;源码更新后再次执行 |
| build | 只编译 |
| copy | 停止旧服务,备份并替换已构建的 JAR |
| start | 启动服务,已运行的服务不重复启动 |
| stop | 停止全部后端 |
| restart | 重启全部后端 |
| status | 查看进程状态,业务健康以健康接口为准 |
单服务重启:bash /opt/server/run.sh restart mesh-crm-biz。服务器重启后需重新执行 start。需要修改运行目录或 JVM 配置时,编辑 deploy.sh 顶部的 APP_HOME、JVM_OPTS_TYPE 默认值;后续命令保持一致。
七、常见问题
| 现象 | 检查位置 |
|---|---|
| 无法编译 | java、mvn 版本和 Maven Central 网络 |
| 连接数据库或 Redis 失败 | Nacos 中的地址、密码及基础服务状态 |
| 配置不生效 | pom.xml 中的 Nacos 地址和命名空间、配置是否已发布,以及是否存在本机覆盖配置 |
| 服务启动超时 | /opt/server/logs/,检查端口冲突及依赖服务 |
| 前端 502 | Nacos 中的实际网关端口与 Nginx /pro-api/ 代理是否一致 |
| 前端仍是欢迎页 | Nginx 默认站点是否仍启用 |
| ES 缺少索引 | CRM 日志、ES 插件及映射;当前发布数据初始化为 17 个索引 |
AI 对话需另外配置有效模型凭据,服务健康不代表外部模型调用已经验证。
另一种方式:1. Docker 部署。
