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. 相关文档