10 KiB
10 KiB
📦 结伴客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. 克隆项目
git clone <repository-url>
cd jiebanke/backend-java
2. 环境准备
确保已安装Java 17和Maven,并验证安装:
java -version
mvn -version
3. 构建项目
# 清理并构建项目
./build-services.sh
4. 启动服务
# 使用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. 服务器准备
# 登录测试服务器
ssh user@test-server
# 创建项目目录
mkdir -p /opt/jiebanke
cd /opt/jiebanke
2. 部署脚本
#!/bin/bash
# deploy-test.sh
# 拉取最新代码
git pull origin develop
# 构建项目
cd backend-java
./build-services.sh
# 重启服务
docker-compose down
docker-compose up -d
3. 环境配置
# 测试环境变量
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. 服务器准备
# 购买云服务器 (阿里云/腾讯云/AWS)
# 配置安全组: 开放80, 443, 8761, 8080-8090端口
# 服务器初始化
apt update && apt upgrade -y
apt install -y openjdk-17-jdk maven docker docker-compose
2. 数据库部署
# 安装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. 应用部署
# 创建部署用户
adduser deploy
usermod -aG docker deploy
# 项目目录
mkdir -p /home/deploy/jiebanke
chown deploy:deploy /home/deploy/jiebanke
4. 自动化部署脚本
#!/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 配置
# /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证书配置
# 安装Certbot
apt install -y certbot python3-certbot-nginx
# 获取SSL证书
certbot --nginx -d your-domain.com
# 自动续期
certbot renew --dry-run
📊 监控与日志
应用监控
# 查看Docker容器状态
docker-compose ps
# 查看容器日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f user-service
日志管理
# 查看实时日志
docker-compose logs -f
# 查看特定服务日志
docker-compose logs -f auth-service
# 日志文件位置 (Docker容器内)
/var/log/jiebanke/
性能监控
# 安装监控工具
apt install -y htop iotop nmon
# 监控系统资源
top
htop
# 监控Docker资源使用
docker stats
# 监控磁盘使用
df -h
🔒 安全配置
防火墙配置
# 配置UFW防火墙
apt install -y ufw
ufw allow ssh
ufw allow http
ufw allow https
ufw allow 8761
ufw allow 8080
ufw enable
数据库安全
# 修改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安全
# 禁用root登录
vim /etc/ssh/sshd_config
# PermitRootLogin no
# 使用密钥认证
# PasswordAuthentication no
# 重启SSH
systemctl restart sshd
📦 容器化部署
Docker Compose 配置
# 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部署 (可选)
# 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
🚨 故障排除
常见问题
- 端口占用
# 查找占用端口的进程
lsof -i :8080
# 杀死进程
kill -9 <PID>
- 权限问题
# 修改文件权限
chown -R deploy:deploy /home/deploy/jiebanke
chmod -R 755 /home/deploy/jiebanke
- 数据库连接失败
# 检查MySQL服务
systemctl status mysql
# 检查防火墙
ufw status
- Docker容器问题
# 查看容器状态
docker-compose ps
# 查看容器日志
docker-compose logs <service-name>
# 重新构建容器
docker-compose build --no-cache
日志分析
# 查看错误日志
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小时
备份策略
# 数据库备份
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调优
# 在Dockerfile中设置JVM参数
ENV JAVA_OPTS="-Xms512m -Xmx2g -XX:+UseG1GC -XX:MaxGCPauseMillis=200"
数据库连接池优化
# 在application.yml中配置
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
Redis连接池优化
# 在application.yml中配置
spring:
redis:
lettuce:
pool:
max-active: 20
max-idle: 10
min-idle: 5
max-wait: 2000ms
负载均衡优化
# 在application.yml中配置
ribbon:
ConnectTimeout: 3000
ReadTimeout: 10000
MaxAutoRetriesNextServer: 1
MaxAutoRetries: 0
最后更新: 2025年 📅