web部署,shell,ansible自动化部署

准备工作

#本地源
[root@localhost yum.repos.d]# cat base.repo
[base]
name=base
baseurl=file:///mnt/BaseOS
gpgcheck=0

[app]
name=appstream
baseurl=file:///mnt/AppStream
gpgcheck=0
[root@localhost yum.repos.d]# mount   /dev/sr0   /mnt
[root@localhost yum.repos.d]# ll  /mnt/AppStream/
total 986
dr-xr-xr-x. 2 root root 1005568 Apr  4  2020 Packages
dr-xr-xr-x. 2 root root    4096 Apr  4  2020 repodata
[root@localhost yum.repos.d]# ll /mnt/BaseOS/
total 296
dr-xr-xr-x. 2 root root 301056 Apr  4  2020 Packages
dr-xr-xr-x. 2 root root   2048 Apr  4  2020 repodata

第一部分 网络服务

第一章 例行性工作

1、单一执行的例行性工作

**单一执行的例行性工作:**仅处理执行一次就结束了

1.1 at命令的工作过程
  • /etc/at.allow,写在该文件的人可以使用at命令

  • /etc/at.deny,黑名单

  • 两个文件如果都不存在,只有root能使用

#at工作调度对应的系统服务
[root@localhost ~]# systemctl status atd
#at的工作文件存放目录
[root@localhost ~]# ll  /var/spool/at
#at工作的日志文件
[root@localhost ~]# ll /var/log/cron
1.2 at命令详解

命令格式:at [参数] [时间]

参数:
-m 当任务完成之后,即使没有标准输出,将给用户发送邮件
-l atq的别名,可列出目前系统上面的所有该用户的at调度
-d atrm的别名,可以取消一个在at调度中的工作
-v 使用较明显的时间格式,列出at调度中的任务列表
-c 可以列出后面接的该项工作的实际命令内容
-f 从文件中读取作作业
时间格式:
HH:MM  在今天的HH小时MM分钟执行,如果今天的这个时间点已经过了,则明
天执行
HH:MM YYYY-MM-DD  强制规定在某年某月的某一天的特殊时刻进行该工作
now + 2 minutes 从现在开始几分钟minutes, hours, days, or weeks
#定义三分钟之后显示hello
[root@server ~]# at now + 3 minutes

2、循环执行的例行性工作

循环执行的例行性工作:每隔一定的周期就需要执行一次

2.1 crontab的工作过程
  • /etc/cron.allow,写在该文件的人可以使用at命令

  • /etc/cron.deny,黑名单

  • 两个文件如果都不存在,只有root能使用

#crontab工作调度对应的系统服务
[root@localhost ~]# systemctl status crond
#crontab工作的日志文件
[root@localhost ~]# ll /var/log/cron
#用户定义计划任务的文件所在目录
[root@localhost ~]# ll /var/spool/cron/

2.2 crontab命令详解
[root@localhost ~]# crontab  --help
crontab: invalid option -- '-'
crontab: usage error: unrecognized option
Usage:
 crontab [options] file
 crontab [options]
 crontab -n [hostname]

Options:
 -u <user>  define user
 -e         edit user's crontab
 -l         list user's crontab
 -r         delete user's crontab
 -i         prompt before deleting
 -n <host>  set host in cluster to run users' crontabs
 -c         get host in cluster to run users' crontabs
 -s         selinux context
 -V         print version and exit
 -x <mask>  enable debugging

crontab计划任务的时间格式:

0-59 0-23 1-31 1-12 0-7

crontab计划任务的时间格式中的特殊符号:

特殊字符 含义
* 代表任何时刻
, 代表分隔时段
- 代表一段时间范围
/数字 指定时间的间隔频率,例如每 3 分钟进行一次,*/3

注:%在crontab里面有特殊含义,如果有命令里面需要使用%,需要使用\转义。

#每天早上9点整说good morning
[root@server ~]# crontab -e
0 9 * * * wall "good morning"

注:wall命令用于向系统当前所有打开的终端上输出信息。
通过wall命令可将信息发送给每位同意接收公众信息的终端机用户,若不给予其信息内容,则wall命令会从标准输入设备读取数据,然后再把所得到的数据传送给所有终端机用户。

2.3 系统的计划任务
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

当需要同一时间执行多个脚本时,可以将这多个脚本放在一个目录下,然后使用run-parts来执行。

run-parts:该命令可将后面接的“目录”内的所有文件找出来执行。

第二章 时间服务器

NTP 是网络时间协议(Network Time Protocol)的简称,通过 udp 123 端口进行网络时钟同步。

Chrony是一个开源自由的网络时间协议 NTP 的客户端和服务器软件。它能让计算机保持系统时钟与时钟服务器(NTP)同步,因此让你的计算机保持精确的时间,Chrony也可以作为服务端软件为其他计算机提供时间同步服务。

Chrony由两个程序组成,分别是chronyd和chronyc。
chronyd是一个后台运行的守护进程,用于调整内核中运行的系统时钟和时钟服务器同步。它确定计算机增减时间的比率,并对此进行补偿。
chronyc提供了一个用户界面,用于监控性能并进行多样化的配置。它可以在chronyd实例控制的计算机上工作,也可以在一台不同的远程计算机上工作。

1、软件安装

#设置当前时区
[root@localhost ~]# timedatectl set-timezone Asia/Shanghai
[root@localhost ~]# yum install -y chrony
[root@localhost ~]# systemctl enable --now chronyd
[root@server1 ~]# cat /etc/chrony.conf
#设置时间服务器的服务端名字
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst    
# Allow NTP client access from local network.
#设置允许哪个客户端可以访问该服务器
#allow 192.168.0.0/16

2、配置时间服务器客户端

[root@server1 ~]# vim  /etc/chrony.conf
#此处服务器可以写国内的
server ntp.aliyun.com iburst
[root@localhost ~]# systemctl restart  chronyd
[root@server1 ~]# chronyc sources
210 Number of sources = 2
MS Name/IP address         Stratum Poll Reach LastRx Last sample
===============================================================================
^* 203.107.6.88                  2   6     7     1   -705us[ -5240s] +/-   28ms
^? ntp1.flashdance.cx            0   6     0     -     +0ns[   +0ns] +/-    0ns

* 表示chronyd当前同步到的源
+ 表示可接受的信号源,与选定的信号源组合在一起
? 指示已失去连接性或其数据包未通过所有测试的源。它也显示在启动时,直到从中至少收集了3个样本为止

3、配置时间服务器服务端

#需要两个服务器,一个服务端(服务端ip:192.168.168.253),一个客户端测试(客户端主机ip网段为192.168.168.0/24)
#服务端的配置
[root@localhost ~]# systemctl  disable --now firewalld
[root@localhost ~]# grep allow /etc/chrony.conf
allow 192.168.168.0/24
#allow  0.0.0.0/0
[root@localhost ~]# systemctl  restart chronyd
#客户端访问,先ping时间服务器
[root@localhost ~]# ping 192.168.168.253
[root@localhost ~]# grep iburst /etc/chrony.conf
server 192.168.168.253 iburst
[root@localhost ~]# systemctl  restart chronyd
[root@localhost ~]# chronyc sources

第三章 远程连接服务器

1、远程连接服务器简介

(1)什么是远程连接服务器
远程连接服务器通过文字或图形接口方式来远程登录系统,让你在远程终端前登录linux主机以取得可操作主机接口(shell),而登录后的操作感觉就像是坐在系统前面一样。

(2)远程连接服务器的功能

分享主机的运算能力
(3)远程连接服务器的类型(以登录的连接界面来分类)

  • 文字接口
    明文传输:Telnet、RSH等,目前非常少用
    加密传输:SSH为主,已经取代明文传输
  • 图形接口:XDMCP、VNC、XRDP等

(4)文字接口连接服务器
SSH(Secure Shell Protocol,安全的壳程序协议)它可以通过数据包加密技术将等待传输的数据包加
密后再传输到网络上。ssh协议本身提供两个服务器功能:一个是类似telnet的远程连接使用shell的服务器;另一个就是类似ftp服务的sftp-server,提供更安全的ftp服务。

2、连接加密技术简介

目前常见的网络数据包加密技术通常是通过“非对称密钥系统”来处理的。主要通过两把不一样的公钥与私钥来进行加密与解密的过程 。

公钥(public key):提供给远程主机进行数据加密的行为,所有人都可获得你的公钥来将数据加密。
私钥(private key):远程主机使用你的公钥加密的数据,在本地端就能够使用私钥来进行解密。私钥只有自己拥有。
SSH工作过程:在整个通讯过程中,为实现SSH的安全连接,服务端与客户端要经历如下五个阶段:

过程 说明
版本号协商阶段 SSH目前包括SSH1和SSH2两个版本,双方通过版本协商确定使用的版本
密钥和算法协商阶 段 SSH支持多种加密算法,双方根据本端和对端支持的算法,协商出最终使用 的算法
认证阶段 SSH客户端向服务器端发起认证请求,服务器端对客户端进行认证
会话请求阶段 认证通过后,客户端向服务器端发送会话请求
交互会话阶段 会话请求通过后,服务器端和客户端进行信息的交互

(1)版本协商阶段

1、服务器端打开端口22,等待客户端连接;
2、客户端向服务器端发起TCP初始连接请求,TCP连接建立后,服务器向客户端发送第一个报文,包括版本标志字符串,格式为“SSH-<主协议版本号>.<次协议版本号>.<软件版本号>”,协议版本号由主版本号和次版本号组成,软件版本号主要是为调试使用。
3、客户端收到报文后,解析该数据包,如果服务器的协议版本号比自己的低,且客户端能支持服务器端的低版本,就使用服务器端的低版本协议号,否则使用自己的协议版本号。
4、客户端回应服务器一个报文,包含了客户端决定使用的协议版本号。服务器比较客户端发来的版本号,决定是否能同客户端一起工作。如果协商成功,则进入密钥和算法协商阶段,否则服务器断开TCP连接。
说明:上述报文都是采用明文方式传输。

(2)密钥和算法协商阶段

1、服务器端和客户端分别发送算法协商报文给对端,报文中包含自己支持的公钥算法列表、加密算法列表、MAC(Message Authentication Code,消息验证码)算法列表、压缩算法列表等等。
2、服务器端和客户端根据对端和本端支持的算法列表得出最终使用的算法。
3、服务器端和客户端利用DH交换(Diffie-Hellman Exchange)算法、主机密钥对等参数,生成会话密钥和会话ID。
由此,服务器端和客户端就取得了相同的会话密钥和会话ID。对于后续传输的数据,两端都会使用会话密钥进行加密和解密,保证了数据传送的安全。在认证阶段,两端会使用会话用于认证过程。

会话密钥的生成:

  1. 客户端需要使用适当的客户端程序来请求连接服务器,服务器将服务器的公钥发送给客户端。(服务器的公钥产生过程:服务器每次启动sshd服务时,该服务会主动去找/etc/ssh/ssh_host*文件,
    若系统刚装完,由于没有这些公钥文件,因此sshd会主动去计算出这些需要的公钥文件,同时也会计算出服务器自己所需要的私钥文件。)
  2. 服务器生成会话ID,并将会话ID发给客户端。
  3. 若客户端第一次连接到此服务器,则会将服务器的公钥数据记录到客户端的用户主目录内的~/.ssh/known_hosts。若是已经记录过该服务器的公钥数据,则客户端会去比对此次接收到的与之前的记录是否有差异。客户端生成会话密钥,并用服务器的公钥加密后,发送给服务器。
  4. 服务器用自己的私钥将收到的数据解密,获得会话密钥。
  5. 服务器和客户端都知道了会话密钥,以后的传输都将被会话密钥加密。

(3)认证阶段

SSH提供两种认证方法:
基于口令的认证(password认证):客户端向服务器发出password认证请求,将用户名和密码加密后发送给服务器,服务器将该信息解密后得到用户名和密码的明文,与设备上保存的用户名和密码进行比较,并返回认证成功或失败消息。
基于密钥的认证(publickey认证):客户端产生一对公共密钥,将公钥保存到将要登录的服务器上的那个账号的家目录的.ssh/authorized_keys文件中。认证阶段:客户端首先将公钥传给服务器端。服务器端收到公钥后会与本地该账号家目录下的authorized_keys中的公钥进行对比,如果不相同,则认证失败;否则服务端生成一段随机字符串,并先后用客户端公钥和会话密钥对其加密,发送给客户端。客户端收到后将解密后的随机字符串用会话密钥发送给服务器。如果发回的字符串与服务器端之前生成的一样,则认证通过,否则,认证失败。
注:服务器端对客户端进行认证,如果认证失败,则向客户端发送认证失败消息,其中包含可以再次认证的方法列表。客户端从认证方法列表中选取一种认证方法再次进行认证,该过程反复进行。直到认证成功或者认证次数达到上限,服务器关闭连接为止。

3、ssh服务配置

#ssh服务安装包openssh-server
[root@server1 ~]# vim /etc/ssh/sshd_config
17.#Port 22 #监听端口,默认监听22端口 【默认可修改】
18.#AddressFamily any #IPV4和IPV6协议家族用哪个,any表示二者均有
19.#ListenAddress 0.0.0.0 #指明监控的地址,0.0.0.0表示本机的所有地址 【默认可修改】
20.#ListenAddress :: #指明监听的IPV6的所有地址格式
28.HostKey /etc/ssh/ssh_host_rsa_key # rsa私钥认证 【默认】
29.#HostKey /etc/ssh/ssh_host_dsa_key # dsa私钥认证
30.HostKey /etc/ssh/ssh_host_ecdsa_key # ecdsa私钥认证
31.HostKey /etc/ssh/ssh_host_ed25519_key # ed25519私钥认证
43.SyslogFacility AUTHPRIV #当有人使用ssh登录系统的时候,SSH会记录信息,信息保存在/var/log/secure里面
48.#LoginGraceTime 2m #登录的宽限时间,默认2分钟没有输入密码,则自动断开连接
49.#PermitRootLogin yes #是否允许管理员远程登录,'yes'表示允许
51.#MaxAuthTries 6 #最大认证尝试次数,最多可以尝试6次输入密码。之后需要等待某段时间后才能再次输入密码
52.#MaxSessions 10 #允许的最大会话数
59.AuthorizedKeysFile .ssh/authorized_keys #选择基于密钥验证时,客户端生成一对公私钥之后,会将公钥放到.ssh/authorizd_keys里面
79.PasswordAuthentication yes #是否允许支持基于口令的认证
83.ChallengeResponseAuthentication no #是否允许使用键盘输入身份验证,也就是xshell的第三个登录方式
129.#UseDNS yes #是否反解DNS,如果想让客户端连接服务器端快一些,这个可以改为no
146.Subsystem sftp /usr/libexec/openssh/sftp-server #支持 SFTP ,如果注释掉,则不支持sftp连接
154.AllowUsers user1 user2 #登录白名单(默认没有这个配置,需要自己手动添加),允许远程登录的用户。如果名单中没有的用户,则提示拒绝登录

4、用户登录ssh服务器

实验1:修改ssh服务的端口号

#修改ssh服务的端口号
[root@server1 ~]# vim /etc/ssh/sshd_config
Port 2222
[root@server1 ~]# systemctl disable firewalld
[root@server1 ~]# setenforce  0
[root@server1 ~]# getenforce
Permissive
[root@server1 ~]# systemctl restart sshd

实验2:拒绝root用户远程登陆

#请保持服务器上至少有一个可以远程登陆的普通远程账号
#修改配置文件如下:
#打开该选项并修改参数为no
PermitRootLogin no
#重启服务后生效,使用时使用普通用户进行登陆,需要使用root用户时再切换

实验3:允许特定用户ssh登陆,其他用户都无法登陆

#编辑配置文件,在最后添加如下内容:
AllowUsers USERNAME
#USERNAME为你允许登陆的账号【需要在系统中useradd该账号】,如果是多个用户,中间用空格隔开
#重启ssh服务后生效

实验4:linux客户端通过秘钥登录linux服务端root用户

#创建密钥对
[root@web ~]# ssh-keygen -t rsa
ssh-keygen 生成、管理和转换认证密钥 -t制定类型 RSA
/root/.ssh/id_rsa私钥文件
/root/.ssh/id_rsa.pub公钥文件
#复制该公钥文件到服务端的该目录下
[root@web ~]# ssh-copy-id root@192.168.40.132
#在本地服务器上登陆对端服务器
[root@web ~]# ssh root@192.168.40.132

第四章 web服务器

1、web服务器简介

(1)什么是www

www是world wide web的缩写,也就是全球信息广播的意思。通常说的上网就是使用www来查询用户所需要的信息。www可以结合文字、图形、影像以及声音等多媒体,并通过可以让鼠标单击超链接的方式将信息以Internet传递到世界各处去。

与其他服务器类似,当你连接上www网站,该网站肯定会提供一些数据,而你的客户端则必须要使用可以解析这些数据的软件来处理,那就是浏览器。www服务器与客户端浏览器之间的连接图。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F7pRLUqz-1690724902593)(https://zyj-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20230201155653743.png)]

1、 www所用的协议: 浏览器怎样向web服务器请求数据以及服务器怎样把文档传送给浏览器呢?这就是由http协议来定义的,(Hyper Text Transport Protocol,HTTP,超文本传输协议)。
2、www服务器需要提供可让客户端浏览的平台。目前最主流的Web服务器是Apache、Microsoft的Internet信息服务器(Internet Information Services,IIS)和unix nginx。
3、服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓的标记来规范所要显示的数据格式。
4、客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。那么著名的浏览器就有内建在Windows操作系统内的IE浏览器了,还有Firefox浏览器和Google的chrome浏览器。

(2)网址及HTTP简介

web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在 /var/www/html 。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。

  • URL:Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。

  • 网址格式:<协议>://<主机或主机名>[:port]/<目录资源,路径>

    • 浏览器常支持的协议有:http、https、ftp等。
    • 主机地址或者主机名:主机地址就是服务器在因特网所在的IP地址。如果是主机名的话,那么就需要域名解析了。
    • 端口号(port):http为80,https为443 (IANA:互联网数字分配机构)
      • 0-1023:众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限启用并让进程监听)
      • 1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/TCP
      • 41952-60000:客户端程序随机使用的端口,动态端口,或私有端口
  • http请求方法:在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执行哪些具体的动作,这些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文件等。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lpuSXtk5-1690724902595)(https://zyj-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20230201160555922.png)]

  • 状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。

    • 1xx:指示信息 —— 表示请求已接收,继续处理
    • 2xx:成功 —— 表示请求已被成功接收、理解、接受
    • 3xx:重定向 —— 要完成请求必须进行更进一步的操作
    • 4xx:客户端错误 —— 请求有语法错误或请求无法实现
    • 5xx:服务器端错误 —— 服务器未能实现合法的请求
    • 常见状态代码、状态描述的说明如下:
      • 200 OK:客户端请求成功
      • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解
      • 401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
      • 403 Forbidden:服务器收到请求,但是拒绝提供服务
      • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL
      • 500 Internal Server Error:服务器发生不可预期的错误
      • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
  • HTTP报文:http报文中有很多行内容,这些行的字段内容都是由一些ASCII码串组成,但各个字段的长度是不同的。http报文可分为两种,一种是从web客户端发往web服务器的http报文,称为请求报文。另外一种是从web服务器发往web客户端的报文,称为响应报文 。

    • http请求报文由请求行、请求头部、空行和请求报文主体几个部分组成

      报文格式 报文信息 说明
      请求行 请求方法 URL 协议版本 请求行是请求报文的第一行,用来说明客户端想要做什么
      请求头 字段名1:值1 字段名2:值2 …… Accept:image/gif,image/jpeg 媒体类型
      Accept-Language:zh-cn 语言类型
      Accept-Encoding:gzip,deflate 支持压缩
      User-Agent:Mozilla/4.0(compatible:MSIE6.0;Windows NT;……) 客户端类型
      Host:www.ceshi.com 主机名
      空行 空白无内容 通知web服务器空行以下不会有请求头部的信息了
      请求报文主体 GET方法没有请求报文主体,POST方法才有 请求报文主体中包括了要发送给web服务器的数据信息。请求报文主体不会应用于http的GET命令方法,而是应用于post方法。
    • http响应报文由起始行、响应头部、空行和响应报文主体这几个部分组成

      报文格式 报文信息 说明
      起始行 协议及版本号 数字状态码 状态信息 用来说明服务器响应客户端请求的状况,例如:HTTP/1.1 200 OK
      响应头部 字段名1:值1 字段名2:值2 常见的头部信息: Content-Length: 81 说明响应主体的长度 Content-Type: text/html; charset=UTF-8 说明文档的MIME类型
      空行 空白无内容 通知客户端空行以下无头部信息了
      响应报文主体 test this is test 响应报文主体中装载了要返回给客户端的数据,这些数据可以是文本,也可以是二进制的(如图片,视频)。
  • MIME(Multipurpose Internet Mail Extension,多用途因特网邮件扩展)最初是为了解决在
    不同的电子邮件系统之间搬移报文时存在的问题。后来http也支持了这个功能,用它来描述数据并
    标记不同的数据内容类型。
    当web服务器响应http请求时,会为每一个http对象数据加一个MIME类型。当web浏览器获
    取到服务器返回的对象时,会去查看相关的MIME类型,并进行相应的处理。
    MIME类型存在于HTTP响应报文的响应头部信息里,它是一种文本标记,表示一种主要的对象
    类型和一个特定的子类型。常见的MIME类型:

    MIME类型 文件类型
    text/html html、htm、shtml文本类型
    text/css css文本类型
    text/xml xml文本类型
    image/gif gif图像类型
    image/jpeg jpeg、jpg图像类型
    application/javascript js文本类型
    text/plain txt文本类型
    application/json json文本类型
    video/mp4 mp4视频类型
    video/quicktime mov视频类型
    video/x-flv flv视频类型
    video/x-ms-wmv wmv视频类型
    video/x-msvideo avi视频类

(3)http协议请求的工作流程

(1)终端客户在web浏览器地址栏输入访问地址http://www.ceshi.com:80/index.html
(2)web浏览器请求DNS服务器把域名www.ceshi.com解析成web服务器的IP地址
(3)web浏览器将端口号(默认是80)从访问地址(URL)中解析出来
(4)web浏览器通过解析后的ip地址及端口号与web服务器之间建立一条TCP连接
(5)建立TCP连接后,web浏览器向web服务器发送一条HTTP请求报文
(6)web服务器响应并读取浏览器的请求信息,然后返回一条HTTP响应报文。
(7)web服务器关闭HTTP连接,关闭TCP连接,web浏览器显示访问的网站内容到屏幕上。

2、web服务器的类型

(1)仅提供用户浏览的单向静态网页
单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,所以你可以到该网站上去浏览,但是无法进行数据的上传。

(2)提供用户互动接口的动态网站
这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过“网页程序语言”来实现与用户互动的行为。常见的例如:PHP网页程序语言,配合数据库系统来进行数据的读、写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库的内容,网页程序并没有任何改变。
另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码(JavaScript)传送给客户端,客户端的浏览器如果提供JavaScript的功能,那么该程序就可以在客户端的计算机上面工作了;另外一种可在客户端执行的就是flash动画格式,在这种动画格式内还可以进行程序设计。搭建动态网站的需求:

LAMP(linux+Apache+MySQL+PHP)
Apache主要提供www的服务器平台
MySQL:传统的文件读取是很麻烦的,如果你只要读取该文件当中的一小部分,系统还是会将整个文件读出来,若又有人同时读取同一个文件时,那就会造成效率与系统上的问题,所以才会有数据库系统的推出。数据库其实是一种特殊格式的文件,这种文件要通过特殊接口(数据库软件)来进行读写。由于这个特殊接口已经针对数据的查询、写入做过优化设计,因此很适合多人同时写入与查询工作。
PHP:PHP可以被用来建立动态网页,PHP程序代码可以直接在HTML网页当中嵌入,就像编辑HTML网页一样简单。PHP是一种“程序语言”,这种程序语言可以直接在网页当中编写,不需要经过编译即可执行。

3、web服务器基本配置

服务器端:在linux上面实现网页服务器需要Apache这套服务器软件,httpd提供Apache主程序 http://httpd.apache.org/docs/2.4/

[root@localhost ~]# yum install httpd -y
[root@localhost ~]# rpm -ql httpd
[root@localhost httpd]# tree /etc/httpd
/etc/httpd
├── conf
│ ├── httpd.conf
│ └── magic
├── conf.d
│ ├── autoindex.conf
│ ├── README
│ ├── userdir.conf
│ └── welcome.conf
├── conf.modules.d
│ ├── 00-base.conf
│ ├── 00-dav.conf
│ ├── 00-lua.conf
│ ├── 00-mpm.conf
│ ├── 00-proxy.conf
│ ├── 00-systemd.conf
│ └── 01-cgi.conf
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
└── run -> /run/httpd
配置文件:
1. 主要的配置文件 /etc/httpd/conf/httpd.conf 。
2. 额外的参数文件 /etc/httpd/conf.d/*.conf 。
如果你不想要修改原始配置文件httpd.conf的话,那么你可以将你自己的额外参数文件独立出来,例如你想要有自己的额外设置值,可以将它写入 /etc/httpd/conf.d/zhuji.conf (注意,扩展名一定是.conf),而启动Apache时,这个文件就会被读入主要配置文件当中了。
3. 默认的首页所在目录 /var/www/html/ ,当输入网址时所显示的数据,就是放在这个目录当中的首页文件(默认为index.html)。
4. 默认给一些可执行的CGI(网页程序)程序放置的目录 /var/www/cgi-bin/ ,当输入网址/cgi-bin/时所显示的数据所在。
5. 默认的Apache日志文件都放在 /var/log/httpd/ ,对于流量比较大的网站来说,一个星期的日志文件的数据可以达到1GB左右。
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
31 ServerRoot "/etc/httpd" #http服务的顶级目录为/etc/httpd
42 Listen 80 #监听在80端口,80为web服务器的默认端口
56 Include conf.modules.d/*.conf #括/etc/httpd/conf.modules.d/*.conf的所有文件
66 User apache #服务的用户(ps -ef | grep httpd,先以root用户把/usr/sbin/httpd服务启动起来)。启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全 
67Group apache
86 ServerAdmin root@localhost #你的邮箱,有事的时候给你发邮件
95 #ServerName www.example.com:80 ServerName 0.0.0.0:80匹配任意IP地址,监听端口在80端口
注:默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定ip地址,当这项不正确的时候服务器不能正常启动。解决办法就是启动该项把www.example.com:80修改为自己的域名或者直接修改为localhost
102 <Directory /> #目录为根,<>为起始标志,</>为结束标志
103 AllowOverride none #不允许这个目录下的访问控制文件来改变这里的配置,这也意味着不
用查看这个目录下的访问控制文件。
104 Require all denied #拒绝访问根
105 </Directory> #和<Directory />是一组标签,目录控制容器
119 DocumentRoot "/var/www/html" #网页文件存放的目录
124 <Directory "/var/www">
125 AllowOverride None
126 # Allow open access:
127 Require all granted
128 </Directory>
131 <Directory "/var/www/html">
144 Options Indexes FollowSymLinks #索引,跟踪软链接
151 AllowOverride None
156 Require all granted
157 </Directory>
163 <IfModule dir_module> #加载一个目录模块
164 DirectoryIndex index.html
165 </IfModule>
171 <Files ".ht*"> #不能访问
172 Require all denied
173 </Files>
182 ErrorLog "logs/error_log"
189 LogLevel warn
191 <IfModule log_config_module>
#日志配置模块 /var/log/httpd,日志模块:通过时间节点去记录(man date)
196 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{ Referer}i\" \"%{UserAgent}i\"" combined
197 LogFormat "%h %l %u %t \"%r\" %>s %b" com mon
198
199 <IfModule logio_module>
201 LogFormat "%h %l %u %t \"%r\" %>s %b \" %{Referer}i\" \"%{UserAgent}i\" %I %O" combi nedio
202 </IfModule>
217 CustomLog "logs/access_log" combined
218 </IfModule>
220 <IfModule alias_module> #别名模块
247 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
248
249 </IfModule>
#cgi(通用网关接口)是web服务器运行时外部程序的规范,按cgi编写的程序可以扩展服务器的功能。cgi应用程序能与浏览器进行交互,还可通过数据库API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据
255 <Directory "/var/www/cgi-bin">
256 AllowOverride None
257 Options None
258 Require all granted
259 </Directory>
261 <IfModule mime_module> #多用途互联网邮件扩展模块
266 TypesConfig /etc/mime.types
283 AddType application/x-compress .Z
284 AddType application/x-gzip .gz .tgz
305 AddType text/html .shtml
306 AddOutputFilter INCLUDES .shtml
307 </IfModule>
#mime多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
316 AddDefaultCharset UTF-8 #默认字符集
318 <IfModule mime_magic_module>
324 MIMEMagicFile conf/magic
325 </IfModule>
348 EnableSendfile on
353 IncludeOptional conf.d/*.conf
[root@localhost ~]#systemctl disable firewalld --now
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# systemctl status httpd | less
Aug 31 03:35:09 localhost.localdomain httpd[7374]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
#httpd:无法使用localhost.localdomain可靠地确定服务器的完全限定域名。 全局设置“ServerName”指令以禁止显示此消息
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
servername 0.0.0.0:80
[root@localhost ~]# systemctl restart httpd
#测试可以使用curl命令访问web服务器或者使用浏览器访问

4、虚拟主机配置实战

4.1 搭建静态网站——基于http协议的静态网站

实验1:搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面 。

[root@localhost ~]# echo hello world > /var/www/html/index.html
[root@localhost ~]# curl 192.168.126.140
hello world

实验2:建立两个基于ip地址访问的网站,要求如下

  • 该网站ip地址的主机位为100,设置DocumentRoot为/www/ip/100,网页内容为:this is 100。
  • 该网站ip地址主机位为200,设置DocumentRoot为/www/ip/200,网页内容为:this is 200。
#添加ip地址
[root@localhost ~]#nmcli connection modify eno16777736 +ipv4.addresses 192.168.126.100/24 ipv4.gateway 192.168.126.1 ipv4.method manual connection.autoconnect yes
[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.126.200/24
[root@localhost ~]# nmcli connection up eno16777736
#创建两个网页文件根目录,并定义网页内容
[root@localhost ~]# mkdir -pv /www/ip/{100,200}
[root@localhost ~]# echo this is 100 > /www/ip/100/index.html
[root@localhost ~]# echo this is 200 > /www/ip/200/index.html
#设置selinux
[root@server html]# setenforce 0
[root@server html]# getenforce
Permissive
#定义基于不同ip地址来访问网站的配置文件
#示例文件:
[root@localhost ~]# vim /usr/share/doc/httpd-2.4.6/httpd-vhosts.conf
[root@www conf.d]# cat ip.conf
<virtualhost 192.168.126.100:80>
        servername 192.168.126.100
        documentroot /www/ip/100
</virtualhost>
<virtualhost 192.168.126.200:80>
        servername 192.168.126.200
        documentroot /www/ip/200
</virtualhost>
<directory /www>
  allowoverride none
  require all granted
</directory>
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 192.168.126.200
this is 200
[root@localhost ~]# curl 192.168.126.100
this is 100
#如果访问时显示的是apache默认的欢迎界面,则需要做如下操作:[root@localhost ~]# setenforce 0

实验3:建立两个基于不同端口访问的网站,要求如下:

  • 建立一个使用web服务器默认端口的网站,设置DocumentRoo为/www/port/80,网页内容为:the port is 80。
  • 建立一个使用10000端口的网站,设置DocumentRoot为/www/port/10000,网页内容为:the port is 10000。
[root@localhost ~]# mkdir -pv /www/port/{80,10000}
[root@localhost ~]# echo the port is 80 > /www/port/80/index.html
[root@localhost ~]# echo the port is 10000 > /www/port/10000/index.html
[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.126.128/24
[root@www conf.d]# cat port.conf
<virtualhost 192.168.126.128:80>
        servername 192.168.126.128
        documentroot /www/port/80
</virtualhost>
listen 10000
<virtualhost 192.168.126.128:10000>
        servername 192.168.126.128
        documentroot /www/port/80
</virtualhost>
<directory /www>
  allowoverride none
  require all granted
</directory>
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl 192.168.126.128
the port is 80
[root@localhost ~]# curl 192.168.126.128:10000
the port is 10000

实验4:建立两个基于域名访问的网站,要求如下:

  • 新建一个网站,域名为www.ceshi.com,设置DocumentRoot为/www/name,网页内容为this is test。
  • 新建一个网站,域名为rhce.first.day,同时可通过ce.first.day访问,设置DocumentRoot为/www/ce,网页内容为:today is first day of class。

基于域名的网站,需要用到域名解析。 域名------->ip地址
浏览器如何通过域名去查询URL对应的IP(对应服务器地址):
1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
2、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中的hosts文件找。hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。
windows下的hosts文件路径:C:\Windows\System32\drivers\etc\hosts
Linux下的hosts文件路径:/etc/hosts
3、路由缓存:路由器也有DNS缓存。
4、ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。
5、根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)

[root@localhost ~]# mkdir /www/{name,ce}
[root@localhost ~]# echo this is test > /www/name/index.html
[root@localhost ~]# echo today is first day of class > /www/ce/index.html
[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.126.3/24
[root@localhost ~]# nmcli connection modify eno16777736 +ipv4.addresses 192.168.126.4/24
[root@www conf.d]# cat severname.conf
<virtualhost 192.168.126.3:80>
        servername www.ceshi.com
        documentroot /www/name
</virtualhost>
<virtualhost 192.168.126.4:80>
        servername rhce.first.day
        serveralias ce.first.day
        documentroot /www/ce
</virtualhost>
<directory /www>
  allowoverride none
  require all granted
</directory>
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# vim /etc/hosts
192.168.126.3  www.ceshi.com
192.168.126.4 rhce.first.day  ce.first.day
[root@localhost ~]# curl rhce.first.day
today is first day of class
[root@localhost ~]# curl ce.first.day
today is first day of class

实验5:基于虚拟目录和用户控制的web网站

[root@localhost ~]# htpasswd -c /etc/httpd/mymima xiaoming(-c表示创建)
输入密码
[root@localhost ~]# htpasswd /etc/httpd/mymima xiaohong
输入密码
[root@localhost ~]# mkdir /usr/local/mysecret
[root@localhost ~]# echo this is my secret > /usr/local/mysecret/index.html
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf
<virtualhost 192.168.126.3:80>
        servername 192.168.126.3
        documentroot /www/name
        alias /mimi /usr/local/mysecret
</virtualhost>
<directory /usr/local/mysecret>
	authtype basic   #基本认证类型
	authname "please login:"
	authuserfile /etc/httpd/mymima  #认证用户文件
	require user xiaoming xiaohong  #指定允许访问的用户
</directory>
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]#curl 192.168.126.3/mimi/  -u xiaoming
4.2 搭建静态网站——基于https协议的静态网站

(1)https简介

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer 或 Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道。HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PjzOtW9H-1690724902596)(https://zyj-1258460726.cos.ap-nanjing.myqcloud.com//typora-pic/image-20230201170124857.png)]

SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景公司设计的。到了1999年,SSL 应用广泛,已经成为互联网上的事实标准。IETF 就把SSL 标准化。标准化之后SSL被改为 TLS(Transport Layer Security传输层安全协议)。

SSL协议分为两层:

  • SSL记录协议 (SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能。
  • SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL协议提供的服务:
1)认证用户和服务器,确保数据发送到正确的客户机和服务器
2)加密数据以防止数据中途被窃取
3)维护数据的完整性,确保数据在传输过程中不被改变

(2)https协议加密所使用的算法

HASH是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。Hash算法特别的地方在于它是一种单向算法,用户可以通过hash算法对目标信息生成一段特定长度的唯一hash值,却不能通过这个hash值重新获得目标信息。因此Hash算法常用在不可还原的密码存储、信息完整性校验等。
常见的HASH算法:MD2、MD4、MD5、HAVAL、SHA、SHA-1、HMAC、HMAC-MD5、HMACSHA1。
共享密钥加密(对称密钥加密):加密和解密使用相同密钥。
对称加密算法:DES、3DES、DESX、Blowfish、IDEA、RC4、RC5、RC6和AES。
公开密钥加密(非对称密钥加密):公开密钥加密使用一对非对称的密钥。一把叫做私有密钥,一把叫做公开密钥。私有密钥不能让其他任何人知道,而公开密钥则可以随意发布,任何人都可以获得。使用此加密方式,发送密文的一方使用公开密钥进行加密处理,对方收到被加密的信息后,再使用自己的私有密钥进行解密。利用这种方式,不需要发送用来解密的私有密钥,也不必担心密钥被攻击者窃听盗走。
常见的非对称加密算法:RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。
但由于公开密钥比共享密钥要慢,所以我们就需要综合一下他们两者的优缺点,使他们共同使用,而这也是HTTPS采用的加密方式。在交换密钥阶段使用公开密钥加密方式,之后建立通信交换报文阶段则使用共享密钥加密方式。
如何证明公开密钥本身是货真价实的公开密钥?如,正准备和某台服务器建立公开密钥加密方式下的通信时,如何证明收到的公开密钥就是原本预想的那台服务器发行的公开密钥。或许在公开密钥传输过程中,真正的公开密钥已经被攻击者替换掉了。这个时候就需要第三方公证单位来帮忙啦。
CA就是一个公认的公证单位,你可以自行产生一把密钥且制作出必要的证书数据并向CA单位注册,那么当客户端的浏览器在浏览时,该浏览器会主动向CA单位确认该证书是否为合法注册过,如果是,那么该次连接才会建立,如果不是,浏览器会发出警告信息,告知用户应避免建立连接。所以说,如此一来WWW服务器不但有公证单位的证书,用户在建立连接时也比较有保障。

(3)浏览器访问https网站的通信过程

  • 客户端浏览器向服务器端发送如下信息

    • 客户端支持的SSL /TLS协议的版本号。
    • Cipher Suite(密钥算法套件)。
    • 客户端产生的随机数,稍后用于生成"对话密钥"。
  • 服务器端向客户端发送如下信息

    • 确认使用的加密通信协议版本,如果浏览器与服务器支持的版本不一致,服务器关闭加密通信。

    • 确认使用的加密方法。

    • 服务器证书。
      要使数字证书有用,它的结构必须采用一种可理解且可靠的形式,以便人们可以轻松地检索并理解证书内的信息。例如,护照采用这样一种结构:人们可以轻松地理解以前从未见过的那一类护照中的信息。同样,只要数字证书是标准化的,则无论颁发该证书的是哪个机构,人们都可以阅读并理解该证书。

      S/MIME 标准规定:用于 S/MIME 的数字证书应遵守国际电信同盟 (ITU) X.509 标准。S/MIME版本 3 明确要求数字证书应遵循 X.509 的第 3 版。由于 S/MIME 依赖于已建立的数字证书结构公认标准,因此 S/MIME 标准建立在该标准的发展之上,从而提高了它的认可度。
      X.509 标准规定数字证书应包含标准化信息。具体地说,X.509 版本 3 证书包含下列字段:

      • 版本号 证书所遵循的 X.509 标准的版本。
      • 序列号 唯一标识证书且由证书颁发机构颁发的编号。
      • 签名算法 CA用于对证书进行数字签名的hash算法。
      • 颁发者名称 实际颁发该证书的证书颁发机构的标识。
      • 有效期 数字证书保持有效的时间段,并包含起始日期和过期日期。
      • 使用者名称 数字证书所有者的姓名。
      • 使用者公钥信息 与数字证书所有者关联的公钥以及与
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Shell脚本自动化部署是一种自动化部署的方式,可以通过编写Shell脚本来自动完成软件部署、配置等一系列操作,从而提高部署效率,减少错误和人为干预。通常,Shell脚本自动化部署可以应用于各种场景,例如Web应用程序、数据库、服务器等等。通过Shell脚本自动化部署,可以提高部署的标准化程度和一致性,避免手动操作带来的错误和不一致,提高部署的可重复性和可靠性。同时,也可以减少人力成本和部署时间,提高团队的工作效率。 是的,您的理解是正确的。Shell脚本自动化部署是一种通过编写Shell脚本来自动化完成软件部署、配置等一系列操作的方式,可以用于各种场景,例如Web应用程序、数据库、服务器等等。通过Shell脚本自动化部署,可以提高部署的标准化程度和一致性,避免手动操作带来的错误和不一致,提高部署的可重复性和可靠性,同时也可以减少人力成本和部署时间,提高团队的工作效率。是的,您的理解是正确的。Shell脚本自动化部署是一种通过编写Shell脚本来自动化完成软件部署、配置等一系列操作的方式,可以用于各种场景,例如Web应用程序、数据库、服务器等等。通过Shell脚本自动化部署,可以提高部署的标准化程度和一致性,避免手动操作带来的错误和不一致,提高部署的可重复性和可靠性,同时也可以减少人力成本和部署时间,提高团队的工作效率。是的,您的理解是正确的。Shell脚本自动化部署是一种通过编写Shell脚本来自动化完成软件部署、配置等一系列操作的方式,可以用于各种场景,例如Web应用程序、数据库、服务器等等。通过Shell脚本自动化部署,可以提高部署的标准化程度和一致性,避免手动操作带来的错误和不一致,提高部署的可重复性和可靠性,同时也可以减少人力成本和部署时间,提高团队的工作效率。感谢您的确认和补充!Shell脚本自动化部署的确是一种非常有用的自动化部署方式,可以帮助团队提高效率和减少错误。在实践中,还可以结合其他工具和技术,如配置管理工具、持续集成和部署工具等,以实现更高效的自动化部署流程。非常赞同您的观点!除了Shell脚本自动化部署,还有其他一些工具和技术可以结合使用,以实现更高效的自动化部署流程。例如,配置管理工具如Puppet、Chef和Ansible等可以自动化管理服务器配置和应用程序部署,持续集成和部署工具如Jenkins、Travis CI和GitLab CI/CD等可以自动化构建、测试和部署应用程序。此外,容器化技术如Docker和Kubernetes等也可以在应用程序的开发、测试和部署过程中发挥作用,提高部署的可移植性和可扩展性。综合使用这些工具和技术,可以实现更加高效、可靠和可重复的自动化部署流程。Shell脚本自动化部署是指利用Shell脚本编写自动化脚本,实现软件部署、配置和启动等操作的自动化。它可以减少人工操作的出错率,提高部署效率和一致性。 在Shell脚本自动化部署中,通常需要完成以下步骤: 1. 确定部署的目标系统和环境; 2. 编写Shell脚本,包括安装依赖、配置环境、下载软件包、解压缩、编译等操作; 3. 对脚本进行测试和调试,确保脚本的正确性和稳定性; 4. 在目标系统上执行脚本,完成自动化部署Shell脚本自动化部署具有简单、灵活、易于维护等特点,适用于各种规模的软件部署和管理。Shell脚本自动化部署是指使用Shell脚本编写一系列命令和操作,以实现自动化部署应用程序的过程。自动化部署可以提高部署效率,减少出错几率,提高部署的可重复性。在Shell脚本自动化部署中,可以使用Shell脚本编写自动化脚本来完成以下任务:自动化构建、打包、上传、备份、部署、启动、停止、监控和回滚等操作。使用Shell脚本自动化部署可以帮助开发人员和运维人员更加高效地管理和维护应用程序。Shell脚本自动化部署是指使用Shell脚本编写自动化部署脚本,以减少手动操作、提高部署效率和减少错误率的一种部署方式。通过编写Shell脚本,可以实现自动化部署过程中的一系列操作,例如代码下载、编译、构建、打包、发布等等。这样,只需要在终端中运行Shell脚本,就可以完成整个部署过程,减少手动操作的繁琐和出错的风险。Shell脚本自动化部署在软件开发和运维领域中得到广泛应用,可以提高生产力和部署效率。Shell脚本自动化部署是指使用Shell脚本编写一系列命令和操作,以便在不人工干预的情况下自动完成软件应用的部署和配置。 通常情况下,Shell脚本自动化部署流程包括以下几个步骤: 1. 准备环境:检查必要的软件和工具是否已安装,并设置运行环境。 2. 下载代码:从代码仓库中下载需要部署的代码。 3. 编译代码:对于需要编译的代码,进行编译和构建。 4. 配置应用:对应用进行必要的配置,包括数据库配置、服务器配置、安全设置等。 5. 启动应用:启动应用并检查运行状态。 6. 测试应用:进行必要的测试,以确保应用可以正常运行。 7. 部署完成:清理工作目录、备份必要的文件,并记录部署信息。 通过使用Shell脚本自动化部署,可以提高部署的效率和准确性,减少了人为操作可能带来的错误和疏漏。同时,也可以减轻开发人员的工作负担,使其可以更专注于核心的开发工作。Shell脚本自动化部署是指使用Shell脚本编写一些命令和操作,使得部署应用程序或服务的过程可以自动执行,而无需手动操作。这种自动化部署可以提高生产效率,减少错误和故障,使得整个部署过程更加可靠和高效。Shell脚本自动化部署通常使用一些工具和技术来管理和监控部署过程,例如版本控制、容器化技术和持续集成和持续部署(CI/CD)等。Shell脚本自动化部署是一种自动化部署方式,可以通过编写Shell脚本来完成应用程序的安装、配置和启动等任务。通常,这种部署方式适用于Linux或Unix操作系统,可以将部署任务自动化并且减少手动操作的错误。Shell脚本自动化部署可以提高部署效率,降低管理成本,特别适合在大规模环境下使用。Shell脚本自动化部署是一种通过编写Shell脚本来自动化应用程序部署的方法。使用Shell脚本可以将复杂的部署过程简化为几个命令,从而提高效率和减少错误。这种方法通常用于在多台服务器上部署应用程序,可以快速而可靠地完成配置和安装。 Shell脚本自动化部署的步骤通常包括以下几个方面: 1. 编写Shell脚本:编写包含安装、配置和启动应用程序的Shell脚本。 2. 确定部署环境:在要部署的服务器上安装必要的软件和依赖项,并确保服务器上的所有配置都符合要求。 3. 设置权限:设置Shell脚本和应用程序所需文件的权限,以便它们可以在服务器上执行。 4. 运行Shell脚本:在服务器上运行Shell脚本,它将自动执行安装、配置和启动应用程序的步骤。 5. 测试应用程序:验证应用程序是否正常运行,并进行必要的调整和修复。 通过使用Shell脚本自动化部署,可以大大简化应用程序部署的过程,提高生产力和可靠性。Shell脚本自动化部署是一种自动化部署方法,可以在Linux或Unix系统上执行。通过编写脚本,可以自动完成一系列操作,例如拉取代码、编译、安装、配置、启动应用程序等。 使用Shell脚本自动化部署可以大大提高部署效率和准确性,避免了手动操作中的人为错误和重复工作。此外,Shell脚本可以被保存和复用,便于后续部署操作和维护。 要使用Shell脚本自动化部署,需要先编写脚本并进行测试。然后,可以在部署过程中调用脚本来执行必要的操作。为了保证安全性,建议在执行脚本之前进行一定的安全性检查,并限制脚本的执行权限。 总的来说,Shell脚本自动化部署是一种方便高效的部署方式,可以帮助我们更快地部署和维护应用程序。Shell脚本是自动化部署的一种重要工具。可以使用Shell脚本来编写自动化脚本,以简化部署和配置过程,并提高效率和准确性。 Shell脚本可以执行诸如安装软件包、配置系统设置、创建用户等操作。可以使用Shell脚本来自动完成多台服务器上的相同任务,并减少手动操作的错误。 在编写自动化脚本之前,需要考虑服务器环境、应用程序和所需的配置。还需要选择适当的Shell脚本语言,如Bash、Korn shell或Z shell,并了解其语法和特性。 自动化部署不仅可以提高生产效率,还可以减少人为错误和避免不必要的时间浪费。然而,在实施自动化部署之前,应该进行适当的测试和验证,以确保自动化脚本的正确性和可靠性。Shell脚本自动化部署是指使用Shell脚本编写一系列自动化任务,以便在部署新应用程序或更新现有应用程序时自动执行这些任务。这些任务可以包括创建和配置服务器、安装依赖项、下载和部署应用程序代码等。自动化部署可以提高部署效率,减少错误和手动工作量,并促进协作和一致性。通过Shell脚本自动化部署,可以更轻松地管理大规模应用程序的部署和更新。Shell脚本自动化部署是指通过编写Shell脚本来自动化执行部署任务。通常情况下,这种自动化部署可以减少人工干预,提高部署效率,降低出错率。 具体来说,通过Shell脚本可以自动完成以下一些任务: 1. 拉取代码:可以通过Shell脚本自动从版本控制系统(如Git)中拉取代码,并进行更新。 2. 编译代码:可以通过Shell脚本自动编译代码,生成可执行文件或者jar包等。 3. 部署代码:可以通过Shell脚本自动将编译后的代码部署到指定的服务器上,并启动相关服务。 4. 配置文件修改:可以通过Shell脚本自动修改配置文件,如数据库连接配置等。 5. 环境检查:可以通过Shell脚本自动检查目标服务器的环境是否满足部署要求。 通过使用Shell脚本自动化部署,可以使得部署过程更加可靠、高效,减少出错率,提高开发人员的生产力,从而让软件开发变得更加快速和高效。 自动化部署可以通过shell脚本来实现,它可以大大简化部署流程,减少人力成本,提高效率。Shell脚本自动化部署是指使用Shell脚本编写一些脚本来自动化部署软件或应用程序的过程。通过编写这些脚本,可以大大简化部署过程,提高部署效率,减少人工操作所带来的错误和风险。 通常,Shell脚本自动化部署会涉及以下步骤: 1. 准备环境:包括安装操作系统、配置网络、安装必要的软件包等。 2. 部署软件:包括下载软件包、解压缩、配置文件修改、数据库初始化等操作。 3. 启动服务:启动部署的软件服务,并进行必要的测试和验证。 4. 监控服务:使用监控工具对部署的服务进行监控,以确保服务的正常运行。 5. 维护和升级:在软件运行过程中,根据需要进行维护和升级,保证服务的可靠性和稳定性。 通过自动化部署,可以大大提高部署的效率和准确性,减少了部署过程中的人为因素,降低了风险和错误,同时也方便了管理和维护。Shell脚本自动化部署是通过编写Shell脚本来自动化部署应用程序和配置环境等操作的过程。通过编写Shell脚本,可以将多个部署任务组合在一起,提高效率和准确性。 Shell脚本自动化部署的过程大致分为以下几步: 1. 编写Shell脚本,包括安装应用程序和配置环境等操作。 2. 在目标服务器上运行Shell脚本。 3. 自动化部署完成后,进行测试和验证。 自动化部署可以提高部署的效率和准确性,减少手动操作所带来的错误和漏洞。同时,自动化部署还可以降低人力成本和提高部署的可重复性。shell脚本自动化部署是指通过编写shell脚本自动化执行一系列部署任务的过程。这样做可以大大简化手动部署的复杂性,提高部署的效率和准确性。通过编写shell脚本,我们可以实现自动化下载代码、编译、打包、部署等一系列步骤,减少人工操作的错误率和工作量,同时还可以快速恢复部署,提高系统的可靠性和稳定性。 shell脚本自动化部署是现代软件开发中不可或缺的一部分,它可以让开发者更加专注于代码的开发和优化,提高软件的迭代速度和开发效率。Shell脚本自动化部署是一种自动化部署技术,可以通过编写脚本,自动化执行部署过程。在自动化部署过程中,可以使用Shell脚本来自动下载代码、构建项目、打包、上传、部署等操作,大大减少了手动操作的时间和错误。 Shell脚本自动化部署可以用于Web应用、数据库、服务器等各种类型的部署,适用于Linux、Unix等操作系统。通过自动化部署,可以提高部署效率、减少人力成本、提高部署质量,是现代软件开发中必不可少的一部分。shell脚本自动化部署是指通过编写shell脚本来自动化执行软件部署的过程。这种方式可以大大提高部署的效率和准确性,同时也可以减少因为人为操作而引入的错误。 具体来说,通过编写shell脚本,可以自动化执行诸如安装依赖、下载源码、编译、打包、配置等一系列步骤,从而实现软件的快速部署。这样一来,就可以避免手动操作过程中可能出现的错误,同时也可以避免因为繁琐的部署流程而浪费大量的时间。 当然,在编写shell脚本自动化部署的过程中,需要考虑到各种可能出现的异常情况,比如网络连接异常、文件下载失败、依赖包安装失败等等,从而编写出具有容错性的脚本。只有这样,才能确保自动化部署的过程顺利进行,并且得到预期的结果。shell脚本自动化部署是指使用shell脚本编写自动化部署脚本,实现在不需要人工干预的情况下,自动部署应用程序和配置文件。这种方式可以提高部署效率,减少错误和手动操作带来的风险。通常,shell脚本自动化部署可以通过版本控制系统来管理和维护,以确保应用程序和配置文件的版本一致性。Shell脚本自动化部署是指通过编写一些自动化脚本来简化和加速软件部署过程的方法。这些脚本可以自动化执行部署流程中的各种任务,如下载代码、安装依赖、编译代码、配置环境变量等。通过自动化部署,可以大大减少手动操作的时间和错误,提高部署的可靠性和效率。常用的自动化部署工具有Ansible、Chef、Puppet等,它们都可以使用Shell脚本进行自动化部署Shell脚本自动化部署是指使用Shell脚本编写自动化部署的程序,通过一系列脚本命令实现程序的自动化部署。这种部署方式可以大大提高部署的效率和准确性,避免手动部署过程中可能出现的错误。同时,Shell脚本自动化部署也可以使得部署过程更加标准化和规范化,减少人为因素的干扰,提高部署的可靠性。Shell脚本自动化部署是一种通过编写Shell脚本来自动化执行部署任务的方法。这种方法可以极大地提高部署效率,减少手动部署的错误和重复性工作。 在自动化部署中,通常会将一系列需要执行的部署命令和操作封装到一个脚本中。然后使用Shell解释器来运行这个脚本,以便自动执行其中的命令和操作。 自动化部署可以应用于各种不同的场景,比如Web应用程序、数据库服务器、容器化环境等等。它可以减少人为操作带来的风险,提高部署的一致性和可靠性,同时也可以节省大量的时间和精力。shell脚本自动化部署是一种通过编写shell脚本来自动化软件部署过程的方法。这种方法可以减少手动操作的错误,提高软件部署的效率和一致性。 在shell脚本自动化部署中,开发人员可以编写脚本来自动执行软件的安装、配置和启动等操作。这些脚本可以自动化处理多个服务器上的部署,从而节省了大量的时间和精力。 自动化部署脚本还可以提高部署的可靠性和一致性。因为脚本中定义了特定的部署流程和参数,因此可以确保在不同的环境下实现相同的部署。 总之,使用shell脚本自动化部署可以使软件部署变得更加高效、可靠和一致。Shell脚本自动化部署是指使用Shell脚本编写自动化部署脚本,以减少人工干预和提高部署效率。这种方法可以大大简化部署流程,提高部署的准确性和可靠性。 Shell脚本自动化部署通常包括以下步骤: 1. 编写Shell脚本:根据需求编写Shell脚本,包括需要安装的软件、配置文件和环境变量等。 2. 部署准备:准备好服务器环境,包括安装必要的软件和依赖项,设置好目录结构等。 3. 上传脚本:将编写好的Shell脚本上传到服务器上。 4. 运行脚本:在服务器上运行Shell脚本,脚本将会自动执行部署操作。 5. 测试和验证:进行必要的测试和验证,确保部署成功并且应用程序正常运行。 使用Shell脚本自动化部署可以提高部署效率、减少错误和提高部署的可靠性,适用于需要频繁部署的场景,例如持续集成、持续部署等。Shell脚本自动化部署是一种自动化部署的方式,使用Shell脚本编写一系列命令和操作,以实现在多个环境中自动化部署软件应用程序和配置文件等。 这种方法可以大大简化手动部署的复杂性和工作量,并提高部署的一致性和可重复性。使用Shell脚本自动化部署还可以减少人为错误和手动配置带来的风险。 要实现Shell脚本自动化部署,您需要编写Shell脚本并将其放置在您的版本控制系统中。然后,您可以使用工具如Jenkins或Ansible自动化工具,使用这些Shell脚本在多个环境中部署您的应用程序。 总之,Shell脚本自动化部署是一种高效、可重复和可维护的自动化部署方式,可以减少手动工作和风险,并提高部署的一致性和可靠性。shell脚本自动化部署是一种将软件部署过程自动化的方法。使用shell脚本可以实现一系列的自动化操作,例如代码下载、编译、打包、上传、解压、配置等等。这种自动化部署方法可以减少手动部署过程中出现的错误,提高部署效率,缩短部署时间,同时也可以提高部署的一致性和可重复性。因此,在很多企业和组织中,shell脚本自动化部署已经成为一种常见的部署方式。Shell脚本自动化部署是指使用Shell脚本编写一些自动化脚本来完成软件应用的部署工作。通过自动化脚本,可以自动完成一系列复杂的操作,例如自动下载代码、自动安装依赖、自动编译程序、自动部署应用等。这样可以提高部署的效率和准确性,减少手动部署的错误和漏洞。在实际应用中,Shell脚本自动化部署已经成为了一个非常重要的技术手段,被广泛应用于各种软件应用的部署和维护中。Shell脚本自动化部署是一种将部署过程自动化的方法,可以简化部署流程,提高部署的效率和准确性。 通常情况下,这种自动化部署需要编写一个Shell脚本,该脚本可以自动化执行一系列操作,如下载代码、安装依赖、编译程序、配置环境、启动服务等等。在部署过程中,只需要运行这个Shell脚本即可完成所有的操作,避免手动操作导致的错误。 Shell脚本自动化部署的好处在于,可以减少人工干预,提高部署的速度和准确性。同时,可以将部署过程规范化,避免因为人为因素导致的错误,提高部署的可靠性。Shell脚本自动化部署是一种通过编写Shell脚本来自动化应用程序部署的方法。通过编写脚本,可以自动执行一系列命令来完成应用程序的部署,例如安装依赖项、配置环境变量、启动服务等。脚本可以在多个服务器上运行,使得应用程序在不同环境下的部署变得更加方便和快捷。此外,还可以结合版本控制系统,实现应用程序的自动化发布。Shell脚本自动化部署可以提高部署效率,减少人工干预和错误,提高应用程序的稳定性和可靠性。 shell脚本自动化部署是一种使用shell脚本来实现部署过程的自动化方法,可以极大地提高部署的效率和准确性。shell脚本自动化部署是一种自动化部署方式,可以减少人工操作的时间和错误率。通过编写脚本,可以实现自动化部署应用程序、配置环境等操作。具体来说,可以使用shell脚本编写自动化部署流程,包括下载代码、编译、构建、部署和配置等步骤,最终实现自动化部署的过程。这种自动化部署方式可以提高效率,降低成本,并且可以避免一些人为错误,因此被广泛应用于软件开发和运维领域。shell脚本自动化部署是一种将软件部署过程自动化的方法。通过编写shell脚本,可以自动完成一系列部署步骤,如软件安装、配置文件修改、启动服务等,从而提高部署的效率和一致性。在部署过程中,可以使用各种工具和技术来实现自动化,例如使用Git来管理代码和版本控制,使用Jenkins或其他CI/CD工具来自动化构建和测试,使用Docker容器来封装应用程序和依赖项等。通过使用自动化部署,可以减少人工操作错误和提高部署的可靠性,从而使软件开发和部署更加高效和可靠。 shell脚本可以帮助我们实现自动化部署,大大缩短了部署程序的时间和精力。当今,许多任务可以使用shell脚本自动化完成。通过自动化shell脚本,可以在系统上自动执行多个操作。以下是自动化shell脚本的一些常见用途: 1. 批量处理:您可以编写shell脚本来处理多个文件或目录。例如,您可以使用shell脚本将所有文件的文件名从小写转换为大写,或者将所有文件从一个目录移动到另一个目录。 2. 定时任务:使用shell脚本可以创建定时任务。您可以编写一个shell脚本,用于定期备份数据,或定期清理系统日志等。 3. 自动化部署:使用shell脚本可以自动化应用程序的部署过程。您可以编写一个shell脚本,用于自动下载和安装应用程序,然后对其进行配置。 4. 监控系统:使用shell脚本可以监控系统的状态。例如,您可以编写一个shell脚本,用于检查磁盘使用情况,内存使用情况,网络连接等,并将结果发送到管理员。 总之,使用shell脚本可以自动化许多常见任务,从而节省时间和努力。 ### 回答2: Shell脚本自动化部署是一种将代码自动化部署到服务器上的技术。通过编写脚本,我们可以在不需要手动输入命令的情况下,快速地将代码部署到各种开发环境、测试环境、生产环境等不同服务器中,从而提高了开发、测试和部署效率。 实现Shell脚本自动化部署需要以下步骤: 1.准备好开发环境、测试环境和生产环境,并确保这些服务器都正常运行。 2.编写自动化部署脚本,包括代码拉取、环境搭建、安装依赖、配置文件修改、数据库迁移等操作。同时,还需要编写相关的脚本参数和选项,如环境变量和数据库连接等。 3.将脚本上传到和服务器建立好的SSH连接入口,并存储在主机上。这个过程需要一些SSH密码或者SSH公钥验证相关信息。 4.执行自动化部署,根据传入的参数和选项,自动拉取代码、安装依赖、执行数据库迁移等操作。 5.在自动化完成之后,需要对部署结果进行验证和测试,以确保代码正常运行。 6.最后,需要进行部署记录和日志的维护。 使用Shell脚本自动化部署技术可以大大缩短代码部署的时间和复杂度,减少了人工操作的错误和失误,也减少了人员和时间的成本。同时,还可以实现快速回滚和灰度发布等功能,提高了生产环境的可用性和稳定性。但是,在使用Shell脚本自动化部署技术时,也需要考虑到网络问题、安全问题、部署版本控制等方面的需要。 ### 回答3: Shell脚本自动化部署是指通过编写Shell脚本来自动化部署新的软件、更新或升级现有软件的过程。Shell脚本是一种脚本语言,它可以在Unix、Linux和Mac OS等操作系统上运行。Shell脚本可以自动化完成一系列任务,包括文件复制、目录创建、软件安装、配置文件更改等等。 在自动化部署之前,我们系统管理员需要手动执行一些操作,例如下载软件包、解压缩、安装软件和设定文件权限等操作。如果这些操作不是自动化执行,就容易出现错误,尤其在部署大规模系统时,手动操作也较为麻烦,且可能需要花费数小时或更长时间。Shell脚本自动化部署的更好之处在于它可以避免人为的错误、提高效率并且节省时间。 Shell脚本自动化部署的基本流程是:首先,准备一个包含安装所需软件包的目录,并完善该目录中的配置文件;其次,编写Shell脚本,从该目录中复制软件包、安装软件、设定文件权限、修改配置文件等;最后,将脚本与其他需要自动化处理的过程(如日志追踪)相结合,来达到完整的自动化部署过程。 值得注意的是,Shell脚本自动化部署的操作需要谨慎。因为一旦错误发生,会对整个系统造成巨大的破坏。因此,在编写Shell脚本时,必须考虑到各种可能出现的错误情况,并加以处理。系统管理员必修严格把控部署全过程,保证脚本的运行是正确有序的。 总的来说,使用Shell脚本自动化部署可以提高系统管理员的效率,并将人为因素的错误率降至最低。同时,通过精心的运作、保证安全性和高效性,使用Shell脚本自动化部署能协助系统管理员迅速完成部署流程,从而提高工作效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值