常见服务的构建

常见服务的端口号

php-fpm:9000

构建FTP服务

文本传输协议
1.实现FTP服务功能的软件:vsftpd
2.默认共享数据的主目录:/var/ftp/
3.构建过程

  1. #1.安装软件包
  2. yum -y install vsftpd
  3. #2.运行程序
  4. /usr/sbin/vsftpd
  5. pgrep -l vsftpd# 查看进程信息
  6. #3.访问测试
  7. curl ftp://192.168.4.7

Web服务基础应用

基于B/S(Browser/Server)架构的网页服务
Hyper Text Markup Language 超文本标记语言
Hyper Text Transfer Protocol 超文本传输协议

构建Web服务

提供一个页面内容的服务
提供Web服务的软件:httpd、Nginx、tomcat
httpd由软件基金会Apache生产
构建过程

#1.安装软件包
yum -y install httpd
#2.运行提供Web服务程序
 > /etc/resolv.conf # 清空此文件内容
/usr/sbin/httpd # 绝对路径运行程序
pgrep -l httpd # 查看进程信息
#4.书写一个页面文件 
vim /var/www/html/index.html
阳光明媚NSD2108
#5.浏览器访问测试
curl http ://192.168.4.7
阳光明媚NSD2108

独立Web主机

软件包:httpd
系统服务:httpd

提供的默认配置

配置文件:/etc/httpd/conf/httpd.conf
1)Listen监听地址:端口(80)
端口:数字编号起到标识作用,标识协议 ,自定义端口1024~65535。
http协议默认端口:80
ftp协议默认端口:21
访问流程
客户端curl http://192.168.4.7—->192.168.4.7——>服务端——> http 80——>
httpd进程监听80—->DocumentRoot /nsdweb —->/nsdweb/index.html
2)ServerName:本站点注册的DNS名称(空缺)
3)DocumentRoot:指定(网页文件根目录)存放位置(/var/www/html)
httpd——->配置文件中DocumentRoot——->去哪个路径下寻找index.html(决定软件功能)

 mkdir /var/www/myweb
 echo wo shi myweb > /var/www/myweb/index.html
 vim /etc/httpd/conf/httpd.conf
…….此处省略一万字
DocumentRoot "/var/www/myweb"
…….此处省略一万字
systemctl restart httpd  # 重启服务
 curl http://192.168.4.7

网络路径与实际路径
网络路径:curl http://192.168.4.7/abc
实际服务: /nsdweb/abc/index.html
http://192.168.4.7=/nsdweb
4)DirectoryIndex:起始页/首页文件名(index.html)

httpd访问控制规则

当子目录没有规则,默认继承上一级目录规则;针对此目录有单独配置,则不继承上一级目录规则
修改配置文件/etc/httpd/conf/httpd.conf

Require all denied # 拒绝所有人访问


Require all granted # 允许所有人访问

独立Web站点的快速部署

1.装包(httpd)
 yum -y install httpd 
 rpm -q httpd

2.配置(部署首页 index.html)

echo NSD Web Server > /var/www/html/index.html

3.重启服务(httpd)
systemctl restart httpd # 重启服务
curlhttp://192.168.4.7 # 测试访问
NSD Web Server

虚拟Web主机

由同一台服务器提供多个不同的Web站点
区分方式
基于域名
基于端口
基于IP地址(基本不用)
一旦启用虚拟Web主机后,外部DocmentRoot/ServerName会被忽略,第1个虚拟站点视为默认站点

基于域名配置虚拟站点

配置文件路径
/etc/httpd/conf/httpd.conf # 主配置文件
/etc/httpd/conf.d/×××.conf # 调用配置文件

添加虚拟站点在调用配置文件中新建


ServerName 此站点的DNS名称
DocumentRoot 此站点的网页根目录

vim/etc/httpd/conf.d/haha.conf
<VirtualHost *:80> # 在所有IP地址监听80
ServerNamewww.qq.com # 网站的域名
DocumentRoot  /var/www/qq # 网页文件路径
</VirtualHost>
.........
#采用/etc/hosts文件直接解析域名,只为本机解析
vim /etc/hosts
…….此处省略一万字
192.168.4.7 www.qq.com ........

基于端口配置虚拟站点

修改调用配置文件

vim /etc/httpd/conf.d/haha.conf
<VirtualHost *:80>
ServerName www.qq.com
DocumentRoot /var/www/qq
</VirtualHost>
Listen 8080
<VirtualHost *:8080>
ServerName www.qq.com
DocumentRoot /var/www/lol
</VirtualHost>

总结出现测试页面的原因

没有书写任何的网页文件
网页文件名字不是index.html
访问控制被拒绝
SELinux模式不是宽松模式
配置文件内容不正确

NFS服务基础

Network File System,网络文件系统
用途:为客户机提供共享使用的文件夹
协议:NFS(TCP/UDP 2049)、RPC(TCP/UDP 111)
软件包:nfs-utils
系统服务:nfs-server

1)修改exports配置文件

vim /etc/exports
#文件夹路径 客户机地址(权限) 
/public *(ro) # 允许所有客户端进行只读访问
systemctl restart rpcbind# NFS所依赖的服务
systemctl restart nfs-server//先启动rpcbind,再起nfs-server

2)查看NFS共享

showmount -e 192.168.4.7# 查看服务端有那些NFS共享
Export list for 192.168.4.7:
/public *

3)实现开机自动挂载

_netdev:声明网络设备,系统在具备网络参数后,再进行挂载本设备

vim /etc/fstab 
……此处省略一万字
192.168.4.7:/public /mnt/tc nfs defaults,_netdev 0 0

备注:挂载网络硬盘时使用_netdev,等network服务启动后,在挂载这个设备

NFS服务于RPC的关系

NFS实际上就是也是一种file system,当用户需要使用的时候,会将一个NFS mount在相应的directory下。
简单来说,每当用户访问该NFS时,会发出一个RPC请求当相应的NFS server上,NFS server根据RPC请求,访问storage取得相应的文件内容返回给client。当然这其中还涉及到的cache, block等问题
nfs网络文件系统
rpc服务 远程过程调用
要使用nfs服务前,需要先在服务器端先开启rpc服务,centos5下是portmap,centos6下是rpcbind。通过rpc服务告诉nfs进程传输文件数据时的端口信息,进行程序控制。

autofs触发挂载

由autofs服务提供的“按需访问”机制
-只要访问挂载点,触发响应,自动挂载制定设备
-闲置超过时限(默认5分钟),会自动卸载

autofs配置解析

/etc/auto.master # 主配置文件
-监控点目录 挂载配置文件的路径
# /misc /etc/auto.misc
/etc/auto.misc # 挂载配置文件
-触发点子目录 -挂载参数 :设备名
# nsd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom
虚拟机B访问/myauto/nsd,光驱设备挂载/ myauto/nsd

yum -y install autofs # 装包
 vim /etc/auto.master # 配置
/myauto /opt/xixi.txt 
 cp /etc/auto.misc /opt/xixi.txt
 vim /opt/xixi.txt
nsd -fstype=iso9660 :/dev/cdrom
 systemctl restart autofs  # 重启服务
 ls /myauto/nsd

触发挂载进阶autofs与NFS

#虚拟机B访问/myauto/nfs,虚拟机A的nfs共享/public挂载到/myauto/nfs
 vim /etc/auto.master
/myauto /opt/xixi.txt
 vim /opt/xixi.txt
nsd -fstype=iso9660 :/dev/cdrom
nfs -fstype=nfs 192.168.4.7:/public
 systemctl restart autofs
 ls /myauto/test

DNS服务基础

1.安装bind、bind-chroot软件包
2.1 建立主配置文件 /etc/named.conf
2.2 建立地址库文件 /var/named/…..
3. 启动named服务

DNS工作原理

互联网中的导航员
正向解析:根据注册的域名查找其对应的IP地址
反向解析:根据IP地址查找对应的注册域名,不常用

DNS服务器分类

根域名服务器、一级DNS服务器、二级DNS服务器、三级DNS服务器
域名系统: 所有的域名都必须要以点作为结尾,树型结构

DNS的分布式结构

FQDN(Full Qualified Domain Name),完全合格主机名
image.png

DNS服务分析BIND(Berkeley Internet Name Daemom)

软件包:bind bind-chroot(监控bind程序)
系统服务:named
默认端口:TCP/UDP 53
主配置文件:/etc/named.conf # 设置负责解析的域名
地址库文件:/var/named/…… # 设置此域名的站点和IP地址的对应关系

修改named.conf主配置文件

]# cp /etc/named.conf /root  # 备份数据
]# vim /etc/named.conf
options {
directory "/var/named";  # 定义地址库文件存放路径
};
zone "tedu.cn" IN {  # 定义负责的解析tedu.cn域名 
 type master;  # 权威主DNS服务器
file "tedu.cn.zone";  # 地址库文件名称
}; # 可设置多个区域

建立named.localhost (模板) 地址库文件

可复制文件named.localhost 模板编写自己地址库文件
注意文件的权限 可用cp -p命令复制带权限的文件
文件命名规则一般为域名.zone

#拷贝修改地址库文件
]# cd /var/named/
]# cp -p named.localhost tedu.cn.zone # 保持权限不变
]# ls -l tedu.cn.zone

]# vim tedu.cn.zone
……此处省略一万字
tedu.cn. NS svr7 # 声明DNS服务器为svr7
svr7 A 192.168.4.7 # svr7解析结果为192.168.4.7
www A 1.1.1.1
]# systemctl restart named
]# echo nameserver 192.168.4.7 > /etc/resolv.conf
]# nslookup www.tedu.cn# 查看解析结果

特殊DNS解析

DNS的轮询(负载均衡)

# www.tedu.com分别解析不同的ip地址
[root@svr7 /]# vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.20
www A 192.168.4.21
www A 192.168.4.22
[root@svr7 /]# systemctl restart named
#访问www.tedu.com会分别分别访问不同的ip地址

泛域名解析

为域内未定义的主机地址解析

[root@svr7 /]vim /var/named/tedu.cn.zone
tedu.cn. NS svr7
svr7 A 192.168.4.7
www A 192.168.4.20
* A 6.6.6.6 # 输入错误的情况下解析为6.6.6.6

有规律的泛域名解析
内置函数:$GENERATE (制造连续的数字)

#]vim /var/named/tedu.cn.zone
……此处省略一万字
tedu.cn.     NS     svr7  
svr7         A     192.168.4.7 
$GENERATE 1-50 stu$ A 192.168.10.$ 
#stu*分别解析为192.168.10.*

CNAME解析(DNS的解析记录的别名)

vim /var/named/tedu.cn.zone
vip CNAME ftp #  ip解析结果与ftp结果一致

DNS服务器资源解析记录的类型

NS:DSN的声明记录
A:正向解析记录
CNAME:解析记录的别名

DNS主从架构

提高可靠性,从DNS服务器备份主DNS服务器的数据

主DNS服务器

1. 授权从DNS服务器

]#vim /etc/named.conf
options {
directory "/var/named";
allow-transfer { 192.168.4.207; }; # 允许谁进行传输数据
};
zone "tedu.cn" IN {
type master;
file "tedu.cn.zone";
};

2.声明从DNS服务器

]#vim /var/named/lol.com.zone
……此处省略一万字
lol.com. NS svr7
lol.com. NS pc207 # 声明从DNS服务器
svr7 A 192.168.4.7
pc207 A 192.168.4.207
www A 4.4.4.4

从DNS服务器

修改主配置文件

]# vim /etc/named.conf 
..........
zone "lol.com" IN {
 type slave;  # 类型为从服务器
masters { 192.168.4.7; };  # 指定主DNS服务器
file "/var/named/slaves/lol.com.slave";# 确保named用户有读写执行权限
 masterfile-format text;  # 地址库文件明文存储
};

测试主从同步

svr7 /]# vim /var/named/lol.com.zone
…….此处省略一万字
2021091601 ; serial # 数据的版本号,由10个数字组成
1D ; refresh # 每隔1天主从进行交流
1H ; retry # 失效之后的时间间隔每一个1小时
1W ; expire # 真正的失效时间,1周
3H ) ; minimum # 失效记录的记忆时间3小时
svr7 /]# systemctl restart named # 重启服务数据版本号不一致,从服务器会更新
pc207 /]# nslookup www.lol.com 192.168.4.207 # 测试从服务器是否同步

DNS查询方式

缓存解析结果,加快访问

递归查询

客户端发送请求给首选DNS服务器,首选DNS服务器与其他的DNS服务器交互,最终将解析结果带回来过程

迭代查询

客户端发送请求给首选DNS服务器,首选DNS服务器告知下一个DNS服务器地址

缓存DNS服务器

虚拟机A:为真正的DNS服务器 虚拟机B:缓存DNS服务器

pc207 /]# vim /etc/named.conf
options {
directory "/var/named";
forwarders { 192.168.4.7; };  # 转发给192.168.4.7
};
pc207 /]# systemctl restart named
pc207 /]# nslookup www.360.com 192.168.4.207
Server: 192.168.4.207
Address: 192.168.4.207#53
Non-authoritative answer:
Name: www.360.com
Address: 1.2.3.4

Split分离解析

当收到客户机的DNS查询请求的时候
能够区分客户机的来源地址
为不同类别的客户机提供不同的解析结果(IP地址)
为客户端提供最近的服务器

NTP时间同步

Network Time Protocol(网络时间协议),用来同步网络中各个计算机的时间的协议
210.72.145.39(国家授时中心服务器IP地址),Stratum分层设计的总层数限制在15以内(包括15)

NTP服务器构建

虚拟机A:时间服务器
#1.安装软件包chrony
yum -y install chrony
#2.修改配置文件
vim /etc/chrony.conf 
# server0.centos.pool.ntp.org iburst # 与谁同步时间
# server1.centos.pool.ntp.org iburst # iburst表示快速同步
allow all #26行 开头的# 去掉,修改为允许所有客户端
local stratum 10  #29行  设置本机为第10层的时间服务器
#3.重启时间服务
systemctl restart chronyd

虚拟机B:客户端
#1.安装软件包
#2.修改配置文件
vim /etc/chrony.conf 
server 192.168.4.7  iburst # 与192.168.4.7同步时间
#3.重启时间服务
#4.测试
date -s "2008-1-1" # 修改时间
systemctl restart chronyd 
date # 查看是否时间同步 
chronyc sources -v# 列出时间服务器信息

电子邮件通信

为用户提供电子邮箱存储空间(用户名@邮件域名)
处理用户发出的邮件 —— 传递给收件服务器
处理用户收到的邮件 —— 投递到邮箱

1)DNS服务器,增加邮件解析功能

#修改配置文件(地址库文件)
]# vim /var/named/qq.com.zone
此处省略一万字……..
qq.com. NS svr7
qq.com. MX 30 mail # 数字30为优先级,越小越优先
svr7 A 192.168.4.7
mail A 192.168.4.7
www A 1.2.3.4
]# systemctl restart named 
]# host -t MXqq.com # 测试qq.com区域邮件交换记录
qq.com mail is handled by 30 mail.qq.com.
]# hostmail.qq.com  # 测试域名完整解析
mail.qq.com has address 192.168.4.7

2)邮件服务器

#1.安装软件包
]# rpm -q postfix 
#2.修改配置文件
]# vim /etc/postfix/main.cf
99行 myorigin =qq.com # 默认补全的域名后缀
116行 inet_interfaces = all # 本机所有网络接口均提供邮件收发功能
164行 mydestination =qq.com # 判断是否为本域邮件的依据
#3.重启邮件服务
]# systemctl restart postfix

4.测试

mail 发信操作: mail -s '邮件标题' -r 发件人 收件人
]# mail -s 'test01' -r yg xln
hahaxixiehehelele # 正文内容
.  # 一行只有一个点表示提交
]# echo 123456 | mail -s 'test02' -r yg xln # 可用echo管道的方式书写邮件正文
mail 收信操作: mail [-u 用户名]
]# mail -u xln
>N 1 yg@qq.com Fri Sep 18 17:24 18/510
& 1 # 输入邮件编号
& quit # 退出

自定义YUM仓库

Yum软件仓库组成: 1.众多的软件包 2.仓库数据文件
关闭ssh的DNS查询:(可提高传递速度)

]# vim /etc/ssh/sshd_config
UseDNS no # 关闭ssh的DNS查询
]# systemctl restart sshd

新建自定义YUM仓库

1.将软件包放至一个目录下
2.生成仓库数据文件
~]# createrepo /tools/other/ # 生成仓库数据文件
3.修改YUM仓库配置文件

]# vim /etc/yum.repos.d/mydvd.repo 
........
[rpm] # 唯一标识 
name=myrpm
baseurl=file:///tools/other # 指定Yum仓库的路径
enabled=1
gpgcheck=0
[root@svr7 ~]# yum repolist

yum makecache 
#生成索引缓存索引提供搜索安装速度,索引缓存存储位置; /var/cache/yum/

yum makecache fast 
#将软件包信息提前在本地索引缓存,用来提高搜索安装软件的速度,建议执行这个命令可以提升yum安装的速度。

yum clean all
#yum会把下载的软件包和header存储在cache中而不自动删除。如果觉得占用磁盘空间,可以使用yum clean指令清除索引缓存和下载包的缓存。

更新仓库

#1. 删除仓库数据文件,重新生成仓库数据文件
rm -rf /tools/other/repodata/
createrepo /tools/other/# 重新生成仓库数据文件
#2. 清空Yum的缓存
yum clean all# 清空Yum的缓存
yum repolist

批量装机环境

计算机的开机启动项:开启计算机时,寻找操作系统顺序。

部署DHCP服务器

(DynamicHostCongfigurationProtocol)
1.装包(dhcp软件包)2.配置3.重启服务(dhcpd)

DHCP介绍

动态主机配置协议,由 IETF(Internet 网络工程师任务小组)组织制定,用来简化主机地址分配管理
• 主要分配以下入网参数:IP地址/子网掩码/广播地址;默认网关地址、DNS服务器地址
• DHCP地址分配的四次会话(以广播形式进行,先到先得)
DISCOVERY —> OFFER —> REQUEST —>ACK
• 一个网络中只能有一台DHCP服务器

修改配置文件(dhcpd.conf)

]# vim /etc/dhcp/dhcpd.conf
# 末行模式下 :r /usr/share/doc/dhcp*/dhcpd.conf.example
# 读取模板文件dhcpd.conf.example内容至dhcpd.conf
subnet 192.168.4.0 netmask 255.255.255.0 # 分配网段
{ 
range 192.168.4.100 192.168.4.200; # 分配IP地址范围
option domain-name-servers 192.168.4.7; # 分配DNS
option routers 192.168.4.254; # 分配的网关地址
default-lease-time 600;
max-lease-time 7200;
}

网络装机服务器(PXE网络,Pre-boot eXecution Environment)

网络装机的介绍

• 规模化:同时装配多台主机
• 自动化:装系统、配置各种服务
• 远程实现:不需要光盘、U盘等物理安装介质
• PXE,Pre-boot eXecution Environment
• 预启动执行环境,在操作系统之前运行
• 可用于远程安装
网络装机必须内存大于2G
工作模式
• PXE client 集成在网卡的启动芯片中
• 当计算机引导时,从网卡芯片中把PXE client调入内存执行,获取PXE server配置、显示菜单,根据用户选择将远程引导程序下载到本机运行

计算机的开机启动项

开机顺序:1.加载内核 2.读/etc/fstab,挂载硬盘(打开硬盘) 3.启动服务(network,httpd,vdo,vsftpd,tomcat) 4.计算机登录
开启计算机时,寻找操作系统顺序:1. 本地硬盘(/etc/fstab)2. 本地光驱设备3. U盘4. 网卡进行广播(网络装机)

网络主机的步骤(注意设置开机启动项)

1.dhcp服务—-》IP地址、next-server、filename “pxelinux.0”
2.tftp服务—-》 “pxelinux.0”
3.pxelinux.0—-》读取菜单文件/var/lib/tftpboot/pxelinux.cfg/default
4.default-—》vesamenu.c32、读秒时间、vmlinuz、initrd.img、ftp://192.168.4.7/ks.cfg
5.ks.cfg应答文件—-》语言、键盘类型、分区、安装方式url —url=”ftp://192.168.4.7/centos”

1.配置DHCP服务器

]# vim  /etc/dhcp/dhcpd.conf
此处省略一万字……
 next-server 192.168.4.7; # 下一个服务器的IP地址
 filename "pxelinux.0"; # 指明网卡引导文件名称
}

2.配置tftp服务,传输众多的引导文件

tftp:简单的文件传输协议 默认端口:69
tftp默认共享的主目录:/var/lib/tftpboot

1)安装软件
软件包(tftp-server)服务(tftp)

2)部署pxelinux.0文件
]#  yum provides */pxelinux.0  # 查询哪个包产生该文件
]# yum -y install syslinux  # 安装syslinux软件包
]#  rpm -ql syslinux | grep pxelinux.0 # 查询软件包安装清单
]#  cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
]# ls /var/lib/tftpboot/
pxelinux.0

3)部署菜单文件pxelinux.cfg/default(将光盘中的菜单文件进行复制)
]# ls /mydvd/isolinux/  # 查看光盘内容
]# mkdir /var/lib/tftpboot/pxelinux.cfg # 创建引导文件指向的文件夹
]#  cp /mydvd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
 # 使用光盘菜单文件为模板,创建装机菜单文件

4)拷贝菜单文件所需其他文件

图形模块(vesamenu.c32)与背景图片(splash.png)
#启动内核(vmlinuz)与驱动程序(initrd.img)

]# cp /mydvd/isolinux/vesamenu.c32 /mydvd/isolinux/splash.png /var/lib/tftpboot/
/]#  cp /mydvd/isolinux/vmlinuz /mydvd/isolinux/initrd.img /var/lib/tftpboot/

5)修改菜单文件default
]# vim /var/lib/tftpboot/pxelinux.cfg/default # 末行模式:set nu开行号功能
1 default vesamenu.c32 # 默认加载运行图形模块
2 timeout 600 # 读秒时间60秒,1/10秒
此处省略一万字……..
10 menu background splash.png # 背景图片
11 menu title NSD PXE Server # 菜单界面的标题
此处省略一万字……..
61 label linux
62 menu label ^Install CentOS 7 # 界面显示内容
63 menu default  # 读秒结束后默认的选项
64 kernel vmlinuz # 加载内核
65 append initrd=initrd.img # 加载驱动程序
#以下全部删除

初步测试(检查)

初步检查能否进入到安装目录界面
1.dhcpd的主配置文件
]# vim /etc/dhcp/dhcpd.conf
……………….
filename “pxelinux.0”;
}

2.tftp服务提供引导数据
]# ls /var/lib/tftpboot/
initrd.img pxelinux.cfg vesamenu.c32
pxelinux.0 splash.png vmlinuz
3.菜单文件名称
]# ls /var/lib/tftpboot/pxelinux.cfg/default
4.启动必须得服务
]# systemctl restart dhcpd
]# systemctl restart tftp
5.SELinux与防火墙
[root@svr7 ~]# setenforce 0
[root@svr7 ~]# getenforce
Permissive
[root@svr7 ~]# yum remove firewalld
6.客户机测试
3 PXE装机初步测试

3.构建FTP服务,提供光盘内容

FTP:文件传输协议 默认端口:21
默认共享数据的主目录:/var/ftp
软件包(vsftpd)软件(vsftpd)

安包,建立挂载点,测试
]# mkdir /var/ftp/centos
]# mount /dev/cdrom /var/ftp/centos
mount: /dev/sr0 写保护,将以只读方式挂载
]#  ls /var/ftp/centos
]# curl ftp://192.168.4.7/centos/

4.实现无人值守(kickstart)安装,生成应答文件

安装system-config-kickstart图形的工具
system-config-kickstart程序需要Yum仓库的支持才能显示软件包的选择,必须要求Yum仓库的标识为[development]

]# vim /etc/yum.repos.d/mydvd.repo 
[development]
name=centos7
baseurl=file:///mydvd 
enabled=1
gpgcheck=0
运行system-config-kickstart,生成ks.cfg文件

3 kickstart生成应答文件
利用FTP服务共享应答文件(应答文件拷贝纸至/var/ftp/)

]# cp /root/ks.cfg /var/ftp/
]# ls /var/ftp/
centos ks.cfg pub
]#  curl ftp://192.168.4.7/ks.cfg

修改菜单文件,指定应答文件获取方式

]# vim /var/lib/tftpboot/pxelinux.cfg/default
……..此处省略一万字
append initrd=initrd.img ks=ftp://192.168.4.7/ks.cfg

源码编译安装

RPM软件包:rpm -ivh 或者 yum -y install
源码包——开发工具gcc与make——》可以执行的程序——-》运行安装

源码编译安装的优点

–获得软件的最新版,及时修复bug
–软件功能可按需选择/定制,有更多软件可供选择
–源码包适用各种平台

源码编译安装的步骤

步骤1:安装开发工具gcc与make,释放源代码至指定目录
步骤2:tar解包,释放源代码至指定目录
步骤3:./configure 配置,指定安装目录/功能模块等选项
步骤4:make 编译,生成可执行的二进制程序文件
步骤5:make install 安装,将编译好的文件复制到安装目录

1.安装开发工具

[root@svr7 ~]# yum -y install gcc make
[root@svr7 ~]# rpm -q gcc
gcc-4.8.5-28.el7.x86_64
[root@svr7 ~]# rpm -q make
make-3.82-23.el7.x86_64

2.进行解压缩

]# tar -xf /tools/inotify-tools-3.13.tar.gz -C /usr/local/
[root@svr7 ~]# ls /usr/local/
[root@svr7 ~]# cd /usr/local/inotify-tools-3.13/
[root@svr7 inotify-tools-3.13]# ls

3.运行configure脚本(软件目录下操作)
作用1:检测当前系统是否安装gcc
作用2:指定安装位置与功能

]# cd /usr/local/inotify-tools-3.13/
]# ./configure --help
]# ./configure --prefix=/opt/myrpm  # 指定安装位置,此步骤不产生相应的目录

4.进行make编译,变成可以执行的程序(放在内存中)

[root@svr7 ~]# cd /usr/local/inotify-tools-3.13/
[root@svr7 inotify-tools-3.13]# make
[root@svr7 ~]# cd /usr/local/inotify-tools-3.13/

5.进行make install安装

[root@svr7 inotify-tools-3.13]# make install 
[root@svr7 inotify-tools-3.13]# ls /opt/
[root@svr7 inotify-tools-3.13]# ls /opt/myrpm/
[root@svr7 inotify-tools-3.13]# ls /opt/myrpm/bin/
inotifywait inotifywatch

常见的报错信息:gcc开发工具没有安装

checking for gcc... no
checking for cc... no
checking for cl.exe... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.

nginx网站服务:是搭建网站的服务

编写源码安装nginx脚本:

tar -xf lnmp_soft.tar.gz //在家目录释放软件包,这个软件包是从真机获取的    
cp lnmp_soft/nginx-1.17.6.tar.gz /opt //拷贝nginx到opt下
cd /opt //回opt写下列脚本
#!/bin/bash
yum -y install gcc make pcre-devel openssl-devel //安装依赖软件
tar -xf nginx-1.17.6.tar.gz //释放nginx的tar包
cd nginx-1.17.6 //进入目录
./configure //配置
make //编译
make install //安装

脚本写完后,检查yum必须可用!
运行完脚本后,查看 ls /usr/local/nginx 目录可以看到4个目录则成功
conf html logs sbin

systemctl stop httpd //关闭httpd避免端口冲突
/usr/local/nginx/sbin/nginx //开启nginx服务
systemctl stop firewalld //关闭防火墙
#使用浏览器访问虚拟机的网站页面http://192.168.4.7/
/usr/local/nginx/sbin/nginx -s stop //关闭nginx

rsync数据同步,inotify实时同步

复制:完全拷贝源到目标
同步:增量拷贝,只传输变化过的数据

rsync数据同步

命令用法:rsync [选项…] 源目录 目标目录
rsync操作选项
-n:测试同步过程,不做实际修改
—delete:删除目标文件夹内多余的文档
-a:归档模式,相当于-rlptgoD
-v:显示详细操作信息
-z:传输过程中启用压缩/解压

本地同步

[root@svr7 ~]# mkdir /mydir /todir
[root@svr7 ~]# cp /etc/passwd /mydir
[root@svr7 ~]# touch /mydir/1.txt
[root@svr7 ~]# ls /mydir
[root@svr7 ~]# rsync -av /mydir /todir  # 同步目录本身
[root@svr7 ~]# ls /todir
[root@svr7 ~]# rsync -av /mydir/ /todir  # 同步目录内容
[root@svr7 ~]# ls /todir

远程同步

与远程的 SSH目录保持同步
下行:rsync […] user@host:远程目录 本地目录
上行:rsync […] 本地目录 user@host:远程目录
]# rsync -av --delete /mydir/ root@192.168.4.207:/opt

inotify实时同步

命令用法:inotifywait [选项] 目标文件夹
• 常用命令选项
-m,持续监控(捕获一个事件后不退出)
-r,递归监控、包括子目录及文件
-q,减少屏幕输出信息 (-qq取消屏幕输出信息)
-e,指定监视的 modify、move、create、delete、attrib 等事件类别

实时数据同步, 实现ssh无密码验证(公钥与私钥)

虚拟机A生成公钥与私钥,将公钥传递给虚拟机B

[root@svr7 ~]# ssh-keygen # 一路回车
]# ssh-copy-id root@192.168.4.207
]# rsync -av --delete /mydir/ root@192.168.4.207:/opt

书写shell脚本,实现实时同步数据(了解)
脚本:可以运行一个文件,实现某种功能
中文:新建用户zhangsan shell: useradd zhangsan

[root@svr7 /]# vim /etc/rsync.sh
while /opt/myrpm/bin/inotifywait -rqq /mydir/
do
rsync -a --delete /mydir/ root@192.168.4.207:/opt
done
[root@svr7 /]# chmod a+x /etc/rsync.sh # 赋予执行权限
[root@svr7 /]# /etc/rsync.sh & # 运行脚本程序,放入后台运行
[root@svr7 /]# jobs -l
[1]+ 17707 运行中 /etc/rsync.sh &
[root@svr7 /]# kill 17707 # 停止脚本

数据库服务基础

数据库:存放数据的仓库,在数据库系统中,有很多的数据库,在每一个库中有很多的表格
常见的关系型 数据库管理系统
微软的 SQL Server
IBM的 DB2
甲骨文的 Oracle、MySQL
社区开源版 MariaDB

部署MariaDB 数据库系统

]# yum -y install mariadb-server
[root@svr7 /]# systemctl restart mariadb

MariaDB基本使用

  1. Linux系统的管理指令不能使用
    2. 所有的数据库系统指令都必须以 ; 结尾
    3. 数据库系统的指令大部分不支持tab补全

    基础指令

    [root@svr7 /]# mysql  # 进入数据库系统
    > create database nsd01; # 创建nsd01数据库
    > use test;  # 切换到test数据库
    > show databases;  # 查看所有数据库
    > show tables;  # 查看当前库中所有表格
    > drop database nsd01;  # 删除数据库nsd01
    > exit; # 退出数据库系统
    

    为数据库系统管理员设置密码

    数据库系统管理员:对于数据库系统有最高权限,名字为root,能够登陆数据系统的用户信息有mysql库中user表进行储存
    Linux系统管理员: 对于Linux系统有最高权限,名字为root,能够登陆Linux系统的用户信息/etc/passwd进行储存
    mysqladmin [-u用户名] [-p[旧密码]] password '新密码'
    mysql -u root -p456 #非交互式进行登录
    

    表格操作:– 增(insert) 删(delete) 改(update) 查(select)

    image.png

    查(select) 格式: select 表字段,表字段,…… from 库名.表名;
    [root@svr7 /]# mysql -u root -p123
    > use nsd2104;
    > select * from base; # 查看base所有表字段内容
    > select * from location; # 查看location所有表字段内容
    > use test; # 进入test库
    > select * from nsd2104.base;  # 查询nsd2104库中的base表
    > use nsd2104;
    > select id,name from base;
    > select * from base where password='456';
    > select * from base where id='4';
    > select * from base where id='4' and password='123';
    > select * from base where id='4' or password='123';
    
    增(insert)格式:insert 表名 values (‘值’,‘值’,‘值’);
    MariaDB [nsd2104]> insert base values('10','dc','789');
    MariaDB [nsd2104]> insert base values('11','tcc','369');
    MariaDB [nsd2104]> select * from base ;
    
    改(update)格式:update 表名 set 表字段=‘新值’ where 表字段=’值’;
    > select * from base ;
    > update base set password='8888' where id='1';
    > select * from base ; 
    > update base set password='9999' where id='2';
    > select * from base ;
    
    删(delete)格式:delete from 表名 where 表字段=’值’;
    > use nsd2104;
    > delete from base where id='4' ;
    > select * from base ;
    

Linux容器基础

容器介绍

  1. Linux中的容器是装应用的
    2. 容器就是将软件打包成标准化单元,用于开发、交付和部署
    3. 容器技术已经成为应用程序封装和交付的核心技术

    容器优缺点

    优点:– 相比于传统的虚拟化技术,容器更加简洁高效
    – 传统虚拟机需要给每个VM安装操作系统
    – 容器使用的共享公共库和程序
    缺点:– 容器的隔离性没有虚拟化强
    –共用Linux内核,安全性有先天缺陷

    仓库、镜像、容器

    镜像是启动容器的核心,镜像由镜像仓库提供
    在podman中容器是基于镜像启动的

    模块化(软件包组)安装:类似于安装一组软件包

    [root@rhel8 ~]# yum module list # 列出都有哪些模块
    [root@rhel8 ~]# yum -y module install container-tools
    

    podman和容器的关系

    – podman是完整的一套容器管理系统
    – podman提供了一组命令,让用户更加方便直接地使用容器技术,而不需要过多关心底层内核技术

    镜像

    镜像是启动容器的核心
    在podman中容器是基于镜像启动的
    镜像采用分层设计
    使用COW(copy on write)写时拷贝技术
    镜像的名称标识
    – 每一个镜像都对应唯一的镜像 id;镜像名称+ 标签 = 唯一
    – 每一个镜像都有标签,如果没写就是默认标签 latest
    – 我们在调用镜像的时候,如果没有指定标签也是 latest
    镜像管理命令
    查找镜像(需要能访问互联网)
    podman search httpd
    下载镜像(需要能访问互联网)
    podman pull localhost/myos:latest
    导入镜像
    podman load -i /root/httpd.tar.gz
    查看镜像
    podman images
    删除镜像
    podman rmi 镜像名称:镜像标签

    使用容器

    podman run -选项 镜像名称:镜像标签 启动命令
    • 查看 run 的选项 run = 创建 + 启动 + 进入
    podman help run
    man podman-run
    podman run 命令的选项
    – 选项 -i,交互式
    – 选项 -t,终端
    – 选项 -d,后台运行
    – 选项 —name 容器名字
    启动容器,并进入容器
    podman run -it myos:latest /bin/bash

    容器管理命令

    启动容器

    – podman run –选项 镜像名称:镜像标签 启动命令
    ]# podman run --name yyds -it localhost/myos:httpd /bin/bash
    

    查看容器

    – podman ps [ -a 所有容器id ] [ -q 只显示容器 id ]
    ]#podman ps -a# 查看所有容器
    

    删除容器

    – podman rm 容器id
    ]# podman rm -f abc01  # 强制删除abc01容器
    

    容器管理命令启动、停止、重启

    – podman start|stop|restart 容器id

    进入容器

    – podman exec -it 容器id 启动命令
    ]# podman exec -it abc01 /bin/bash  # 进入abc01容器
    

    容器初步练习

    ]# touch /etc/resolv.conf  #容器启动时需要有dns文件存在(centos系统bug)
    ]# podman run -it localhost/myos:httpd /bin/bash
    [root@2b0b7c62ab42 /]# cat /etc/redhat-release
    [root@2b0b7c62ab42 /]# useradd dc
    [root@2b0b7c62ab42 /]# id dc
    [root@2b0b7c62ab42 /]# exit
    [root@rhel8 ~]# podman ps -a # 查看当前系统容器
    [root@rhel8 ~]# podman start 2b # 利用容器id开启容器
    [root@rhel8 ~]# podman exec -it 2b /bin/bash # 进入容器
    [root@2b0b7c62ab42 /]# id dc
    [root@2b0b7c62ab42 /]# exit
    [root@rhel8 ~]# podman ps -a
    [root@rhel8 ~]# podman stop 2b # 利用容器id停止容器
    [root@rhel8 ~]# podman ps -a 
    [root@rhel8 ~]# podman rm 2b # 利用容器id删除容器
    [root@rhel8 ~]# podman ps -a
    

    容器放入后台练习

    ]# podman run --name abc01 -d localhost/myos:httpd
    ]# podman ps -a # 查看所有容器
    ]# podman exec -it abc01 /bin/bash # 进入abc01容器
    [root@962aa837e17b /]#  cd /
    [root@962aa837e17b /]#  useradd tc
    [root@962aa837e17b /]#  id tc
    uid=1000(tc) gid=1000(tc) groups=1000(tc)
    [root@962aa837e17b /]#  exit
    [root@rhel8 ~]#  podman ps -a # 查看所有容器
    [root@rhel8 ~]# podman rm -f abc01 # 强制删除abc01容器
    [root@rhel8 ~]#  podman ps -a
    

    对外发布容器服务(端口绑定)

    • 容器可以与宿主机的端口进行绑定
    • 从而把宿主机变成对应的服务,不用关心容器的IP地址
    • 我们使用 -p 参数把容器端口和宿主机端口绑定
    同一宿主机端口只能绑定一个容器服务
    -p [可选IP]:宿主机端口:容器端口
    • 例如:把宿主机变成 apache
    podman run -itd -p 80:80 myos:httpdsu
    • 例如:把宿主机变成 nginx
    podman run -itd -p 80:80 myos:nginx
    容器放入后台,端口绑定练习
    ]# podman run --name nsdweb -p 80:80 -d localhost/myos:httpd 
    [root@rhel8 ~]# podman ps -a
    [root@rhel8 ~]#  podman exec -it nsdweb /bin/bash
    [root@5b69bf6956b0 html]# echo wo shi nsdweb > /var/www/html/index.html 
    [root@5b69bf6956b0 html]# /usr/sbin/httpd # 手动启动
    [root@5b69bf6956b0 html]# exit
    exit
    [root@rhel8 ~]# curl http://192.168.4.200
    wo shi nsdweb
    [root@rhel8 ~]# podman rm -f nsdweb # 强制删除容器
    

    容器共享卷

    • podman容器不适合保存任何数据
    • podman可以映射宿主机文件或目录到容器中
    – 目标对象不存在就自动创建
    – 目标对象存在就直接覆盖掉
    – 多个容器可以映射同一个目标对象来达到数据共享的目的
    • 启动容器时,使用 -v 映射参数
    podman run -itd -v 宿主机对象:容器内对象 镜像名称:标签
    容器终极练习
    ]# podman rm -f nsdweb # 强制删除容器
    ]# podman run --name rqweb -p 80:80 -v /opt:/var/www/html -dlocalhost/myos:httpd 
    [root@rhel8 ~]# echo wo shi niuniubenben > /opt/index.html
    [root@rhel8 ~]# curl 192.168.4.200 
    wo shi niuniubenben
    [root@rhel8 ~]#
    

    管理系统服务

    • systemd一个更高效的系统&服务管理器
    – 开机服务并行启动,各系统服务间的精确依赖
    – 服务目录:/usr/lib/systemd/system/
    – 主要管理工具:systemctl
    • 管理员服务文件默认路径
    – /usr/lib/systemd/system/
    • 生成服务启动配置文件
    —files:生成文件类型
    podman generate systemd —name 容器名 —files
    • 重新加载服务启动配置文件
    systemctl daemon-reload
    容器之光练习(必须是相对路径,当前路径必须是)
    ]# cd /usr/lib/systemd/system
    ]# podman ps -a
    ]# podman generate systemd --name rqweb --files
    ]# vim container-rqweb.service
    ]# systemctl daemon-reload # 重新加载服务配置文件
    ]# podman stop rqweb # 手动停止 
    ]# podman ps -a
    ]# systemctl start container-rqweb # 利用systemd方式管理
    ]# podman ps -a
    ]# systemctl enable container-rqweb # 设置开机自启