springbootwiki项目部署记录(代码片段)

涛声 涛声     2023-01-19     274

关键词:

​学习课程有一段时间之后,想起买课的初衷是为了学习如何在服务器上部署前后端分离的项目,因此花了几天时间研究,最后功夫不负有心人。期间还是遇到很多问题,特此记录。

一.部署过程

准备:一个已经安装好JDK环境,Nginx的配有公网IP的云服务,数据库环境也不用担心,也就是前后端打包都能正常在服务器上启动起来,关键就是确定 Nginx 的配置。

​1.1 Nginx配置

​ 部署的关键其实就是配置Nginx。前端调用的接口经过Nginx反向代理转发到后端。在课程中,Nginx的配置文件除了 Nginx.conf 之外。还可以在 conf.d 目录下面新建各种 XXX.conf ,也会生效。但是,我安装的 Nginx 版本为1.13.1,是没有此目录。实际上也无需,只在 Nginx.conf 里配置即可,也就是多几个 location 配置。

下面是成功实现只用公网IP即可成功部署之后的 Nginx.conf 主要需要变动的内容,其中关键的部分都有注释。

server 
        # Nginx监听端口,从下面前端的配置来看,也是Nginx作为web服务器的静态页面的访问端口
        listen       80;
        # 示例公网IP:乱写的,如有雷同,概不负责
        server_name 100.11.22.199;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;
	    # 1.代理前端项目地址,即前端Vue框架打的静态文件存放到 /root/web/目录。
        location / 
            alias  /root/web/;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        
        
        # 2. 将前端所有调用后端的带有 **/api/** URL地址转发到本服务器的8880端口,
        # 其中8880端口即后端springboot服务端口
        # 比如 前端调后端的某个接口地址是 http://100.11.22.199/api/user/login,那么Nginx就 转发到服务器 的
        # http://127.0.0.1:8880/user/login接口。
        location /api/ 
        	# 3.这里的127.0.0.1写成localhost也可以,但是不能写成公网IP。注意端口号后面要加上/
            proxy_pass http://127.0.0.1:8880/;
            # 下面这些时常规加的一些配置
            proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_max_temp_file_size 300m;
                client_max_body_size  1024M;
                proxy_http_version  1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection "upgrade";
                proxy_connect_timeout 300s;
                proxy_send_timeout 300s;
                proxy_read_timeout 240s;
        
        ......
  
        
            

配置文件的增加的配置信息在对应注释中已经说明,下面说一下前端代码中需要配置的操作:

1.2 前端打包配置

​ 由于 locaiton /api/ ...... 转发匹配规则是前端调用后端接口的 URL地址都得有 /api/ 。因此前端统一配置的 baseURL就也得加上统一前缀 /api,以示区分。在课程的 Wiki项目中就是 .env.prod文件中 的 VUE_APP_SERVER 需要改成VUE_APP_SERVER=http://100.11.22.199:80/api。这里 是加 /api 还是 /api/ 主要看前端调的接口地址 是 类似 /user/login,还是 user/login。注意避免多加了一个/。

这样访问页面前端就能正常调用后端的接口了。基本上就部署完成了。

1.3. 配置域名

如果已经有成功解析到公网IP的域名,那么在两个地方修改就可以成功配置域名,并不必须如课程中老师要解析到两个二级域名到同一个公网IP:

  1. 前端的 VUE_APP_SERVER=http://100.11.22.199:80/api IP地址用域名替换即可,比如我的域名是yourDomain.top,就是 http://yourDomain.top:80/api

  2. Nginx.conf 中的 server_name 100.11.22.199 IP地址改成 www.youDomain.top。即域名前面得加个 www。记得重启Nginx生效。

    以上两步之后,就可以用域名代替IP访问,前端调后端地址也是通过域名访问。

四. 关键问题解释

3.1 为什么 前端配置调用后端的的统一URL 即VUE_APP_SERVER=http://100.11.22.199:80/api

答:ip不用解释,然后/api 在 上面Nginx配置的时候也已经说的很清楚了。那么端口为什么是80呢。因为要避免跨域。

简单来说,我们的项目前端静态页面访问完整的链接是 http://100.11.22.199:80/ ,端口是80。那么浏览器的同源策略就要求,这个页面中发送到后端的Ajax请求必须也类似 http://100.11.22.199:80/** ,协议,主机IP,端口全部一样,否则就会引报CORS跨域问题,浏览器会直接限制前端发送这样的接口到后端,这就是 VUE_APP_SERVER的端口设置为80的原因。更详细的理论知识见掘金-那些年我们“跨”过的“域”(接口篇)

然后,后端的wiki springBoot应用启动的端口是8880。由此,就需要在Nginx进行转发,将:80/api/端口的请求,转发给

http://127.0.0.1:8880/; 。因此 Nginx 就像是充电器的转接头一样,连接前端和后端的两头,将前端的请求转发到后端。

那么野生吴彦祖们又要问了:我不想用80端口,想改成其他端口吗,可以吗?

答:可以,首先找一个服务器还没用过的端口,怎么查,看我的这个帖子 JavaWeb开发在服务器常用命令 。里面可以在端口 部分找到如何查看目前服务器已经用的端口。比如我想用8989,查了没有服务在用。然后先在防火墙把这个端口永久放开,如果是云服务器,还得把安全组对应的TCP:8989放开,这样从外网浏览器就可以访问了。之后在Nginx 里面把监听端口 改成 8989。然后和上面一样,把前端BaseURL也配置成 8989。就可以了。

3.2 为什么 proxy_pass 的 配置是 http://127.0.0.1:8880/ 或者 http://localhost:8880/

答:proxy_pass http://127.0.0.1:8880/; 端口是8880就不赘述了。这里的主机地址必须是127.0.0.1或者localhost,也就是 Nginx 代理的是这台云服务器。如果是填的是公网 IP,那么在 调后端接口就会报 502 bad gateway504 gateway time-out。其实查看Nginx error日志,发现 错误日志输出的是 Connection timed out) while connecting to upstream。表明 Nginx 无法连接的upstream server。upstream server 就是 http://100.11.22.199:8880/。也就是 Nginx 通过 公网IP连不上服务器的,只能通过自己本地localhost才能连上。

最后,如果本文对你有帮助,还望三连支持,你们的鼓励是对我继续写作的支持。

记录.net部署docker-v指令使用(代码片段)

...ocker的-v指令使用前言之前我浅学了一下docker,方便部署.net项目(部署的是打包之后的项目)dockerfile文件如下:FROMmcr.microsoft.com/dotnet/aspnet:6.0ASbaseWORKDIR/appEXPOSE5031EXPOSE7031FROMmcr.microsoft.com/dotnet/sdk:6.0ASbuildWORKDIR/srcCOPY..ENTRYPOINT["dotnet","Pe... 查看详情

yjzh前端部署记录centos+nginx+vue(代码片段)

前端项目代码打包请检查vue.config.js中proxy中的target最后不要有斜杠/打包npmrunbuild放到服务器/home/project/路径下Node环境配置下载源代码sudowgethttps://npm.taobao.org/mirrors/node/v13.14.0/node-v13.14.0-linux-x64.tar.xznodenpm环境配置mvnode-v13.1 查看详情

部署django项目nginx+uwsgi(代码片段)

记录一下使用Nginx+uwsgi部署Django项目关于域名和端口在这个教程中,我们将假设你的域名为 example.com 。用你自己的FQDN或者IP地址来代替。从头到尾,我们将使用8000端口作为web服务器的公开端口,就像Djangorunserver默认的那... 查看详情

markdowntrm部署历史记录(代码片段)

查看详情

idea部署springboot项目到外部tomcat(代码片段)

【README】本文旨在记录idea部署springboot项目到外部tomcat的步骤;第一次部署会踩很多坑儿,多查google,多重试;第一次部署,不建议手动录入依赖,因为有可能遗漏;而且网络上资料很多但也很乱,... 查看详情

使用idea部署项目到远程docker(代码片段)

        之前在公司都是自动打包部署到远程docker上,也没有考虑过怎么搞的,今天在公司内网docker上测试,跟同事学习了下,记录一下分享,daydayup !!!!!,开始吧。1、安装docker插件这步我不记得有没有安... 查看详情

docker部署应用过程记录(代码片段)

   Kibana直接部署到centos中,老是没有任何征兆退出,今天将他移动到docker中部署,以下是部署的过程,做个记录防止忘记    1.安装Docker#yuminstalldocker    2.启动Docker服务#systemctlstartdocker//Docker安装 查看详情

一键部署工具easy-jenkins,界面友好,操作简单(代码片段)

文章目录前言一、项目地址二、使用步骤1.项目结构2.启动主类EasyJenkinsApplication3.安装4.项目启动图三、功能点介绍1.部署列表1.添加连接(部署jar)1.添加本地项目地址2.添加服务器相关信息2.部署jar3.部署成功4.删除5.编辑2... 查看详情

windows使用php启动thinkphp项目,部署配置(代码片段)

HI,I’mShendiphp还是比较简单的,项目需要嵌入一个php项目,这里记录一下使用方法文章目录下载php安装vs工具包配置php.ini配置mysql启动thinkphp项目下载php可以直接从官网下载https://www.php.net/8.1.3的php压缩包关于版本可以... 查看详情

rabbitmq部署及配置与验证(代码片段)

1.场景描述朋友项目需要弄个测试环境,稍微帮忙了下,系统不复杂,但是需要自己安装mysql、Reids、Es、RabbitMq等,Mq主要用在同步用户信息与发送站内消息和短信上,RabbitMq以前没记录,刚好又重新走了一遍,记录下部署、测试... 查看详情

rabbitmq部署及配置与验证(代码片段)

1.场景描述朋友项目需要弄个测试环境,稍微帮忙了下,系统不复杂,但是需要自己安装mysql、Reids、Es、RabbitMq等,Mq主要用在同步用户信息与发送站内消息和短信上,RabbitMq以前没记录,刚好又重新走了一遍,记录下部署、测试... 查看详情

docker学习|第八篇:docker+jenkins单机部署springboot项目(代码片段)

Docker学习|第八篇:Docker+Jenkins单机部署SpringBoot项目前言最近学了一段时间的jenkins以及Docker之后,自己进行了一些自动持续集成的相关实践。在这里记录一下。环境本文所需环境如下:CentOs7系统已安装Docker已安装... 查看详情

inidjango项目部署(代码片段)

查看详情

项目部署nginx+uwsgi(代码片段)

1.项目部署的相关概念关于部署流程,主要包含以下两个方面:部署方案、部署环境:1.1部署方案1.分析项目的产品需求文档,定好部署方案的方向2.分析项目开发文档,按照功能边界,设计部署的结点3.分析项目功能软件,合理... 查看详情

一台服务器部署多台tomcat(代码片段)

如题,多个项目部署在一台服务器。减少容错性,觉得分开部署,这样一个tomcat挂了不会影响另一个项目。看配置和应用大小决定数量,一般四五个没问题,也有单台服务器部署8个tomcat稳定运行的。下面记录方法1.修改/etc/profile... 查看详情

docker项目部署(代码片段)

docker项目部署1.webapp部署方法一方法二2.springboot项目部署1.webapp部署进入容器//dockerexec-it容器名称/ID/bin/bashdockerexec-ittomcat/bin/bash方法一把项目war包拷贝到webapps//dockerexec-it容器名称/ID/bin/bashdockercp***.wartomcat:/usr/local/t 查看详情

项目部署流程(代码片段)

项目部署http://blog.51cto.com/ljmict项目部署流程:买服务器,服务器租用选择操作系统的版本,安装系统在开发环境中把项目需要的pip包写到一个文件pipfreeze.requirements.txt把项目上传到服务器部署项目,安装需要的环境pyhton3解释器... 查看详情

vue项目部署(nginx)(代码片段)

本文记录如何将做好的Vue项目部署到服务器上,需要准备:linux系统的服务器或者虚拟机Vue项目打包Nginx服务器的配置和部署1、linux系统准备本次使用云主机作为部署主机。 2、Vue项目打包切换到项目所在目录,使用np... 查看详情