Skip to content

Linux部署 ​

1. 概述 ​

梵医云系统支持在 Linux 环境下部署,支持传统部署和 Docker 容器化部署两种方式。本文档介绍如何在 Linux 系统上部署梵医云系统。

2. 环境要求 ​

2.1 硬件要求 ​

组件最低配置推荐配置
CPU8 核16 核及以上
内存32 GB48 GB 及以上
硬盘100 GB200 GB 及以上
网络100 Mbps1 Gbps

2.2 软件要求 ​

软件版本要求说明
操作系统CentOS 7+ / Ubuntu 20.04+Linux 发行版
JDK17+Java 运行环境
Maven3.6+项目构建工具(构建时需要)
Docker20.10+容器化部署(可选)
Docker Compose1.29+容器编排(可选)
MySQL8.0+数据库
Redis6.0+缓存数据库
Nginx1.18+反向代理(可选)

3. 系统初始化 ​

3.1 更新系统 ​

bash
# CentOS/RHEL
sudo yum update -y

# Ubuntu/Debian
sudo apt update && sudo apt upgrade -y

3.2 安装常用工具 ​

bash
# 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 lsof

3.3 配置防火墙 ​

bash
# 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 enable

3.4 配置时区 ​

bash
sudo timedatectl set-timezone Asia/Shanghai

3.5 配置文件描述符限制 ​

bash
# 临时修改
ulimit -n 65535

# 永久修改
echo "* soft nofile 65535" | sudo tee -a /etc/security/limits.conf
echo "* hard nofile 65535" | sudo tee -a /etc/security/limits.conf

4. 安装 JDK ​

4.1 下载 JDK ​

bash
cd /opt
wget https://download.java.net/java/GA/jdk17.0.2/dfd4a8d0985749f896bed50d7138ee7f/8/GPL/openjdk-17.0.2_linux-x64_bin.tar.gz

4.2 解压 JDK ​

bash
tar -zxvf openjdk-17.0.2_linux-x64_bin.tar.gz
mv jdk-17.0.2 jdk17

4.3 配置环境变量 ​

bash
cat >> /etc/profile << EOF
export JAVA_HOME=/opt/jdk17
export PATH=\$JAVA_HOME/bin:\$PATH
EOF

source /etc/profile

4.4 验证安装 ​

bash
java -version

5. 安装 MySQL ​

5.1 安装 MySQL ​

bash
# CentOS/RHEL
sudo yum install -y mysql-server

# Ubuntu/Debian
sudo apt install -y mysql-server

5.2 启动 MySQL ​

bash
# CentOS/RHEL
sudo systemctl start mysqld
sudo systemctl enable mysqld

# Ubuntu/Debian
sudo systemctl start mysql
sudo systemctl enable mysql

5.3 配置 MySQL ​

编辑 MySQL 配置文件 /etc/my.cnf:

ini
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=1000
default-time-zone='+08:00'

重启 MySQL:

bash
sudo systemctl restart mysqld

5.4 创建数据库 ​

bash
mysql -u root -p << EOF
CREATE DATABASE \`db-fanyi-cloud\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EOF

5.5 导入初始化脚本 ​

bash
mysql -u root -p db-fanyi-cloud < sql/fanyi-cloud.sql

6. 安装 Redis ​

6.1 安装 Redis ​

bash
# CentOS/RHEL
sudo yum install -y redis

# Ubuntu/Debian
sudo apt install -y redis-server

6.2 启动 Redis ​

bash
# CentOS/RHEL
sudo systemctl start redis
sudo systemctl enable redis

# Ubuntu/Debian
sudo systemctl start redis-server
sudo systemctl enable redis-server

6.3 配置 Redis ​

编辑 Redis 配置文件 /etc/redis.conf:

ini
bind 0.0.0.0
protected-mode no

重启 Redis:

bash
sudo systemctl restart redis

7. 安装 Nacos ​

7.1 下载 Nacos ​

bash
cd /opt
wget https://github.com/alibaba/nacos/releases/download/2.2.3/nacos-server-2.2.3.tar.gz

7.2 解压 Nacos ​

bash
tar -zxvf nacos-server-2.2.3.tar.gz
mv nacos nacos

7.3 配置 Nacos ​

编辑 Nacos 配置文件 /opt/nacos/conf/application.properties:

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_key

7.4 启动 Nacos ​

bash
cd /opt/nacos/bin
./startup.sh -m standalone

7.5 配置 Nacos 开机自启 ​

创建 systemd 服务文件 /etc/systemd/system/nacos.service:

ini
[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

启动服务:

bash
sudo systemctl daemon-reload
sudo systemctl start nacos
sudo systemctl enable nacos

8. 传统部署方式 ​

8.1 创建部署目录 ​

bash
sudo mkdir -p /data/fanyi/{gateway,system,infra,member,pay,mp,bpm,report,crm,erp,ai,appointment,partner}
sudo chown -R $USER:$USER /data/fanyi

8.2 构建项目 ​

bash
cd fanyi-cloud
mvn clean package -DskipTests

8.3 部署服务 ​

8.3.1 部署 Gateway ​

bash
cp fanyi-gateway/target/fanyi-gateway.jar /data/fanyi/gateway/

8.3.2 部署 System ​

bash
cp fanyi-module-system/fanyi-module-system-biz/target/fanyi-module-system-biz.jar /data/fanyi/system/

8.3.3 部署 Infra ​

bash
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:

bash
#!/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:

bash
#!/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:

bash
#!/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:

bash
#!/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 设置脚本权限 ​

bash
chmod +x /data/fanyi/*/start.sh
chmod +x /data/fanyi/*/stop.sh

8.6 启动服务 ​

bash
# 启动 Gateway
/data/fanyi/gateway/start.sh

# 启动 System
/data/fanyi/system/start.sh

# 启动 Infra
/data/fanyi/infra/start.sh

8.7 配置 systemd 服务 ​

8.7.1 创建 Gateway 服务 ​

创建 /etc/systemd/system/fanyi-gateway.service:

ini
[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.target

8.7.2 创建 System 服务 ​

创建 /etc/systemd/system/fanyi-system.service:

ini
[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.target

8.7.3 启动服务 ​

bash
sudo systemctl daemon-reload
sudo systemctl start fanyi-gateway
sudo systemctl enable fanyi-gateway
sudo systemctl start fanyi-system
sudo systemctl enable fanyi-system

9. Docker 部署方式 ​

9.1 安装 Docker ​

9.1.1 安装 Docker ​

bash
# 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.io

9.1.2 启动 Docker ​

bash
sudo systemctl start docker
sudo systemctl enable docker

9.1.3 配置 Docker 镜像加速 ​

编辑 Docker 配置文件 /etc/docker/daemon.json:

json
{
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://hub-mirror.c.163.com"
  ]
}

重启 Docker:

bash
sudo systemctl daemon-reload
sudo systemctl restart docker

9.2 安装 Docker Compose ​

bash
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

验证安装:

bash
docker-compose --version

9.3 部署 MySQL ​

创建 MySQL 目录:

bash
mkdir -p /data/docker/mysql/data

创建 docker-compose.yml:

yaml
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

创建网络:

bash
docker network create fanyiyun_default

启动 MySQL:

bash
docker-compose up -d

9.4 部署 Redis ​

创建 Redis 目录:

bash
mkdir -p /data/docker/redis

创建 docker-compose.yml:

yaml
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:

bash
docker-compose up -d

9.5 构建应用镜像 ​

9.5.1 构建 Gateway 镜像 ​

bash
cd fanyi-gateway
docker build -t fanyi-gateway .

9.5.2 构建 System 镜像 ​

bash
cd fanyi-module-system/fanyi-module-system-biz
docker build -t fanyi-module-system-biz .

9.5.3 构建 Infra 镜像 ​

bash
cd fanyi-module-infra/fanyi-module-infra-biz
docker build -t fanyi-module-infra-biz .

9.6 部署应用服务 ​

创建应用目录:

bash
mkdir -p /data/docker/fanyi-cloud/logs

创建 docker-compose.yml:

yaml
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

启动应用服务:

bash
docker-compose up -d

9.7 查看服务状态 ​

bash
docker-compose ps

9.8 查看日志 ​

bash
# 查看所有服务日志
docker-compose logs -f

# 查看特定服务日志
docker-compose logs -f fanyi-gateway

9.9 停止服务 ​

bash
docker-compose down

10. 使用构建脚本部署 ​

10.1 使用 build.sh 脚本 ​

项目提供了 build.sh 脚本,可以快速构建和部署服务。

10.2 脚本使用方法 ​

bash
# 构建并部署 Gateway
./build.sh gateway-server

# 构建并部署 System
./build.sh system-server

# 构建并部署 Infra
./build.sh infra-server

10.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 脚本执行以下操作:

  1. 打包指定的服务
  2. 将 JAR 文件部署到 /data/fanyi/{service_name}/ 目录
  3. 执行滚动升级

11. 配置 Nacos ​

11.1 登录 Nacos ​

打开浏览器访问:

http://your-server-ip:8848/nacos

11.2 创建命名空间 ​

  1. 登录 Nacos 控制台
  2. 进入"命名空间"页面
  3. 点击"新建命名空间"
  4. 输入命名空间 ID(如:prod)
  5. 输入命名空间名称(如:生产环境)
  6. 点击"确定"

11.3 导入配置 ​

  1. 进入"配置管理" -> "配置列表"
  2. 选择对应的命名空间
  3. 点击"导入配置"
  4. 上传配置文件
  5. 点击"导入"

11.4 配置示例 ​

11.4.1 common.yaml ​

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: 0

11.4.2 gateway-server.yaml ​

yaml
server:
  port: 48080

fanyi:
  info:
    version: 1.0.0

12. 验证部署 ​

12.1 检查服务状态 ​

bash
# 传统部署
ps -ef | grep java

# Docker 部署
docker ps

12.2 检查服务日志 ​

bash
# 传统部署
tail -f /data/fanyi/logs/fanyi-gateway.log

# Docker 部署
docker logs -f fanyi-gateway

12.3 检查服务端口 ​

bash
netstat -tlnp | grep -E '48080|48081|48082'

12.4 访问服务 ​

打开浏览器访问:

http://your-server-ip:48080

13. 常见问题 ​

13.1 端口被占用 ​

问题:启动服务时提示端口被占用

解决方案:

  1. 查找占用端口的进程
bash
netstat -tlnp | grep :48080
  1. 结束占用端口的进程
bash
kill -9 <pid>

13.2 内存不足 ​

问题:服务启动失败,提示内存不足

解决方案:

  1. 增加 JVM 内存
bash
java -Xms1024m -Xmx1024m -jar app.jar
  1. 优化系统内存
bash
# 清理缓存
sync && echo 3 > /proc/sys/vm/drop_caches

13.3 数据库连接失败 ​

问题:无法连接到数据库

解决方案:

  1. 检查数据库是否启动
bash
systemctl status mysqld
  1. 检查数据库配置是否正确
  2. 检查防火墙设置
  3. 检查数据库用户权限

13.4 Redis 连接失败 ​

问题:无法连接到 Redis

解决方案:

  1. 检查 Redis 是否启动
bash
systemctl status redis
  1. 检查 Redis 配置是否正确
  2. 检查防火墙设置

13.5 Nacos 连接失败 ​

问题:无法连接到 Nacos

解决方案:

  1. 检查 Nacos 是否启动
bash
systemctl status nacos
  1. 检查 Nacos 配置是否正确
  2. 检查防火墙设置
  3. 检查 Nacos 命名空间配置

13.6 Docker 容器无法启动 ​

问题:Docker 容器启动失败

解决方案:

  1. 查看容器日志
bash
docker logs <container_name>
  1. 检查容器配置是否正确
  2. 检查 Docker 是否正常运行
bash
systemctl status docker

14. 性能优化 ​

14.1 JVM 参数优化 ​

bash
java -Xms1024m -Xmx1024m -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -jar app.jar

14.2 MySQL 优化 ​

编辑 MySQL 配置文件 /etc/my.cnf:

ini
[mysqld]
innodb_buffer_pool_size = 1G
innodb_log_file_size = 256M
innodb_flush_log_at_trx_commit = 2

14.3 Redis 优化 ​

编辑 Redis 配置文件 /etc/redis.conf:

ini
maxmemory 1gb
maxmemory-policy allkeys-lru

15. 监控和日志 ​

15.1 日志管理 ​

bash
# 查看日志
tail -f /data/fanyi/logs/fanyi-gateway.log

# 清理日志
find /data/fanyi/logs -name "*.log" -mtime +7 -delete

15.2 服务监控 ​

bash
# 检查服务状态
systemctl status fanyi-gateway

# 检查服务资源使用
top -p $(pgrep -f fanyi-gateway)

16. 备份和恢复 ​

16.1 数据库备份 ​

bash
# 备份数据库
mysqldump -u root -p db-fanyi-cloud > backup_$(date +%Y%m%d).sql

# 恢复数据库
mysql -u root -p db-fanyi-cloud < backup_20240101.sql

16.2 配置备份 ​

bash
# 备份 Nacos 配置
curl -X GET "http://localhost:8848/nacos/v1/cs/configs?export=true&tenant=prod&dataId=&group=" > nacos_config_$(date +%Y%m%d).zip

17. 注意事项 ​

  1. 安全配置:修改默认密码,配置防火墙
  2. 日志管理:定期清理日志文件
  3. 备份策略:定期备份数据库和配置
  4. 监控告警:配置系统监控和告警
  5. 性能优化:根据实际情况调整 JVM 参数
  6. 版本管理:记录部署版本,便于回滚
  7. 环境隔离:开发、测试、生产环境隔离
  8. 权限管理:合理配置文件和目录权限

18. 相关文档 ​