本文介绍了如何部署后端 Spring Boot 前端 React 的前后端分离项目。

前端构建

打开前端项目,输入 pnpm build 构建生成 dist 文件夹。然后将该文件夹上传到服务器上,移动到 Nginx 的网站根目录中,默认为 /usr/share/nginx/html

后端构建

使用 IDEA 打开后端项目,打开 gradle 工具栏,选择 Task -> build -> bootJar,就会在 /build/libs/ 目录生成 jar 包。

然后将 jar 上传到服务器,输入命令使其后台运行并生成日志。

nohup java -jar project.jar > msg.log 2>&1

2>&1 的意思是将标准错误 2 重定向到标准输出 &1 ,标准输出 &1 再被重定向输入到 msg.log 文件中。

可以通过 jobs 命令查看后台运行的进程。 输入 kill -9 pid 来终止进程。

反向代理

要解决前后端分离的跨域问题,就需要使用 Nginx 做反向代理。在 前文 中我们使用 Vite 解决了开发时的跨域问题,现在使用 Nginx 解决部署时的跨域问题。

修改 /etc/nginx/nginx.conf

server {
    listen       80;
    server_name  localhost;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    # 反向代理
    location /api/ {
        rewrite ^/api/(.*)$ /$1 break;
        proxy_pass http://localhost:8080;
    }
}

这样所有到 80 端口 /api 的请求都会被转发到后端的 8080 端口。在浏览器访问时就不再存在跨域的问题。

另注:Nginx 的网站目录最好不要设置在个人账户的家目录中,因为 Nginx 默认使用的 http 账户不能读取家目录的内容,会引起 403-Forbidden 权限错误。

现在,项目部署完成,就可以访问了。