Skip to content

在服务器上部署Spring boot+Vue项目(java+mysql+redis+nginx+tomcat)

更新说明

23.9.13:完成整篇文章编写

25.12.22:发布(有些东西可能已经过时,请辩论地看待!)

开始前说明

环境配置中,直接下载还未填坑,基本安装均为上传自己的包进行解压再配置环境,如果你需要直接下载,搜索引擎直接找就行,几个linux指令的事儿,并且有些会给你配置好环境,只能说,懒狗yum直接下载,定制就传包解压配置部署。

祝部署顺利!

服务器环境

阿里云云服务器ESC(系统是Cenos7)

工具

你也可以用你自己的工具或者直接使用阿里云提供的工具,当然也可以用宝塔(听说宝塔很行)

  • XShell 7家庭/学校免费版【远程SSH】:家庭/学校免费 - NetSarang Website (xshell.com)

    你也可以直接使用XShell 7提供的Xftp工具进行文件传递,下载和安装的时候选上Xftp选项即可,这取决于您

  • flashFXP【文件传输】:

  • navicat【远程mysql数据库】:

开放安全组

你可以在之后用到的时候再进行端口开放

确定你需要的端口,如果已经默认开放了就不用管

  • 默认开放:22,80,3306

环境配置

准备工作:

首先确定你项目要用到的所有依赖的版本,我这里以JDK17.0.5,mysql8.0.20,redis3.0.5,tomcat9.0.71举例

使用XShell链接到你的服务器(连接前你需要对你的服务器密码进行修改,修改后要重启服务器)

用户名通常为root,密码是我们修改后的密码,主机是你服务器的外网IP地址

按要求填写后,你就能连接进你的云服务器:

image-20230612131535450.png

通用步骤:

下面是一些通用步骤,你可以通过这些步骤去排除服务器是否有预装软件,为了避免他们的影响,你可以考虑是否将它们移除,以下用JAVA来举例,步骤是通用的。

检查服务器有无预装JDK/java:

shell
rpm -qa | grep jdk

如果没有,那么在你输入后,什么都不会发生:

image-20230612132156005

如果有,那么需要进行删除:

image-20230612132312900

删除的命令如下:

shell
rpm -e --nodepjs 需要删除的文件名

例如删除上文的java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64你可以这么写:

shell
rpm -e --nodepjs java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64

检查是否有装JAVA(同上):

shell
java -version

如果没有则会提示:-bash: java: command not found

有则进行删除,步骤同上!

安装JAVA:

我提供了两种方式进行JDK的安装,一种是直接使用yum进行安装(此举不需要你写配置文件,但是你不能指定JAVA安装的路径,他会默认安装到usr/lib/jvm内),另一种是先把安装包下载到本地,再送入服务器指定文件夹下,使用命令进行安装(通过这种方法你需要为JAVA设置全局环境变量),你可以自由选择:

可选命令:

shell
sudo yum update

此举是以超级管理员身份更新服务器中全部的软件包和依赖(如果你安装出现命令版本过低等问题,可以考虑此命令)

方案一:直接下载

任意地方执行下面的代码即可↓

首先查看java的全部版本,找到你想要的版本:

shell
yum list java*

image-20230612195121612

选择你要的版本(我是JDK17,所以我选择:java-17-openjdk.x86_64

进行安装:

shell
yum -y install java-17-openjdk.x86_64

执行命令,查看是否安装成功:

shell
java -version

如果成功,你会看到下面的代码:

img

方案二:本地上传后安装

  • 为了方便管理,我选择把JDK放入到/usr/local/java下,但是此时按理说是没有这个文件夹的,因此我们需要创建一个这样的文件夹:
shell
mkdir /usr/local/java

然后进入到我们新创建的java文件夹内:

shell
cd /usr/local/java

此时你可以看到你的控制台是这样的:

image-20230612193153885

  • 首先找到你项目需要的JDK包,我这里以17的为例子,你需要上官网找到你用的JDK包(openJDK和Oracle JDK都可以),下载他们的linux版本,我这里提供了oracle JDK17的下载地址:Java Archive Downloads - Java SE 17 (oracle.com)

    你需要下载的是这个版本的,同时也要注意你想买使用的是哪一个版本(我看的时候已经到17.0.7了,我项目用的是17.0.5,所以我下的也是17.0.5):image-20230612201437805

    下载好后,使用XShell7自带的Xftp或者flashFXP进行文件的传输(后者的链接服务器方式和XShell链接服务器的步骤相同):

image-20230612202822768
  • 现在在你的控制台内输入下面代码,进入到目标文件夹内,查看文件是否已经存在,如果一切顺利,你会看到下面的内容:
shell
cd usr/local/java
ls

image-20230612203046897

接着开始解压(我这里是以.tar.gz为后缀,其他后缀请自行查找解压命令):

shell
tar -xzvf jdk-17.0.5_linux-x64_bin.tar.gz

使用ls查看是否解压成功,如果成功,ls后你可以看到下面的内容:

image-20230612203750410

  • 配置你的环境变量,使用如下命令进行:
shell
vim /etc/profile

这里是使用vim编辑器进行编写(我不会用啊?自己学!),来到文件的最下面,按键盘上的i,进入到输入模式(按了后你可以看到左下角出现了——insert——,此时就进入了输入模式),把下面的四行代码复制进去文件中(记得另起一行再粘贴),然后按下键盘上的ESC推出输入模式(此时左下角的——insert——消失了,说明你已经退出了输入模式),接着再输入:wq进行保存,然后更新配置文件让其生效:

image-20230612205649405

需要复制进去的代码(注意此处的jdk-17.0.5你可以替换为你安装JDK后出现的文件夹名字):

shell
JAVA_HOME=/usr/local/java/jdk-17.0.5
CLASSPATH=%JAVA_HOME%/lib:%JAVA_HOME%/jre/lib
PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
export PATH CLASSPATH JAVA_HOME

点击ESC退出输入模式,输入下面代码进行保存:

shell
:wq

更新配置文件让其生效:

shell
source /etc/profile
  • 最后进行测试,看是否成功安装,如果成功,你输入下面代码可以看到如下内容:
shell
java -version

image-20230612210145743

不放心你可以进行下面代码继续进行测试,如果没有报错,那么就是成功的:

shell
java
shell
javac

安装MySQL:

有了服务器,那肯定少不了数据库,咱们还是提供两种方案进行mysql的安装,同样是yum和本地上传后安装(本地上传安装路径我选用usr/local/mysql)

我选用的是MySQL8.0.20版本

当然你也可以使用以下命令,检查服务器是否有预装的数据库,对其进行处理:

检查(通常会有两种常见的数据库,你可以分别进行检查):

shell
rpm -qa | grep mariadb
rpm -qa | grep mysql

删除:

shell
rpm -e 查询到的名称 --nodeps

以上是推荐做法,你也可以跳过不做。

方案一:直接下载

注意,此方案基于CentOS Stream 9进行,不同于本文其他方案所用到的,使用前请留意是否存在版本不兼容的问题~

方案基于AI+个人成功实践可行后编写,数据库操作相关由Navicat负责执行,这里不提及:

  1. 下载

首先来安装一下mysql,老规矩,依旧是阿里云的服务器,先登录进服务器终端,输入下面的指令安装,其中mysql80-community-release-el9.rpm可自行网上找对应仓库的rpm进行替换:

注意,这条指令不是安装指令,是Mysql8的官方仓库,里面的版本都是较新的,可以避免版本滞后等问题:

shell
dnf install -y https://repo.mysql.com/mysql80-community-release-el9.rpm

如果你想要验证一下,可以使用下面的指令,你会看到控制台输出对应的内容:

shell
dnf repolist enabled | grep mysql

>> mysql-connectors-community           MySQL Connectors Community
>> mysql-tools-community                MySQL Tools Community
>> mysql80-community                    MySQL 8.0 Community Serve

接着输入下面的指令,进行真正的安装:

shell
dnf install -y mysql-community-server

如果你想直接用系统默认仓库,也可以按下面执行:

shell
# 查看系统查看的Mysql版本
dnf module list mysql

# 启用MySQL 8.0 模块(问我也不知道,没有过多了解为啥要启用,有兴趣可以自行了解一下)
dnf module enable mysql:8.0

# 安装
dnf install mysql-server

  1. 改写配置文件

注意,如果你有Windows+Liunx混搭用的问题,现在就配置上lower_case_table_names = 1 用于:表名统一按小写存储 & 查询,因为Linux对表名大小写敏感,但是Windows不会,防止迁移带出问题,自行决定!

打开配置文件:

SHELL
vim /etc/my.cnf

写入以下内容([mysqld]是原本就有的,在他的下面可能会有有一些内容,不用管,直接在最下面补上下述内容即可,用的是vim编辑器,不会用的百度一下.jpg):

yaml
[mysqld]
# 开放的端口
port = 3306
# 允许的访问,这里只允许本机访问,要全开放可以填 0.0.0.0
bind-address = 127.0.0.1

# 字符集,无需多言
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

# 最大同时链接数目
max_connections = 50

# InnoDB 内存控制(2GB 服务器关键)
# 最大核心缓冲
innodb_buffer_pool_size = 256M
# 最大事务写入缓冲
innodb_log_buffer_size = 16M

# 绕过 OS Page Cache,直接写磁盘,防止Mysql和Linux双重缓存
innodb_flush_method = O_DIRECT

# 慢查询记录。这里设置了查询超过 1 秒为慢查询
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1

# ***Linux 上统一表名为小写存入
lower_case_table_names = 1

额外情况

一般来说写入配置后再启动,不会有问题,但是如果你是启动后再写入上述配置,并且设置了lower_case_table_names = 1这条规则,且重启报下面的错误:

SHELL
>> Job for mysqld.service failed because the control process exited with error code.
>> See "systemctl status mysqld.service" and "journalctl -xeu mysqld.service" for details.

这是因为Mysql初始化后,不支持修改此条策略导致的(本来它对大小写敏感,都已经初始化好了,所有东西都基于这个大小写敏感的规则,这时候你让他不敏感,他就受不了直接报错了)

那你可以按下面方法二选一处理:

  • 干掉这条配置

手动移除lower_case_table_names = 1这条配置,保存,执行下面的重启就行

SHELL
systemctl restart mysqld

systemctl status mysqld

# 下面的输出有 running 就代表数据库运行正常!
>> ● mysqld.service - MySQL Server
>>   Loaded: loaded (/**/**/**/**/mysqld.service; enabled; preset: disabled)
>>   Active: active (running) since ** **-**-** 01:08:40 CST; 13s ago
>>     Docs: man:mysqld(8)
>>           http://dev.mysql.com/doc/refman/en/using-systemd.html
>>  Process: 16754 ExecStartPre=/**/**/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
>> Main PID: 19990 (mysqld)
>>   Status: "Server is operational"
>>    Tasks: 38 (limit: 10645)
>>   Memory: 451.6M
>>      CPU: 5.029s
>>   CGroup: /system.slice/mysqld.service
>>           └─19990 /**/**/mysqld
  • 重新初始化MySQL(如果你前面配置了密码啥的,会重置掉,如果你数据库已经有数据,不要这样干!!!)

先停止MySQL服务

SHELL
systemctl stop mysqld

干掉对应的MySQL文件夹,按上面操作,没有挪位置,就应该是下面这个位置.jpg

SHELL
rm -rf /var/lib/mysql

重新初始化MysSQL

SHELL
mysqld --initialize --user=mysql

确认状态,看到有 running 就是成功的!

SHELL
systemctl status mysqld

# 下面的输出有 running 就代表数据库运行正常!
>> ● mysqld.service - MySQL Server
>>   Loaded: loaded (/**/**/**/**/mysqld.service; enabled; preset: disabled)
>>   Active: active (running) since ** **-**-** 01:08:40 CST; 13s ago
>>     Docs: man:mysqld(8)
>>           http://dev.mysql.com/doc/refman/en/using-systemd.html
>>  Process: 16754 ExecStartPre=/**/**/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
>> Main PID: 19990 (mysqld)
>>   Status: "Server is operational"
>>    Tasks: 38 (limit: 10645)
>>   Memory: 451.6M
>>      CPU: 5.029s
>>   CGroup: /system.slice/mysqld.service
>>           └─19990 /**/**/mysqld
  1. 设置MySQL开机自启动
SHELL
systemctl enable --now mysqld
  1. root 权限配置

首先先获取临时的权限密码(注意,如果有多条,用最下面,也就是最新的一条【因为之前配置过一次权限,然后重新初始化MySQL后再配置权限,所以会有两条】)

SHELL
grep 'temporary password' /var/log/mysqld.log

>> **-01-01T17:08:37.646235Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: gi****gD
>> **-01-01T18:17:33.592209Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: *7r*****G

记住上面最后那一段字符串后,开始执行我们的权限初始化,接着按出现的提示操作就行,有让你输入Y或者N的环节,多用翻译软件看清楚再执行即可(输入密码环节,密码不会在终端中展示):

SHELL
mysql_secure_installation

>> Securing the MySQL server deployment.
>> 
>> # 登录,输入上面给的临时密码
>> Enter password for user root: 
>> 
>> # 登录成功后,临时密码就会被干掉,下面就需要你重新设置密码(需要大写+小写+数字+特殊符号都至少各有一个)
>> The existing password for the user account root has expired. Please set a new password.
>> 
>> New password: 
>> 
>> Re-enter new password: 
>> # 这里就是提示你的密码不符合当前密码策略规则(大写+小写+数字+特殊符号都至少各有一个)
>>  ... Failed! Error: Your password does not satisfy the current policy requirements
>> 
>> New password: 
>> 
>> Re-enter new password: 
>> The 'validate_password' component is installed on the server.
>> The subsequent steps will run with the existing configuration
>> of the component.
>> Using existing password for root.
>> 
>> Estimated strength of the password: 100 
>> # 这里问你要不要再改一次 root 的密码,我们上面设置了,这里就不改了(例子是我脑抽又改了一次...)
>> Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
>> 
>> New password: 
>> 
>> Re-enter new password: 
>> Sorry, passwords do not match.
>> 
>> New password: 
>> 
>> Re-enter new password: 
>> 
>> Estimated strength of the password: 100 
>> # 链接要求密码,Y
>> Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
>> By default, a MySQL installation has an anonymous user,
>> allowing anyone to log into MySQL without having to have
>> a user account created for them. This is intended only for
>> testing, and to make the installation go a bit smoother.
>> You should remove them before moving into a production
>> environment.
>> 
>> # 移除 root 外所有用户?(自行选择,不过新库无所谓吧,最好就清一下)
>> Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
>> Success.
>> 
>> 
>> Normally, root should only be allowed to connect from
>> 'localhost'. This ensures that someone cannot guess at
>> the root password from the network.
>> 
>> # 禁止远程以 root 登录,这是root的策略,不影响其他创建的用户
>> # (这个问你要不要支持远程服务器用 root 用户,通过默认的数据库开放端口【3306】来访问数据库,一般我们用SSH后,再来访问数据库;
>> # 这种对外暴露的除非你的服务器就是纯放数据库,否则最好不要开,我们数据库和后端在一台机器上,所以这里设Y)
>> # 如果后续有需要,设置用户的时候host填 % ,并且去配置文件中,把 bind-address = 127.0.0.1 改为 0.0.0.0 即可,记得防火墙开放相关端口
>> Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
>> Success.
>> 
>> By default, MySQL comes with a database named 'test' that
>> anyone can access. This is also intended only for testing,
>> and should be removed before moving into a production
>> environment.
>> 
>> # 问你要不要干掉测试数据库和相关的访问权限,这里自己来,用例设了Y,直接上生产说是awa
>> Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
>>  - Dropping test database...
>> Success.
>> 
>>  - Removing privileges on test database...
>> Success.
>> 
>> Reloading the privilege tables will ensure that all changes
>> made so far will take effect immediately.
>> 
>> # 重新加载权限表,Y
>> Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
>> Success.
>> 
>> All done!

验证登录:

SHELL
mysql -uroot -p

>> Enter password: 
>> # 上面敲了 root 的密码后,正常就显示下面的东东了
>> Welcome to the MySQL monitor.  Commands end with ; or \g.
>> Your MySQL connection id is 8
>> Server version: 8.0.44 MySQL Community Server - GPL
>> 
>> Copyright (c) 2000, 2025, Oracle and/or its affiliates.
>> 
>> Oracle is a registered trademark of Oracle Corporation and/or its
>> affiliates. Other names may be trademarks of their respective
>> owners.
>> 
>> Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
>> 
>> # 这里我们快速验证一下
>> mysql>SELECT VERSION();
>> +-----------+
>> | VERSION() |
>> +-----------+
>> | 8.0.44    |
>> +-----------+
>> 1 row in set (0.00 sec)
>>
>> # 有上述内容,OK,退出链接即可
>> mysql> exit;
>> Bye
  1. 用户权限配置

这里我们快速设置两个用户,一个给navicat链接,一个给本地的spring boot进行链接,老规矩,先登录mysql,敲密码:

SHELL
mysql -uroot -p

>> Enter password: 
>> Welcome to the MySQL monitor.  Commands end with ; or \g.
>> Your MySQL connection id is 8
>> Server version: 8.0.44 MySQL Community Server - GPL
>> 
>> Copyright (c) 2000, 2025, Oracle and/or its affiliates.
>> 
>> Oracle is a registered trademark of Oracle Corporation and/or its
>> affiliates. Other names may be trademarks of their respective
>> owners.
>> 
>> Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
>> 
>> mysql>

配置用户:

SQL
# 这里我们先记忆一个配置格式,允许的IP段可以赋值 % ,表示所有IP都能访问:
# CREATE USER '用户名'@'允许的IP段' IDENTIFIED BY '密码';
# 这里是放行权限,其中 * 为所有数据库的权限,并且用户名是必须要存在的
# GRANT ALL PRIVILEGES ON *.* TO '用户名'@'允许的IP段' WITH GRANT OPTION;

# 首先配置Navicat的,登录用户名叫 navicat_user , 开放的端口是本地,完成后按回车即可(我们关掉了外部的,所以这里都写 localhost):
CREATE USER 'navicat_user'@'localhost' IDENTIFIED BY '这里是一个强而有力的密码(大写+小写+数字+特殊符号都至少各有一个)';
GRANT ALL PRIVILEGES ON *.* TO 'navicat_user'@'localhost' WITH GRANT OPTION;

# 同理配置一个 Spring Boot 服务访问的,完成后按回车即可:
CREATE USER 'spring_boot_user'@'localhost' IDENTIFIED BY '这里是一个强而有力的密码(大写+小写+数字+特殊符号都至少各有一个)';
GRANT ALL PRIVILEGES ON *.* TO 'spring_boot_user'@'localhost' WITH GRANT OPTION;

# 看到每个配置回车后都输出下面的内容,表示配置成功:
Query OK, 0 rows affected (0.01 sec)

# 接着我们立即刷新一下权限表:
FLUSH PRIVILEGES;

然后我们快速查看一下配置:

SQL
SELECT user, host FROM mysql.user;

# 你会看到:
>> >> +------------------+-----------+
>> | user             | host      |
>> +------------------+-----------+
>> | mysql.infoschema | localhost |
>> | mysql.session    | localhost |
>> | mysql.sys        | localhost |
>> | navicat_user     | localhost |
>> | root             | localhost |
>> | spring_boot_user | localhost |
>> +------------------+-----------+
>> 6 rows in set (0.00 sec)

# 可以搭配下述指令来看每个用户拥有的权限,这里不多说:
SHOW GRANTS FOR '用户名'@'host地址';

如果你要更改用户名host,可以参考下面,下面IP段赋值了%,表示允许所有IP访问:

SQL
UPDATE mysql.user SET host = '%' WHERE user = '目标用户名';

FLUSH PRIVILEGES;
  1. Navicat 远程链接

这里不展开多讲,由于我们没开放直接访问端口,所以我们要通过 SSH 来进行!

这里我们先选 SSH 填你远端服务器的主键,端口默认 22,用户名一般是 root,密码是访问服务器的密码,填上就行

Snipaste_2026-01-02_16-48-43.png

然后点击常规,配置数据库访问(注意,连上 SSH 后,是以本地数据库的视角进行的,也就是主机我们填localhost即可)

Snipaste_2026-01-02_16-52-12.png

测试链接,成功!

Snipaste_2026-01-02_16-52-36.png

方案二:本地上传后安装

image-20230612231326584

选择版本8.0.20,选择系统Linux - Generic,点击Download进行下载,并且上传到路径usr/local/mysql,当然,这个文件夹咱们也要先创建:

shell
mkdir /usr/local/mysql
image-20230612232745778

使用下面代码检查是否传输成功,如果成功,输入ls后能看到文件,否则为空:

shell
cd /usr/local/mysql
ls

image-20230612231842417

  • 解压并且进入(mysql-8.0.20-linux-glibc2.12-x86_64为解压后的文件夹名称):
shell
tar -xvf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
cd mysql-8.0.20-linux-glibc2.12-x86_64

创建data文件夹用于存储数据:

shell
mkdir data

如果成功进行,输入ls你可以看到下面的文件:

shell
ls

image-20230613110042044

  • 为了后续方便操作,建议为解压完毕后的文件夹重命名,首先先返回我们的mysql文件夹内,如果此时你是按照文档进行的,你可以照搬下面的命令:
shell
cd ..
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20
ls

如果你不知道你在哪儿,你也可以执行下面的命令进行重命名:

shell
cd /usr/local/mysql
mv mysql-8.0.20-linux-glibc2.12-x86_64 mysql-8.0.20
ls

同样可以实现效果!!!

成功的话你可以看到:

image-20230613111045052

  • 这时候我们重新进到重命名后的文件夹内:
shell
cd mysql-8.0.20

创建用户组和用户:

shell
groupadd mysql
useradd -g mysql mysql

修改目录权限/授予用户权限:

shell
ll
chown -R mysql.mysql /usr/local/mysql/mysql-8.0.20
ll

如果成功,你可以看到下面的执行效果:

image-20230613111639202

  • 接着进入到bin文件夹内,初始化数据库,并且记录咱们的初始密码(红线画起来的那部分):
shell
cd bin
./mysqld --user=mysql --basedir=/usr/local/mysql/mysql-8.0.20 --datadir=/usr/local/mysql/mysql-8.0.20/data/ --initialize

image-20230613112145291

  • 修改配置文件:
shell
vim /etc/my.cnf

进入到里面后,有可能是一片空白,也有可能是已经存在了内容,有内容你就注释掉就行了,然后把下面的东西复制粘贴进去,保存并退出(上面已经教过基础的vim使用了,之后不再复述):

ini
[mysqld]
    basedir = /usr/local/mysql/mysql-8.0.20
    datadir = /usr/local/mysql/mysql-8.0.20/data
    socket = /usr/local/mysql/mysql-8.0.20/mysql.sock
    character-set-server=utf8
    port = 3306
   sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 [client]
   socket = /usr/local/mysql/mysql-8.0.20/mysql.sock
   default-character-set=utf8

image-20230613114108759

  • 创建服务和授权,并且检查是否生效:
shell
cp -a /usr/local/mysql/mysql-8.0.20/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig  --list mysqld

image-20230613114936244

  • 配置全局环境变量:
shell
vim /etc/profile

在最下面添加如下内容(老规矩依旧使用vim编辑器):

c
export PATH=$PATH:/usr/local/mysql/mysql-8.0.20/bin:/usr/local/mysql/mysql-8.0.20/lib

image-20230613115431365

更新配置使其立即生效:

shell
source /etc/profile
  • 启动MySQL服务,并且查看其状态(输入第二条命令后,你需要按Ctrl+C来退出那个状态,才能恢复到图片所示的状态【出现光标】):
shell
service mysql start
service mysql status

image-20230613120006441

  • 最后我们要修改咱们的数据库密码为自己的密码,你可以重新打开一个窗口,或者继续此窗口进行:
shell
mysql -uroot -p

image-20230613120445463

此处需要键入咱们上面保存的密码,直接复制粘贴就行(注意,他是不显示的,你粘贴后直接回车即可),如果成功,你可以看到如下页面:

image-20230613120601708

然后进行修改密码,密码自填:

sql
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你自己的密码';

image-20230613120755454

  • 设置远程链接:
sql
use mysql;
update user set host='%' where user='root' limit 1;
flush privileges;

image-20230613121044743

  • 进行远程链接测试(这里我使用了Navicat进行数据库的远程链接):
image-20230613121556674

至此,你已经完成了在服务器上部署MySQL。

安装Redis:

老规矩,也提供两种方案。。。

依赖:

  • 无论使用哪种方案,你都要安装GCC编译器
shell
cd /
yum install gcc-c++
y #出现提示后

image-20230613133629128

方案一:直接下载

pass(后续补)

方案二:本地上传后安装

  • 官方下载途径:Redis官方下载途径

    选择你项目的要用到的Redis安装包,进行下载(此处以redis-3.0.5.tar.gz为例)

  • 创建一个文件夹:

shell
mkdir /usr/local/redis

把下载好的压缩包放过去:

image-20230613125734557

解压:

shell
tar -xvf redis-3.0.5.tar.gz

image-20230613125949480

  • 进入解压后的文件夹内,执行编译
shell
cd /usr/local/redis/redis-3.0.5
make

image-20230613134553816

安装(此处指定了安装路径,之前的/usr/local/redis/redis-3.0.5是安装目录,而这里的/usr/local/redis-3.0.5是Redis的命令目录,你也可考虑把他们放在一起→/usr/local/redis/,没有什么关系):

shell
make install PREFIX=/usr/local/redis-3.0.5

image-20230613135014073

  • 配置Redis,从编译后的文件中复制配置文件到我们安装的Redis配置中:

    shell
    cd /usr/local/redis-3.0.5/bin/
    mkdir conf
    cp /usr/local/redis/redis-3.0.5/redis.conf /usr/local/redis-3.0.5/bin/conf/
    cd conf/
    ll

    image-20230613135504250

  • 测试连接,进入到bin,使用配置文件运行Redis:

    shell
    cd /usr/local/redis-3.0.5/bin/
    ./redis-server conf/redis.conf

    image-20230613140208934

    此时新建一个窗口,执行下面命令进行测试,先进入到Redis的命令目录,启动客户端连接服务器:并指定端口6379,出现图片所示内容即算成功:

    shell
    cd /usr/local/redis-3.0.5/bin/
    ./redis-cli -p  6379
    ping

    image-20230613140419273

    停止Redis服务,并且断开连接,这时返回第一个窗口(开启Redis的那个窗口),检查Redis是否已经退出(贴心的byebye):

    shell
    shutdown
    exit

    image-20230613140647544

    image-20230613140853620

  • 配置Redis为后台启动(vim操作),找到daemonize no改为daemonize yes,保存退出即可:

    shell
    vim /usr/local/redis-3.0.5/bin/conf/redis.conf

    image-20230613142121476

    再次进行测试:

    shell
    cd /usr/local/redis-3.0.5/bin/
    ./redis-server conf/redis.conf

    image-20230613142442349

    发现不再出现Redis的经典图标,检查Redis服务进程:

    shell
    ps -ef | grep redis

    image-20230613142614308

    成功!再测试连接:

    shell
    cd /usr/local/redis-3.0.5/bin/
    ./redis-cli -p 6379

    image-20230613143136601

  • 关闭Redis服务

    • 方法一:

      连接上去使用shutdwon后再exit退出

      shell
      cd /usr/local/redis-3.0.5/bin/
      ./redis-cli -p 6379
      shutdown
      exit
    • 方法二:

      直接杀掉进程

      shell
      pkill redis
  • 检查Redis是否已经关闭:

    shell
    pkill redis
    ps -ef | grep redis

    image-20230613143623772

至此,你已经完成了Redis的安装和启用!!!

安装Tomcat:

方案一:直接下载

pass(后续补)

方案二:本地上传后安装

  • 官方下载途径:Apache Tomcat® - Welcome!

    调查好你用的版本,去下载linux系统下的安装包!下面是一个通用的找版本教程(教程采用9.0.71,下面部署教程采用10.1.8):

    image-20230613152118330image-20230613152250101image-20230613152227085

    image-20230613152322689

    image-20230613152423798
  • 新建tomcat文件夹,把包上传进去:

    shell
    mkdir /usr/local/tomcat
    cd /usr/local/tomcat
    image-20230613152759382

    输入ls确认是否上传成功:

    shell
    ls

    image-20230613152903122

  • 解压,查看解压情况:

    shell
    tar -zxvf apache-tomcat-9.0.71.tar.gz
    ls

    image-20230613160458815

  • 进入到目录的bin下,运行Tomcat

    shell
    cd apache-tomcat-9.0.71/bin
    ./startup.sh

    image-20230613162344225

    查看进程:

    shell
    ps -ef | grep tomcat

    image-20230613162509251

    公网测试链接:

    找到你的服务器公网IP,加上端口号,进浏览器测试(如果访问被拒,请前去安全组开放8080端口),如果成功,你可以看到那个经典的页面:

    你的服务器公网IP地址:8080

    image-20230613162800400

  • 关闭tomcat,你同样要先进入到tomcat的bin文件夹下,才能执行下面的命令关闭服务器,关闭后你可以查看进程确定是否成功:

    shell
    ./shutdown.sh
    ps -ef | grep tomcat

    image-20230613163250684

至此,你已经完成了服务器上部署Tomcat的所有操作!

安装Nginx:

Nginx我们提供两套安装方法,您可以自由选择。。。

依赖:

无论你选择哪一套,前两个依赖你都要进行下载,之后的依赖你可以选择添加,但是建议你都装上

  • gcc-c++:请移步Redis依赖一栏查看步骤。

  • pcre:为nginx解析http中正则表达式提供依赖

    shell
    yum install -y pcre pcre-devel
  • zlib:为nginx压缩数据提供依赖

    shell
    yum install -y zlib zlib-devel
  • openssl:加密数据传输链路,在数据传输时起安全保护校验作用

    shell
    yum install -y openssl openssl-devel

方案一:直接下载

pass(后续补)

方案二:本地上传后安装

  • 创建文件夹存放nginx的包:
shell
mkdir /usr/local/nginx
  • 官网下载Linux系统最新版本的nginx包:nginx: download
    • Mainline version:Mainline 是 Nginx 目前主力在做的版本,可以说是开发版
    • Stable version:最新稳定版,生产环境上建议使用的版本
    • Legacy versions:遗留的老版本的稳定版

我们选择Stable version的linux版本进行下载!

image-20230613190541209

下完后,上传到服务器!image-20230613190656296

查看上传是否成功:

shell
cd /usr/local/nginx
ls

image-20230613190844305

  • 解压安装,查看安装是否成功:

    shell
    tar -zxvf nginx-1.24.0.tar.gz
    ls

    image-20230613191101977

  • 进入到解压后的文件夹内,配置文件,编译安装(这里我们就不像Redis那样指定其他路径了,我们直接也存在nginx内):

    shell
    cd /usr/local/nginx/nginx-1.24.0
    ./configure --prefix=/usr/local/nginx
    make
    make install
  • 配置Nginx文件,你可以修改listen(监听端口号,如果端口冲突请修改这个,同时记得去服务器安全组中开放你修改后的端口号),server_name(目标请求地址,你可以就这样,也可以填自己公网IP),我这里两者都不修改:

    shell
    vim /usr/local/nginx/nginx-1.24.0/conf/nginx.conf
    image-20230613193028256
  • 运行nginx,先进入sbin文件夹内再执行运行命令,检查是否已经启动:

    shell
    cd  /usr/local/nginx/sbin
    ./nginx
    ps -ef | grep nginx

    image-20230613193825476

    连接你服务器公网IP,测试是否成功,如果出现图片中的内容,即为成功部署!:

    shell
    服务器公网IP地址:端口号	###如果你端口号(listen)没有修改,那么默认时80端口,80端口不需要手动加':端口号',直接输入服务器公网IP地址访问即可
    image-20230613194053460
  • 关闭nginx,先进入sbin文件夹内才能执行下面的命令:

    shell
    ./nginx -s stop		###非正常退出,相当于杀进程
    ./nginx -s quit		###正常退出
    ./nginx -s reload	###重新加载配置文件,即加载上面的Makefile

至此,Nginx的在服务器上的部署已经全部完成!!

附加(SSL模块)

如果你的项目需要使用到SSL数字证书,你还需要安装SSL模块:

①进入到到nginx目录下:

shell
cd /usr/local/nginx

然后查看你的版本号:

shell
/usr/local/nginx/sbin/nginx -V

记住V是大写,查看configure arguments:后边有没有值,如果有,就复制下来。

②配置SSL模块:

在nginx目录下,输入:

shell
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --原来有的模块(如果有的话)

③如果有报错(没有就跳过),例如:

2096758-20220107091106228-208312620.png

那就按照报错提醒去找问题,例子这里就要去下载OpenSSL库:

shell
yum -y install openssl openssl-devel

④如果②没有问题,那么配置运行完毕后,运行make(切记不要输入make install,此举会覆盖安装,我们只需要增量安装),等待运行完毕,接着↓

  • 小心行事就先备份(如果你完全安装上面步骤,可以不用改变地址):

    shell
    cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
  • 大胆行事直接开始安装:

    首先先暂停nginx服务

    shell
    ./usr/local/nginx/sbin/nginx -s stop

    开始安装(切记我们此时在nginx目录下)

    shell
    cp ./objs/nginx /usr/local/nginx/sbin/

    查看是否成功

    shell
    /usr/local/nginx/sbin/nginx -V

    如果成功,你会看到:configure arguments: --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module

自此,SSL模块安装完毕,你可以重新启动你的nginx愉快的丸耍了!awa

项目部署

技术栈:

前端:fantastic-admin框架(VUE3 + Vite + Pinia + Element plus)

后端:Spring boot + Mybatis Plus + Redis + MySQL

服务器配置:

服务器上主要配置两个,一个是nginx的配置,一个是Tomcat的配置,并且开放相应的防火墙端口即可

域名和SSL数字证书:

我们假设服务器ip地址为192.168.1.1,同时为了正式一点,我为我的网站添加了域名和SSL数字证书保护。

切记,如果你服务器在大陆,你解析域名到服务器上必须要备案(不想麻烦就找个香港的服务器)

域名

这里我们假设一个域名为morning.top,我们的项目部署在二级域名test.morning.top下

SSL数字证书

你可以在此(阿里云)申请一个免费的数字证书:数字证书管理服务管理控制台 - SSL 证书 (aliyun.com)

阿里一年可以免费获取20个证书,填写你的部署的域名(免费的只能填一个,花钱的可以使用通配符[例如:*.morning.top]绑定主域名下所有的域名),我们选择项目部署的域名test.morning.top,填写信息后,等他审批完毕,然后点击下载(选择nginx类型的):

image-20230913000141037image-20230913000223640image-20230913000357956

下载完毕后,你会得到一个压缩包,本地解压,里面有两个文件,一个是key结尾的,一个是pem结尾的,为了偷懒,我们他们重命名为ssl.key,ssl.pem,然后在nginx目录下,创建一个新的文件夹cert,并且把这两个文件放入文件夹下即可。

前端项目部署:

不教项目打包,默认vue项目打包好后,所有内容会被打包生成在dist文件夹下!!!我们把这个文件夹下的内容放到一个新的文件夹下,自己起名字,我这里取price,如此前端就已经准备好了。

我们把项目部署在nginx下,在nginx下,你可以看到一个文件夹叫做html,进入里面:

shell
cd /usr/local/nginx/html

然后直接把price这个文件夹部署到html下,至此,前端项目打包完毕。

后端项目部署:

后端我们采用war包的形式,并且使用maven来进行,打war包前要做到三点:

​ ①pom排除自带的tomcat,并且引入servelt-api依赖,设置打包方式为war

image-20230912234127477
xml
<!--打包时候排除自带的tomcat-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

​ ②前后端不做跨域处理(如果你做了也没关系,在下面配置nginx的时候不配置代理就行这是一个坑,后续想起来就填

​ ③启动类(什么什么Application的,位置在src/main/java/包名)要继承SpringBootServletInitializer,为了能让tomcat在war包下找到启动的入口:

java
//你之前的启动类:
public class ABCApplication {

    public static void main(String[] args) {
        System.out.println("------starting!!!------");
        SpringApplication.run(ABCApplication.class, args);
        System.out.println("------success start------");
    }
}

//要修改成这样:
public class ABCApplication extends SpringBootServletInitializer {

    public static void main(String[] args) {
        System.out.println("------starting!!!------");
        SpringApplication.run(ABCApplication.class, args);
        System.out.println("------success start------");
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder applicationBuilder) {
        return applicationBuilder.sources(ABCApplication.class);
    }
}

检查完上面三点后,你就可以使用maven进行打包(在maven生命周期下先点击clean,再点击package,或者使用maven命令[IDEA下右键你的项目名(通常是最外层的那个),点击Open Terminal at the Current Maven Module Path后,再在控制台输入maven clean package,无论哪种,最后结果都一样)

image-20230912233544317

最后你会获取到一个war包(一个叫:项目名字-XXXXXX-XXX.war,这个才是我们要的,别搞错;另一个是:项目名字-XXXXXX-XXX.war.origin),把war包放到tomcat目录(你看到有个bin的文件夹就是tomcat目录下了,如果你按照上面的步骤,路径就是/usr/local/tomcat/apache-tomcat-10.1.8/)下的webapps下,不需要做其他处理。

至此,后端项目打包完成。

配置nginx:

==注意,非常推荐你的tomcat版本和idea自带的版本一致,以避免玄学问题或是其他兼容性问题!!!==

※为了精简,我们统一把==/usr/local/nginx==作为nginx的目录,下面提及nginx目录都是这个路径

在nginx目录下,进入conf文件夹,打开nginx.conf文件(你可以使用vim进行编辑,或者你有类似于FlashFXP的文件传输软件可以直接以其他格式打开也可以)

①是采用SSL证书的配置(你需要配置SSL模块,上面有),②是不采用的配置

①如果你配置了SSL证书,你的nginx需要这样写:

首先找到http下的server块,把他修改成这样(注意####在复制的时候去掉):

server {
    listen 443 ssl;
    server_name  test.morning.top(写你证书绑定的域名);
    ssl_certificate /usr/local/nginx/cert/ssl.pem;		####你的pem文件存放地点
    ssl_certificate_key /usr/local/nginx/cert/ssl.key;	####你的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;

	#这里的意思是,当你访问服务器的时候(也就是:https://test.morning.top/),会使用什么资源
	#我这里配置的是使用html文件下,price的资源(也就是我们前端的资源)
    location / {
        root   html/price;
        index  index.html;
    }

	#这里配置后端请求的路径(也就是https://test.morning.top/api/),前端发送请求都会带有一个标识,也就是我们这里的api
	#nginx会识别并且拦截他,然后代理到我们tomcat服务(也就是后端)的端口上(tomcat默认端口为8000)
    location /api/ {
    	#前四个直接复制粘贴,套路
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #这里是指定代理到哪里去,我们写上路径+我们的项目名字即可
        #proxy_pass  https://服务器ip地址:tomcat的端口号/项目地址/;
        proxy_pass  https://test.morning.top:8000/priceManage/;
    }

	#下面是默认配置,不管
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

然后,你需要再加多一个server块,加在上面的server下面,用于把请求去http的请求重定向至https中去:

server {
        listen 80;
        server_name test.morning.top;	####你的SSL绑定的域名
        rewrite ^(.*)$ https://$host$1;
    }

然后重启nginx即可完成配置!

※坑:如果你是国内的服务器,你必须先域名备案,否则无法重定向至https,会显示服务器拒绝连接

==让我们来捋一遍流程:==

==首先你输入域名,默认会访问的是==http://你的域名/==,(端口80和443都是隐藏的,实际上它是==http://你的域名/:80==,或者是==https://你的域名:443/==),然后nginx会把你重定向至443,也就是我们的==https://你的域名/==,这样,当你访问域名的时候,你就会被重定向至==https://你的域名/

==后端请求中,你的请求格式是这样的:==https://你的域名/api/A==,记住,此时你是在当前端口(80/443)发送的请求,他会默认寻找==https://你的域名/api/==下的接口A,但是我们后端实际上在==https://你的域名:8000/你的项目名字==下,因此,你需要把host后带着api的请求统统代理到8000的端口上,这样你才能访问到后端的资源。==

②我不要SSL,直接IP或者域名访问!

那你就这样写,和SSL配置大差不差(如果你配置了ssl,重启nginx发现报错,大致意思是说不支持ssl,那么就是你的nginx没有安装SSL模块,上面自己安装去):

server {
    listen 80;
    server_name  test.morning.top(域名/IP地址/localhost);

	#这里的意思是,当你访问服务器的时候(也就是:http://test.morning.top/),会使用什么资源
	#我这里配置的是使用html文件下,price的资源(也就是我们前端的资源)
    location / {
        root   html/price;
        index  index.html;
    }

	#这里配置后端请求的路径(也就是https://test.morning.top/api/),前端发送请求都会带有一个标识,也就是我们这里的api
	#nginx会识别并且拦截他,然后代理到我们tomcat服务(也就是后端)的端口上(tomcat默认端口为8000)
    location /api/ {
    	#前四个直接复制粘贴,套路
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        #这里是指定代理到哪里去,我们写上路径+我们的项目名字即可
        #proxy_pass  http://服务器ip地址:tomcat的端口号/项目地址/;
        proxy_pass  http://test.morning.top:8000/priceManage/;
    }

	#下面是默认配置,不管
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

至此,nginx的部署已经完毕!

配置tomcat(改端口用)

==如果你不需要改端口,默认使用8000端口,那么你没必要看下面的东西,你的服务器理论上已经部署完毕==

※老规矩,我们把tomcat有bin文件夹称呼为你的tomcat目录(其实就是tomcat目录),如果你按上面做的话,根目录是:

/usr/local/tomcat/apache-tomcat-10.1.8/

进入根目录,找到conf文件夹,点进去,找到server.xml文件,编辑:

在68行上下,你可以看到一段这样的代码,你只需要改动8000,即可改动tomcat的端口号,改动后需要重启tomcat服务:

xml
<Connector port="8000" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               maxParameterCount="1000"
               />

后记

记录写于23年9月13日,发布到Blog的时候已经是25.12.22了,途中迭代了很多东西,比如springboot都全面拥抱3代了(文章写的的时候还是用的sp2.jpg),IDEA啥的也更加智能了,待有时间可以再缝缝补补一些吧~