Linux部署
1. 概述
梵医云系统支持在 Linux 环境下部署,支持传统部署和 Docker 容器化部署两种方式。本文档介绍如何在 Linux 系统上部署梵医云系统。
2. 环境要求
2.1 硬件要求
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| CPU | 8 核 | 16 核及以上 |
| 内存 | 32 GB | 48 GB 及以上 |
| 硬盘 | 100 GB | 200 GB 及以上 |
| 网络 | 100 Mbps | 1 Gbps |
2.2 软件要求
| 软件 | 版本要求 | 说明 |
|---|---|---|
| 操作系统 | CentOS 7+ / Ubuntu 20.04+ | Linux 发行版 |
| JDK | 17+ | Java 运行环境 |
| Maven | 3.6+ | 项目构建工具(构建时需要) |
| Docker | 20.10+ | 容器化部署(可选) |
| Docker Compose | 1.29+ | 容器编排(可选) |
| MySQL | 8.0+ | 数据库 |
| Redis | 6.0+ | 缓存数据库 |
| Nginx | 1.18+ | 反向代理(可选) |
3. 系统初始化
3.1 更新系统
# CentOS/RHEL
sudo yum update -y
# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y3.2 安装常用工具
# CentOS/RHEL
sudo yum install -y wget curl vim git net-tools lsof
# Ubuntu/Debian
sudo apt install -y wget curl vim git net-tools lsof3.3 配置防火墙
# CentOS/RHEL (firewalld)
sudo firewall-cmd --permanent --add-port=48080/tcp # Gateway
sudo firewall-cmd --permanent --add-port=48081/tcp # System
sudo firewall-cmd --permanent --add-port=48082/tcp # Infra
sudo firewall-cmd --permanent --add-port=3306/tcp # MySQL
sudo firewall-cmd --permanent --add-port=6379/tcp # Redis
sudo firewall-cmd --permanent --add-port=8848/tcp # Nacos
sudo firewall-cmd --reload
# Ubuntu/Debian (ufw)
sudo ufw allow 48080/tcp # Gateway
sudo ufw allow 48081/tcp # System
sudo ufw allow 48082/tcp # Infra
sudo ufw allow 3306/tcp # MySQL
sudo ufw allow 6379/tcp # Redis
sudo ufw allow 8848/tcp # Nacos
sudo ufw enable3.4 配置时区
sudo timedatectl set-timezone Asia/Shanghai3.5 配置文件描述符限制
# 临时修改
ulimit -n 65535
# 永久修改
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf4. 安装 JDK
4.1 下载 JDK
cd /opt
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz4.2 解压 JDK
tar -zxvf openjdk-17.0.2_linux-x64_bin.tar.gz
mv jdk-17.0.2 jdk174.3 配置环境变量
cat >> /etc/profile << EOF
export JAVA_HOME=/opt/jdk17
export PATH=\$JAVA_HOME/bin:\$PATH
EOF
source /etc/profile4.4 验证安装
java -version5. 安装 MySQL
5.1 安装 MySQL
# CentOS/RHEL
sudo yum install -y mysql-server
# Ubuntu/Debian
sudo apt install -y mysql-server5.2 启动 MySQL
# CentOS/RHEL
sudo systemctl start mysqld
sudo systemctl enable mysqld
# Ubuntu/Debian
sudo systemctl start mysql
sudo systemctl enable mysql5.3 配置 MySQL
编辑 MySQL 配置文件 /etc/my.cnf:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
default-time-zone='+08:00'重启 MySQL:
sudo systemctl restart mysqld5.4 创建数据库
mysql -u root -p << EOF
CREATE DATABASE \`db-fanyi-cloud\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EOF5.5 导入初始化脚本
mysql -u root -p db-fanyi-cloud < sql/fanyi-cloud.sql6. 安装 Redis
6.1 安装 Redis
# CentOS/RHEL
sudo yum install -y redis
# Ubuntu/Debian
sudo apt install -y redis-server6.2 启动 Redis
# CentOS/RHEL
sudo systemctl start redis
sudo systemctl enable redis
# Ubuntu/Debian
sudo systemctl start redis-server
sudo systemctl enable redis-server6.3 配置 Redis
编辑 Redis 配置文件 /etc/redis.conf:
bind 0.0.0.0
protected-mode no重启 Redis:
sudo systemctl restart redis7. 安装 Nacos
7.1 下载 Nacos
cd /opt
wget https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz7.2 解压 Nacos
tar -zxvf nacos-server-2.2.3.tar.gz
mv nacos nacos7.3 配置 Nacos
编辑 Nacos 配置文件 /opt/nacos/conf/application.properties:
server.port=8848
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://localhost:3306/db-fanyi-cloud?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
db.user.0=root
db.password.0=your_password
nacos.core.auth.enabled=true
nacos.core.auth.server.identity.key=your_identity_key
nacos.core.auth.server.identity.value=your_identity_value
nacos.core.auth.plugin.nacos.token.secret.key=your_secret_key7.4 启动 Nacos
cd /opt/nacos/bin
./startup.sh -m standalone7.5 配置 Nacos 开机自启
创建 systemd 服务文件 /etc/systemd/system/nacos.service:
[Unit]
Description=Nacos
After=network.target
[Service]
Type=forking
User=root
ExecStart=/opt/nacos/bin/startup.sh -m standalone
ExecStop=/opt/nacos/bin/shutdown.sh
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target启动服务:
sudo systemctl daemon-reload
sudo systemctl start nacos
sudo systemctl enable nacos8. 传统部署方式
8.1 创建部署目录
sudo mkdir -p /data/fanyi/{gateway,system,infra,member,pay,mp,bpm,report,crm,erp,ai,appointment,partner}
sudo chown -R $USER:$USER /data/fanyi8.2 构建项目
cd fanyi-cloud
mvn clean package -DskipTests8.3 部署服务
8.3.1 部署 Gateway
cp fanyi-gateway/target/fanyi-gateway.jar /data/fanyi/gateway/8.3.2 部署 System
cp fanyi-module-system/fanyi-module-system-biz/target/fanyi-module-system-biz.jar /data/fanyi/system/8.3.3 部署 Infra
cp fanyi-module-infra/fanyi-module-infra-biz/target/fanyi-module-infra-biz.jar /data/fanyi/infra/8.4 创建启动脚本
8.4.1 创建 Gateway 启动脚本
创建 /data/fanyi/gateway/start.sh:
#!/bin/bash
APP_NAME="fanyi-gateway"
APP_JAR="/data/fanyi/gateway/fanyi-gateway.jar"
LOG_DIR="/data/fanyi/logs"
mkdir -p $LOG_DIR
PID=$(ps -ef | grep $APP_JAR | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
echo "$APP_NAME is already running (PID: $PID)"
exit 1
fi
nohup java -Xms512m -Xmx512m -jar $APP_JAR > $LOG_DIR/$APP_NAME.log 2>&1 &
echo "$APP_NAME started"创建 /data/fanyi/gateway/stop.sh:
#!/bin/bash
APP_NAME="fanyi-gateway"
APP_JAR="/data/fanyi/gateway/fanyi-gateway.jar"
PID=$(ps -ef | grep $APP_JAR | grep -v grep | awk '{print $2}')
if [ -z "$PID" ]; then
echo "$APP_NAME is not running"
exit 1
fi
kill -15 $PID
echo "$APP_NAME stopped"8.4.2 创建 System 启动脚本
创建 /data/fanyi/system/start.sh:
#!/bin/bash
APP_NAME="fanyi-system"
APP_JAR="/data/fanyi/system/fanyi-module-system-biz.jar"
LOG_DIR="/data/fanyi/logs"
mkdir -p $LOG_DIR
PID=$(ps -ef | grep $APP_JAR | grep -v grep | awk '{print $2}')
if [ -n "$PID" ]; then
echo "$APP_NAME is already running (PID: $PID)"
exit 1
fi
nohup java -Xms512m -Xmx512m -jar $APP_JAR > $LOG_DIR/$APP_NAME.log 2>&1 &
echo "$APP_NAME started"创建 /data/fanyi/system/stop.sh:
#!/bin/bash
APP_NAME="fanyi-system"
APP_JAR="/data/fanyi/system/fanyi-module-system-biz.jar"
PID=$(ps -ef | grep $APP_JAR | grep -v grep | awk '{print $2}')
if [ -z "$PID" ]; then
echo "$APP_NAME is not running"
exit 1
fi
kill -15 $PID
echo "$APP_NAME stopped"8.5 设置脚本权限
chmod +x /data/fanyi/*/start.sh
chmod +x /data/fanyi/*/stop.sh8.6 启动服务
# 启动 Gateway
/data/fanyi/gateway/start.sh
# 启动 System
/data/fanyi/system/start.sh
# 启动 Infra
/data/fanyi/infra/start.sh8.7 配置 systemd 服务
8.7.1 创建 Gateway 服务
创建 /etc/systemd/system/fanyi-gateway.service:
[Unit]
Description=Fanyi Gateway
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/data/fanyi/gateway
ExecStart=/usr/bin/java -Xms512m -Xmx512m -jar /data/fanyi/gateway/fanyi-gateway.jar
ExecStop=/bin/kill -15 $MAINPID
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target8.7.2 创建 System 服务
创建 /etc/systemd/system/fanyi-system.service:
[Unit]
Description=Fanyi System
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/data/fanyi/system
ExecStart=/usr/bin/java -Xms512m -Xmx512m -jar /data/fanyi/system/fanyi-module-system-biz.jar
ExecStop=/bin/kill -15 $MAINPID
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target8.7.3 启动服务
sudo systemctl daemon-reload
sudo systemctl start fanyi-gateway
sudo systemctl enable fanyi-gateway
sudo systemctl start fanyi-system
sudo systemctl enable fanyi-system9. Docker 部署方式
9.1 安装 Docker
9.1.1 安装 Docker
# CentOS/RHEL
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
# Ubuntu/Debian
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io9.1.2 启动 Docker
sudo systemctl start docker
sudo systemctl enable docker9.1.3 配置 Docker 镜像加速
编辑 Docker 配置文件 /etc/docker/daemon.json:
{
"registry-mirrors": [
"https://docker.mirrors.ustc.edu.cn",
"https://hub-mirror.c.163.com"
]
}重启 Docker:
sudo systemctl daemon-reload
sudo systemctl restart docker9.2 安装 Docker Compose
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose验证安装:
docker-compose --version9.3 部署 MySQL
创建 MySQL 目录:
mkdir -p /data/docker/mysql/data创建 docker-compose.yml:
version: '3.6'
services:
fanyiyun-mysql:
image: mysql:8.0.39
restart: always
container_name: fanyiyun-mysql
environment:
- TZ=Asia/Shanghai
- MYSQL_ROOT_PASSWORD=JdNkGqbZe9a7N4v5
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- "3306:3306"
volumes:
- ./data:/var/lib/mysql
networks:
default:
external: true
name: fanyiyun_default创建网络:
docker network create fanyiyun_default启动 MySQL:
docker-compose up -d9.4 部署 Redis
创建 Redis 目录:
mkdir -p /data/docker/redis创建 docker-compose.yml:
version: '3.6'
services:
fanyiyun-redis:
container_name: fanyiyun-redis
image: redis:6.2.13
restart: always
ports:
- "6379:6379"
networks:
default:
external: true
name: fanyiyun_default启动 Redis:
docker-compose up -d9.5 构建应用镜像
9.5.1 构建 Gateway 镜像
cd fanyi-gateway
docker build -t fanyi-gateway .9.5.2 构建 System 镜像
cd fanyi-module-system/fanyi-module-system-biz
docker build -t fanyi-module-system-biz .9.5.3 构建 Infra 镜像
cd fanyi-module-infra/fanyi-module-infra-biz
docker build -t fanyi-module-infra-biz .9.6 部署应用服务
创建应用目录:
mkdir -p /data/docker/fanyi-cloud/logs创建 docker-compose.yml:
version: '3'
services:
fanyi-gateway:
image: fanyi-gateway
container_name: fanyi-gateway
environment:
- TZ=Asia/Shanghai
- SPRING_PROFILES_ACTIVE=prod
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.31.10:8848
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
- SPRING_CLOUD_NACOS_SERVER_ADDR=192.168.31.10:8848
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
volumes:
- ./logs:/root/logs/
restart: always
network_mode: host
fanyi-system:
image: fanyi-module-system-biz
container_name: fanyi-system
environment:
- TZ=Asia/Shanghai
- SPRING_PROFILES_ACTIVE=prod
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.31.10:8848
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
- SPRING_CLOUD_NACOS_SERVER_ADDR=192.168.31.10:8848
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
volumes:
- ./logs:/root/logs/
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48081" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
restart: always
network_mode: host
depends_on:
fanyi-gateway:
condition: service_started
fanyi-infra:
image: fanyi-module-infra-biz
container_name: fanyi-infra
environment:
- TZ=Asia/Shanghai
- SPRING_PROFILES_ACTIVE=prod
- SPRING_CLOUD_NACOS_CONFIG_SERVER_ADDR=192.168.31.10:8848
- SPRING_CLOUD_NACOS_CONFIG_NAMESPACE=prod
- SPRING_CLOUD_NACOS_SERVER_ADDR=192.168.31.10:8848
- SPRING_CLOUD_NACOS_DISCOVERY_NAMESPACE=prod
volumes:
- ./logs:/root/logs/
restart: always
network_mode: host
healthcheck:
test: [ "CMD","curl","-f","http://localhost:48082" ]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s
depends_on:
fanyi-system:
condition: service_healthy启动应用服务:
docker-compose up -d9.7 查看服务状态
docker-compose ps9.8 查看日志
# 查看所有服务日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f fanyi-gateway9.9 停止服务
docker-compose down10. 使用构建脚本部署
10.1 使用 build.sh 脚本
项目提供了 build.sh 脚本,可以快速构建和部署服务。
10.2 脚本使用方法
# 构建并部署 Gateway
./build.sh gateway-server
# 构建并部署 System
./build.sh system-server
# 构建并部署 Infra
./build.sh infra-server10.3 支持的服务列表
脚本支持以下服务:
- gateway-server
- ai-server
- bpm-server
- crm-server
- erp-server
- infra-server
- product-server
- promotion-server
- statistics-server
- trade-server
- appointment-server
- member-server
- chat-server
- mp-server
- pay-server
- report-server
- system-server
10.4 脚本功能
build.sh 脚本执行以下操作:
- 打包指定的服务
- 将 JAR 文件部署到
/data/fanyi/{service_name}/目录 - 执行滚动升级
11. 配置 Nacos
11.1 登录 Nacos
打开浏览器访问:
http://your-server-ip:8848/nacos11.2 创建命名空间
- 登录 Nacos 控制台
- 进入"命名空间"页面
- 点击"新建命名空间"
- 输入命名空间 ID(如:prod)
- 输入命名空间名称(如:生产环境)
- 点击"确定"
11.3 导入配置
- 进入"配置管理" -> "配置列表"
- 选择对应的命名空间
- 点击"导入配置"
- 上传配置文件
- 点击"导入"
11.4 配置示例
11.4.1 common.yaml
spring:
datasource:
url: jdbc:mysql://localhost:3306/db-fanyi-cloud?useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true&nullCatalogMeansCurrent=true
username: root
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
redis:
host: localhost
port: 6379
password:
database: 011.4.2 gateway-server.yaml
server:
port: 48080
fanyi:
info:
version: 1.0.012. 验证部署
12.1 检查服务状态
# 传统部署
ps -ef | grep java
# Docker 部署
docker ps12.2 检查服务日志
# 传统部署
tail -f /data/fanyi/logs/fanyi-gateway.log
# Docker 部署
docker logs -f fanyi-gateway12.3 检查服务端口
netstat -tlnp | grep -E '48080|48081|48082'12.4 访问服务
打开浏览器访问:
http://your-server-ip:4808013. 常见问题
13.1 端口被占用
问题:启动服务时提示端口被占用
解决方案:
- 查找占用端口的进程
netstat -tlnp | grep :48080- 结束占用端口的进程
kill -9 <pid>13.2 内存不足
问题:服务启动失败,提示内存不足
解决方案:
- 增加 JVM 内存
java -Xms1024m -Xmx1024m -jar app.jar- 优化系统内存
# 清理缓存
sync && echo 3 > /proc/sys/vm/drop_caches13.3 数据库连接失败
问题:无法连接到数据库
解决方案:
- 检查数据库是否启动
systemctl status mysqld- 检查数据库配置是否正确
- 检查防火墙设置
- 检查数据库用户权限
13.4 Redis 连接失败
问题:无法连接到 Redis
解决方案:
- 检查 Redis 是否启动
systemctl status redis- 检查 Redis 配置是否正确
- 检查防火墙设置
13.5 Nacos 连接失败
问题:无法连接到 Nacos
解决方案:
- 检查 Nacos 是否启动
systemctl status nacos- 检查 Nacos 配置是否正确
- 检查防火墙设置
- 检查 Nacos 命名空间配置
13.6 Docker 容器无法启动
问题:Docker 容器启动失败
解决方案:
- 查看容器日志
docker logs <container_name>- 检查容器配置是否正确
- 检查 Docker 是否正常运行
systemctl status docker14. 性能优化
14.1 JVM 参数优化
java -Xms1024m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar app.jar14.2 MySQL 优化
编辑 MySQL 配置文件 /etc/my.cnf:
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 214.3 Redis 优化
编辑 Redis 配置文件 /etc/redis.conf:
maxmemory 1gb
maxmemory-policy allkeys-lru15. 监控和日志
15.1 日志管理
# 查看日志
tail -f /data/fanyi/logs/fanyi-gateway.log
# 清理日志
find /data/fanyi/logs -name "*.log" -mtime +7 -delete15.2 服务监控
# 检查服务状态
systemctl status fanyi-gateway
# 检查服务资源使用
top -p $(pgrep -f fanyi-gateway)16. 备份和恢复
16.1 数据库备份
# 备份数据库
mysqldump -u root -p db-fanyi-cloud > backup_$(date +%Y%m%d).sql
# 恢复数据库
mysql -u root -p db-fanyi-cloud < backup_20240101.sql16.2 配置备份
# 备份 Nacos 配置
curl -X GET "http://localhost:8848/nacos/v1/cs/configs?export=true&tenant=prod&dataId=&group=" > nacos_config_$(date +%Y%m%d).zip17. 注意事项
- 安全配置:修改默认密码,配置防火墙
- 日志管理:定期清理日志文件
- 备份策略:定期备份数据库和配置
- 监控告警:配置系统监控和告警
- 性能优化:根据实际情况调整 JVM 参数
- 版本管理:记录部署版本,便于回滚
- 环境隔离:开发、测试、生产环境隔离
- 权限管理:合理配置文件和目录权限
