星星之火-服务器部署Springboot+Vue项目以及配置SSL证书

本文最后更新于:May 13, 2023 pm

积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里,不积小流无以成江海。齐骥一跃,不能十步,驽马十驾,功不在舍。面对悬崖峭壁,一百年也看不出一条裂缝来,但用斧凿,能进一寸进一寸,能进一尺进一尺,不断积累,飞跃必来,突破随之。

目录

小知识

1
2
ssh-keygen -R 11.11.11.11 # 连接服务器 生成秘钥
ssh root@11.11.11.11 # 连接服务器

Java环境

安装JDK

官方下载

下载后上传到服务器再解压。

解压

1
tar -zxvf xxxxxxxxx.tar

配置环境

1
sudo vi /etc/profile

在最后添加:

1
2
3
4
5
#set jdk
export JAVA_HOME=/usr/local/java ## 自己的jdk文件目录,最后为解压的文件夹名称
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

配置生效

1
source /etc/profile

最后输入 java -version看是否成功。

Nginx

安装

1
sudo apt install nginx

跳转防火墙

1
sudo ufw app list

再访问服务器ip可看到Nginx的页面。

配置

比如我们的网站是 example.com ,那我们创建一个对应的目录 example.com 目录(根据自己的需求,改成自己的目录):

1
sudo mkdir -p /var/www/example.com/html

接下来,使用$USER环境变量分配目录的所有权:

1
sudo chown -R $USER:$USER /var/www/example.com/html

如果我们没有修改自己的umask值,那么 Web 根目录的权限应该正确,我们可以通过输入以下命令来确认:

1
sudo chmod -R 755 /var/www/example.com

将Vue前端打包的dist目录下的所有文件复制到此目录下(/var/www/example.com/html)。

接下来我们为 Nginx 来创建一个服务器块。与直接修改默认配置文件不同,我们在以下位置创建一个新文件:/etc/nginx/sites-available/example.com

1
sudo vim /etc/nginx/sites-available/example.com

粘贴到以下内容添加到文件中,这个块的配置与默认块的配置相似,但针对我们的新目录和域名进行了更新:

/etc/nginx/sites-available/example.com

1
2
3
4
5
6
7
8
9
10
server {
listen 80;
listen [::]:80;
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
server_name example.com www.example.com;
location / {
try_files $uri $uri/ =404;
}
}

接下来,让我们通过在sites-enabled目录新建一个链接,好让 Nginx 在启动过程中会读取这个目录:

1
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

现在已启用并配置了两个服务器块,以及基于它们的listenserver_name指令响应请求:

  • example.com: 将会响应example.comwww.example.com的请求
  • default: 将会响应 80 端口的请求,以及不能匹配到两个服务器块上的请求

为避免可能由于添加其他服务器名称而引起的哈希存储区内存问题,有必要调整/etc/nginx/nginx.conf文件中的单个值。

打开文件:

1
sudo vim /etc/nginx/nginx.conf

找到server_names_hash_bucket_size指令并删除#符号:

1
2
3
4
5
6
7
...
http {
...
server_names_hash_bucket_size 64;
...
}
...

完成后保存并关闭文件。

接下来,测试以确保我们在 Nginx 文件中的改动,没有任何问题:

1
sudo nginx -t

如果没有任何问题,请重新启动 Nginx:

1
sudo systemctl restart nginx

Nginx 现在已经可以按照刚刚我们配置的方式来工作啦。当用户通过http://example.com域名访问我们的服务器时,Nginx 会将它指向我们刚刚创建的 Html 页面。

后端项目启动

将打包好的Vue前端项目和后端项目jar包上传到服务器。我是上传到了 /home/user/server

安装Java环境

如果已经安装可以跳过。如果在运行后面那条命令时出现了提示,则进行安装。

1
apt install openjdk-8-jre-headless # 将8可以改成其他数字,来安装其他jdk版本

默认路径:/usr/lib/jvm。也可以自行上传jdk,再解压配置。

后台运行

1
java -jar *****.jar --server.port=8080 & # &表示后台运行

重新部署

替换之前的前端或后端(Jar包)。

然后关闭之前的进程。因为如果再一次直接启动后端,会出现端口已经被占用的的信息,也就重新部署失败,后端还是之前的。

用命令查看有关java的进程:

1
ps -ef |grep java

然后关闭之前的后端进程:

1
kill 进程编号

然后再启动:

1
java -jar xxxx.jar --server.port=8081 &

配置SSL(2022/3/27)

注意开端口!!!

官方教程 需要注意的是,我这里是腾讯云的SSL证书,阿里云的域名和服务器。

这里只记录以上面讲述的方式部署项目,怎么部署SSL。若是其他的建议看官网

首先在腾讯云申请SSL证书并下载Nginx版本的到本地解压。只需要把 .crt 文件和 .key 文件上传到 /etc/nginx 目录下 。

再去修改配置:(文件位置 /etc/nginx/sites-available/example.com)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
#SSL 访问端口号为 443
listen 443 ssl;
#填写绑定证书的域名,可以再加一个带www的,具体可见最后我自己的配置
server_name cloud.tencent.com;
#证书文件名称
ssl_certificate cloud.tencent.com_bundle.crt;
#私钥文件名称
ssl_certificate_key cloud.tencent.com.key;
ssl_session_timeout 5m;
#请按照以下协议配置
ssl_protocols TLSv1.2 TLSv1.3;
#请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站运行目录在/etc/www下,则填写/etc/www。
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
try_files $uri $uri/ /index.html;
}
}

然后执行:

1
sudo nginx -t

再重启Nginx:

1
sudo systemctl restart nginx

然后就可以使用 https://cloud.tencent.com 进行访问了。但是,只是这样还不行。我们还需要设置从HTTP自动跳转HTTPS。也比较简单。

在刚刚修改的配置文件中加入配置即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
server {
listen 443 ssl;
#填写绑定证书的域名,修改为自己的域名,这里可写多个,还可加再加一个带www的
server_name cloud.tencent.com;
#证书文件名称,修改为自己的crt文件名称
ssl_certificate cloud.tencent.com_bundle.crt;
#私钥文件名称,修改为自己的key文件名称
ssl_certificate_key cloud.tencent.com.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
#网站主页路径。此路径仅供参考,具体请您按照实际目录操作。
#例如,您的网站运行目录在/etc/www下,则填写/etc/www。
root /var/www/example.com/html;
index index.html index.htm index.nginx-debian.html;
try_files $uri $uri/ /index.html;
}
}
server {
listen 80;
#填写绑定证书的域名,这里修改为自己的域名,还可以添加一个带www的
server_name cloud.tencent.com;
#把http的域名请求转成https,这里不需要更改
return 301 https://$host$request_uri;
}

然后再重启Nginx。

记录自己的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
server {
listen 443 ssl;
server_name moreoj.cn www.moreoj.cn;
ssl_certificate moreoj.cn_bundle.crt;
ssl_certificate_key moreoj.cn.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
ssl_prefer_server_ciphers on;

location / {
root /var/www/moreoj.cn/html;
index index.html index.htm index.nginx-debian.html;
try_files $uri $uri/ /index.html;
}
}
server {
listen 80;
#填写绑定证书的域名
server_name moreoj.cn www.moreoj.cn;
#把http的域名请求转成https
return 301 https://$host$request_uri;
}