1.服务器购买

国内服务器: 阿里云 ECS(Elastic Compute Service)腾讯云 CVM(Cloud Virtual Machine)

国外服务器:日本[Vultr],美国 Linode,谷歌云,微软 Azure,亚马逊 AWS 等

这一步需要创建好服务器实例,分配好公网 IP 地址。

2.域名购买

国内:阿里、腾讯等

国外:Godaddy

3.域名解析(配置 DNS)

注册好域名后需要将域名映射到自己服务器对应的 ip 地址,这样别人才能通过域名访问到我们的服务器。

这个步骤叫做域名解析,通过域名服务商提供的后台就可以操作,一般域名解析会有延迟,不是及时生效的。

4.服务器环境搭建

这里我选择的是CentOS操作系统(其他系统命令不同)

配置服务器, Mac 系统下直接使用终端就 ok

windows 系统下需要用到 git bash,或者别的工具(Putty)

需要用到的 Linux 系统操作命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 远程连接命令
ssh root@域名

# 展示当前文件夹路径
pwd

# 切换文件夹目录
cd 目录

# 展示当前文件夹中内容
ls

# 编辑文件
vim 文件路径

# 传输文件
scp 本地文件路径 root@域名:远程路径

# 解压文件命令
unzipjs

4.1 安装 CentOS 开发人员相关包

1
yum groupinstall 'Development tools'

4.2 配置免密登录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 在自己电脑上 生成本地 密钥对
ssh-keygen -t rsa

# 生成的位置
# windows 在 C:\users\你的用户名\.ssh

# 在服务器创建一个 .ssh 文件夹
mkdir .ssh

# 切换到这个文件夹
cd .ssh

# 创建一个文件
touch authorized_keys

# 把本地电脑生成的密钥对中 id_rsa_pub 文件中的内容放到 authorized_keys 文件中去
echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDP0Ur7rojMdFqTDUQx56QuxeNbqbeCO6lQz9t3KZAWjjJhSG5v1TMhElunJg7HJtovIGlTDwrco9U36gF/nJ+66Gwzeme4eSwUYAu8D7XjFEfFvUPHwtSUDZKV9jtPPsoujUM9LnxvJ09buU0+xpOCE6LAR7e3vPRmrlolQc88b/JbH2A4lsXGIhGNNK/Z6M5LagD8KTNePLv7jc3kA2GZdUUze1wIVBjO21BTK90hfVbEGL0WREVh9RKR33jl7L5s8mnBbLJbsuk/Jk0C5ZNSKKCpFfDBsDQWYodyw1wI7gdpWuV8cH0CYz4xTRuOcIOv7sUjx9gbW09eNZnNOkDxpTvzPuP9CqKFSBma1xtnhhJYdw6b+xnoVPthUKhWzvp9ElQUtAGK+Xzauk5CxHyESZGGoA/YZQZ0U0rmoTrvG5JvnYOclDFMAIfe/pBJR5Ue6tlfBSMBWaHs61b334kAAUbtgF8TW9owH6lSZYsz2mS8nPF6a47bIwZwwsXmoWM= hua'wei@LAPTOP-4NR7HM4G" >> authorized_keys

# 退出服务器,下次就免密登录
exit

4.3 安装 nginx

1
2
3
4
5
6
7
8
9
10
11
12
13
# 添加nginx 源
sudo yum install epel-release

# 安装nginx
sudo yum install nginx

# 启动nginx
sudo systemctl start nginx

# 配置防火墙规则
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
sudo firewall-cmd --reload

4.4 安装 JDK(后端是 java 运行的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 1. 在你的本地Windows系统中下载 Linux系统下的jdk,jdk下载官网https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html。
下载你需要的jdk版本,我用的是 jdk-8u221-linux-x64.tar.gz
# 2.下载完成后将安装包上传服务器
使用winscp上传文件至 /usr/java
# 3.解压文件
tar -zxvf /usr/java/jdk-8u221-linux-x64.tar.gz
# 4.配置path
cd /etc
vim profile
在profile文件中添加如下代码
export JAVA_HOME=/usr/java/jdk1.8.0_221 # jdk解压后的路径
export CLASSPATH=$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
# 5.查看是否安装成功
java -version

4.5 安装 MySQL(数据库)

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 下载并安装MySQL 源
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
sudo yum localinstall mysql80-community-release-el7-3.noarch.rpm

# 验证仓库是否添加成功
yum repolist enabled | grep "mysql.*-community.*"

# 安装MySQL
sudo yum install mysql-community-server -y

# 如果上一步报错,执行下面的命令后再次执行上面的安装Mysql命令
sudo yum module disable mysql

# 修改配置 lower_case_table_names=1
需要先修改配置文件,
vi /etc/my.cnf
[mysqld] 下增加
lower_case_table_names=1
注:如果不加这一行,mysql会区分数据库表的大小写。 0代表区分大小写,1代表不区分大小写。

# 启动MySQL
systemctl start mysqld

systemctl enable mysqld
systemctl status mysqld

# 找到默认密码
# MySQL安装完毕后会设置一个默认密码,我们需要找到默认密码
grep 'temporary password' /var/log/mysqld.log

# 连接到MySQL数据库,修改密码
mysql -uroot -p

# 修改数据库密码 密码要求有大小写英文字母和数字
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Hehuang++0724';

# 允许远程连接
mysql> use mysql;
mysql> select host,user,authentication_string,plugin from user;
mysql> update user set host='%' where user='root';
mysql> flush privileges;

# 注:如果服务器防火墙未开,记得开放mysql的端口。另外安全组也需要开放mysql端口。

5.上传网站资源

可以使用 scp 命令,也可以安装 FTP(winSCP、vsftpd)工具。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# scp 命令运行在本地电脑
scp 本地文件 root@域名:远程路径
# 在服务器创建文件夹
mkdir /home/nginx

# 把网页文件移动到创建好的文件夹里
mv ./dist.zip /home/nginx/

# 解压压缩文件
cd /home/nginx
unzip ./dist.zip

# 修改文件夹名字
mv dist 文件夹名

6.配置 nginx

创建一个配置文件 exam.conf (配置 nginx 服务)

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
cd /etc/nginx/conf.d
# 创建配置文件
touch exam.conf
vim exam.conf
# 按i键 进入编辑模式
# 输入如下配置内容
server {
listen 80;
server_name www.yourdomain.com; # 服务器地址/域名地址
location / {
root /home/nginx/exam; # 静态页面文件的路径
index index.html index.htm;
}
}
# 保存退出
:wq

# 重新启动nginx服务
sudo systemctl reload nginx
# 或 以下命令
nginx -s reload

# 查看nginx状态
sudo systemctl status nginx
# 停止nginx服务
sudo systemctl stop nginx

7. 接口项目部署(java 项目)

1
2
3
4
5
6
7
8
9
10
11
# 启动jar包
java -jar /home/java/exam.jar # 关闭后就停止运行了
nohup java -jar /home/java/exam.jar >exam.log 2>&1 & # 后台不停止运行
# 查看日志
cat exam.log
# 关闭防火墙才能访问springboot项目 查看其防火墙的状态:
systemctl status firewalld.service
# 关闭后就可以正常访问页面
systemctl stop firewalld.service
# 重启防火墙
service iptables restart

Node 作为服务端:

8.安装 Node.js (后端是 Node 运行的)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# yum自带源中没有Node.js,所以首先要获取Node.js资源
curl --silent --location https://rpm.nodesource.com/setup_14.x |bash -

# 安装Node.js
yum install -y nodejs

# 安装完成后使用如下指令测试安装是否成功
node -v

# 安装pm2 启动node.js项目
pm2 start 文件名/id

# 停止
pm2 stop 文件名/id

# 从pm2列表 删除
pm2 delete 文件名/id

9.Node 项目部署步骤(Node 项目)

1.修改配置项文件中的 mysql 数据库密码为服务器中数据库的密码 2.上传项目压缩文件到服务器 3.再服务器上解压项目文件到 /home/nginx/hlj 4.为项目安装依赖 npm i 5.修改 mysql 数据库 密码规则

1
2
3
4
5
6
use mysql;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Hehuang++0724' PASSWORD EXPIRE NEVER;
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Hehuang++0724';

# 查看是否以及修改成功
select user,host plugin from user where user='root';

6.创建新的数据库

1
2
# 登录数据口执行命令
create database 数据库名称

7.在之前的 nginx 配置文件中添加反向代理的配置:

1
2
3
4
location ^~ /api/ {
rewrite ^/api/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:3000; # 服务端配置的默认端口
}

8.新增一个服务端配置文件

admin.conf

1
2
3
4
5
6
7
8
9
10
11
cd /etc/nginx/conf.d
touch admin.conf

# 在文件中输入以下内容
server {
listen 80;
server_name admin.hehuang724.cn; # 域名前加admin
location / {
proxy_pass http://127.0.0.1:3000;
}
}

部署过程遇到的问题:

1.linux 上部署 springboot 项目启动成功本地无法访问

1
2
3
4
5
6
7
# 关闭防火墙才能访问springboot项目
# 系统是centos8 ,查看其防火墙的状态:
systemctl status firewalld.service
# 关闭后就可以正常访问页面
systemctl stop firewalld.service
# 重启防火墙
service iptables restart

2.linux 服务器 mysql 区分表名大小写解决办法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
在mysql安装目录(/etc/my.cnf)中的my.cnf文件中[mysqld]下面添加一行配置, lower_case_table_names=1
# 重启mysql服务
service mysql restart

# 重启mysql服务发现报错,原因是只有在初始化的时候设置 lower_case_table_names=1才有效
# 解决办法:卸载mysql,按下操作
# 卸载完mysql后,重新安装,安装完成后,首先立马修改配置文件
vi /etc/my.cnf
[mysqld] 下增加
lower_case_table_names=1

# 配置完后重启mysql
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld

# 随后按上面的操作重新修改数据库密码

3.卸载 mysql

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
1、关闭mysql
service mysqld stop

2、查看安装的mysql
rpm -qa|grep -i mysql
$> [root@vultrguest ~]# rpm -qa|grep -i mysql
$> mysql-community-libs-8.0.23-1.el7.x86_64
$> mysql80-community-release-el7-1.noarch
$> mysql-community-client-8.0.23-1.el7.x86_64
$> mysql-community-common-8.0.23-1.el7.x86_64
$> mysql-community-server-8.0.23-1.el7.x86_64
$> mysql-community-client-plugins-8.0.23-1.el7.x86_64

3、卸载mysql
$> rpm -ev mysql-community-libs-8.0.23-1.el7.x86_64 --nodeps
$> rpm -ev mysql80-community-release-el7-1.noarch --nodeps
$> rpm -ev mysql-community-client-8.0.23-1.el7.x86_64 --nodeps
$> rpm -ev mysql-community-common-8.0.23-1.el7.x86_64 --nodeps
$> rpm -ev mysql-community-server-8.0.23-1.el7.x86_64 --nodeps
$> rpm -ev mysql-community-client-plugins-8.0.23-1.el7.x86_64 --nodeps

4、找出并删除mysql相关目录
find / -name mysql
$> [root@vultrguest ~]# find / -name mysql
$> /var/lib/mysql
$> /var/lib/mysql/mysql
$> /usr/bin/mysql
$> /usr/lib64/mysql
$> /etc/logrotate.d/mysql
rm -rf /var/lib/mysql
rm -rf /var/lib/mysql/mysql
rm -rf /usr/bin/mysql
rm -rf /usr/lib64/mysql
rm -rf /etc/logrotate.d/mysql

5、删除my.cnf
rm -rf /etc/my.cnf

6、检查卸载情况
rpm -qa|grep -i mysql
显示为空,卸载完毕。
卸载完成后参考以下博客进行重新安装mysql并配置不区分大小写:
https://blog.csdn.net/qq_35845339/article/details/106547742

Linux 下安装 mysql8(并设置不区分数据库表大小写)

4.nginx 解决前端跨域问题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 80;
server_name www.yourdomain.com; # 服务器域名或公网ip地址
location / {
root /usr/share/nginx/exam;
index index.html index.htm;
# 添加请求头
add_header 'Access-Control-Allow-Origin' *;
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
}
# 配置接口
location /api {
include uwsgi_params;
# 代理路径'/api'到本地3033端口下(服务启动在3033端口)
proxy_pass http://localhost:3033/api;
}
}


注意: 设置 proxy_pass 有可能访问当前域名页面会提示 502BadGate

解决办法:

查看系统 httpd 配置:

1
getsebool -a | grep httpd

设置 httpd 可以连接到网络,执行命令:

1
setsebool httpd_can_network_connect on -P

其他:

1.Linux 相关命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 端口进程相关
netstat -anp # 查看端口信息
netstat -anp | grep 3306 # 查看端口信息,过滤3306端口
sudo kill -9 pid号 # 杀死pid对应进程

# springboot相关
nohup java -jar /home/java/exam.jar >exam.log 2>&1 & # 需修改jar包的路径
# nohup:不挂断地运行命令,退出帐户之后继续运行相应的进程。
# exam.log:是nohup把command的输出重定向到当前目录的指定的“日志文件名.log”文件中,即输出内容不打印到屏幕上,而是输出到"exam.log"文件中。不指定文件名会在当前目录创建nohup.out,如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。
# 2>&1:2就是标准错误,1是标准输出,该命令相当于把标准错误重定向到标准输出么。这里&相当于标准错误等效于标准输出,即把标准错误和标准输出同时输出到指定的“exam.log”文件中。
# 最后的&:让该作业在后台运行

# mysql相关
whereis mysql # 显示mysql的安装和文件目录等
systemctl start mysqld # 启动mysql服务
systemctl enable mysqld # 开启mysql服务
systemctl status mysqld # 显示mysql的状态

本人将毕业设计在线考试系统已部署到以下地址:

在线考试系统