前置操作
在云服务器上安装JDK、Node、Nginx、Mysql。
前端、后端代码打包后移动到云服务器
后端通过package操作后,在项目target目录中找到打包好的程序jar包,传到云服务器后通过 nohup java -jar xxxx.jar > output.log 2>&1 &
命令在后台运行java程序。
nohup命令用于使程序忽略SIGHUP信号,并继续在后台运行。java -jar YourProgram.jar是运行jar程序的命令。> output.log将程序的标准输出重定向到一个名为output.log的文件。2>&1将标准错误输出重定向到和标准输出相同的地方。&用于将命令放入后台执行。
前端通过npm run build打包后直接移动到云服务器即可。注意打包前将所有访问的后端接口的地址中的localhost换成云服务器的IP。
Nginx:nginx.conf配置
server {
listen 8080; #前端端口
server_name localhost;
root /huang/demoFile/dist; #前端文件打包后在云服务器中的存储路径
index index.html;
location /api/ { #注意“/”
proxy_pass http://your IP:8088/; #被代理的后端服务器访问地址
# 添加以下行以避免 // 的问题
proxy_redirect off;
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_set_header X-Forwarded-Proto $scheme;
# 处理连续的斜杠(可选)
rewrite ^//(.*)$ /$1 break; # 将 // 替换为 /
}
location / {
try_files $uri $uri/ /index.html;
}
对应的Vue中的配置
devServer:{
proxy:{
'/api':{
target:'http://your IP:8088',
ws: true,
changeOrigin: true,
pathRewrite: {
'^/api':''
}
}
}
},
publicPath: './',//这个地方要加“.”,不然获取不到资源,访问是空白页
一个小坑
后端代码中的文件读取操作通常都是通过路径去访问文件,例如
new File("src/main/resources/holiday.txt");
其中,holiday.txt是放在项目resources目录下文件。当打成jar包后继续以这种形式访问文件就会出现问题,系统会报找不到文件的错误,因为此时文件在jar包中已经不以这个路径存储了,自然找不到。网上的一个解决办法是
ClassPathResource resource = new ClassPathResource("holiday.txt");
InputStream inputStream = resource.getInputStream();
File tempFile = File.createTempFile("temp", ".txt");
FileUtils.copyInputStreamToFile(inputStream, tempFile);
这样最终的tempFile就是我们需要读取到的文件了。