后端部署
EasyFly-Ads 后端采用微服务架构,支持 Docker Compose 一键部署和手动部署两种方式。本章详细介绍部署流程与配置方法。
部署方式选择
| 方式 | 适用场景 | 推荐度 |
|---|---|---|
| Docker Compose | 小规模、快速上线 | ⭐⭐⭐⭐⭐ |
| Kubernetes | 大规模、高可用 | ⭐⭐⭐⭐ |
| 手动部署 | 开发测试 | ⭐⭐⭐ |
Docker Compose 部署(推荐)
准备工作
确保服务器已安装 Docker 和 Docker Compose(见准备服务器)。
配置文件
创建 docker-compose.yml:
yaml
version: '3.8'
services:
# 用户服务
user-service:
image: easyfly/user-service:latest
restart: always
ports:
- "8081:8080"
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=easyfly
- DB_PASSWORD=your_password
- REDIS_HOST=redis
- REDIS_PORT=6379
- REDIS_PASSWORD=your_redis_password
volumes:
- ./logs/user:/app/logs
depends_on:
- mysql
- redis
# 广告服务
ad-service:
image: easyfly/ad-service:latest
restart: always
ports:
- "8082:8080"
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=easyfly
- DB_PASSWORD=your_password
- REDIS_HOST=redis
- REDIS_PORT=6379
- ES_HOST=elasticsearch:9200
volumes:
- ./logs/ad:/app/logs
depends_on:
- mysql
- redis
- elasticsearch
# 支付服务
pay-service:
image: easyfly/pay-service:latest
restart: always
ports:
- "8083:8080"
environment:
- DB_HOST=mysql
- DB_PORT=3306
- DB_USER=easyfly
- DB_PASSWORD=your_password
- REDIS_HOST=redis
- WECHAT_PAY_MCH_ID=your_mch_id
- WECHAT_PAY_API_KEY=your_api_key
volumes:
- ./logs/pay:/app/logs
depends_on:
- mysql
- redis
# API 网关
api-gateway:
image: easyfly/api-gateway:latest
restart: always
ports:
- "8080:8080"
environment:
- USER_SERVICE_URL=http://user-service:8080
- AD_SERVICE_URL=http://ad-service:8080
- PAY_SERVICE_URL=http://pay-service:8080
- RISK_SERVICE_URL=http://risk-service:8080
depends_on:
- user-service
- ad-service
- pay-service启动服务
bash
# 拉取最新镜像
docker-compose pull
# 启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs -f手动部署
环境要求
| 依赖 | 版本 |
|---|---|
| JDK | 17+ |
| Maven / Gradle | 3.8+ / 7.x+ |
| MySQL | 8.0 |
| Redis | 6+ |
编译项目
bash
# 克隆仓库
git clone <仓库地址> easyfly-backend
cd easyfly-backend
# Maven 编译
mvn clean package -DskipTests
# 产物位于各模块的 target/ 目录
# user-service/target/user-service.jar
# ad-service/target/ad-service.jar配置文件
每个服务需要独立的 application.yml 配置:
yaml
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/easyfly?useUnicode=true&characterEncoding=utf8mb4
username: easyfly
password: your_password
redis:
host: 127.0.0.1
port: 6379
password: your_redis_password启动服务
bash
# 分别启动各服务
nohup java -jar user-service.jar --spring.profiles.active=prod > user-service.log 2>&1 &
nohup java -jar ad-service.jar --spring.profiles.active=prod > ad-service.log 2>&1 &
nohup java -jar pay-service.jar --spring.profiles.active=prod > pay-service.log 2>&1 &健康检查
部署完成后验证各服务状态:
bash
# 检查服务是否运行
curl http://localhost:8080/actuator/health
# 检查各子服务
curl http://localhost:8081/actuator/health
curl http://localhost:8082/actuator/health
curl http://localhost:8083/actuator/health日志管理
日志默认输出到各服务的 logs/ 目录,建议配置日志收集:
yaml
# logback-spring.xml
logging:
file:
path: /data/logs/easyfly
level:
root: INFO
com.easyfly: DEBUG性能优化建议
| 优化项 | 建议 |
|---|---|
| JVM 参数 | -Xms2g -Xmx2g -XX:+UseG1GC |
| 数据库连接池 | 根据并发量调整 HikariCP 连接数 |
| Redis 连接池 | Lettuce 连接池大小设为 CPU 核数 × 2 |
| 接口限流 | 使用 Sentinel / RateLimiter 控制 QPS |