赞
踩
接上次博客:初阶JavaEE(16)博客系统(Markdown编辑器介绍、博客系统功能、博客系统编写:博客列表页 、博客详情页、实现登录、实现强制登录、显示用户信息、退出登录、发布博客)-CSDN博客
目录
3、把这个war包上传到Linux的tomcat的webapp目录中
当前为我们写道博客系统程序只是部署在我们自己的电脑上,其他用户是无法直接访问的。
网络地址转换(NAT)是一种网络协议,通常用于家庭网络或企业内部网络,它允许多台计算机共享同一个公共IP地址。由于NAT机制的存在,导致了IP地址就被分成了内网IP和外网IP。
在一个局域网中,可以使用私有IP地址(例如,10.0.0.0/8、192.168.0.0/16、172.16.0.0/12等)来标识内部设备。这些私有IP地址在全球范围内是唯一的,不同的局域网可以使用相同的私有IP地址范围而不会发生冲突。然而,这些私有IP地址通常不能直接用于在互联网上进行通信,因为它们是在内网中使用的,并且不是全局唯一的。
由于NAT的存在,内部网络中的设备使用私有IP地址,而外部通信则需要通过路由器或防火墙的NAT功能,将内部设备的私有IP地址映射为公共IP地址。因此,当我们需要从外部网络访问特定内部设备时,需要使用路由器的公共IP地址以及相应的端口映射或虚拟服务器规则。
我们可以通过云服务器来访问外网IP,所以我们得先了解一下Linux系统。
因为一般来说,云服务器还有公司中使用的专用服务器都是Linux服务器,这个系统的使用和Windows之间差异很大,是通过命令行来操作系统的。
Linux服务器通常更适合作为服务器操作系统,特别是在云环境中,因为它提供了更高度的可定制性和控制,而且通过命令行界面,管理员可以更方便地进行自动化操作和脚本编写。
初期发展(1969-1980):
商业化(1980-1990):
开放系统(1990-2000):
开源运动(2000年以后):
内核的诞生(1991-1994):
开源社区的崛起(1994-2000):
商业支持和采纳(2000-2010):
移动和嵌入式系统(2010年以后):
总体而言,Unix和Linux在操作系统领域都扮演着重要的角色。Unix为Linux提供了启示,并在其早期发展中为Linux奠定了基础。Linux则通过其开源的特性和广泛的社区支持,成为当今世界上最流行的服务器和嵌入式系统操作系统之一。
尽管很多人可能没有直接接触过 Linux 操作系统,但是 Linux 在不同领域有着广泛的应用,而且确实是世界上最被广泛使用的操作系统之一。
关于 Linux 在不同领域的应用:
服务器领域:
嵌入式设备:
移动端:
科学研究和超算领域:
云计算:
虽然桌面操作系统市场中,Windows 和 macOS 更为常见,但是 Linux 在服务器、嵌入式系统、移动端和云计算等领域的应用广泛且深入。安卓系统就是 Linux 内核的一个例子,它在移动设备上的成功也表明了 Linux 在不同领域的灵活性和适应性。
阿里云、腾讯云、华为云、金山云……哪个便宜选哪个。我使用的是腾讯云。
云服务器对于学生来说一般都有额外优惠:
学生云服务器_学生云主机_学生云数据库_云+校园特惠套餐 - 腾讯云
云服务器对新用户会比较便宜,但是到期之后续费会比较贵……所以可以选择买一年或更久,这样比较划算。
当你选择云服务器的时候,只需要注意两个地方:
其他配置保持不变即可。
买好之后打开腾讯云,就可以看到你刚刚买的产品了:
点击登录,通过网页我们就可以操作这个服务器了,虽然方便,但是整体来说功能还是比较有限。临时用一下还行,但是要想重度使用,或者使用一些更进阶的功能,就需要使用更专业的工具来连接云服务器。
终端工具的种类非常多,推荐使用xshell,它是老牌的功能非常强的终端软件。
下载好之后一路next即可。
要想使用xshell连上云服务器,就需要明确云服务器的几个信息:
外网IP:
用户名:大部分Linux默认用户名是root,对于Ubuntu系统来说,默认的用户名可能是root或者ubuntu。
密码:
工具栏---文件---新建对话:
点击连接,点了之后会弹出对话框问你是否要保存密钥----是;
弹出对话框-----输入用户名------勾选保存
弹出对话框----输入密码----保存:
上述操作都成功之后就可以进入Linux界面了:
连接失败:
连接成功:
这个也是登录成功:
ls
命令ls [选项] [目录或文件]
-a
:列出目录下的所有文件,包括以 .
开头的隐含文件。-d
:将目录象文件一样显示,而不是显示其下的文件。例如,ls –d 指定目录
将只显示指定目录的信息。-k
:以 k 字节的形式表示文件的大小。例如,ls –alk 指定文件
将以 k 字节形式显示文件信息。-l
:列出文件的详细信息,包括文件类型、权限、所有者、大小等。-r
:对目录进行反向排序。-t
:以时间排序,显示最近修改的文件在前。-R
:列出所有子目录下的文件(递归)。ll
命令:
ll
是一些Linux发行版中预定义的命令别名,通常是ls -l
的快捷方式。ll
的显示效果与ls -l
相同,列出目录中文件的详细信息,包括文件类型、权限、所有者、组、大小、修改时间等。ll
和ls -l
实际上是相同的,用于以长格式列出目录内容。它们之间的区别通常是由用户自定义的别名或脚本引起的。注意:后续学习的一些命令建议都在你自己的主目录下进行操作,不要把你的操作影响到系统目录中的内容。
pwd
命令pwd
/home/user/documents
,执行 pwd
将输出 /home/user/documents
。cd
命令cd 目录名
cd ..
:返回上级目录。cd ~
:进入用户家目。cd -
:返回最近访问的目录。
我们当前就处在根目录,此时再次输入 ll :
我们还可以随心所欲的切换当前目录:
我们先看看当前目录下有哪些文件:
太少了,换一个, cd ..:返回上级目录:
那么多内容,我们现在只输入一个 ll a,只按一个tab,它是没有反应的,连按两次:
通过pwd,我们可以查看到当前我们所处路径的绝对路径:
/
:称为根目录,是整个文件系统的起点。.
:称为当前目录。..
:称为当前目录的上级目录。/usr/share/tomcat/logs/
表示 logs 目录位于 tomcat 目录下的 share 目录下的 usr 目录下。.
或 ..
开头的路径。例如,./logs
表示 logs 目录位于当前目录下,而 ../backup
表示 backup 目录位于当前目录的上级目录。Ctrl+L
终止当前正在执行的命令,然后重新输入正确的命令。clear
touch
命令touch [选项]... 文件...
touch test.txt
将在当前目录下创建或更新名为 test.txt
的文件。(注意不要搞在根目录下,容易把系统搞出问题……当然云服务器上重装系统也不是很麻烦)cat
命令cat [选项] [文件]
-n
:对输出的所有行进行编号。11、echo
命令echo [选项] [字符串或变量]
echo
命令用于将字符串或变量的值输出到标准输出设备(通常是终端)。常用选项:
-e
:允许对字符串中的转义字符进行解释。-n
:不输出结尾的换行符。- echo -e "This is a line.\nThis is another line." # 解释转义字符
- echo -n "No newline at the end." # 不输出结尾的换行符
但是每次echo什么,它就会重定向什么,它会把原有的文件内容清空然后再写入。每次都只保留当前这一次的内容。 如果你不想每次都把上次的内容清空,那么可以选择:echo 'hello' >> test.txt。
vim
命令Vim(Vi Improved)文本编辑器:
Vim是一款强大的文本编辑器,相当于Windows的记事本,但功能更为强大。与其他查看文本的命令(如cat、less、head、tail等)不同,Vim不仅可以查看文本还可以编辑文本。当然,虽然它和记事本的定位差不多,但是实际上vim的使用要复杂多了。我们此处只介绍一些最基础的操作。
使用Vim打开文件或创建新文件的命令为:
vim [文件名]
i
键。在插入模式时,左下角会提示 --INSERT--
。Esc
键回到普通模式。:w
,进入命令模式,此时输入的内容就是vim的命令了。敲下 :wq ,再按下回车,即可保存文件。(w:write 保存;q:quit 退出):q
,再按下回车,即可退出。:wq
同时执行保存和退出。
vimtutor
进入,以及《Vim实用技巧》等学习资源。mkdir
命令mkdir [选项] dirname...
dirname
的目录。-p
或 --parents
:可以是一个路径名称。若路径中的某些目录尚不存在,加上此选项后,系统将自动建立那些尚不存在的目录,即一次可以建立多级目录。mkdir -p /path/to/new/directory
将会递归地创建多级目录。还可以一次性创建多级目录:
rm
命令rm [-f -i -r -v] [dirName/dir]
-f
:即使文件属性为只读(即写保护),也直接删除,无需确认。-i
:删除前逐一询问确认。-r
:删除目录及其下所有文件,进行递归删除。-v
:显示详细信息,即删除的文件名。rm file.txt
:删除名为 file.txt
的文件。rm -r directory
:递归删除名为 directory
的目录及其下所有文件。
重要注意事项: 千万不要运行 rm -rf / , 尤其是在公司的生产服务器上。
有两种情况很坑人:
1、
2、
cp
命令cp [选项] 源文件或目录 目标文件或目录
-f
或 --force
:强行复制文件或目录,不论目的文件或目录是否已经存在。-i
或 --interactive
:覆盖文件之前先询问用户。-r
或 -R
或 --recursive
:递归处理,将指定目录下的文件与子目录一并处理。
mv
命令mv [选项] 源文件或目录 目标文件或目录
mv
命令中第二个参数类型的不同(是目标文件还是目标目录),mv
命令将文件重命名或将其移至一个新的目录中。mv
命令完成文件重命名,此时,源文件只能有一个,它将所给的源文件或目录重命名为给定的目标文件名。mv
命令将各参数指定的源文件均移至目标目录中。-f
:强制的意思,如果目标文件已经存在,不会询问而直接覆盖。-i
:若目标文件(destination)已经存在时,会询问是否覆盖。
还可以进行重命名:
man
命令
按Q就能够顺利退出。
man [选项] 命令
-k
:根据关键字搜索联机帮助。num
:只在第num章节找。grep
命令grep [参数]... [文件]...
-n <行数>
:显示的行数。-w
:全字匹配,要求整个单词都完全相同的结果才能匹配出来,而不仅仅是一个单词的一部分。-r
:递归查找,可以搜索多级目录下的所有文件。--color
:高亮查找到的结果。--include
:指定查找某些文件。--exclude
:指定排除某些文件。ps
命令ps [参数]...
a
:显示一个终端的所有进程。u
:以用户为主的格式来显示程序状况。x
:显示所有程序,不以终端机来区分。
netstat
命令netstat [参数]...
-a
:显示所有正在或不在侦听的套接字。-n
:显示数字形式地址而不是去解析主机、端口或用户名。-p
:显示套接字所属进程的PID和名称。直接输入 netstat,得到的信息其实还不是特别完整:
我们一般使用 netstat -anp:
结果显而易见的更加丰富了。
我们主要关注一下上面的 TCP/UDP涉及到的网络信息,而相比之下,下面的Unix 域套接字(属于进程直接通信的方式)我们暂且不关注。
学到这里,我相信你对于Linux的语言有了一种比较直观的感受。
Linux的哲学理念(从Unix继承而来)就是“小而美”,每个命令都很简单,如果想要完成复杂的工作就需要把多个命令通过 | (管道)这样的方式组合起来。
说回正题,我们想要部署我们的程序,就需要先搭建好环境。
我们需要其他的一些程序把这个环境搭建起来,因为我们的博客系统是依赖于这几个程序的,所以一定要引入这几个程序的依赖:
1、JVM(JDK);
2、Tomcat;
3、MySQL数据库。
在Linux上我们是通过命令的方式来安装的。网上会给出很多种不同安装的方式,我们直接使用最简单的方式即可——基于“包管理器”进行安装。
“包管理器”类似于“中央仓库”的概念。Linux会把一些软件包放到对应的服务器上,通过包管理器这样的程序,我们就可以把这些软件包下载安装好。但是软件包不一定全面,好在像MySQL、jdk这样比较知名的软件还是存在的。
使用apt命令查看服务器上有哪些软件包,这里需要确保处于管理员目录下,如果不是,需要使用sudo su 这样的命令切换到管理员:
我使用的是jdk 8:
使用apt安装软件包:
apt install 软件包名字:
在Linux命令行中,复制Ctrl + insert,粘贴shift + insert。有的笔记本电脑的键盘上的insert需要搭配Fn来按。这可能很不方便,所以你也可以在“工具”查看快捷键,然后修改一下快捷方式:
但是千万不要乱改,在Linux里面,Ctrl+C的作用是终止当前程序。
好,接着刚才,它会紧接着问你[Y/N],输入 Y 即可安装:
安装成功:
你会发现tomcat的版本好像比较超前,我们用的是tomcat8.5,搭配Servlet 3.1。如果是tomcat的9,那么就需要搭配Servlet 4.0。
所以我们干脆手动下载:
打个包,上传到Linux:
把要上传的压缩包拖过去。一次只能拖一个文件,所以我们需要打包。
但是:
使用 unzip 命令解压缩:unzip apache-tomcat-8.5.95.zip
cd apache-tomcat-8.5.95/bin。
将所有 .sh 后缀的文件加上可执行权限: chmod +x *.sh
启动 Tomcat:sh bin/startup.sh
出现如下:
通常情况下,Linux终端中文件和目录的颜色显示可以提供有关文件/目录类型和权限的信息。在典型的配置中,绿色可能表示可执行文件。在这里,如果 startup.sh 和 catalina.sh 等脚本的字体是绿色的,这意味着这些脚本具有可执行权限。
要启动 Tomcat,运行以下命令: ./startup.sh
看到:
那么 Tomcat 已经启动了。
其中,是我的 Tomcat 的实际路径。如果 Tomcat 启动了,我们应该能够通过浏览器访问tomcat的页面来验证它是否正在运行。
验证启动是否成功:
我们还可以通过浏览器直接访问tomcat的欢迎页面:
这就说明我们的tomcat确实正在运行中。
当然,这个步骤你不一定很顺利。因为你的云服务器的防火墙/安全组还没有确认打开:
如果你去网上搜索 Linux 防火墙,能够搜到一些 firewalld 这样的一些相关资料。
但是我们这里谈到的防火墙不是 firewalld,你不应该在你的云服务器上敲任何 firewalld 相关的命令。
敲这样的命令很可能就直接把你现有的网络环境给搞坏了。
正确的做法是:打开云服务器,后台管理页面:
当你把端口号开放之后,外界才能够访问到你的这个8080端口号。
这里的填写方式可能每个厂商都略有不同,因为不同的云服务器厂商有不同的要求,你需要按照人家的规则填写。
当你把端口号开放之后外界才能够访问到你的8080端口。
但是!!!你把8080放出去,安全性勉强还行,但是你千万不要把你的3306或者6379端口开放出去。否则不到一个月,你的云服务器将会被黑客拿走,要么叫你往账户里打比特币,要么就把你的数据库给删咯~
我们这里还是直接通过apt安装:
安装好了之后,MySQL服务器一般来说就自动启动了,我们可以确认一下:
你也可以直接连接客户端:
现在我们的运行环境就搭建好了!接下来就开始正式进行程序的部署!!!
最后一点需要注意:如果你是多个人共用同一个服务器,上述安装过程就需要你和你的通信商量好,装一份就行了。不要多次重复安装,不然大概率要出问题。
当把程序放到云服务器上执行,程序访问的就是云服务器上的数据库了。
我们需要确保数据库里面有数据(有表、有库)
把我们之前代码中的 db.sql 中的内容复制到云服务器的 mysql 客户端中,执行:
复制:
粘贴到终端:
打包之前我们还需要确认一下和数据库相关的配置是否需要修改。
在IDEA里面看看我们的DBUtil关于数据库的相关配置:
其他都不用修改,只有密码……
你Windows上的数据库密码是你安装的时候设置的,但是Linux的MySQL密码好像还没有设置过。
没有设置过密码就是没有密码,所以我们把这里的密码直接清空即可。
改成空字符串:
接下来就是打成war包:
pom.xml里面:
用资源管理器打开:
在Linux中退出MySQL控制台界面,使用Ctrl + D 即可,表示EOF(意思就是输入完了) 。
打开webapps目录,直接拖拽过来:
tomcat会自动针对war包进行解压缩:
解压缩成功一般就代表部署成功了~~~
我们现在就可以通过浏览器进行访问:地址还是刚才那个地址,端口号还是8080:
进入登录页:
打开云服务器的博客系统,可能会出现背景图卡顿的情况,这是因为服务器网络带宽比较低,影响不大,如果想要快一点……那就是另外的价钱了~~
现在我们登录一下:
当前看到的问题是”使用密码登录不上去了……”
我们现在有两个解决办法:
1、手动给这个数据库设置一个其他的密码,使用这个密码来登录;
2、可以直接把数据库的验证密码的功能给关闭掉 (釜底抽薪),使用这个方案,任何密码都能登录了。
我首先选择了第二种方式:在[mysqld]下添加skip-grant-tables
找到 mysql的配置文件,加上上述配置项,此时需要重启一下 mysql。
但是除了点别的问题,MySQL和3306端口号绑定不上去了……
试了好半天,感觉都没别的错误,但就是连接不上,可能和MySQL 8 的版本有关系……
无奈之下,我们选择第一种看看:
MySql8.0修改root密码_mysql8修改root密码-CSDN博客
好,我们现在再次刷新:
成功进来了!
此时,只要任何一个有网络的用户都可以访问到我们的云服务器了~~~
以后你想要添加任何用户,都可以通过云服务器来添加:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。