使用Nginx部署Vue+SpringBoot前后端分离项目(超详细!)

目录

一、前后端环境准备

1、前端环境准备

         2、后端环境准备

二、前后端打包

1、前端打包

2、后端打包

三、服务器前后端配置及部署

1、前端配置

安装nginx

创建项目目录

前端项目部署

2、后端配置

安装宝塔

安装mysql

使用本地Navicat连接远程数据库

安装jdk环境

安装redis

后端项目部署


需要的工具:Xshell 连接远程服务器、Xftp 服务器文件可视化

项目访问:http://www.zxlsc.top

我的个人博客微信小程序欢迎访问

一、前后端环境准备

1、前端环境准备

在前端的config包下的index.js中配置 代理配置表,配置特定的请求代理到对应的API接口

 proxyTable: {
    	'/api': {
        target: 'http://服务器ip或者绑定的域名',
        changeOrigin: true,
        pathRewrite: {
          '^/api': ''
        }
      }
    },

 在设置开发环境和生产环境的URL

 设置生产环境的URL

 记住一定要加上/api 方便在服务器中使用nginx进行反向代理。

2、后端环境准备

跨域请求配置允许前端访问后端的URL请求

@Override
    public void addCorsMappings(CorsRegistry registry) {
        //进行跨域配置
        //前端占用8080 后端占用8888
        //两个端口之间的访问就是跨域
        //要允许8080端口访问8888
        registry.addMapping("/**").allowedOrigins("http://localhost:8080/");
    }

在配置文件中设置contextPath属性,类似于承接上下文,与前端反向代理的进行连接,反向代理在后续会提到可以先这么配置

后端环境准备完成

二、前后端打包

1、前端打包

2、后端打包

三、服务器前后端配置及部署

1、前端配置

使用Xshell在服务器中下载安装nginx用来配置前端工程,Xshell可以在官网下载,顺便再下载一个Xftp

安装nginx

  • 安装环境
yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel
  • 安装wgte
yum install wget
  • 下载nginx
wget https://nginx.org/download/nginx-1.21.6.tar.gz
  • 解压压缩文件
tar -zxvf nginx-1.21.6.tar.gz
  • 进入nginx文件夹
cd nginx-1.21.6
  • 配置
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module
  • 编译和安装
编译:make
安装:make install
  • 运行
/usr/local/nginx/sbin/nginx
  •  重新加载
/usr/local/nginx/sbin/nginx -s reload
  • 如果更改了配置文件建议使用这个方式重新启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  • 停止服务
/usr/local/nginx/sbin/nginx -s stop

输入浏览器ip,nginx默认是80端口,所以直接使用服务器ip访问

创建项目目录

使用Xftp再服务器任意目录下创建一个项目的文件夹用来存放项目文件,记住这个文件的地址,可以在任意位置创建

前端项目部署

将上一个步骤中打包好的dist包通过Xftp上传到服务器的项目文件中,并记住这个地址

使用Xftp打开/usr/local/nginx安装目录下的config配置文件,修改以下三项

如果配置多个项目 只需要 在server 同级下再创建一个相同的server{} 修改位置即可

 然后重启nginx

前端成功展示

2、后端配置

安装宝塔

由于springboot项目自带tomcat,所以只需要将打包好的jar包上传到项目文件中通过

java -jar jar包名

这里由于使用Xftp传递文件速度过慢,所以使用宝塔可视化面板进行传输

安装宝塔

如果安装过wegt可以直接安装&&后面的内容
yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

 访问宝塔面板并下载mysql , 记得要在阿里云放行对应端口的安全组

安装mysql

顺便安装一个mysql环境

设置一下数据库的root密码

使用本地Navicat连接远程数据库

使用SSH隧道连接服务器的数据库

 

 将本地数据库的表复制到云服务器数据库

安装jdk环境

在宝塔项目中添加jdk

安装一个web环境,会自带jdk并且配置好了环境变量,我一般习惯这种创建jdk的方式,也可以使用命令来安装jdk

安装redis

在redis官网下载.gz的安装包然后通过Xftp传输到服务器的root目录下

 在Xshell中进行解压,依次输入命令

tar -zxvf 压缩包名

cd 解压后的文件名

make

设置redis后台方式运行

 右键编辑,依次找到并修改以下代码

bind 127.0.0.1 => #bind 127.0.0.1

protected-mode yse => protected-mode no

daemonize no => daemonize yes

保存文件后运行redis

cd /usr/local/bin

#复制一份redis.conf
./redis-server redis.conf

#如果无法连接就重启redis
ps -aux | grep redis
kill -9 对应的端口号

后端项目部署

 然后在Xshell中进入这个项目文件夹,运行jar包

命令:
java -jar xxx.jar

项目当前运行成功,我们来进行一下端口测试,使用Postman测试一下接口能否能接通

此时我们发现,在访问路劲正确的前提下接口连接超时

 解决方法

关闭网站防火墙即可解决,记住一定要开放前后端对应的端口!

防火墙关闭后再次进行postman接口测试时,发现接通成功但是无数据,并显示了程序中设置的异常提示

此时我们到服务器中的springboot运行日志查看报错信息

根据这个报错信息我们可以看到是由于数据库的权限问题导致的

此时我们需要给当前的数据库账号密码添加最高权限才能使得程序中设置的账号密码能够访问到数据库。

先在服务器中登录我们的mysql,然后输入:
grant all privileges on *.* to 'root'@'服务器ip' identified by '数据库密码';

 

接口测通,数据成功展示。

#服务器后台运行jar包并生成日志文件
nohup java -jar XXX.jar >XXX.log 2>&1 &
#关闭
ps -aux 找到对应服务的PID
kill -9 PID

此时来访问前端页面查看数据是否能展示在页面

 此时发现post请求变成了option请求,发生了跨域问题,原因在于后端的跨域代码出现了问题

将原本作为跨域请求的代码修改为

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        //进行跨域配置
        //前端占用8080 后端占用8888
        //两个端口之间的访问就是跨域
        //防止跨域报错
        registry.addMapping("/**")
                .allowedOriginPatterns("*")
                .allowedMethods("GET","HEAD","POST","PUT","DELETE","OPTIONS")
                .allowCredentials(true)
                .maxAge(3600)
                .allowedHeaders("*");
    }

即可解决跨域问题!

至此前后端分离项目搭建完成!!

<think>好的,用户想了解如何使用Docker和Nginx部署前后端项目。首先,我需要整理出清晰的步骤,确保涵盖前端和后端的部署流程,同时结合用户提供的引用内容。 首先,用户提供的引用中提到了Docker部署Nginx前端项目以及Java的JAR包。引用1和引用3主要涉及前端部署,包括拉取Nginx镜像、挂载配置文件、访问项目页面等。引用2提到了查看挂载绑定和部署JAR包。这些信息需要整合到回答中。 接下来,需要分步骤说明。首先是环境准备,安装Docker和拉取Nginx镜像。然后前端部署部分,需要创建目录结构,挂载Nginx配置和静态资源,编写Dockerfile和Nginx配置文件,最后构建和运行容器。这里要注意路径的正确性,以及如何配置反向代理到后端。 后端部署部分,用户可能使用Java的Spring Boot,所以用JAR包示例。需要创建Dockerfile构建镜像,运行容器,并确保网络设置正确,以便前端能访问后端API。 然后,用户提到前后端联调,需要修改Nginx配置代理后端请求,可能需要设置跨域。这部分需要结合引用中的挂载和配置方法,确保Nginx正确转发请求。 最后,注意事项要包括网络设置、配置文件调试、版本管理和数据持久化。这些能帮助用户避免常见问题,比如端口冲突或配置错误。 生成的问题需要围绕部署中的优化、配置管理、HTTPS设置和容器通信,这些都是用户可能遇到的后续问题。要确保问题与教程内容相关,帮助用户深入理解。 现在,检查步骤是否正确,是否有遗漏。比如前端部分是否需要构建静态文件?用户提供的引用中前端项目可能已经构建好,所以Dockerfile可能只需要复制文件到Nginx目录。后端部分是否需要多阶段构建?用户示例中使用的是直接运行JAR,可能足够简单。 确保所有命令准确,比如docker run的参数是否正确,特别是挂载卷和端口映射。引用3中提到了拷贝默认配置,但在教程中可能建议直接挂载自定义配置,这样更方便。 最后,语言要口语化,但按照用户要求用中文,结构清晰,分步骤讲解,代码块正确使用格式,符合系统级指令的要求。</think>### 使用 Docker 和 Nginx 部署前后端项目教程 #### 一、环境准备 1. **安装 Docker** 确保系统中已安装 Docker,可通过以下命令验证: ```bash docker -v ``` 若未安装,参考 [Docker 官方文档](https://docs.docker.com/get-docker/)完成安装。 2. **拉取 Nginx 镜像** 用于前端项目部署和反向代理后端服务: ```bash docker pull nginx ``` --- #### 二、前端项目部署 1. **创建项目目录结构** ```bash mkdir -p /usr/local/docker/nginx/{conf.d,html,logs} ``` - `conf.d`: 存放 Nginx 配置文件 - `html`: 存放前端静态文件(如 Vue/React 编译后的 `dist` 目录) - `logs`: 存放 Nginx 日志[^3] 2. **配置 Nginx** 在 `conf.d` 目录下创建配置文件 `frontend.conf`: ```nginx server { listen 80; server_name localhost; location / { root /usr/share/nginx/html; index index.html; try_files $uri $uri/ /index.html; } } ``` 3. **挂载静态文件与配置** 将前端编译后的 `dist` 目录内容复制到 `html` 目录,并启动容器: ```bash docker run -d --name nginx-frontend \ -p 80:80 \ -v /usr/local/docker/nginx/html:/usr/share/nginx/html \ -v /usr/local/docker/nginx/conf.d:/etc/nginx/conf.d \ -v /usr/local/docker/nginx/logs:/var/log/nginx \ nginx ``` 访问 `http://服务器IP:80` 即可查看前端页面[^1]。 --- #### 三、后端项目部署(以 Spring Boot 为例) 1. **编写 Dockerfile** 在项目根目录创建 `Dockerfile`: ```dockerfile FROM openjdk:17 COPY target/*.jar app.jar EXPOSE 8080 ENTRYPOINT ["java", "-jar", "/app.jar"] ``` 2. **构建镜像并运行容器** ```bash docker build -t backend-app . docker run -d --name backend \ -p 8080:8080 \ backend-app ``` 3. **配置 Nginx 反向代理** 修改 `conf.d/frontend.conf`,添加后端代理: ```nginx location /api { proxy_pass http://backend:8080; proxy_set_header Host $host; } ``` 重启 Nginx 容器使配置生效: ```bash docker restart nginx-frontend ``` --- #### 四、联调与验证 1. **网络配置** 若前后端容器需通信,建议创建自定义网络: ```bash docker network create app-network docker network connect app-network nginx-frontend docker network connect app-network backend ``` 2. **访问验证** - 前端页面:`http://服务器IP:80` - 后端 API:`http://服务器IP/api/endpoint` --- #### 五、注意事项 1. **配置文件调试** 若启动失败,可通过 `docker logs nginx-frontend` 查看日志排查问题[^2]。 2. **数据持久化** 挂载目录(如 `html`、`logs`)确保容器重启后数据不丢失。 3. **安全优化** 生产环境建议配置 HTTPS 和防火墙规则。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值