# 📦 结伴客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 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 ``` 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 # 重新构建容器 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年* 📅