【JavaEE进阶】使用云服务器搭建Linux环境
🍃前言
本篇博客主要包含以下三点
- Linux的背景知识
- 如何使用云服务器搭建Linux环境
- 使用终端软件连接到云服务器的Linux环境
Linux 是什么?.
Linux发行版
企业中主要使⽤的发⾏版是RedHat(红帽),CentOS(RedHat的社区免费版本)和ubuntu.
但是RedHat是收费的,CentorOS官⽅在2020年12月份通知:2021年底停⽌维护CentOS8,2024年6⽉30⽇停⽌维护CentOS7,后续将无法获得官⽅升级和补丁.
出于以上考虑(没钱),咱们这里上使用的是Ubuntu
Linux的优势
- 开源(意味着免费,便宜)
- 稳定(Linux可以运⾏很多年,都不会发⽣重⼤问题)
- 安全(Linux只有管理员或者特定⽤⼾才能访问Linux内核)
- ⾃由(不会被强加商业产品和服务)
- 社区⽀持(Linux在全球社区都⾮常活跃和使⽤⼴泛,有很多志愿者在线帮⼤家解决问题)
Linux环境搭建
使⽤云服务器,可以直接在腾讯云,阿⾥云或华为云等服务器⼚商处直接购买⼀个云服务器.[推荐]
使用云服务器
Xshell 下载 - NetSarang Website
登录root用户
ssh root@182.92.242.181
Linux常用指令
tab
pwd 与 ls
pwd
功能:显⽰⽤⼾当前所在的⽬录(出来的是绝对路径)
当前是root用户,代表个人的文件夹,如果想查看这个路径上有什么内容,通过ls查看
ls
语法:ls [选项] [⽬录或⽂件]
功能:对于⽬录,该命令列出该⽬录下的所有⼦⽬录与⽂件。对于⽂件,将列出⽂件名以及其他信息。
常⽤选项:
-a列出⽬录下的所有⽂件,包括以 . 开头的隐含⽂件。
-d将⽬录象⽂件⼀样显⽰,⽽不是显⽰其下的⽂件。如:ls ‒d 指定⽬录
-k 以 k 字节的形式表⽰⽂件的⼤⼩。ls -alk 指定⽂件
-l 列出⽂件的详细信息。
-r 对⽬录反向排序。
-t 以时间排序。
-R 列出所有⼦⽬录下的⽂件。(递归)
小技巧:
- 使用ll可以快速查看当前路劲下的所有文件以及目录(可用上述 ls-l 代替)
cd
Linux系统中,磁盘上的⽂件和⽬录被组成⼀棵目录树,每个节点都是⽬录或⽂件。
语法: cd ⽬录名
功能:改变⼯作⽬录。将当前⼯作目录改变到指定的⽬录下,可以跟绝对路径,也可跟相对路径.
例子:可以看到当前"/"这个路径下,有这些信息
注意:一般不要在"/"目录下操作,这是一个根目录
mkdir与touch
mkdir
语法:mkdir [选项] dirname…
功能:在当前⽬录下创建⼀个名为“java110”的⽬录
可通过cd进入到该目录:
常⽤选项:
- -p,–parents可以是⼀个路径名称。此时若路径中的某些⽬录尚不存在,加上此选项后,系统将⾃动建⽴好那些尚不存在的⽬录,即⼀次可以建⽴多级⽬
touch
上述通过mkdir新建的"java110"目录里面什么都没有,我们可通过touch来新建文件
语法:touch [选项]… ⽂件…
功能: touch命令参数可更改⽂档或⽬录的⽇期时间,包括存取时间和更改时间,或者新建⼀个不存在的⽂件。
在"java110/linux/xshell"新建一个"test.txt"文件:
cat与rm
cat
语法:cat [选项] [⽂件]
功能: 查看⽬标⽂件的内容
查看上述test.txt文件的内容:由于该文件什么都没有,即为空
有其他命令也可查看文件内容:more,less(使用 ":q" 进行退出),head,tail
万能退出命令:crtl + c(多按几次,若不行想想其他办法)
rm
语法:rm [-f-i-r-v] [dirName/dir]
功能:删除⽂件或⽬录
常⽤选项:
- -f 即使⽂件属性为只读(即写保护),亦直接删除
- -i 删除前逐⼀询问确认
- -r 删除⽬录及其下所有⽂件
使用举例如下:
当前xshell目录下有两个txt文件
现要删除test.txt文件
注意事项:
- 千万不要运行rm -rf /,尤其是在公司的⽣产服务器上.
vim
vim 是⼀个知名的⽂本编辑器. 使⽤ vim 可以进⾏⽂本编辑了
vim 就相当于 Windows 的记事本. 只不过功能⽐记事本强⼤⼀些.
打开文件
编辑test.txt文件:
进入插入模式
进入到编辑页面后,发现进行输入是输不进去的,点击小写的i切换到insert,进入到编辑模式即可
保存
在插⼊模式下不能保存⽂件,需要先回到普通模式.按下 Esc 回到普通模式.
在普通模式下输⼊ :w
,再按下回⻋,即可保存⽂件.
退出
在插⼊模式下不能退出,需要先回到普通模式.
退出时,分以下情况:
- ⽂件未修改:输⼊
:q
,再按下回⻋,即可退出 - ⽂件修改并保存:使⽤ :
wq
同时执⾏保存和退出. - ⽂件修改, 但突然不想保存:使⽤
:wq!
进⾏强制退
cp与mv
cp
语法:cp [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:复制⽂件或⽬录
说明:
cp指令⽤于复制⽂件或目录,如同时指定两个以上的⽂件或⽬录,且最后的⽬的地是⼀个已经存在的目录,则它会把前⾯指定的所有⽂件或⽬录复制到此目录中。若同时指定多个⽂件或⽬录,⽽最后的⽬的地并非⼀个已存在的目录,则会出现错误信息
常⽤选项:
-f 或 --force 强行复制⽂件或⽬录,不论目的⽂件或⽬录是否已经存在
-i 或–interactive覆盖⽂件之前先询问⽤户
-r递归处理,将指定⽬录下的⽂件与⼦⽬录⼀并处理。若源⽂件或⽬录的形态,不属于⽬录或符号链接,则⼀律视为普通⽂件处理
-R 或 --recursive递归处理,将指定⽬录下的⽂件及⼦⽬录⼀并处理
举例:当前java110目录下有一个temp目录和text.txt文件
现要将text.txt文件复制到temp目录下
mv
法:mv [选项] 源⽂件或⽬录 ⽬标⽂件或⽬录
功能:
视mv命令中第⼆个参数类型的不同(是目标⽂件还是⽬标⽬录),mv命令将⽂件重命名或将其移⾄⼀个新的⽬录中。
当第⼆个参数类型是⽂件时,mv命令完成⽂件重命名,此时,源⽂件只能有⼀个(也可以是源⽬录名),它将所给的源⽂件或⽬录重命名为给定的目标⽂件名。
当第⼆个参数是已存在的⽬录名称时,源⽂件或⽬录参数可以有多个,mv命令将各参数指定的源⽂件均移⾄目标目录中。
常⽤选项
-f :force强制的意思,如果⽬标⽂件已经存在,不会询问而直接覆盖
-i:若⽬标⽂件(destination)已经存在时,就会询问是否覆盖!
例子一:若移动的目标文件是目录,会移动到该目录下
当前的java110目录下有一个temp目录和text.txt文件,temp目录下有一个temp.txt文件
现要将java110目录下的test.txt文件移动到temp目录下
移动之后,java110目录下就只有temp目录了,而temp目录下多了test.txt文件
grep
例子一:查询text.txt文件中的"install"字符串
例子二:还是查询上述字符串,显示行数
语法:ps [参数]…
功能:⽤于查看当前系统上运⾏的进程
选项:
- a 显⽰⼀个终端的所有进程
- u 以⽤⼾为主的格式来显⽰程序状况
- x 显⽰所有程序,不⽌是会话中的进程
- e 显⽰所有进程,包括系统守护进程
- f 显⽰完整格式输出
netstat
语法:netstat [参数]…
功能:查看系统上的⽹络状态.
选项:
- -a 显示所有正在或不在侦听的套接字
- -n 显示数字形式地址⽽不是去解析主机、端⼝或⽤⼾名
- -p 显示套接字所属进程的PID和名称
tail
语法:tail [必要参数] [选择参数] [⽂件]
功能:⽤于显⽰指定⽂件从末尾查看内容,不指定⽂件时,作为输⼊信息进⾏处理。常⽤查看⽇志⽂件。
选项:
- -f 循环读取
- -n<⾏数> 显示行数
举例:查看末尾10行的文件内容
apt
apt(Advanced Packaging Tool), Linux软件包管理⼯具.⽤于在Ubuntu、Debian和相关Linux发⾏版 上安装、更新、删除和管理deb软件包
⼤多数apt命令必须以具有sudo权限的⽤⼾⾝份运⾏
列出所以包名
这个命令输出所有包的列表,内容⽐较多,可以使⽤grep命令过滤输
更新软件包数据库
注意:apt实际上在可⽤软件包的数据库上⼯作.如果数据库没有更新,系统将不知道是否有更新的软件包可 ⽤.这就是为什么在安装任何Linux系统之后,第⼀件事应该是更新apt数据库
运⾏此命令时,您将看到从各种服务器检索到的软件包信息
如果是在root⽤⼾下执行,命令前就不需要加sudo了
切换root用户:
安装软件包
在安装软件包之前,先更新软件包数据库
移除软件包
remove命令将卸载给定的软件包,但可能会留下⼀些配置⽂件。如果要删除包含所有配置⽂件的软件包,请使⽤purge⽽不是remove
apt remove和apt purge的区别
apt remove 删除包的⼆进制⽂件,它留下了残留的配置⽂件
apt purge 删除与包相关的所有内容,包括配置⽂件.
如果弄乱了程序的配置,希望从系统中完全清除它的痕迹再重新开始,可以使⽤apt purge,通常使⽤ apt remove 就⾜够了
JDK
1. 更新软件包
sudo apt-get update
2. 安装openjdk
1.首先查找jdk包:
2.安装openjdk
安装时会有[Y/n]提示,选择Y继续安装即可
注意:此处安装的是OpenJDK,OpenJDK是⼀个开源版本的JDK,和Oracle官⽅的JDK略有差别.此处我们就使⽤OpenJDK即可.安装OracleJDK⽐较⿇烦
使⽤ java -version 验证是否安装成功.(看到jdk的版本后就安装成功了)
卸载openjdk
MySQL
1. 使用apt安装MySQL
首先查找MySQL安装包(也可以不用查找,直接安装)
apt install mysql-server
2.按 Y 安装后,我们可以查看Mysql状态检查是否安装成功
systemctl status mysql
3.MySQL安装安全设置
默认的MySQL设置是不安全的,MySQL安装提供了⼀个安全脚本,⽤于解决不太安全的默认选项. 运⾏以下命令:
4. 设置密码
连接mysql服务器
使⽤alter user命令修改密码(BY后面跟你想设置的密码)
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY'BITE@yyds.666';
退出数据库
修改密码后下次访问数据库时命令如下:输入自己设置的密码即可(注意:输入密码时不会有提示)
部署 Web 项⽬到 Linux
什么是部署
我们在⼯作中会涉及到几个"环境"
- 开发环境: 开发⼈员写代码用的机器.
- 测试环境: 测试⼈员测试程序使用的机器.
- ⽣产环境(线上环境): 最终项⽬发布时所使⽤的机器.对稳定性要求很⾼.
把程序安装到⽣产环境上,这个过程称为"部署".也叫"上线"
⼀旦程序部署成功,那么这个程序就能被外网中千千万万的普通用户访问到.
换句话说,如果程序有BUG,这个BUG也就被千千万万的⽤⼾看到了.
部署过程⾄关重要,属于程序开发中最重要的⼀环.⼀旦部署出现问题,极有可能导致严重的事故(服务器不可⽤之类的).
为了防⽌部署出错,⼀般公司内部都有⼀些⾃动化部署工具(如Jenkins等).
本文章使⽤⼿⼯部署的⽅式来完成部署
环境配置
要使程序正常运行,需要保证环境和程序都要正确,我们需要先设置环境
数据准备


配置文件
<profiles><profile><id>dev</id><properties><profile.name>dev</profile.name></properties></profile><profile><id>prod</id><activation><activeByDefault>true</activeByDefault></activation><properties><profile.name>prod</profile.name></properties></profile></profiles>
dev用于本地,它的密码和本地mysql一样
prod用于云服务器,密码和云服务器的mysql密码一样
进行选择后要刷新,记得点右上角的闪电,然后clear+打包
可以设置默认环境
上传Jar包到服务器,并运行
直接拖动打好的jar包到xshell窗⼝即可完成⽂件的上传
但是第一次可能不行,需要安装后,然后拖动
开放端口号
运行程序
运行程序分为两种,一种使永久的,一种是短暂的
🏀短暂运行
现在来看一下短暂的语法如下(这个命令的运行方式会在你退出终端时就停止)
永久运行
接下来我们看一个永久的运行方式
现在就能永久访问了,即使关掉终端。
跟踪日志:(tail -f XX.log)
还可以选择性跟踪,例如跟踪错误日志:
程序运行起来后,就需要开放端口号
如果外网需要访问该服务,需要先服务器防火墙开放对应的端⼝号
本着服务器安全的原则,云服务器上的端口非必要不开启.
杀掉进程
如果我们需要重启服务,或者重新部署等,都需要先停⽌之前的服务
上图119256就是该服务的进程,如果我们不知道怎么去知道端口号被哪个类型程序占的时候,可以用“netstat”相关知识进行解决