Linux部署后端服务器
最近在做微信小程序的项目,我负责后端的部分。由于项目组人数比较少,所以采用前后端分离的开发模式开发整个项目。在开发过程中难免需要为前端人员提供接口与数据,所以项目过程中将测试程序部署到服务器,让前端通过域名访问的形式来访问接口、接发数据是很有必要的。我在部署的过程中遇到了不少困难,但是在通过查阅资料后找到了最简洁的部署方式,便记录下来帮助有需要的读者。
由于微信小程序不需要部署前端项目,只需要将后端部署在服务器上即可,故以下内容仅涉及如何部署一个后端接口服务器。
一、Jar 包
我使用 SpringBoot 框架开发 Java 后端程序。SpringBoot 框架基于 Maven 进行项目管理,并且自带 Tomcat 服务器,通过 Maven 的 【package】功能可以很容易将项目打包成 Jar 的形式。
1. 1 VSCode
如果你使用 VSCode 开发代码的话,【Maven for Java】插件提供了图形化的管理界面。开发完成后,依次点击左下角的【MAVEN】->【Your_Project_name】->【Lifecycle】->【package】,即可将程序打包成 Jar 包。
1. 2 命令行
如果你使用其他的开发工具开发,也可以使用命令行的格式对项目打包。进入到项目路径下,打开终端输入:
1 |
|
通过上面两种方式打包完成后,Jar 包会被存放在
"d:\path\to\your\project\target"
路径下,命名为
Your_Project_name.jar
。
二、Nginx
由于生成的 Jar 自带 Tomcat 服务器,启动之后默认端口为 localhost:8080,所以我们可以不用单独设置 Tomcat 服务器。
虽然说我们不部署前端程序,Tomcat 服务器也可以直接被访问,但是我们依然可以使用 Nginx 作为 Tomcat 的代理服务器。
Nginx 用来作为 Tomcat 代理服务器有很多优点:
- (如果你要部署前端项目)Nginx 可以非常高效地处理静态文件,可以减轻 Tomcat 服务器的压力。
- Nginx 可以为 Tomcat 提供反向代理,隐藏 Tomcat 的真实地址,提升了安全性。
- Nginx 可以做负载均衡,当有多个 Tomcat 服务器时可以均匀分配业务,提升了性能和拓展性。
安装好 Nginx 后,需要配置 Nginx 实现后端代理功能。在 Linux 终端中输入命令:
1 |
|
具体文件路径可以自行查找。在打开的文件夹中找到并修改为以下字段:
1 |
|
其中:
server_name
:修改为你的域名网址- 注释掉
try_files $uri $uri/ =404;
- 添加
proxy_pass http://localhost:8080;
,用于反向代理 Tomcat 服务器
配置好后,在终端中输入以下指令用于重载配置:
1 |
|
三、启动 Jar 包
配置好 Nginx 后,只需要操作 Java 启动 Jar 包就行了。默认 Linux 安装的版本可能不是适配的版本,请前往 Oracle 官网下载适配版本。
你可以在终端中输入 uname -m
查看服务器架构。
3. 1 手动启动
将你的文件上传到 Linux 服务器,进入到 Jar 包所在的路径下,输入指令:
1 |
|
其中:
nohup
表示程序将以后台运行的方式启动- 程序输出的内容将存放到
project.log
文件夹下
此时你的服务器应该能正常通过域名访问了。
3. 2 自动启动
如果你想你的服务器自动启动,可以通过 Linux 的 systemctl
来管理服务。
首先需要新建一个 Shell 脚本,用于输出日志文件和启动程序:
1 |
|
然后在文件中输入:
1 |
|
其中程序如果退出,脚本则会将日志文件保存成【时间.log】的形式,方便对日志文件进行管理。
保存之后,赋予执行权限:
1 |
|
创建好执行脚本后,新建一个服务单元文件:
1 |
|
然后在文件中输入:
1 |
|
其中:Description
表示启动时显示的描述信息,After
表示开启网络连通之后才会启动程序的功能,User
表示服务通过哪个用户启动,WorkingDirectory
表示服务工作路径,ExecStart
表示执行的指令
,SuccessExitStatus
表示服务成功退出时的状态码,Restart
表示断线自动重连,RestartSec
表示重连的间隔时间(s),WantedBy
表示多用户模式下运行时自动启动。
保存退出后,在终端中输入以下指令是配置生效:
1 |
|
你可以输入以下指令查看程序是否正常运行:
1 |
|
四、总结
本文仅仅设计一个小型个人项目的服务器该如何部署,如果需要部署更大的项目,或者设置更复杂的服务器集群,特别是本文配置 Nginx 服务器的部分难免有考虑不周的地方,具体方法请参考其他博客或者期待博主以后的更新^^,不过应该能应付单个服务器的部署了。感谢你看到这里,希望我的解决方法能给你的问题带来一点启示。