当前位置: 首页 > news >正文

react+springboot云上部署

项目概述

你的项目是 React + Vite 前端 + Spring Boot (Java 17) 后端,连接 MySQL 数据库。部署方案使用 Docker 容器化,便于云上部署(如阿里云 ECS、AWS EC2/ECS、腾讯云 等)。重点处理数据库名、用户名、密码等敏感信息,使用环境变量(Environment Variables)避免硬编码。打包时注意分离前后端,确保镜像轻量。

整个方案无错误前提:

  • 后端使用 Spring Boot 的 application.yml 配置,支持环境变量注入。
  • 前端构建为静态文件,可独立部署或与后端整合(推荐独立,便于 CDN 加速)。
  • Docker 部署时,使用多阶段构建减少镜像大小。
  • 云上部署时,推送镜像到镜像仓库(如 Docker Hub、阿里云 ACR),然后在云实例上运行容器。
  • 安全:数据库凭证通过环境变量或云秘密管理(如 AWS Secrets Manager、阿里云 KMS)注入,绝不硬编码到代码或镜像中。

下面分步说明,包括打包注意事项、YML 修改、Docker 配置和云部署。

1. 后端配置(Spring Boot + Java 17 + MySQL)

修改 application.yml

Spring Boot 的配置文件位于 src/main/resources/application.yml。使用环境变量占位符 ${ENV_VAR_NAME} 来注入数据库名、用户名、密码等。这样在 Docker 运行时,可以通过 -e 或 docker-compose.yml 动态设置,避免硬编码。

示例 application.yml(完整无误配置):

yaml

server:port: ${SERVER_PORT:8080}  # 默认 8080,可环境变量覆盖spring:datasource:url: jdbc:mysql://${DB_HOST:localhost}:${DB_PORT:3306}/${DB_NAME}?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=trueusername: ${DB_USERNAME}password: ${DB_PASSWORD}driver-class-name: com.mysql.cj.jdbc.Driverjpa:hibernate:ddl-auto: update  # 生产环境建议 none 或 validate,避免自动建表show-sql: false  # 生产关闭,调试时 true# 其他配置,如日志
logging:level:root: INFO
  • 修改说明
    • ${DB_NAME}:数据库名,使用环境变量注入(如 mydatabase)。
    • ${DB_USERNAME} 和 ${DB_PASSWORD}:用户名和密码,必用环境变量,避免明文。
    • ${DB_HOST} 和 ${DB_PORT}:数据库地址,默认 localhost:3306,云上改为云数据库实例(如 RDS)。
    • 如何修改:打开 YML 文件,直接替换或添加这些占位符。保存后,重启应用测试。
    • 测试:本地运行时,用命令行设置环境变量,如 export DB_USERNAME=root; export DB_PASSWORD=pass123; java -jar your-app.jar。
    • 注意:YML 缩进必须正确(2空格),否则启动报错。生产环境禁用 show-sql 和 ddl-auto: update 以防数据丢失。
打包注意事项(后端)
  • 使用 Maven(假设你的项目用 Maven;若 Gradle 类似)。
  • 命令:mvn clean package 生成 JAR 文件(target/your-app.jar)。
  • 注意:
    • 确保 pom.xml 中有 MySQL 驱动依赖:

      xml

      <dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.0.33</version>  <!-- Java 17 兼容 -->
      </dependency>
    • Java 17 兼容:pom.xml 中设置 <java.version>17</java.version>。
    • 排除不必要文件:打包时忽略测试类和日志文件,减少 JAR 大小。
    • 测试连接:打包后运行 java -jar your-app.jar,用环境变量注入凭证,检查日志无连接错误。

2. 前端配置(React + Vite)

打包注意事项(前端)
  • Vite 构建命令:npm run build 或 yarn build,生成 dist/ 目录下的静态文件。
  • 注意:
    • 配置代理:开发时 vite.config.js 中 proxy 后端 API,如:

      js

      export default defineConfig({server: {proxy: {'/api': 'http://localhost:8080'  // 指向后端}},build: {outDir: 'dist',  // 输出目录assetsDir: 'assets'  // 静态资源}
      });
    • 环境变量:.env 文件中设置后端 API 地址,如 VITE_API_BASE_URL=http://backend:8080/api。构建时注入,避免硬编码。
    • 优化:构建后压缩文件(Vite 默认优化),测试 dist/index.html 是否正常加载。
    • CORS:后端需启用 CORS,支持前端跨域请求。在 Spring Boot 加 @CrossOrigin 或全局配置。

前端可独立部署为静态站点,或用 Nginx 容器服务。

3. Docker 配置

后端 Dockerfile

多阶段构建(减少镜像大小,无错误):

dockerfile

# 阶段1: 构建
FROM maven:3.8.6-amazoncorretto-17 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests# 阶段2: 运行
FROM amazoncorretto:17-alpine
WORKDIR /app
COPY --from=build /app/target/your-app.jar app.jar
EXPOSE 8080
CMD ["java", "-jar", "app.jar"]
  • 构建:docker build -t your-backend:latest .
  • 注意:替换 your-app.jar 为实际 JAR 名。暴露端口匹配 YML。
前端 Dockerfile(用 Nginx 服务静态文件)

dockerfile

# 阶段1: 构建
FROM node:18-alpine AS build
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build# 阶段2: 运行
FROM nginx:alpine
COPY --from=build /app/dist /usr/share/nginx/html
COPY nginx.conf /etc/nginx/conf.d/default.conf  # 可选自定义配置
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
  • nginx.conf 示例(可选,处理路由):

    text

    server {listen 80;server_name localhost;root /usr/share/nginx/html;index index.html;location / {try_files $uri /index.html;}
    }
  • 构建:docker build -t your-frontend:latest .
MySQL Dockerfile(可选,自建;云上推荐用托管 RDS)

如果本地测试,用 Docker Compose 包含 MySQL。

Docker Compose(本地测试全栈)

docker-compose.yml:

yaml

version: '3.8'
services:db:image: mysql:8.0environment:MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}  # 环境变量注入MYSQL_DATABASE: ${DB_NAME}MYSQL_USER: ${DB_USERNAME}MYSQL_PASSWORD: ${DB_PASSWORD}ports:- "3306:3306"volumes:- db-data:/var/lib/mysqlbackend:build: ./backend  # 后端目录ports:- "8080:8080"environment:DB_HOST: db  # 链接到 db 服务DB_PORT: 3306DB_NAME: ${DB_NAME}DB_USERNAME: ${DB_USERNAME}DB_PASSWORD: ${DB_PASSWORD}depends_on:- dbfrontend:build: ./frontend  # 前端目录ports:- "80:80"depends_on:- backendvolumes:db-data:
  • 运行:设置 .env 文件(如 DB_NAME=mydb, DB_USERNAME=root, DB_PASSWORD=pass123),然后 docker-compose up。
  • 注意:环境变量从 .env 或命令行注入。生产禁用端口暴露,用云安全组控制。

4. 云上部署方案

假设阿里云 ECS(类似其他云):

  1. 推送镜像:登录 Docker Hub 或云 ACR(如 docker push registry.cn-hangzhou.aliyuncs.com/your-repo/your-backend:latest)。
  2. 创建实例:ECS 安装 Docker,拉取镜像。
  3. 运行容器
    • MySQL:用云 RDS 创建实例,获取 endpoint/port。注入凭证到环境变量。
    • 后端:docker run -d -p 8080:8080 -e DB_HOST=rds-endpoint -e DB_NAME=mydb -e DB_USERNAME=root -e DB_PASSWORD=pass123 your-backend:latest
    • 前端:docker run -d -p 80:80 your-frontend:latest
  4. 安全处理
    • 密码等用云秘密管理:阿里云 RAM/SSM 获取秘密,避免命令行明文。
    • 防火墙:只开必要端口(80/8080),用安全组。
  5. 扩展:用 Kubernetes (EKS/ACK) 或 ECS 服务自动 Scaling。监控用云日志。
  6. 注意事项
    • 测试连接:部署后,用 curl 测试 API,确保无数据库错误。
    • 备份:RDS 自动备份,容器数据用卷。
    • 成本:小实例起步,监控流量。

此方案完整无误,按步执行。若有具体云平台,补充细节。

http://www.dtcms.com/a/490969.html

相关文章:

  • Google 地图类型
  • 免费网站做企业的网站都要准备什么
  • 网站建设往年的高考题免费看电视的网站有哪些
  • STM32N6 KEIL IDE 调试XIP 应用的一种方法 LAT1575
  • 大模型微调(二):使微调保持稳定的策略
  • 前端调优23大规则(Part 4)
  • SpringBoot-入门介绍
  • 如何推动AI技术在企业管理中的商业化落地?
  • 淘宝网站建设的策划书产品软文案例
  • 复制带随机指针的链表
  • Promise 与 async/await
  • win11 字体变宽问题
  • 最好的做网站机械加工网站色彩搭配
  • Pytorch Yolov11目标检测+Android部署 留贴记录
  • iis 发布网站 404archlinux+wordpress
  • leetcode 2598. 执行操作后的最大 MEX 中等
  • SuperMap iObject Java实现倾斜数据预处理
  • 逻辑方阵(Logical Square)解说
  • Vue与React中动态导入的原理及实现差异解析
  • 有一个网站自己做链接获取朋友位置传媒公司属于什么行业类型
  • 服饰类电商网站建设策划昆山vi设计
  • aben.co微端侧模型价格实惠的服务商
  • 网站开发思维导图内容如何做一个单页面的网站
  • 【Qt】7.信号和槽_connect函数用法(2)
  • 网站的建设流程具体有哪些哪个合肥seo好
  • 大连公司网站建设站点与网站有什么区别
  • 高压混动救援的 “及时雨”:XRC-3363 系列救援充电器实操解析与安全要点
  • 玛哈特激光落料线:一条会“思考”的钢铁流水线
  • 《爬虫进阶之路:从模拟浏览器到破解动态加载的实战指南》
  • 现在做个人网站上海发布最新情况