596 lines
10 KiB
Markdown
596 lines
10 KiB
Markdown
|
|
# 📦 结伴客Java微服务部署指南
|
|||
|
|
|
|||
|
|
## 📋 项目概述
|
|||
|
|
本文档详细说明了如何将结伴客Java微服务项目部署到生产环境。项目采用微服务架构,包含多个独立的服务模块。
|
|||
|
|
|
|||
|
|
## 🛠️ 环境要求
|
|||
|
|
|
|||
|
|
### 服务器要求
|
|||
|
|
- **操作系统**: Ubuntu 20.04+ / CentOS 7+ / macOS 10.15+
|
|||
|
|
- **内存**: 最低 4GB,推荐 8GB+
|
|||
|
|
- **存储**: 最低 20GB 可用空间
|
|||
|
|
- **网络**: 稳定的互联网连接
|
|||
|
|
|
|||
|
|
### 软件要求
|
|||
|
|
- **JDK**: Java 17
|
|||
|
|
- **构建工具**: Maven 3.6+
|
|||
|
|
- **数据库**: MySQL 8.0+
|
|||
|
|
- **缓存**: Redis 6.0+
|
|||
|
|
- **消息队列**: RabbitMQ 3.8+
|
|||
|
|
- **容器化**: Docker 20.10+ 和 Docker Compose 1.29+
|
|||
|
|
|
|||
|
|
## 🏗️ 开发环境部署
|
|||
|
|
|
|||
|
|
### 1. 克隆项目
|
|||
|
|
```bash
|
|||
|
|
git clone <repository-url>
|
|||
|
|
cd jiebanke/backend-java
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 环境准备
|
|||
|
|
确保已安装Java 17和Maven,并验证安装:
|
|||
|
|
```bash
|
|||
|
|
java -version
|
|||
|
|
mvn -version
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 构建项目
|
|||
|
|
```bash
|
|||
|
|
# 清理并构建项目
|
|||
|
|
./build-services.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 启动服务
|
|||
|
|
```bash
|
|||
|
|
# 使用Docker Compose启动所有服务
|
|||
|
|
docker-compose up -d
|
|||
|
|
|
|||
|
|
# 或者使用启动脚本启动服务
|
|||
|
|
./start-services.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. 验证部署
|
|||
|
|
- Eureka Dashboard: http://localhost:8761
|
|||
|
|
- API Gateway: http://localhost:8080
|
|||
|
|
- API文档: http://localhost:8080/doc.html
|
|||
|
|
|
|||
|
|
## 🧪 测试环境部署
|
|||
|
|
|
|||
|
|
### 1. 服务器准备
|
|||
|
|
```bash
|
|||
|
|
# 登录测试服务器
|
|||
|
|
ssh user@test-server
|
|||
|
|
|
|||
|
|
# 创建项目目录
|
|||
|
|
mkdir -p /opt/jiebanke
|
|||
|
|
cd /opt/jiebanke
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 部署脚本
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# deploy-test.sh
|
|||
|
|
|
|||
|
|
# 拉取最新代码
|
|||
|
|
git pull origin develop
|
|||
|
|
|
|||
|
|
# 构建项目
|
|||
|
|
cd backend-java
|
|||
|
|
./build-services.sh
|
|||
|
|
|
|||
|
|
# 重启服务
|
|||
|
|
docker-compose down
|
|||
|
|
docker-compose up -d
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 环境配置
|
|||
|
|
```bash
|
|||
|
|
# 测试环境变量
|
|||
|
|
cat > /opt/jiebanke/backend-java/.env << EOF
|
|||
|
|
DB_HOST=mysql.jiebanke.com
|
|||
|
|
DB_PORT=3306
|
|||
|
|
DB_USER=root
|
|||
|
|
DB_PASSWORD=testpassword
|
|||
|
|
DB_DATABASE=jiebanke_test
|
|||
|
|
JWT_SECRET=your-test-jwt-secret
|
|||
|
|
EOF
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚀 生产环境部署
|
|||
|
|
|
|||
|
|
### 1. 服务器准备
|
|||
|
|
```bash
|
|||
|
|
# 购买云服务器 (阿里云/腾讯云/AWS)
|
|||
|
|
# 配置安全组: 开放80, 443, 8761, 8080-8090端口
|
|||
|
|
|
|||
|
|
# 服务器初始化
|
|||
|
|
apt update && apt upgrade -y
|
|||
|
|
apt install -y openjdk-17-jdk maven docker docker-compose
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2. 数据库部署
|
|||
|
|
```bash
|
|||
|
|
# 安装MySQL
|
|||
|
|
apt install -y mysql-server
|
|||
|
|
|
|||
|
|
# 安全配置
|
|||
|
|
mysql_secure_installation
|
|||
|
|
|
|||
|
|
# 创建生产数据库
|
|||
|
|
mysql -u root -p -e "CREATE DATABASE jiebanke CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;"
|
|||
|
|
|
|||
|
|
# 导入数据
|
|||
|
|
mysql -u root -p jiebanke < scripts/init-database.sql
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 3. 应用部署
|
|||
|
|
```bash
|
|||
|
|
# 创建部署用户
|
|||
|
|
adduser deploy
|
|||
|
|
usermod -aG docker deploy
|
|||
|
|
|
|||
|
|
# 项目目录
|
|||
|
|
mkdir -p /home/deploy/jiebanke
|
|||
|
|
chown deploy:deploy /home/deploy/jiebanke
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 4. 自动化部署脚本
|
|||
|
|
```bash
|
|||
|
|
#!/bin/bash
|
|||
|
|
# deploy-prod.sh
|
|||
|
|
|
|||
|
|
set -e
|
|||
|
|
|
|||
|
|
# 变量配置
|
|||
|
|
APP_NAME="jiebanke"
|
|||
|
|
APP_DIR="/home/deploy/jiebanke"
|
|||
|
|
BRANCH="main"
|
|||
|
|
|
|||
|
|
echo "🚀 开始部署 $APP_NAME..."
|
|||
|
|
|
|||
|
|
# 拉取代码
|
|||
|
|
echo "📦 拉取最新代码..."
|
|||
|
|
cd $APP_DIR
|
|||
|
|
git fetch origin
|
|||
|
|
git checkout $BRANCH
|
|||
|
|
git reset --hard origin/$BRANCH
|
|||
|
|
|
|||
|
|
# 构建项目
|
|||
|
|
echo "🔧 构建项目..."
|
|||
|
|
cd backend-java
|
|||
|
|
./build-services.sh
|
|||
|
|
|
|||
|
|
# 停止当前服务
|
|||
|
|
echo "⏹️ 停止当前服务..."
|
|||
|
|
docker-compose down
|
|||
|
|
|
|||
|
|
# 启动新服务
|
|||
|
|
echo "▶️ 启动新服务..."
|
|||
|
|
docker-compose up -d
|
|||
|
|
|
|||
|
|
echo "✅ 部署完成!"
|
|||
|
|
echo "🌐 Eureka Dashboard: http://your-domain.com:8761"
|
|||
|
|
echo "🌐 API Gateway: http://your-domain.com:8080"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 5. Nginx 配置
|
|||
|
|
```nginx
|
|||
|
|
# /etc/nginx/sites-available/jiebanke
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name your-domain.com;
|
|||
|
|
|
|||
|
|
# 反向代理到API网关
|
|||
|
|
location / {
|
|||
|
|
proxy_pass http://localhost:8080;
|
|||
|
|
proxy_set_header Host $host;
|
|||
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|||
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 6. SSL证书配置
|
|||
|
|
```bash
|
|||
|
|
# 安装Certbot
|
|||
|
|
apt install -y certbot python3-certbot-nginx
|
|||
|
|
|
|||
|
|
# 获取SSL证书
|
|||
|
|
certbot --nginx -d your-domain.com
|
|||
|
|
|
|||
|
|
# 自动续期
|
|||
|
|
certbot renew --dry-run
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📊 监控与日志
|
|||
|
|
|
|||
|
|
### 应用监控
|
|||
|
|
```bash
|
|||
|
|
# 查看Docker容器状态
|
|||
|
|
docker-compose ps
|
|||
|
|
|
|||
|
|
# 查看容器日志
|
|||
|
|
docker-compose logs -f
|
|||
|
|
|
|||
|
|
# 查看特定服务日志
|
|||
|
|
docker-compose logs -f user-service
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 日志管理
|
|||
|
|
```bash
|
|||
|
|
# 查看实时日志
|
|||
|
|
docker-compose logs -f
|
|||
|
|
|
|||
|
|
# 查看特定服务日志
|
|||
|
|
docker-compose logs -f auth-service
|
|||
|
|
|
|||
|
|
# 日志文件位置 (Docker容器内)
|
|||
|
|
/var/log/jiebanke/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 性能监控
|
|||
|
|
```bash
|
|||
|
|
# 安装监控工具
|
|||
|
|
apt install -y htop iotop nmon
|
|||
|
|
|
|||
|
|
# 监控系统资源
|
|||
|
|
top
|
|||
|
|
htop
|
|||
|
|
|
|||
|
|
# 监控Docker资源使用
|
|||
|
|
docker stats
|
|||
|
|
|
|||
|
|
# 监控磁盘使用
|
|||
|
|
df -h
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🔒 安全配置
|
|||
|
|
|
|||
|
|
### 防火墙配置
|
|||
|
|
```bash
|
|||
|
|
# 配置UFW防火墙
|
|||
|
|
apt install -y ufw
|
|||
|
|
ufw allow ssh
|
|||
|
|
ufw allow http
|
|||
|
|
ufw allow https
|
|||
|
|
ufw allow 8761
|
|||
|
|
ufw allow 8080
|
|||
|
|
ufw enable
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 数据库安全
|
|||
|
|
```bash
|
|||
|
|
# 修改MySQL默认端口
|
|||
|
|
vim /etc/mysql/mysql.conf.d/mysqld.cnf
|
|||
|
|
# port = 3307
|
|||
|
|
|
|||
|
|
# 创建应用专用用户
|
|||
|
|
mysql -u root -p -e "
|
|||
|
|
CREATE USER 'appuser'@'%' IDENTIFIED BY 'strongpassword';
|
|||
|
|
GRANT SELECT, INSERT, UPDATE, DELETE ON jiebanke.* TO 'appuser'@'%';
|
|||
|
|
FLUSH PRIVILEGES;
|
|||
|
|
"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### SSH安全
|
|||
|
|
```bash
|
|||
|
|
# 禁用root登录
|
|||
|
|
vim /etc/ssh/sshd_config
|
|||
|
|
# PermitRootLogin no
|
|||
|
|
|
|||
|
|
# 使用密钥认证
|
|||
|
|
# PasswordAuthentication no
|
|||
|
|
|
|||
|
|
# 重启SSH
|
|||
|
|
systemctl restart sshd
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📦 容器化部署
|
|||
|
|
|
|||
|
|
### Docker Compose 配置
|
|||
|
|
```yaml
|
|||
|
|
# docker-compose.yml
|
|||
|
|
version: '3.8'
|
|||
|
|
|
|||
|
|
services:
|
|||
|
|
# MySQL数据库
|
|||
|
|
mysql:
|
|||
|
|
image: mysql:8.0
|
|||
|
|
container_name: jiebanke-mysql
|
|||
|
|
environment:
|
|||
|
|
MYSQL_ROOT_PASSWORD: root
|
|||
|
|
MYSQL_DATABASE: jiebanke
|
|||
|
|
ports:
|
|||
|
|
- "3306:3306"
|
|||
|
|
volumes:
|
|||
|
|
- mysql_data:/var/lib/mysql
|
|||
|
|
- ./scripts/init-database.sql:/docker-entrypoint-initdb.d/init-database.sql
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
|
|||
|
|
# Redis缓存
|
|||
|
|
redis:
|
|||
|
|
image: redis:6.0
|
|||
|
|
container_name: jiebanke-redis
|
|||
|
|
ports:
|
|||
|
|
- "6379:6379"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
|
|||
|
|
# RabbitMQ消息队列
|
|||
|
|
rabbitmq:
|
|||
|
|
image: rabbitmq:3.8-management
|
|||
|
|
container_name: jiebanke-rabbitmq
|
|||
|
|
ports:
|
|||
|
|
- "5672:5672"
|
|||
|
|
- "15672:15672"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
|
|||
|
|
# Eureka服务注册中心
|
|||
|
|
eureka-server:
|
|||
|
|
build:
|
|||
|
|
context: ./eureka-server
|
|||
|
|
container_name: jiebanke-eureka
|
|||
|
|
ports:
|
|||
|
|
- "8761:8761"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
|
|||
|
|
# API网关
|
|||
|
|
gateway-service:
|
|||
|
|
build:
|
|||
|
|
context: ./gateway-service
|
|||
|
|
container_name: jiebanke-gateway
|
|||
|
|
ports:
|
|||
|
|
- "8080:8080"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
depends_on:
|
|||
|
|
- eureka-server
|
|||
|
|
|
|||
|
|
# 认证服务
|
|||
|
|
auth-service:
|
|||
|
|
build:
|
|||
|
|
context: ./auth-service
|
|||
|
|
container_name: jiebanke-auth
|
|||
|
|
ports:
|
|||
|
|
- "8081:8081"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
depends_on:
|
|||
|
|
- eureka-server
|
|||
|
|
- mysql
|
|||
|
|
|
|||
|
|
# 用户服务
|
|||
|
|
user-service:
|
|||
|
|
build:
|
|||
|
|
context: ./user-service
|
|||
|
|
container_name: jiebanke-user
|
|||
|
|
ports:
|
|||
|
|
- "8082:8082"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
depends_on:
|
|||
|
|
- eureka-server
|
|||
|
|
- mysql
|
|||
|
|
|
|||
|
|
# 旅行服务
|
|||
|
|
travel-service:
|
|||
|
|
build:
|
|||
|
|
context: ./travel-service
|
|||
|
|
container_name: jiebanke-travel
|
|||
|
|
ports:
|
|||
|
|
- "8083:8083"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
depends_on:
|
|||
|
|
- eureka-server
|
|||
|
|
- mysql
|
|||
|
|
|
|||
|
|
# 动物服务
|
|||
|
|
animal-service:
|
|||
|
|
build:
|
|||
|
|
context: ./animal-service
|
|||
|
|
container_name: jiebanke-animal
|
|||
|
|
ports:
|
|||
|
|
- "8084:8084"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
depends_on:
|
|||
|
|
- eureka-server
|
|||
|
|
- mysql
|
|||
|
|
|
|||
|
|
# 订单服务
|
|||
|
|
order-service:
|
|||
|
|
build:
|
|||
|
|
context: ./order-service
|
|||
|
|
container_name: jiebanke-order
|
|||
|
|
ports:
|
|||
|
|
- "8085:8085"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
depends_on:
|
|||
|
|
- eureka-server
|
|||
|
|
- mysql
|
|||
|
|
|
|||
|
|
# 推广服务
|
|||
|
|
promotion-service:
|
|||
|
|
build:
|
|||
|
|
context: ./promotion-service
|
|||
|
|
container_name: jiebanke-promotion
|
|||
|
|
ports:
|
|||
|
|
- "8086:8086"
|
|||
|
|
networks:
|
|||
|
|
- jiebanke-network
|
|||
|
|
depends_on:
|
|||
|
|
- eureka-server
|
|||
|
|
- mysql
|
|||
|
|
|
|||
|
|
volumes:
|
|||
|
|
mysql_data:
|
|||
|
|
|
|||
|
|
networks:
|
|||
|
|
jiebanke-network:
|
|||
|
|
driver: bridge
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Kubernetes部署 (可选)
|
|||
|
|
```yaml
|
|||
|
|
# deployment.yaml
|
|||
|
|
apiVersion: apps/v1
|
|||
|
|
kind: Deployment
|
|||
|
|
metadata:
|
|||
|
|
name: jiebanke-eureka
|
|||
|
|
spec:
|
|||
|
|
replicas: 1
|
|||
|
|
selector:
|
|||
|
|
matchLabels:
|
|||
|
|
app: eureka
|
|||
|
|
template:
|
|||
|
|
metadata:
|
|||
|
|
labels:
|
|||
|
|
app: eureka
|
|||
|
|
spec:
|
|||
|
|
containers:
|
|||
|
|
- name: eureka
|
|||
|
|
image: jiebanke/eureka-server:latest
|
|||
|
|
ports:
|
|||
|
|
- containerPort: 8761
|
|||
|
|
---
|
|||
|
|
apiVersion: v1
|
|||
|
|
kind: Service
|
|||
|
|
metadata:
|
|||
|
|
name: eureka-service
|
|||
|
|
spec:
|
|||
|
|
selector:
|
|||
|
|
app: eureka
|
|||
|
|
ports:
|
|||
|
|
- port: 8761
|
|||
|
|
targetPort: 8761
|
|||
|
|
type: ClusterIP
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🚨 故障排除
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
|
|||
|
|
1. **端口占用**
|
|||
|
|
```bash
|
|||
|
|
# 查找占用端口的进程
|
|||
|
|
lsof -i :8080
|
|||
|
|
|
|||
|
|
# 杀死进程
|
|||
|
|
kill -9 <PID>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **权限问题**
|
|||
|
|
```bash
|
|||
|
|
# 修改文件权限
|
|||
|
|
chown -R deploy:deploy /home/deploy/jiebanke
|
|||
|
|
chmod -R 755 /home/deploy/jiebanke
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **数据库连接失败**
|
|||
|
|
```bash
|
|||
|
|
# 检查MySQL服务
|
|||
|
|
systemctl status mysql
|
|||
|
|
|
|||
|
|
# 检查防火墙
|
|||
|
|
ufw status
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
4. **Docker容器问题**
|
|||
|
|
```bash
|
|||
|
|
# 查看容器状态
|
|||
|
|
docker-compose ps
|
|||
|
|
|
|||
|
|
# 查看容器日志
|
|||
|
|
docker-compose logs <service-name>
|
|||
|
|
|
|||
|
|
# 重新构建容器
|
|||
|
|
docker-compose build --no-cache
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 日志分析
|
|||
|
|
```bash
|
|||
|
|
# 查看错误日志
|
|||
|
|
docker-compose logs -f --tail 100
|
|||
|
|
|
|||
|
|
# 查看特定服务日志
|
|||
|
|
docker-compose logs -f user-service
|
|||
|
|
|
|||
|
|
# 数据库日志
|
|||
|
|
tail -f /var/log/mysql/error.log
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 📞 支持与维护
|
|||
|
|
|
|||
|
|
### 紧急联系人
|
|||
|
|
- **运维团队**: ops@jiebanke.com
|
|||
|
|
- **开发团队**: dev@jiebanke.com
|
|||
|
|
- **值班电话**: +86-138-0013-8000
|
|||
|
|
|
|||
|
|
### 维护窗口
|
|||
|
|
- **常规维护**: 每周四凌晨 2:00-4:00
|
|||
|
|
- **紧急维护**: 随时响应
|
|||
|
|
- **系统监控**: 7x24小时
|
|||
|
|
|
|||
|
|
### 备份策略
|
|||
|
|
```bash
|
|||
|
|
# 数据库备份
|
|||
|
|
mysqldump -u root -p jiebanke > backup-$(date +%Y%m%d).sql
|
|||
|
|
|
|||
|
|
# 文件备份
|
|||
|
|
tar -czf backup-$(date +%Y%m%d).tar.gz /home/deploy/jiebanke
|
|||
|
|
|
|||
|
|
# 上传到云存储
|
|||
|
|
rclone copy backup-* remote:backups/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 🎯 性能优化建议
|
|||
|
|
|
|||
|
|
### JVM调优
|
|||
|
|
```bash
|
|||
|
|
# 在Dockerfile中设置JVM参数
|
|||
|
|
ENV JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 数据库连接池优化
|
|||
|
|
```yaml
|
|||
|
|
# 在application.yml中配置
|
|||
|
|
spring:
|
|||
|
|
datasource:
|
|||
|
|
hikari:
|
|||
|
|
maximum-pool-size: 20
|
|||
|
|
minimum-idle: 5
|
|||
|
|
connection-timeout: 30000
|
|||
|
|
idle-timeout: 600000
|
|||
|
|
max-lifetime: 1800000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Redis连接池优化
|
|||
|
|
```yaml
|
|||
|
|
# 在application.yml中配置
|
|||
|
|
spring:
|
|||
|
|
redis:
|
|||
|
|
lettuce:
|
|||
|
|
pool:
|
|||
|
|
max-active: 20
|
|||
|
|
max-idle: 10
|
|||
|
|
min-idle: 5
|
|||
|
|
max-wait: 2000ms
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 负载均衡优化
|
|||
|
|
```yaml
|
|||
|
|
# 在application.yml中配置
|
|||
|
|
ribbon:
|
|||
|
|
ConnectTimeout: 3000
|
|||
|
|
ReadTimeout: 10000
|
|||
|
|
MaxAutoRetriesNextServer: 1
|
|||
|
|
MaxAutoRetries: 0
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
*最后更新: 2025年* 📅
|