一、引言(为什么选择Linux部署)
1.1 开发环境(dev)
外部用户无法访问,开发人员使用,版本变动很大
平时大家大多是在Windows或者Mac操作系统下去编写代码进行开发,在开发环境中安装大量的软件,这样会导致环境的稳定性和安全性降低.
1.2 测试环境(test)
外部用户无法访问,专门给测试人员使用的,版本相对稳定
一般克隆一份生产环境,会将开发环境中的程序部署到测试环境中,这个环境的主要目的是去程序进程检测,收集程序中的各种问题,并交给开发人员进行修改.
1.3 生产环境(prod)
面向外部用户的环境,连接上互联网即可访问的正式环境
是将程序运行在此环境中,供用户去使用。这个环境是有专业的人员去维护,一般人是没有权限去操做生产环境的.
三个环境也可以说是系统开发的三个阶段:开发 --> 测试 --> 上线,其中生产环境也就是通常说的真实环境。
1.4 操作系统的选择
生产环境中,常用的操作系统有Windows 2003 service,Linux,Unix等等,Linux操作系统,在生产环境中占据了大量的市场份额,Linux主要以稳定,可靠,免费的特点成为全球使用最多的服务器操作系统。
Linux操作系统现在已经成为后台开发人员必备的技能,并且后期学习的各种知识都会涉及到Linux操作系统。
二、Linux介绍
2.1 Linux介绍
在Linux操作系统出现之前,还有一个操作系统叫做Minix,Minix操作系统是由Andrew的大学教授研发出来的,当时大学教授是为了给学生上课,买了一套Unix操作系统,参考Unix自己写了一个操作系统,并且命名为Minix。同时将Minix开源,供学校内部的研究和教学,到了2000年,Andrew将Minix操作系统完全对外开源。
Minix由于完全对外开源之后,在互联网上迅速的传播,但是大家在使用时,发展Minix不时很完美,内部存在各种各样问题。用户将问题解决后,编写了一个补丁,将补丁以邮件的方式发给Andrew,但是Andrew教授最初的目的只是为了教学和研究。
于此同时,一位芬兰的大学生出现了,叫Linus,在Minix操作系统基础上,自己添加了一些补丁和插件,并将其命名为Linux操作系统,并且完全对外开源,而且开始维护Linux操作系统。
之前学习的Git也时Linus研发的。
Linus Torvalds 和 Linux |
---|
2.2 Linux的版本
Linux的版本分为两种,一种是Linus团队正在维护的开源内核版本。另一种是一些厂商基于内核版本封装的发行版本。
Linux的内核版本官网:The Linux Kernel Archives
Linux的发行版本,咱们需要学习的发行版本就时CentOS
Linux的常见发行版本 |
---|
2.3 Linux和Windows区别
Linux是严格区分大小写的,Windows无所谓。
Linux中一切皆是文件。
Linux中文件是没有后缀的,但是他有一些约定俗成的后缀。
Windows下的软件一般是无法直接运行的Linux中。
三、Linux安装
安装Linux,我们需要一个虚拟机,为了安装虚拟环境:VMware或者Virtual Box(采用VMware)
因为Linux也是一个系统,本质上跟我们电脑的Window没有区别,我们可以在我们电脑上安装一个软件,这个软件可以模拟一台或多台虚拟的电脑机器,这就是虚拟机。
虚拟机(Virtual Machine)指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统。虚拟系统通过生成现有操作系统的全新虚拟镜像,它具有真实windows系统完全一样的功能,进入虚拟系统后,所有操作都是在这个全新的独立的虚拟系统里面进行,可以独立安装运行软件,保存数据,拥有自己的独立桌面,不会对真正的系统产生任何影响 ,而且具有能够在现有系统与虚拟镜像之间灵活切换的一类操作系统。虚拟系统和传统的虚拟机(Parallels Desktop ,Vmware,VirtualBox,Virtual pc)不同在于:虚拟系统不会降低电脑的性能,启动虚拟系统不需要像启动windows系统那样耗费时间,运行程序更加方便快捷;虚拟系统只能模拟和现有操作系统相同的环境,而虚拟机则可以模拟出其他种类的操作系统;而且虚拟机需要模拟底层的硬件指令,所以在应用程序运行速度上比虚拟系统慢得多。流行的虚拟机软件有VMware(VMWare ACE)、Virtual Box和Virtual PC,它们都能在Windows系统上虚拟出多个计算机
在这里我们就不再使用VMware了,而是去申请一下阿里云服务器ECS,供我们体验
如果为在校高校学生的话,是可以免费领取2周+2月的服务器使用时间的,关于服务器的配置,够咱们使用,这是对于高校学生开展的活动,需要做一些任务。
关于云服务器怎么使用,其教学文档也写的十分详细,这里就不多说了
领到服务器之后,我们可以打开控制管理台,打开实例,修改一下密码
接着打开安全组,需要我们配置一下,加上MySQL,tomcat,http,https的端口号
接着启动就好啦,是不是很方便
接着需要下载Xshell 和 fileZilla这两个软件
xshell下载好后点左上角新建
确定,然后输入密码,连接
FileZilla点开后在上面输入您的公网ip和 用户名为root 密码为你自己设置的密码 端口号为22 连接
然后在页面上可以看到很多你的服务器上的文件
四、Linux的目录结构
/ 根目录
/bin:是Binary的缩写, 这个目录存放着最经常使用的命令。
/boot:存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
/dev :是Device(设备)的缩写, 该目录下存放的是Linux的外部设备,在Linux中访问设备的方式和访问文件的方式是相同的。
/etc:用来存放所有的系统管理所需要的配置文件和子目录。
/home:用户的主目录,在Linux中,每个用户都有一个自己的目录,一般该目录名是以用户的账号命名的。
/lib:放着系统最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
/lost+found:这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
/media:linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
/mnt:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光驱挂载在/mnt/上,然后进入该目录就可以查看光驱里的内容了。
/opt:主机额外安装软件所摆放的目录。比如你安装一个ORACLE数据库则就可以放到这个目录下。默认是空的。
/proc:是一个虚拟的目录,它是系统内存的映射,我们可以通过直接访问这个目录来获取系统信息。
/root:为系统管理员,也称作超级权限者的用户主目录。
/sbin:s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
/selinux:是Redhat/CentOS所特有的目录,Selinux是一个安全机制,类似于windows的防火墙,但是这套机制比较复杂,这个目录就是存放selinux相关的文件的。
/srv:存放一些服务启动之后需要提取的数据。
/sys:linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统 sysfs,sysfs文件系统集成了下面3种文件系统的信息:针对进程信息的proc文件系统、针对设备的devfs文件系统以及针对伪终端的devpts文件系统。该文件系统是内核设备树的一个直观反映。当一个内核对象被创建的时候,对应的文件和目录也在内核对象子系统中被创建。
/tmp:是用来存放一些临时文件的。
/usr:用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录。
/usr/bin:系统用户使用的应用程序。
/usr/sbin:超级用户使用的比较高级的管理程序和系统守护程序。
/usr/src:内核源代码默认的放置目录。
/var:这个目录中存放着在不断扩充着的东西,我们习惯将那些经常被修改的目录放在这个目录下。包括各种日志文件
五、Linux的简单命令
详细点的可以参考
systemctl start 服务名(xxx.service) 启动该服务
systemctl restart 服务名(xxx.service) 重启该服务
systemctl stop 服务名(xxx.service) 停止该服务
systemctl status 服务名(xxx.service) 查看该服务
六、Linux中软件安装【重点
】
6.1 JDK安装
在xshell中操作
[root@localhost 桌面]# rpm -qa | grep java 查看系统中默认安装的jdk
java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64 javapackages-tools-3.4.1-11.el7.noarch java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64 tzdata-java-2016g-2.el7.noarch python-javapackages-3.4.1-11.el7.noarch java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64 java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64
我们需要将opjdk都删除(1.7和1.8各有两个),后缀为.noarch的文件可以不用删除
[root@localhost 桌面]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.102-4.b14.el7.x86_64 [root@localhost 桌面]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.102-4.b14.el7.x86_64 [root@localhost 桌面]# rpm -e --nodeps java-1.7.0-openjdk-headless-1.7.0.111-2.6.7.8.el7.x86_64 [root@localhost 桌面]# rpm -e --nodeps java-1.7.0-openjdk-1.7.0.111-2.6.7.8.el7.x86_64 [root@localhost 桌面]# java -version bash: java: 未找到命令...
把下载好的jdk安装包拷贝到当前虚拟机root目录下(在filezilla中的root文件夹)
解压,一般我们解压到/usr/local目录下
[root@localhost ~]# tar -zxvf jdk-8u151-linux-x64.tar.gz -C /usr/local
配置环境变量
[root@localhost ~]# vim /etc/profile
在该文件中添加如下信息:(建议添加到最后一行)
JAVA_HOME=/usr/local/jdk1.8.0_151 CLASSPATH=.:$JAVA_HOME/lib.tools.jar PATH=$JAVA_HOME/bin:$PATH export JAVA_HOME CLASSPATH PATH
立即生效
[root@localhost ~]# source /etc/profile
(如果不行可重启虚拟机再次尝试)
再次测试
[root@localhost ~]# java -version java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
6.2 Tomcat安装
把下载好的tomcat安装包拷贝到当前虚拟机root目录下(同上),一般我们解压到/usr/local目录下
[root@localhost ~]# tar -zxvf apache-tomcat-8.5.23.tar.gz -C /usr/local
在启动tomcat之前记得关闭防火墙
[root@localhost ~]# systemctl stop firewalld.service
切换到tomcat的bin目录
[root@localhost ~]# cd /usr/local [root@localhost local]# cd apache-tomcat-8.5.23/bin
启动tomcat
[root@localhost bin]# ./startup.sh
关闭tomcat
[root@localhost bin]# ./shutdown.sh
6.3 Mysql安装
CentOS中默认安装的是MariaDB,安装完MySQL之后会覆盖MariaDB,由于安装MySQL需要添加很多依赖关系,所以这里使用yum安装.
下载MySQL源安装包
[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
.......
安装成功的话会显示如下
2019-10-17 14:37:41 (230 KB/s) - 已保存 “mysql57-community-release-el7-10.noarch.rpm” [25548/25548]) -c: 没有那个文件或目录 在 -c 中找不到 URL。 FINISHED --2019-10-17 14:37:41-- Total wall clock time: 7.4s Downloaded: 1 files, 25K in 0.1s (230 KB/s)
安装MySQL源(如果无法安装,先执行该命令:rm -f /var/run/yum.pid)
[root@localhost ~]# yum -y install mysql57-community-release-el7-10.noarch.rpm
...........
执行成功会出现如下
Running transaction 正在安装 : mysql57-community-release-el7-10.noarch 1/1 验证中 : mysql57-community-release-el7-10.noarch 1/1 已安装: mysql57-community-release.noarch 0:el7-10 完毕!
安装MySQL
[root@localhost ~]# yum -y install mysql-community-server
..............
成功的话会出现如下
作为依赖被安装: mysql-community-client.x86_64 0:5.7.28-1.el7 mysql-community-common.x86_64 0:5.7.28-1.el7 作为依赖被升级: openssl.x86_64 1:1.0.2k-19.el7 openssl-libs.x86_64 1:1.0.2k-19.el7 postfix.x86_64 2:2.10.1-7.el7 替代: mariadb-libs.x86_64 1:5.5.52-1.el7 完毕!
启动MySQL
[root@localhost ~]# systemctl start mysqld.service
查看MySQL运行状态
[root@localhost ~]# systemctl status mysqld.service
成功的话如下
mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since 四 2019-10-17 15:00:59 CST; 26s ago
设置MySQL自启动
[root@localhost ~]# systemctl enable mysqld
配置MySQL
[root@localhost ~]# vim /etc/my.cnf
在/etc/my.cnf的[mysqld]中增加如下内容:(建议添加到最后一行)
#不添加则在设置MySQL新密码时会错 #用于设置MySQL的字符集 #用于设置MySQL的远程连接 validate_password=off character_set_server=utf8 skip-name-resolve
重新启动MySQL
[root@localhost ~]# systemctl restart mysqld.service
此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:
[root@localhost ~]# grep "password" /var/log/mysqld.log
会出现如下日志,加粗背景为黄色的为密码,保存起来
2019-10-17T07:00:52.740835Z 1 [Note] A temporary password is generated for root@localhost: l0hN)kEXugYv
2019-10-17T07:14:54.867706Z 3 [Note] Access denied for user 'root'@'localhost' (using password: YES)
登录MySQL
[root@localhost ~]# mysql -uroot -p
输入:l0hN)kEXugYv (你的密码)进入到MySQL
输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:
(下面语句中的‘新密码’为你想设置的密码!!!)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
设置MySQL可以远程访问(密码为你刚才设置的密码)
mysql>grant all privileges on . to 'root'@'%' identified by '密码' with grant option;
此时可以使用我们的数据库客户端工具进行远程连接,如果连接不上,重启MySQL后再测试
测试成功后,退出MySQL
mysql> exit; Bye
卸载Yum Repository,否则每次yum操作都会自动更新
[root@localhost ~]# yum -y remove mysql57-community-release-el7-10.noarch
已加载插件:fastestmirror, langpacks 正在解决依赖关系 --> 正在检查事务 ---> 软件包 mysql57-community-release.noarch.0.el7-10 将被 删除 --> 解决依赖关系完成 依赖关系解决 ========================================================================================= Package 架构 版本 源 大小 ========================================================================================= 正在删除: mysql57-community-release noarch el7-10 installed 30 k 事务概要 ========================================================================================= 移除 1 软件包 安装大小:30 k Downloading packages: Running transaction check Running transaction test Transaction test succeeded Running transaction 正在删除 : mysql57-community-release-el7-10.noarch 1/1 验证中 : mysql57-community-release-el7-10.noarch 1/1 删除: mysql57-community-release.noarch 0:el7-10 完毕!
测试远程连接,连接未成功,需要再次关闭防火墙,重启MySQL
关闭防火墙:
systemctl stop firewalld.service
七、部署SSM工程
部署项目到Linux中需要注意一下内容:
项目要保证在Windows下是没有问题的,再部署到Linux。
连接线上的数据库,代码需要修改成线上数据库的地址
注意你项目中的数据库地址改为线上的
将Maven项目打包
打成war包之后,用fileZilla将war包拷贝到你服务器中tomcat服务器的webapp上,服务器启动会自动解压war包,接下来就可以找小伙伴测试了
在部署到Linux操作系统中后,测试时查看日志。
[root@localhost ~]# cd /usr/local [root@localhost local]# cd apache-tomcat-8.5.23/ [root@localhost apache-tomcat-8.5.23]# cd logs [root@localhost logs]# tail -f catalina.out