feat: 添加前后端一体化 Docker 部署支持
- 创建根目录 Dockerfile,支持前后端一起部署到一个容器 - 添加 Nginx 配置,自动代理后端 API 和 WebSocket - 创建启动脚本,同时启动后端和 Nginx - 更新 docker-compose.yml 支持一体化部署 - 创建一体化部署脚本 deploy.sh - 修复前端环境变量支持,默认使用相对路径 - 优化部署脚本:.env 文件不存在时创建后终止部署 - 更新部署文档,添加一体化部署说明
This commit is contained in:
+79
@@ -0,0 +1,79 @@
|
||||
# 多阶段构建:前后端一体化部署
|
||||
# 阶段1:构建前端
|
||||
FROM node:18-alpine AS frontend-build
|
||||
|
||||
WORKDIR /app/frontend
|
||||
|
||||
# 复制前端文件
|
||||
COPY frontend/package*.json ./
|
||||
RUN npm ci
|
||||
|
||||
COPY frontend/ ./
|
||||
|
||||
# 构建前端(使用相对路径,通过 Nginx 代理)
|
||||
RUN npm run build
|
||||
|
||||
# 阶段2:构建后端
|
||||
FROM gradle:8.5-jdk17 AS backend-build
|
||||
|
||||
WORKDIR /app/backend
|
||||
|
||||
# 复制 Gradle 配置文件
|
||||
COPY backend/build.gradle.kts backend/settings.gradle.kts ./
|
||||
COPY backend/gradle ./gradle
|
||||
|
||||
# 下载依赖(利用 Docker 缓存)
|
||||
RUN gradle dependencies --no-daemon || true
|
||||
|
||||
# 复制源代码
|
||||
COPY backend/src ./src
|
||||
|
||||
# 构建应用
|
||||
RUN gradle bootJar --no-daemon
|
||||
|
||||
# 阶段3:运行环境
|
||||
FROM openjdk:17-jre-slim
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
# 安装 Nginx 和必要的工具
|
||||
RUN apt-get update && \
|
||||
apt-get install -y nginx curl && \
|
||||
rm -rf /var/lib/apt/lists/* && \
|
||||
rm -rf /etc/nginx/sites-enabled/default
|
||||
|
||||
# 从构建阶段复制文件
|
||||
COPY --from=frontend-build /app/frontend/dist /usr/share/nginx/html
|
||||
COPY --from=backend-build /app/backend/build/libs/*.jar app.jar
|
||||
|
||||
# 复制 Nginx 配置
|
||||
COPY docker/nginx.conf /etc/nginx/nginx.conf
|
||||
|
||||
# 创建启动脚本
|
||||
COPY docker/start.sh /app/start.sh
|
||||
RUN chmod +x /app/start.sh
|
||||
|
||||
# 创建 Nginx 运行目录
|
||||
RUN mkdir -p /var/log/nginx /var/lib/nginx /var/cache/nginx && \
|
||||
chown -R appuser:appuser /var/log/nginx /var/lib/nginx /var/cache/nginx
|
||||
|
||||
# 创建非 root 用户
|
||||
RUN useradd -m -u 1000 appuser && \
|
||||
chown -R appuser:appuser /app && \
|
||||
chown -R appuser:appuser /usr/share/nginx/html && \
|
||||
chown -R appuser:appuser /var/log/nginx && \
|
||||
chown -R appuser:appuser /var/lib/nginx && \
|
||||
chown -R appuser:appuser /etc/nginx
|
||||
|
||||
USER appuser
|
||||
|
||||
# 暴露端口
|
||||
EXPOSE 80
|
||||
|
||||
# 健康检查
|
||||
HEALTHCHECK --interval=30s --timeout=3s --start-period=40s --retries=3 \
|
||||
CMD curl -f http://localhost/api/health || exit 1
|
||||
|
||||
# 启动服务(同时启动 Nginx 和后端)
|
||||
ENTRYPOINT ["/app/start.sh"]
|
||||
|
||||
Reference in New Issue
Block a user