## Day19 项目部署(Linux)

---

<figure><img src="/AiJavaWeb/imgs/jwai19-01.png"><figcaption>图1 项目开发的全过程</figcaption></figure>

##### 目录

* Linux概述
* Linux常用命令
* Linux软件安装
* 项目部署

#### Linux

Linux是一套免费使用和自由传播的<mark>操作系统</mark>

| **分类**         | **系统**           | **特点**                                                     |
| ---------------- | ------------------ | ------------------------------------------------------------ |
| 桌面操作系统     | Windows            | 用户数量最多                                                 |
|                  | Mac OS             | 操作体验好，办公人士首选                                     |
|                  | Linux              | 用户数量少                                                   |
| 移动设备操作系统 | Android            | 基于Linux、开源，主要用智能手机、平板、智能电视              |
|                  | IOS                | 苹果公司开发、不开源，用于苹果公司的产品                     |
|                  | HarmonyOS          | 华为公司开发、开源，目前用于华为公司的产品                   |
| 服务器操作系统   | Unix               | 安全、稳定、付费                                             |
|                  | <mark>Linux</mark> | <mark>安全、稳定、免费、占有率高<br>软件环境(mysql、redis、MQ)、项目部署</mark> |
|                  | Windows Server     | 付费、占有率低                                               |

<figure><img src="/AiJavaWeb/imgs/jwai19-02.png"><figcaption>图2 操作系统分类及Linux操作系统</figcaption></figure>



### 1. Linux概述

#### ① 系统安装

#### Linux系统版本

Linux系统分为内核版和发行版：

* 内核版
  * 由Linux核心团队开发、维护
  * 免费、开源
  * 负责控制硬件
* 发行版
  * 基于Linux内核版进行扩展
  * 由各个Linux厂商开发、维护
  * 有收费版本和免费版本

Linux系统常见发行版：

* Ubuntu：以桌面应用为主，免费

* RedHat：面向企业用户，收费

* <mark>CentOS：RedHat的社区版，免费</mark>

* Fedora：功能完备、快速更新，免费

  * **Fedora 是 Red Hat Linux 的 “社区继任者”，而 RHEL 是 Red Hat 面向企业的商业旗舰产品**，两者从同一根源分化，形成 “社区 - 商业” 的互补格局。
  * **2020 年前的旧 CentOS（如 CentOS 7/8）**：是 RHEL 的 “二进制克隆版”—— 完全复刻 RHEL 的源代码和二进制包，去掉 Red Hat 商标，免费提供给用户使用（相当于 “免费版 RHEL”），但无官方商业支持。
  * **2021 年后的 CentOS Stream**：改为 RHEL 的 “上游开发分支”—— 不再克隆 RHEL，而是**从 Fedora 中筛选已初步成熟的技术**，进行更贴近企业场景的兼容性测试、漏洞修复，为 RHEL 的下一个 “小版本更新”（如 RHEL 9.2、9.3）提供 “预验证”。
  * Fedora、CentOS Stream、RHEL 并非竞争关系，而是 Red Hat 为覆盖不同需求场景设计的 “生态组合”：
    - 想**尝鲜最新开源技术**（如体验最新内核、桌面特性）→ 选 Fedora；
    - 想**开发 / 测试将部署到 RHEL 的应用**（提前适配未来版本特性）→ 选 CentOS Stream；
    - 需**稳定可靠的生产环境 + 官方保障**（如企业核心业务）→ 选 RHEL；

* openSUSE：对个人完全免费、图形界面华丽

* 红旗Linux：北京中科红旗软件技术有限公司开发

  

<figure><img src="/AiJavaWeb/imgs/jwai19-03.png"><figcaption>图3 Linux常见发行版Logo</figcaption></figure>

#### 安装方式

* Linux系统的安装方式
  * 物理机安装：直接将操作系统安装到服务器硬件上
  * 虚拟机安装：通过虚拟机软件安装
* 虚拟机（Virtual Machine）指通过软件模拟的具有完整硬件系统功能、运行在完全隔离环境中的完整计算机系统。
  * <mark>VMWare WorkStation</mark>
  * VirtualBox
  * VMLite WorkStation

<figure><img src="/AiJavaWeb/imgs/jwai19-04.png"><figcaption>图4 Linux系统的安装方式</figcaption></figure>

#### 虚拟机安装

* 直接双击运行资料中的VMWare安装程序(如VMware-workstation-full-16.1.0-17198959.exe)，根据提示完成安装即可。
* 安装完毕之后，需要配置网络，才可以在windows系统上连接虚拟机上的linux系统。

<figure><img src="/AiJavaWeb/imgs/jwai19-05.png"><figcaption>图5 配置虚拟机网络VMnet8</figcaption></figure>

<figure><img src="/AiJavaWeb/imgs/jwai19-06.png"><figcaption>图6 挂载虚拟机镜像</figcaption></figure>



#### <mark>Linux的安装方式</mark>

1. 物理机安装：直接部署到电脑、服务器等物理硬件，性能无损耗，适合生产环境或个人桌面。
2. 虚拟机安装：通过 VirtualBox、VMware 等工具在现有系统中模拟硬件安装，隔离性好，适合学习测试。
3. <mark>云服务器安装</mark>：通过阿里云、AWS、腾讯、华为、火山 等厂商获取预装 Linux 的云端实例，开箱即用，适合远程部署和弹性扩展。
4. 网络安装（PXE）：通过网络批量部署，适合企业批量安装服务器。
5. 容器化部署：用 Docker 等工具运行 Linux 基础镜像，轻量隔离，适合应用环境快速搭建。
6. 双系统安装：同一物理机同时安装 Linux 与其他系统（如 Windows），通过 GRUB 切换，适合多系统需求。解压 CentOS7 的镜像压缩包到磁盘目录，然后双击 .vmx 文件完成挂载。然后启动服务器 （root/1234）



#### 小结

* 虚拟网络编辑器 -> NAT模式 -> 子网IP：设置为192.168.100.0

* 查看IP地址的命令：ip addr

* 如果没有IP地址：执行 start-ens33.sh 脚本，手动激活ens33网卡

* 启动/停止/重启 Linux系统：

<figure><img src="/AiJavaWeb/imgs/jwai19-07.png"><figcaption>图7 虚拟机安装Linux小结</figcaption></figure>



#### <mark>云服务器安装</mark>

<figure><img src="/AiJavaWeb/imgs/jwai19-08.png"><figcaption>图8 云服务器安装1</figcaption></figure>

<figure><img src="/AiJavaWeb/imgs/jwai19-09.png"><figcaption>图9 云服务器安装2</figcaption></figure>

```bash
# 查看操作系统的版本号
cat /etc/redhat-release
------------------------
CentOS Stream release 9

# 修改主机名
vim /etc/hostname

# 修改中文语言
vim /etc/locale.conf

LANG=zh_CN.UTF-8

# 下载中文支持
dnf install glibc-langpack-zh.x86_64

# 重启
reboot
```



#### ② 远程连接

##### 问题提出

* 公司在北京，服务器可能在上海/天津/香港/海外，该如何进行软件安装/项目部署？

<figure><img src="/AiJavaWeb/imgs/jwai19-10.png"><figcaption>图10 问题提出--远程连接</figcaption></figure>

##### 远程连接工具

常用的SSH(Secure Shell，安全外壳协议)远程连接工具：Putty、SecureCRT、Xshell、<mark>FinalShell</mark>等。

<figure><img src="/AiJavaWeb/imgs/jwai19-11.png"><figcaption>图11 Linux远程连接工具</figcaption></figure>

##### finalShell安装

* 直接双击运行FinalShell的安装程序完成安装即可

<figure><img src="/AiJavaWeb/imgs/jwai19-12.png"><figcaption>图12 finalShell连接Linux</figcaption></figure>



#### ③ 目录介绍

##### Linux目录 VS Windows目录

Linux系统中的目录特点：

* / 是所有目录的顶点
* 目录结构像一颗倒挂的树

<figure><img src="/AiJavaWeb/imgs/jwai19-13.png"><figcaption>图13 Linux目录 VS Windows目录</figcaption></figure>

##### Linux目录结构

* bin 存放二进制可执行文件
* boot 存放系统引导时使用的各种文件
* dev 存放设备文件
* etc 存放系统配置文件
* home 存放系统用户的文件
* lib 存放程序运行所需的共享库和内核模块
* opt 额外安装的可选应用程序包所放置的位置
* root 超级用户目录
* sbin 存放二进制可执行文件，只有root用户才能访问
* tmp 存放临时文件
* usr 存放系统应用程序
* var 存放运行时需要改变数据的文件，例如日志文件



<figure><img src="/AiJavaWeb/imgs/jwai19-14.png"><figcaption>图14 Linux目录结构</figcaption></figure>

#### 小结

Linux系统中的路径 /itheima 与 itheima 有区别吗？

* 有
* /itheima 是绝对路径，是指根目录 / 下的itheima目录
* itheima 是相对路径，是指当前目录下的itheima目录

<figure><img src="/AiJavaWeb/imgs/jwai19-15.png"><figcaption>图15 小结</figcaption></figure>



### 2. Linux常用命令

* 目录操作命令
* 文件操作命令
* 拷贝移动命令
* 打包压缩命令
* 文本编辑命令
* 查找命令

#### Linux命令初识

* Linux命令格式：```command [-options] [parameter]```
* 说明：
  * command：命令名
  * [-options]：选项，可用来对命令进行控制，也可以省略 （可选）
  * [parameter]：参数，可以是零个、一个或多个（可选）
* 使用技巧：
  * Tab键自动补全
  * 连续两次Tab键，给出操作提示
  * 使用上下箭头快速调出曾经使用过的命令
  * 使用clear命令或Ctrl+l快捷键实现清屏



#### ① 目录操作命令 (ls,cd,mkdir,rm)



| 命令 | 作用 | 语法 | 说明 |
| ---- | ---- | ---- | ---- |
| ls    | 显示指定目录下的内容                 | ```ls [-al] [dir]```     | -a: 显示所有文件及目录 (. 开头的隐藏文件也会列出)<br/>-l: 除文件名称外，同时将文件类型(d表示目录，-表示文件)、权限、拥有者、文件大小等信息详细列出<br>dir要显示的目录，缺省指当前目录 |
| cd    | 用于切换当前工作目录，即进入指定目录 | ```cd [dirName]```       | .  表示目前所在的目录<br/>.. 表示目前目录位置的上级目录<br/>~  表示用户的home目录 |
| mkdir | 创建目录 | ```mkdir [-p] dirName``` | -p：确保目录名称存在，不存在的就创建一个。<br/>..通过此选项，可以实现多层目录同时创建 |
| rm    | 删除文件或者目录                     | ```rm [-rf] name```      | -r：将目录及目录中所有文件（目录）逐一删除，即递归删除<br/>-f：无需确认，直接删除 |

d表示目录，-表示文件，rwx表示<mark>读写执行</mark>

由于我们使用ls命令时经常需要加入-l选项，所以Linux为ls -l命令提供了一种简写方式，即ll

```bash
ls
pwd
ls -l
ll
ls -a
ls -al
ls -al /usr
ls --help

cd ..			# 切换到当前目录的上级目录
cd ~			# 切换到用户的home目录
cd /usr/local	# 切换到/usr/local目录
cd -		    # 切换到上一次所在目录

mkdir itheima 			# 在当前目录下，建立一个名为itheima的子目录
mkdir itcast/test 	    # 在itcast目录中创建test子目录，若itcast目录不存在，则建立一个
mkdir -p itcast/test 	# 在itcast目录中创建test子目录，若itcast目录不存在，则建立一个

rm itcast    # 删除名为itcast的目录和目录中所有文件，删除前需确认
rm -r itcast    # 删除名为itcast的目录和目录中所有文件，删除前需确认
rm -rf itcast   # 无需确认，直接删除名为itcast的目录和目录中所有文件
rm -f hello.txt # 无需确认，直接删除hello.txt文件
```



<figure><img src="/AiJavaWeb/imgs/jwai19-16.png"><figcaption>图16 <mark>ls命令验证</mark></figcaption></figure>

<figure><img src="/AiJavaWeb/imgs/jwai19-17.png"><figcaption>图17 <mark>cd,mkdir命令验证</mark></figcaption></figure>

<figure><img src="/AiJavaWeb/imgs/jwai19-18.png"><figcaption>图18 <mark>rm命令验证</mark></figcaption></figure>



#### 小结

* 查看目录命令?
* 切换目录命令?
* 创建目录命令?
* 删除目录命令?

<figure><img src="/AiJavaWeb/imgs/jwai19-19.png"><figcaption>图19 目录命令小结</figcaption></figure>




#### ② 文件操作命令 (cat,more,head,tail)

| 命令 | 作用 | 语法                      | 说明                                                         |
| ---- | ---- | ------------------------- | ------------------------------------------------------------ |
| cat  | 查看 | ```cat [-n] fileName```   | -n ：由1开始对所有输出的行数编号                             |
| more | 查看 | ```more fileName```       | 回车键:向下滚动一行; 空格键:向下滚动一屏<br>b:返回上一屏; q或Ctrl+C:退出more |
| head | 开头 | ```head [-n] fileName```  | -n ：输出文件开头的n行内容                                   |
| tail | 末尾 | ```tail [-nf] fileName``` | -n ：输出文件末尾的n行内容<br>-f ：动态读取文件末尾内容并显示，通常用于日志文件的内容输出 |

##### Linux.txt

```txt
常用 Linux 命令的英文全称及简短说明(杜老师)
-------------------------------------------------------------------------------------
ls (list) 列出当前 / 指定目录下的文件、目录名称
cd (change directory) 切换当前工作目录（如cd /home进入 home 目录）
mkdir (make directory) 创建新目录（如mkdir test建 test 目录）
rm (remove) 删除文件或目录（加-r可删目录，-f强制删除）
pwd (print working directory) 显示当前所在的工作目录路径
cat (concatenate) 查看文件内容（也可合并文件，如cat a.txt b.txt）
more (more) 分页查看长文件内容（按空格翻页，q 退出）
head (head) 查看文件开头内容（默认前 10 行，如head -5看前 5 行）
tail (tail) 查看文件结尾内容（默认后 10 行，-f实时跟踪更新）
cp (copy) 复制文件 / 目录（如cp a.txt /tmp复制到 tmp）
mv (move) 移动文件 / 目录，或重命名（如mv a.txt b.txt重命名）
tar (tape archive) 打包 / 压缩 / 解压文件（如tar -zcvf压缩，tar -zxvf解压）
vim (vi improved) 增强版文本编辑器（基于 vi，支持语法高亮、多窗口等）
find (find) 按路径、名称等条件查找文件 / 目录（如find / -name "test.txt"）
grep (global regular expression print) 按正则表达式匹配并查找文件中的内容（如grep "error" log.txt）

```



```bash
# 上传Linux.txt到/root下进行如下操作
more /etc/profile	#分页显示 回车 空格 b q

cat Linux.txt	#查看
cat -n Linux.txt	#查看

head Linux.txt		#默认显示开头的10行内容
head -3 Linux.txt	#显示开头的3行内容

tail Linux.txt		#默认显示末尾10行的内容
tail -3 Linux.txt 	#显示末尾3行的内容

tail -f Linux.txt 	#动态读取文件末尾内容并显示(实时刷新)
echo AAAAAAAAAAAA >> Linux.txt 	#另一窗口执行
echo BBBBBBBBBBBB >> Linux.txt 	#另一窗口执行(实时刷新)
```



<figure><img src="/AiJavaWeb/imgs/jwai19-20.png"><figcaption>图20 <mark>查看文本文件验证</mark></figcaption></figure>

#### 小结

cat、more、head、tail 都可以查看文件的内容，之间有什么区别？

* cat：查看文件内容，一次性查看所有内容。 适用于查看小文件
* more：分页查看文件内容。适用于查看大文件
* head：查看文件开头部分的内容。
* tail：查看文件结尾部分的内容。

<figure><img src="/AiJavaWeb/imgs/jwai19-21.png"><figcaption>图21 查看文本文件小结</figcaption></figure>



#### ③ 拷贝移动命令 (cp,mv)

| 命令 | 作用               | 语法                      | 说明                                                         |
| ---- | ------------------ | ------------------------- | ------------------------------------------------------------ |
| cp   | 用于复制文件或目录 | ```cp [-r] source dest``` | -r：如果复制的是目录需要使用此选项，此时将复制该目录下所有的子目录和文件 |
| mv   | 重命名或移动       | ```mv source dest```      | 为文件或目录重命名、或将文件或目录移动到其它位置 (第二个参数是已存在的目录执行移动) |



```bash
cp Linux.txt ./1.log
mkdir itcast
mkdir itheima
ll
cp Linux.txt itcast
ll itcast
cp itcast/ itheima/
cp -r itcast/ itheima/
ll itheima
ll
cp 1.log 2.log
mv 1.log hi.txt					#将1.log改名为hi.txt
ll

mv hi.txt itheima/				#将文件hi.txt移动到itheima目录中
mv 2.log itheima/hello.txt		#将2.log移动到itheima目录中，并改名为hello.txt
mv itcast itcast2				#如果itcast2目录不存在，将itcast目录改名为itcast2
ll
mv itcast2 itheima				#如果itheima目录存在，将itcast目录移动到itheima目录中
```



<figure><img src="/AiJavaWeb/imgs/jwai19-22.png"><figcaption>图22 <mark>测试验证</mark></figcaption></figure>

#### 小结

拷贝与移动的命令是什么?

* cp 、mv

mv命令什么时候执行移动，什么时候执行重命名？

* mv source dest：如果第二个参数dest是已存在的目录，就执行移动；否则就是重命名。



<figure><img src="/AiJavaWeb/imgs/jwai19-23.png"><figcaption>图23 拷贝与移动命令小结</figcaption></figure>



#### ④ 打包压缩命令 tar

* 作用：对文件进行打包、解包、压缩、解压
* 语法：```tar [-zcxvf] 打包后的文件名 [要打包的目录名或文件名]```
* 说明：
  * 包文件后缀为.tar表示只是完成了打包，并没有压缩
  * 包文件后缀为.tar.gz表示打包的同时还进行了压缩
* 选项：
  * -z：z代表的是gzip，通过gzip命令处理文件，gzip可以对文件压缩或者解压
  * -c：c代表的是create，即创建新的包文件 <mark>c和x是互斥的</mark>
  * -x：x代表的是extract，实现从包文件中还原文件
  * -v：v代表的是verbose，显示命令的执行过程
  * -f：f代表的是file，用于指定包文件的名称 <mark>f选项放在所有选项的最后</mark>

```bash
# 打包:
tar -cf itheima.tar itheima	 	 #将当前目录下所有文件打包，打包后的文件名为itheima.tar，不显示过程
tar -cvf itheima.tar itheima	 #将当前目录下所有文件打包，打包后的文件名为itheima.tar
tar -zcvf itheima.tar.gz itheima #将当前目录下所有文件打包并压缩，打包后的文件名为itheima.tar.gz

# 解包:
tar -xvf itheima.tar			#将itheima.tar文件进行解包，并将解包后的文件放在当前目录
tar -zxvf itheima.tar.gz     	#将itheima.tar.gz文件进行解压，并将解压后的文件放在当前目录
tar -zxvf itheima.tar.gz -C /usr/local   #将itheima.tar.gz文件进行解压，解压到指定的/usr/local目录中

```



<figure><img src="/AiJavaWeb/imgs/jwai19-24.png"><figcaption>图24 <mark>打包解包测试验证</mark></figcaption></figure>

#### 小结

如何将itheima目录下的所有内容，打成一个tar.gz的压缩包？

* tar -zcvf itheima.tar.gz itheima

如果将tomcat.tar.gz压缩包中的内容解压出来?

* tar -zxvf tomcat.tar.gz
* tar -zxvf tomcat.tar.gz -C /usr/local

<figure><img src="/AiJavaWeb/imgs/jwai19-25.png"><figcaption>图25 打包和解包小结</figcaption></figure>



#### ⑤ 文本编辑

* 作用：vi命令是Linux系统提供的一个文本编辑工具，可以对文件内容进行编辑，类似于Windows中的记事本
* 语法：vi fileName
* 说明：
  * 1、vim是从vi发展来的一个功能更加强大的文本编辑工具，在编辑文件时可以对文本内容进行着色(更常用)。
  * 2、要使用vim命令，需要我们自己完成安装。可以使用下面的命令来完成安装：```yum install vim```



<figure><img src="/AiJavaWeb/imgs/jwai19-26.png"><figcaption>图26 vi和vim显示效果</figcaption></figure>

#### vim

* 作用：对文件内容进行编辑，vim其实就是一个文本编辑器
* 语法：vim fileName

<figure><img src="/AiJavaWeb/imgs/jwai19-27.png"><figcaption>图27 vim模式切换</figcaption></figure>



<figure><img src="/AiJavaWeb/imgs/jwai19-28.png"><figcaption>图28 <mark>vim验证</mark></figcaption></figure>

#### 小结

<figure><img src="/AiJavaWeb/imgs/jwai19-29.png"><figcaption>图29 vim模式切换小结</figcaption></figure>



#### ⑥ 查找命令 (find,grep)

| 命令 | 作用                           | 语法                              | 说明                                                         |
| ---- | ------------------------------ | --------------------------------- | ------------------------------------------------------------ |
| find | 用于复制文件或目录             | find dirName -option fileName     | -r：如果复制的是目录需要使用此选项，此时将复制该目录下所有的子目录和文件 |
| grep | 从指定文件中查找指定的文本内容 | ```grep [-inAB] word fileNamep``` | -i: 检索的关键字忽略(ignore)大小写<br/>-n: 显示关键字所在的这一行的行号<br/>-A: 输出关键字所在行及之后(After)的几行记录 (如:-A5 表示输出关键字所在行之后的5行记录)<br/>-B: 输出关键字所在行及之前(Before)的几行记录 (如:-B5 表示输出关键字所在行之前的5行记录) |


```bash
cd ~
ll
find . –name "*.txt"		#在当前目录及其子目录下查找.txt结尾文件
find / -name "*.cnf"		#在/目录及其子目录下查找.cnf结尾的文件

grep Hello Hello.java	    #查找Hello.java文件中出现的Hello字符串的位置
grep -n Hello Hello.java	#查找Hello.java文件中出现的Hello字符串的位置，带行号
grep -i hello *.java		#查找当前目录中所有.java结尾的文件中包含hello字符串的位置
grep -n -A2 -B2 more Linux.txt
```



<figure><img src="/AiJavaWeb/imgs/jwai19-30.png"><figcaption>图30 <mark>find和grep验证</mark></figcaption></figure>

#### 小结

find 与 grep 都是查找命令，两者之间的区别是什么？

* find 命令是根据文件的属性(如: 文件名)来查找文件的
* grep 命令是根据指定的关键字，来查找文件内容的

<figure><img src="/AiJavaWeb/imgs/jwai19-31.png"><figcaption>图31 find、grep小结</figcaption></figure>

### 3. Linux软件安装

#### 安装方式介绍

* ①二进制发布包安装：软件已经针对具体平台编译打包发布，只要解压，修改配置即可
* ②rpm安装：软件已经按照redhat的包管理规范进行打包，使用rpm命令进行安装，不能自行解决库依赖问题
* ③yum安装：一种在线软件安装方式，本质上还是rpm安装，自动下载安装包并安装，安装过程中自动解决库依赖问题
* ④源码编译安装：软件以源码工程的形式发布，需要自己编译打包



* httpd服务器

* 安装JDK
* 安装MySQL
* 安装Nginx



<figure><img src="/AiJavaWeb/imgs/jwai19-23.png"><figcaption>图23 产品</figcaption></figure>

#### ① 安装httpd Web服务器

```bash
yum install httpd  
# Yum（全称为 Yellow dog Updater, Modified）是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。

# system ctl control 
systemctl enable httpd
# 允许httpd 开机自启动

systemctl start httpd
# 开始httpd

systemctl stop httpd
# 停止httpd

systemctl status httpd
# 状态

systemctl restart httpd
# 重启

# cd hange directory 切换当前工作目录
# 编辑首页
cd /var/www/html
vim index.html
----------------
<meta charset="utf8">
<h1>杜老师的网站</h1>
<hr>
<img src="杜老师.jpg" alt="杜老师" title="杜老师" >

# 平台安全组开放80端口
# 浏览器中输入 ip 浏览首页
```

<figure><img src="/AiJavaWeb/imgs/jwai19-32.png"><figcaption>图32 平台安全组开放80端口</figcaption></figure>

<figure><img src="/AiJavaWeb/imgs/jwai19-33.png"><figcaption>图33 <mark>web httpd安装验证 </mark></figcaption></figure>



#### ② 安装JDK

```shell
# 1、使用FinalShell自带的上传工具将jdk的二进制发布包上传到Linux
# 2、解压安装包，命令为 
tar -zxvf jdk-17.0.10_linux-x64_bin.tar.gz -C /usr/local
# 3、配置环境变量，使用vim命令修改/etc/profile文件，在文件末尾加入如下配置
vim /etc/profile
   export JAVA_HOME=/usr/local/jdk-17.0.10   
   export PATH=$JAVA_HOME/bin:$PATH
# 4、使更改的配置立即生效
source /etc/profile
# 5、检查安装是否成功
java -version
```



<figure><img src="/AiJavaWeb/imgs/jwai19-34.png"><figcaption>图34 <mark>JDK安装验证</mark></figcaption></figure>

#### ③ 安装MySQL

```bash
# 卸载旧版本 MySQL（可选） 如果系统中已安装旧版本的 MySQL，建议先卸载：
rpm -qa | grep mysql  # 查看已安装的 MySQL 包
rpm -e PackageName    # 卸载查询到的包
rm -f /etc/my.cnf     # 删除配置文件（如果存在）

# 添加 MySQL Yum 源
cd ~
wget https://dev.mysql.com/get/mysql80-community-release-el9-3.noarch.rpm
rpm -ivh mysql80-community-release-el9-3.noarch.rpm

# 清理 YUM 缓存并更新
yum clean all
yum makecache

# 公钥安装
rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2023

# 安装 MySQL 服务器
yum install mysql-community-server
mysql --version
----
mysql  Ver 8.0.41

# 启停 MySQL 服务
systemctl status mysqld
systemctl start mysqld
systemctl enable --now mysqld
systemctl stop mysqld

# 获取初始密码
grep "password" /var/log/mysqld.log

mysql -uroot -p
# 修改密码：
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';  # 新密码需符合复杂度要求
alter user root@% identified with mysql_native_password by '.....';

# 如果需远程访问，开放 3306 端口：
# 配置远程连接（可选）
USE mysql;
UPDATE user SET host='%' WHERE user='root';  # 允许所有 IP 访问
FLUSH PRIVILEGES;
quit
```

<figure><img src="/AiJavaWeb/imgs/jwai19-35.png"><figcaption>图35 <mark>MySQL安装验证</mark></figcaption></figure>

<figure><img src="/AiJavaWeb/imgs/jwai19-36.png"><figcaption>图36 平台开放3306端口</figcaption></figure>



<figure><img src="/AiJavaWeb/imgs/jwai19-37.png"><figcaption>图37 <mark>MySQL安装验证2</mark></figcaption></figure>

##### 防火墙操作

```shell
# 查看防火墙状态
systemctl status firewalld
firewall-cmd --state

# 关闭防火墙
systemctl stop firewalld

# 开启防火墙
systemctl start firewalld

# 永久关闭防火墙
systemctl disable firewalld

# 开放指定端口3306
firewall-cmd --zone=public --add-port=3306/tcp --permanent

# 关闭指定端口3306
firewall-cmd --zone=public --remove-port=3306/tcp --permanent

# 重载防火墙、立即生效
firewall-cmd --reload

# 查看开放的端口(
firewall-cmd --zone=public --list-ports
```

注意：

* 1、systemctl是管理Linux中服务的命令，可以对服务进行启动、停止、重启、查看状态等操作
* 2、firewall-cmd是Linux中专门用于控制防火墙的命令
* 3、为了保证系统安全，生产服务器的防火墙不建议关闭
* 注意：我们的系统仅用于学习演示，可停止服务器级别的防火墙。见图38

<figure><img src="/AiJavaWeb/imgs/jwai19-38.png"><figcaption>图38 <mark>停止防火墙运行验证</mark></figcaption></figure>

#### ④ 安装Nginx 

```bash
# 安装nginx运行时需要的依赖：
yum install -y pcre pcre-devel zlib zlib-devel openssl openssl-devel

# 上传nginx的源码包，解压源码包到当前目录：
tar -zxvf nginx-1.20.2.tar.gz

# 进入到解压目录(
cd nginx-1.20.2

# 执行指令: 
./configure --prefix=/usr/local/nginx

# 执行编译nginx的指令：
make

# 执行安装nginx的指令，安装到上述指定的 /usr/local/nginx 目录：
make install

# 进入到nginx安装目录
cd /usr/local/nginx

# 启动nginx服务：
sbin/nginx
```



<figure><img src="/AiJavaWeb/imgs/jwai19-39.png"><figcaption>图39 修改nginx端口号为90</figcaption></figure>



<figure><img src="/AiJavaWeb/imgs/jwai19-40.png"><figcaption>图40 云平台网络系统开放90端口</figcaption></figure>



<figure><img src="/AiJavaWeb/imgs/jwai19-41.png"><figcaption>图41 <mark>Nginx安装完成验证</mark></figcaption></figure>



### 4. 项目部署

#### 4.1 前端项目部署

* ① 将 "\前端\页面资源" 文件夹dist下的打包好的静态资源(如首页index.html，网站图标文件favicon.ico，静态资源[js,css,图片等]目录assets)，上传到nginx的html目录中 。
* ② 配置nginx的配置文件，在 conf/nginx.conf 中配置反向代理服务器及路径重写规则。

```
server {
        listen       90;
        server_name  localhost;
        client_max_body_size 10m;
        location / {
            root   html;
            index  index.html index.htm;
            try_files $uri $uri/ /index.html;
        }
        location ^~ /api/ {
	       rewrite ^/api/(.*)$ /$1 break;
	       proxy_pass http://localhost:8090;
        }
}
```

* ③ 在nginx的安装目录中，执行 sbin 目录下的nginx命令启动nginx服务：

```bash
# 启动
sbin/nginx  
# 修改conf后重启
sbin/nginx -s reload
# 退出
sbin/nginx -s quit
```



<figure><img src="/AiJavaWeb/imgs/jwai19-42.png"><figcaption>图42 <mark>前端项目部署验证</mark></figcaption></figure>

##### 小结

<figure><img src="/AiJavaWeb/imgs/jwai19-43.png"><figcaption>图43 小结</figcaption></figure>



#### 4.2 后端项目部署

* 执行maven的父工程中的package生命周期，对项目进行打包 【打包之前，先连接上Linux服务器数据库等下列操作，先测试通过】。
  * 修改数据库访问的参数application.yml：spring.datasource
  * 修改Linux中内嵌Tomcat的端口号application.yml：spring.port: 8090
  * 修改logback.xml日志文件路径

```xml
<!-- FileNamePattern>D:/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern -->
<FileNamePattern>/usr/local/tlias-app/tlias-%d{yyyy-MM-dd}-%i.log</FileNamePattern>
```

* 在linux服务器的/usr/local目录下，创建一个目录tlias-app，将jar包上传到服务器的 /usr/local/tlias-app 目录中。
* 修改Liunx上传阿里OSS文档的密钥

```bash
# 查找windows下记录的密钥
echo %OSS_ACCESS_KEY_ID%
echo %OSS_ACCESS_KEY_SECRET%

vim /etc/profile
--------------追加下面两行内容-------------
export OSS_ACCESS_KEY_ID=xxxxxxxxxxxxxxxxxx
export OSS_ACCESS_KEY_SECRET=XXXXXXXXXXXXXXXXXXXXxxxx

source /etc/profile
```

* 然后在命令行执行命令，运行jar包 ：java -jar xxxxxx.jar

<figure><img src="/AiJavaWeb/imgs/jwai19-44.png"><figcaption>图44 <mark>java -jar xxxxxx.jar验证</mark></figcaption></figure>

* 述执行运行jar包之后,会占用前台窗口,窗口关闭服务也就停了。可以使用 nohup 指令，后台运行服务，执行指令：

```bash
 nohup java -jar xxxxxx.jar &> tlias.log &
 # 查看进程：
 ps -ef | grep xxxx
 # 删除进程
 kill -9 进程号
```

#### Linux 中的特殊符号：

* |: 管道符。将前面命令的输出，作为后面命令的输入。如: ps -ef | grep java
* ```>```与 >> : 重定向符号。将前面的文本内容，输出到后面的文件中（> : 覆盖重定向，>> : 追加重定向）。 如: echo 'Hello Linux' > 1.log



<figure><img src="/AiJavaWeb/imgs/jwai19-45.png"><figcaption>图45 <mark>后端部署验证</mark></figcaption></figure>



<figure><img src="/AiJavaWeb/imgs/jwai19-46.png"><figcaption>图46 <mark>上传阿里云OSS验证</mark></figcaption></figure>

#### 小结

<figure><img src="/AiJavaWeb/imgs/jwai19-47.png"><figcaption>图47 小结</figcaption></figure>



①②③④⑤⑥⑦⑧⑨⑩

---

## 除了FinalShell，还有哪些类似的终端工具？

以下是 15 款主流终端工具的详细对比，涵盖跨平台、操作系统专用、开源免费及商业软件等多种类型，按功能特性分类整理，帮助您精准匹配需求：

### 一、跨平台全能工具（Windows/macOS/Linux）

#### 1. **WindTerm**

- **核心功能**：开源免费的 SSH/SFTP/Serial 客户端，支持密码、公钥、键盘交互等多种认证方式，集成文件管理器可直接拖拽文件。
- **优势**：体积仅 30MB，支持 SSH 自动执行脚本，适合嵌入式开发和服务器运维。
- **官网**：[GitHub 开源仓库](https://github.com/kingToolbox/WindTerm)

#### 2. **MobaXterm**

- **核心功能**：集成 X11 服务器、多标签 SSH 客户端、SFTP 浏览器、网络工具（如端口扫描），支持远程运行图形化程序mobaxterm.mobatek.net。
- **优势**：免费版满足基础需求，专业版支持无限隧道和宏录制，适合网络工程师和企业管理员。
- **官网**：[MobaXterm 官网](https://mobaxterm.mobatek.net/)

#### 3. **Termius**

- **核心功能**：跨平台 SSH 客户端，支持云同步会话、智能提醒（如命令历史推荐）、移动端（iOS/Android）无缝连接。
- **优势**：界面简洁美观，适合需要多端协作的开发者。
- **官网**：[Termius 官网](https://termius.com/)

#### 4. **Tabby**

- **核心功能**：高度可定制的终端模拟器，支持 SSH、串口、WSL，内置 PowerShell/Git-Bash 等多种 Shell，可自定义主题和快捷键。
- **优势**：基于 Electron 开发，界面现代，适合追求个性化的用户。
- **官网**：[Tabby 官网](https://tabby.sh/)

### 二、操作系统专用工具

#### **Windows 平台**

1. **Xshell**
   - **核心功能**：商业级 SSH 客户端，支持多会话管理、X11 转发、脚本录制，免费版适合个人用户。
   - **优势**：稳定性强，企业级用户首选。
   - **官网**：[Xshell 官网](https://www.xshell.com/zh/)
2. **Cmder**
   - **核心功能**：Windows 终端增强工具，整合 Git Bash、PowerShell，支持分屏、快捷键（如 Ctrl+T 新建标签）。
   - **优势**：界面友好，适合从 Linux 迁移的用户。
   - **官网**：[Cmder GitHub](https://github.com/cmderdev/cmder)

#### **macOS 平台**

1. **iTerm2**
   - **核心功能**：macOS 下的终端神器，支持分屏、256 色、Shell 集成（如 Oh My Zsh），可通过快捷键快速切换目录。
   - **优势**：高度可定制，适合开发者和极客。
   - **官网**：[iTerm2 官网](https://iterm2.com/)
2. **Royal TSX**
   - **核心功能**：商业级多平台连接管理器，支持 SSH、RDP、VNC，提供会话分组和权限管理。
   - **优势**：企业级安全设计，支持多因素认证。
   - **官网**：[Royal TSX 官网](https://www.royaltsx.com/)

#### **Linux 平台**

1. **Terminator**
   - **核心功能**：Linux 下的分屏终端，支持平铺式布局和自定义快捷键，适合同时管理多服务器。
   - **优势**：轻量高效，资源占用低。
   - **安装**：`sudo apt-get install terminator`
2. **Konsole**
   - **核心功能**：KDE 桌面环境默认终端，支持多标签、滚动条预览、颜色方案定制，可通过插件扩展功能。
   - **优势**：与 KDE 生态无缝集成，适合 Linux 桌面用户。

### 三、开源免费工具

#### 1. **PuTTY**

- **核心功能**：开源轻量级 SSH 客户端，支持 SSH1/SSH2、Telnet、串口连接，无需安装即可运行。
- **优势**：绿色便携，适合临时连接和嵌入式设备。
- **官网**：[PuTTY 官网](https://www.puttygen.com/)

#### 2. **ttyd**

- **核心功能**：轻量级 Web 终端工具，通过浏览器访问服务器 Shell，支持 Bash/Zsh 等，可共享会话。
- **优势**：无需本地安装，适合远程协作和临时调试。
- **使用**：`ttyd bash` 启动后访问 `http://服务器IP:7681`

#### 3. **electerm**

- **核心功能**：开源跨平台 SSH 客户端，支持 SFTP、串口、脚本录制，界面简洁且支持插件扩展。
- **优势**：适合需要轻量级工具的开发者。
- **官网**：[electerm GitHub](https://github.com/electerm/electerm)

### 四、Web 终端解决方案

#### 1. **Shell In A Box**

- **核心功能**：基于 Web 的 SSH 终端，通过 HTTPS 提供安全访问，支持多会话和文件传输。
- **优势**：无需客户端，适合内网服务器管理。
- **安装**：`sudo apt-get install shellinabox`

#### 2. **WebSSH**

- **核心功能**：Python 编写的 Web SSH 客户端，支持密码、公钥、双因素认证，可嵌入其他 Web 应用。
- **优势**：适合集成到企业内部系统。
- **官网**：[WebSSH GitHub](https://github.com/huashengdun/webssh)

### 五、集成开发环境插件

#### 1. **VS Code 远程开发**

- **核心功能**：通过插件实现 SSH 远程连接，支持代码调试、文件编辑、终端集成，直接在 IDE 中管理服务器。
- **优势**：开发与运维一体化，适合全栈工程师。
- **启用**：安装「Remote - SSH」插件后，按 `F1` 选择「Remote-SSH: Connect to Host...」

#### 2. **PyCharm 专业版**

- **核心功能**：商业级 IDE，支持远程 Python 开发，可通过 SSH 连接服务器并直接运行代码。
- **优势**：深度集成调试工具，适合 Python 开发者。

### 六、特殊场景工具

#### 1. **Royal TSX**

- **核心功能**：多平台连接管理器，支持 SSH、RDP、VNC，提供会话分组和权限管理，适合企业级用户。
- **优势**：支持多因素认证和密码加密存储。

#### 2. **Termscp**

- **核心功能**：终端文件传输工具，支持 SCP/SFTP/S3 协议，可通过 UI 直接管理远程文件。
- **优势**：轻量高效，适合快速文件同步。

### 功能对比表

| 工具      | 跨平台 | 开源免费 | 多标签 | 脚本自动化 | 文件传输 | 企业级支持 |
| --------- | ------ | -------- | ------ | ---------- | -------- | ---------- |
| WindTerm  | ✅      | ✅        | ✅      | ✅          | ✅        | ❌          |
| MobaXterm | ✅      | 免费版   | ✅      | ✅          | ✅        | ✅          |
| Termius   | ✅      | 免费版   | ✅      | ❌          | ✅        | ❌          |
| iTerm2    | ❌      | ✅        | ✅      | ✅          | ❌        | ❌          |
| ttyd      | ✅      | ✅        | ❌      | ❌          | ❌        | ❌          |
| VS Code   | ✅      | ✅        | ✅      | ✅          | ✅        | ❌          |
| Royal TSX | ✅      | ❌        | ✅      | ✅          | ✅        | ✅          |

### 选择建议

- **个人开发者 / 学生**：优先选择 **WindTerm**（开源免费）或 **iTerm2**（macOS），兼顾功能与轻量化。
- **企业运维**：推荐 **MobaXterm 专业版** 或 **Royal TSX**，支持多协议和权限管理。
- **远程协作**：使用 **ttyd** 或 **WebSSH**，通过浏览器快速共享终端会话。
- **开发一体化**：**VS Code 远程开发** 或 **PyCharm 专业版** 可无缝集成代码编写与服务器管理。

通过以上工具，您可以根据平台需求、功能侧重和预算灵活选择，替代 FinalShell 的同时满足更高阶的运维与开发需求