做了一个springboot+vue前后端分离的小项目,部署到服务器上用公网ip访问,,记录一下
一、购买云服务器
我是在华为云买的服务器,2核4G2M一年58,成本比较低。购买云服务器后登录网页进入控制台–安装系统镜像(我安装的是centos,可自选)—用服务商自带的网页远程登录或者使用软件(xshell,Mobax等)。腾讯云阿里云基本操作都差不多。
使用工具连接后,在linux服务器上新建一个目录用来放我们的项目:
mkdir -p /home/myjob/
二、后端java项目打包上传
后端是maven项目,所以使用mvn package打包,直接点击package,成功后会在项目根目录target下生成一个jar包,将jar包传到服务器的/home/myjob/目录下(我用的mobax工具连接的服务器)
在这里我将spring的配置文件application.properties也拷贝到了/home/myjob下,方便启动jar包修改配置环境和端口以及其他信息。根据自己的实际项目配置去编辑文件
server.port=8091 #端口号,防止和服务器内部端口冲突我将8080改成了8091
spring.profiles.active=prod #指定生产环境
spring.application.name=项目名
spring.main.sources=指定springboot启动类
spring.datasource.url=数据库连接url
spring.datasource.username=数据库用户名
spring.datasource.password=数据库密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver #mysql服务器驱动
spring.main.allow-bean-definition-overriding= true
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
spring.aop.auto=false
三、前端vue项目打包上传
在开发工具中执行npm run build
,会在项目根目录下生成一个dist文件(这就是前端的部署文件),打包后上传到服务器
四、安装配置中间件
安装nginx参考:centos安装nginx
安装mysql参考:centos安装mysql5.7
安装jdk1.8参考:centos安装jdk1.8
mysql安装好了以后,没有特殊的操作,根据自己设定的密码修改application.properties中的配置信息即可,确保mysql、nginx状态是正常的,jdk安装好后也需要验证:
systemctl status mysqld
systemctl status nginx
#如果是正常的会显示绿色: Active: active (running) ,如果错误主意排查问题至正常运行
java -version
#正常会出来版本信息
注:如果想用navicat等工具连接上mysql(默认端口3306)或者访问nginx(端口是80)或项目端口,必须在云服务器的控制台–网络/安全组–安全组规则配置–将要开放的端口打开,否则访问页面或者连接服务器端口都连接不上
顺利的话到这一步,我们的前端dist和后端jar包都放在服务器上,mysql和nginx和jdk状态也是正常的。下一步要开始配置nginx和启动jar包
1)使用后台运行采用application.properties中配置信息启动jar包
nohup java -jar test-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod --spring.config.location=file:/home/myjob/application.properties 2>&1 &
验证是否正常启动执行命令netstat -lnp |grep 8091
–换成自己的后台端口,会出现以下信息:
2)配置nginx
主要在conf.d下面的default.conf里面配置,不在nginx.conf里面配置
cd /etc/nginx/conf.d
vi default.conf
server {
listen 80; #默认监听80端口
server_name localhost; #服务名称,有域名填写域名
location / {
root /myjob/dist; #注意这里,访问ip:80(80也可以省略,默认会访问)网址时会自动定位到服务器上/myjob/dist下的前端目录,就可以展示我们的前端页面
try_files $uri $uri/ @router;
index index.html index.htm;
}
#这一段是接口访问配置代理--因为我的项目换了端口8091,访问ip:80/message下的接口会自动代理到8091下的接口,如果你还有其他接口信息,复制location块在下面再配置
location /message/ {
proxy_pass http://localhost:8091/message/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
error_page 500 502 503 504 /50x.html; #根据http状态返回错误页面
location = /50x.html {
root /usr/share/nginx/html;
}
location @router {
rewrite ^.*$ /index.html last;
}
以上是基础的nginx配置,如果有图片代理需要在defaut.conf同级加location块,没有图片代理的可忽略,这里我的图片目录是/home/myjob/images/:
# 处理 /images/ 路径下的所有请求(包括子目录)
location ^~/images/ {
alias /home/myjob/images/; # 直接映射到物理目录 /home/myjob/images/
autoindex off; # 允许列出目录内容(可选)
index nothing_here; # 关键:指定一个不存在的默认文件
try_files $uri $uri/ =404;
access_log off; # 禁用日志(可选)
expires 365d; # 设置缓存时间为30天
add_header Cache-Control "public, no-transform";
proxy_cache img_cache; # 在需要缓存的 location 中添加
proxy_cache_valid 200 304 12h; # 缓存有效期
proxy_cache_use_stale error timeout updating;
}
#加快上面配的图片的访问速度
location ~* \.(jpg|jpeg|png|gif|webp)$ {
access_log off; # 关闭图片请求日志
expires 365d; # 浏览器缓存1年
add_header Cache-Control "public, immutable";
add_header X-Accel-Expires 7d; # 代理缓存7天
# 启用缓存
proxy_cache img_cache;
proxy_cache_valid 200 304 12h;
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
# 启用预压缩(需提前生成.br和.gz文件)
gzip_static on;
# 大文件传输优化
output_buffers 16 256k; # 提升输出缓冲区
directio 4m; # 超过4MB文件使用直接IO
aio threads; # 异步IO处理
}
如果有ssl需求需要去下载证书并配置,可以优先把http配置好后效果正常再去配置ssl
按照自己的实际需求配置完以后重启nginx:
systemctl restart nginx
#正常情况下重启后不会报错,如果报错查看nginx日志,有可能文件配置有错--/var/log/nginx/error.log
五、访问网址
访问云服务器的公网ip:http://ip即可看到页面效果,有的主页面是index的话需要访问http://ip/index