SpringBoot 项目如何部署到云服务器

时之世 发布于 2024-03-20 456 次阅读 预计阅读时间: 13 分钟 最后更新于 2024-12-16 2941 字 无~


AI 摘要

文章摘要:要将 SpringBoot 项目部署到云服务器,首先要确保云服务器上有必要的依赖程序,如 JDK 、 Tomcat 和 MySQL 。在云服务器上安装 JDK 需要通过 yum 命令进行安装,还可以选择添加 AdoptOpenJDK 仓库或使用 Adoptium 安装 Java 17 。安装 Tomcat 可以从官网下载压缩包,然后上传到 Linux 服务器并进行解压缩。最后,启动 Tomcat 并验证其正常工作。

1. 准备好前提环境

1.1 准备好轻量级云服务器

1. 服务器

2. 远程连接

使用 xshell

1.2 安装一些依赖的程序

JDK,Ttomcat 以及 MySQL

1.2.1 安装 JDK

方法一:(只能到 jdk8)

推荐使用 yum 来安装, 这里的 yum 相当于 linux 的应用商店>> 使用如下命令可以把 jdk 相关的软件包都罗列出来:yum list | grep jdk

在罗列出的 jdk 软件包中, 我们选择下面这个软件包进行安装 :

此处的 devel 表示用来开发的软件工具包, x86_64 表示针对 64 位系统. 安装命令如下 :yum install java-1.8.0-openjdk-devel.x86_64

  1. 由于这个安装过程需要联网, 所以需要花一定的时间, 安装到某个步骤时, 会弹出 [y/d/N] 这样的选项, 没有安装过的就可以直接选择 y 继续安即可, 最后看到 Complete! 就说明安装成功.
  2. 此处通过 xshell 操作的都是云服务器, 和本地环境无关, 也就是说如果你换了一台电脑再去登录同一台云服务器, 所看到的效果是完全一样的. jdk 安装成功后, 输入如下命令验证是否安装成功 :

javac

如果直接输入 javac 不报错, 而是提示出一些帮助选项, 就说明你安装成功了!


方法二:添加 AdoptOpenJDK 仓库 (只到 JDK15)
1. 导入 AdoptOpenJDK 的 GPG 密钥:

sudo rpm --import https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public

2. 添加 AdoptOpenJDK 仓库:

sudo tee /etc/yum.repos.d/adoptopenjdk.repo <<EOM
[AdoptOpenJDK]
name=AdoptOpenJDK
baseurl=https://adoptopenjdk.jfrog.io/adoptopenjdk/rpm/centos/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://adoptopenjdk.jfrog.io/adoptopenjdk/api/gpg/key/public
EOM

3. 更新 yum 的包索引:

sudo yum update

4. 下载 jdk

sudo yum install adoptopenjdk-17-hotspot


方法三:使用 Adoptium 安装 Java 17
1. 导入 Adoptium 的 GPG 密钥:

sudo rpm --import https://packages.adoptium.net/artifactory/api/gpg/key/public

2. 添加 Adoptium 仓库:

sudo tee /etc/yum.repos.d/adoptium.repo <<EOM
[Adoptium]
name=Adoptium
baseurl=https://packages.adoptium.net/artifactory/rpm/centos/\$releasever/\$basearch
enabled=1
gpgcheck=1
gpgkey=https://packages.adoptium.net/artifactory/api/gpg/key/public
EOM

3. 安装 JDK:

sudo yum update
sudo yum install temurin-17-jdk

1.2.2 安装 tomcat

1. 使用如下命令查看 tomcat 软件安装包

yum list | grep tomcat

发现此处最新的版本也就只有 7.0, 而我们需要的 tomcat 是 8.5. 又因为 tomcat 是运行在 Java 上的, 而 Java 是跨平台的, 那么 tomcat 同样也是. 所以只需要把之前从官网上下载好的 tomcat 的压缩包拷贝 (拖拽) 到 linux 上, 进行解压缩即可. 如果你买的云服务器无法正常上传 (拖拽), 就那么就可以使用如下命令安装一个软件包 >>yum install lrzsz

此处的 rz 负责从 windows 电脑把文件传到 linux 服务器 此处的 sz 负责从 linux 服务器把文件传到 windows.

2. 解压缩

把 tomcat 的压缩包上传到 linux 服务器上后, 使用如下命令进行解压缩 >>unzip apache-tomcat-8.5.72

解压缩完之后, 就到了一个 apache-tomcat-8.5.72 目录 :

使用 cd 命令进入到该目录下, 发现和 Windows 的 apache-tomcat-8.5.72 目录打开的效果是一样的.

如果 unzip 一敲, 出现找不到命令. 就先输入 yum install unzip

即可.

3. 启动 tomcat

先 cd 到 bin 目录下, 然后找到 startup.sh 文件.

首次使用 (后续就不用了), 在启动 tomcat 之前, 需要先给 .sh 文件都加上可执行权限 (也就是使其变绿), 使用如下命令 :chmod +x *.sh

使用如下命令来启动 tomcat :./startup.sh

或者 sh startup.sh

4. 验证 tomcat 是否在正常工作三种方案 :
  1. 第一种方案使用命令 ps aux | grep tomcat
  2. 第二种方案使用命令 netstat -anp | grep 8080

显示一个 Java 进程绑定了 8080 端口.

  1. 第三种方案在浏览器使用外网 IP 访问 8080 欢迎页面 :

这种方式, 如果没有开放端口, 是访问不了的, 这是云服务器商, 为了保证云服务器安全的, 默认禁止了外部的客户端访问服务器上的各种端口, 就相当于一个 "防火墙". 所以此处为了让外界能够访问到服务器的 8080 端口, 就需要把 8080 端口从防火墙里给放开!!

1.2.3 安装 MySQL

说是说安装 MySQL , 实际上是安装 MariaDB.

以下操作都以 root 用户进行操作


1. 安装

删除`sudo yum remove mariadb-server mariadb mariadb-libs mariadb-devel`

安装 mariadb 服务 yum install -y mariadb-server

安装 mariadb 命令行客户端 yum install -y mariadb

安装 mariadb C libraryyum install -y mariadb-libs

安装 mariadb 开发包 yum install -y mariadb-devel


2. 启动

启动服务 systemctl start mariadb

设置服务开启自启动 systemctl enable mariadb

查看服务状态 systemctl status mariadb

可能的输出为,注意到 Active 状态为 active (running)● mariadb.service - MariaDB database server
  Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; vendor preset: disabled)
  Active: active (running) since 五 2018-11-09 12:49:23 CST; 19min ago
Main PID: 1510 (mysqld_safe)
  CGroup: /system.slice/mariadb.service
          ├─1510 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
          └─2030 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --log-...

11 月 09 12:49:15 peixinchen.host systemd[1]: Starting MariaDB database server...
11 月 09 12:49:17 peixinchen.host mariadb-prepare-db-dir[1062]: Database MariaDB is probably initialized in /var/lib/m...ne.
11 月 09 12:49:19 peixinchen.host mysqld_safe[1510]: 181109 12:49:19 mysqld_safe Logging to '/var/log/mariadb/mariadb.log'.
11 月 09 12:49:19 peixinchen.host mysqld_safe[1510]: 181109 12:49:19 mysqld_safe Starting mysqld daemon with databas...mysql
11 月 09 12:49:23 peixinchen.host systemd[1]: Started MariaDB database server.
Hint: Some lines were ellipsized, use -l to show in full.


3. 测试连接

使用命令行客户端尝试连接 mysql -uroot -p

可能的输出为 Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

查看 mariadb 版本号 MariaDB [(none)]> select version();
+----------------+
| version()     |
+----------------+
| 5.5.60-MariaDB |
+----------------+
1 row in set (0.01 sec)

创建数据库时为了支持中文,统一使用 utf8mb4 字符集 MariaDB [(none)]> create database demo_db charset utf8mb4;

安装好了之后, 就可以测试客户端连接了 >> 只需要输入如下命令即可. (默认是没有密码的)mysql -uroot

后续操作就和我们学过的 MySQL 一模一样了.


4. 连接到本地的 navicat

http://t.csdnimg.cn/8kcEP

2. 把程序依赖的数据给拷贝到云服务器上

搜索引擎项目所依赖的数据有以下三个文件 >>

直接将这三个文件拖入到 xshell 中即可, 我这里已经准备好了数据文件>>

3. 打包部署

如果你的程序涉及到 MySQL 的操作, 那么就还需要在云服务器上建库建表

3.1 打开 IDEA 双击 package

当出现 BUILD SUCCESS 字样, 则说明打包成功!!

此时打开左侧的 target 目录, 找到一个 jar 包, 右击 open in -> explorer :

你可以对该文件进行重命名 (随意), 也可以使用默认的, 此处我为了方便在 linux 上操作, 就进行了重命名.

3.2 将生成的 jar 包上传到 Linux 上

直接拖拽即可.

此时我的 Linux 上就已经有 api_searcher_index.jar 这个 jar 包了.

3.3 在 Linux 环境下运行程序

使用如下命令运行程序 :java -jar api_searcher_index.jar

此时你的程序就可以被大家一起玩转了, 别人只需要使用你的云服务器的外网 IP 就能访问你的静态页面, 进而访问你的程序了. 但是这种运行方式, 一旦你关闭了 xshell 窗口, 也就意味着你刚刚输入的命令随着终端程序的关闭而被杀死, 但是你的电脑肯定会在某个时间关机的, 一旦关机, xshell 终端也就会随之被关闭 那么我们该如何在 linux 环境上运行 SpringBoot 程序呢 ?? 其实这涉及到 Linux 中的一个概念 : 前台进程 VS 后台进程 此处的前台进程和后台进程和 Java 里面的前台进程, 后台进程没啥关系.

  1. 前台进程 : 是在终端中运行的命令,那么该终端就为进程的控制终端, 一旦这个终端关闭, 这个进程也随之消失. (直接输入一个命令产生的进程, 都是前台进程.)
  2. 后台进程 : 也叫守护进程 (Daemon), 是运行在后台的一种特殊进程,不受终端控制,它不需要终端的交互; Linux 的大多数服务器就是使用守护进程实现的. 比如 Web 服务器的 httpd 等. 下面提供一种在 Linux 上运行后台进程的命令 : nohup java -jar api_searcher_index.jar &

此时目录下多了一个 nohup.out 的文件, 使用 cat 文件名打开该文件 :

发现其实这个文件里的东西就是 SpringBoot 程序运行时打印的日志文件. 此时这些文件就不在终端显示了, 但是现在就算你关闭了 xshell 终端, 别人依旧可以访问你的服务器了.

【注意事项】

一. 通常情况下, 如果你的 8080 端口已经被占用了, 那么你再使用 8080 端口来绑定你现在正在部署的程序, 那么就会执行失败.

解决方案 :

  1. 把其他占用 8080 端口的进程给干掉.
  2. 重新开放一个端口供当前程序使用. 这个操作需要在打包前就要做好, 在 application.yml 配置文件中更改端口号, 然后按照 1.2.2 步骤中的开放 8080 端口的操作去开放你指定的端口即可. 对于上述第一种方案 :
  3. 第一步, 使用命令 sudo netstat -tulnp | grep :8080 查询出运行的 SpringBoot 进程.
  4. 第二步, 使用命令 kill -9 pid(进程 id) 将占用该端口的进程杀死即可.

二. 您遇到的错误信息是关于数据库连接的问题。

错误消息 "Host '121.41.176.129' is not allowed to connect to this MariaDB server" 指出尝试连接 MariaDB 数据库服务器的主机 (IP 地址为 121.41.176.129) 没有被允许连接。

这通常是由于数据库服务器的配置中没有允许来自该 IP 地址的连接。以下是可能的解决步骤:

1. 更新数据库权限:

您需要登录到您的 MariaDB 数据库服务器,并更新数据库的权限设置,以允许来自您的应用程序 IP 地址的连接。这可以通过执行如下 SQL 命令来完成:GRANT ALL PRIVILEGES ON your_database.* TO 'your_user'@'121.41.176.129' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;

替换 your_database 、 your_user 和 your_password 为您的数据库名、用户和密码。如果您的应用程序和数据库服务器在同一台机器上,您可能需要将 '121.41.176.129' 替换为 'localhost'。

2. 检查数据库服务器的配置:

确保数据库服务器配置 (如 my.cnf 或 my.ini 文件) 没有限制来自特定 IP 地址的连接。您可能需要检查诸如 bind-address 或类似设置。

3. 检查网络防火墙设置:

确保没有网络防火墙规则阻止来自您应用程序所在服务器的连接。

4. 检查数据库连接配置:

在您的 Spring Boot 应用程序中,检查数据库连接配置,确保使用正确的主机名、端口、用户名和密码。

5. 重启数据库服务:

在更改数据库权限或配置后,您可能需要重启 MariaDB 服务以使更改生效。