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

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


AI 摘要

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

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 服务以使更改生效。