Files
jiebanke/docs/DEPLOYMENT_JAVA.md

596 lines
10 KiB
Markdown
Raw Normal View History

# 📦 结伴客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年* 📅