前后端分离项目部署
环境
首先是介绍一下使用到的软件环境
- 开发环境:Idea2020、Vscode、jdk1.8
- 部署环境:centos7、Nginx、jdk1.8
项目
前端项目为Web,后端项目为Server,
- 调试:在本地调试时采用的ip为localhost,端口为:前端8081、后端8080
- 部署:需要将请求ip替换为实际的主机域名,前端端口设置为80,后端端口设置为23333(按个人喜好),反向代理端口22222
打包
前端:
- 在前端项目运行:
npm run build
- 成功构建后,在你的前端项目下会出现一个dist文件夹,里面就是前端的项目啦,然后需要拷贝在服务器上,因为是传入linux服务器,自行选择方便快捷的方式即可,这里假设前端项目存放在了
/usr/project/web/dist
后端:
-
首先必须!!!将编码格式更改为UTF-8,感谢先贤提供的经验:启动SpringBoot报错Input length = 1解决办法_xsqsharp的博客-CSDN博客,最好是在开始写项目之前就进行更改,如果是在之后更改,需要检查配置文件和依赖文件中的中文,看一下是否存在乱码,如果之前这里是GBK的编码格式,需要将乱码的重新修改
-
然后可以使用maven来进行打包,
-
提示:BUILD SUCCESS 则打包完成,然后这里的输出路径可以找到生成的jar包
-
然后将此jar包传输在linux的
/usr/project/server/
路径
配置Nginx服务
为什么采用nginx呢?因为可以直接通过nginx的配置让前端项目启动,而且在正常的网站建设中我们是需要配置SSL服务的,就是HTTPS加密,在nginx中可以很方便的配置,并且还能使用反向代理,让我们的后端接口也能被HTTPS代理,就不会担心报错此接口不安全啦
nginx的配置文件:
-
首先我们得找到这个文件在哪里,这里已经默认你安装好了nginx,使用
nginx -t
,这会列出当前nginx所使用得配置文件nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
你可以在此看到nginx的配置文件路径
-
首先我们需要配置前端端口:
server { listen 443 ssl; server_name 你的域名; ssl_certificate /usr/local/nginx/server.crt; ssl_certificate_key /usr/local/nginx/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 ssl_prefer_server_ciphers on; location / { // 这里是配置你的前端文件夹路径 root /usr/project/web/dist; try_files $uri $uri/ /index.html; } }
配置80端口,将http请求也转接为https:
server { listen 80; #填写绑定证书的域名 server_name 你的域名; #把http的域名请求转成https return 301 https://$host$request_uri; }
-
然后是后端代理转发:
server { listen 22222 ssl; server_name 你的域名; ssl_certificate /usr/local/nginx/server.crt; ssl_certificate_key /usr/local/nginx/server.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置 ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置 ssl_prefer_server_ciphers on; location / { proxy_pass http://127.0.0.1:23333; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
部署后端
前端代码我们已经通过nginx部署完成,后端代码,我们因为是jar包,也可以直接通过java环境运行,
-
运行
前台运行:会在当前得窗口中运行jar包,如果关闭了链接这个服务也被停止java -jar application.jar
后台运行:将会将其作为后台服务运行,当前链接得关闭不会影响其运行
nohup java -jar application.jar > output.log 2>&1 &
-
杀死服务:当我们使用后台服务时,我们如果要关闭此服务,我们可以使用以下命令
端口占用服务:lsof -i :23333 //查看23333端口的占用服务
杀死该服务
kill <PID> //我们通过上面的查看服务,可以得到一个PID,我们使用kill pid就可以干掉他
防火墙
至此,我们得项目已经全部启动了,但是我们通过域名还是无法访问我们得网站,linux系统的防火墙并没有开启此端口,于是我们需要开放用到的端口
-
开放端口
sudo firewall-cmd --zone=public --add-port=23333/tcp --permanent //这里以23333端口为例
-
重新载入设置
sudo firewall-cmd --reload
数据库移动
移动:您在开发中使用数据的结构,应该移动到生产服务器上,
mysqldump -u root -p 数据库名 > 备份文件名.sql
运行备份文件- 首先为了确保你的数据库中是没有当前操作的数据库,我们得先删除它
mysql -u root -p -e "DROP DATABASE IF EXISTS huistarapps; CREATE DATABASE huistarapps;"
- 运行:
mysql -u root -p 数据库名< 备份文件名.sql
在每次执行过程中,均会要求您输入一遍密码!
END
现在,你可以通过域名来访问你的网站啦,因为我们将前端部署在了80端口,而在web服务中,80端口当作为网站时可以省略,于是我们就直接访问域名即刻,后端的接口也可以通过域名访问,记得加上22222端口,因为我们将22222的转接到了服务器的23333端口。