【云平台管理】SaltStack部署应用

SaltStack部署应用

一、SlatStack基础

在生产环境中,服务器往往不只是一台,有可能是成千上万台。对于运维人员来说,如果单独的对每台服务器进行管理,工作难度比较大。这时部署自动化运维就可以尽可能安全、高效的完成这些工作。

一般,会把自动化运行工具划分为两类:一类是需要使用代理工具的,也就是基于专用的Agent程序来完成管理功能,如:SaltStack、Puppet、Func、Zabbix等;**另外一类是不需要配置代理工具的,可以直接基于SSH服务来完成管理功能,如:Ansible、Fabrix等。本章将主要介绍自动化运维工具SaltStack是如何实现自动化运维部署的。下面是几款功能类似的自动化运维工具。

  • SaltStack:是一个服务器基础设置管理工具,它具有配置管理、远程执行、监控等功能。SaltStack由Python语言编写,是非常简单易用和轻量级的管理工具。
  • Ansible:是基于Python开发的,集合了众多优化运维工具的优点,实现了批量运行命令、部署程序、配置系统等功能的自动化运维管理工具。默认通过SSH协议进行远程命令执行或下发配置,无须部署任何客户端代理软件,从而使得自动化环境部署变得更加简单。可同时支持多台主机并行管理,使得管理主机更加便捷。
  • Puppet:是基于Ruby开发的,支持Linux、Unix、Windows平台的自动化运维管理工具,可以针对用户、系统服务、配置文件、软件包等进行管理,有很强的扩展性,但远程执行命令相对较弱。

针对这几款自动化运维工具比较如下图所示。

工具开发语言结构配置文件格式运行任务
AnsiblePythonYAML支持命令行
SaltStackPythonC/SYAML支持命令行
PuppetRubyC/SRuby语法格式通过模块实现

通过部署SaltStack环境,可以在成千上万台服务器上批量执行命令,对于不同的业务进行集中管理、分发文件、采集数据、软件包管理等。有利于运维人员提高工作效率、规范业务配置和操作。

二、SaltStack原理

  • SaltStack由Master和Minion构成,Master是服务端,表示一台服务器。Minion是客户服务器端,表示多台服务器。在Master上发送给符合条件的Minion,Minion就会执行响应的命令。Master和Minion之间是通过ZeroMQ(消息队列)进行通信。
  • SaltStack的Master端监听45054506端口,4505为SaltStack的消息发布端口,4506为SaltStack客户端与服务器端通信的端口。SaltStack客户端程序并不监听端口库,当客户端启动后,会主动连接Master端注册,然后一直保持该TCP连接,而Master通过这条TCP连接对客户端进行控制。如果连接断开,Master对客户端将不能进行控制。但是,当客户端检查到连接断开后,会定期向Master端请求注册连接。

资源列表

操作系统配置主机名IP角色
CentOS 7.92C4Gmaster192.168.93.101master
CentOS 7.92C4Gminion192.168.93.102minion

基础环境

  • 关闭防火墙
systemctl stop firewalld
systemctl disable firewalld
  • 关闭内核安全机制
setenforce 0
sed -i "s/^SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
  • 修改主机名
hostnamectl set-hostname master
hostnamectl set-hostname minion
  • 添加hosts解析
cat >> /etc/hosts << EOF
192.168.93.101 master
192.168.93.102 minion
EOF
  • 同步时间
yum -y install ntpdate
ntpdate ntp1.aliyun.com

三、SaltStack安装

  • SaltStack的Master和Minion安装非常简单,在CentOS系统中的安装步骤如下。

3.1、安装YUM源

  • 所有Master和Minion都要先安装YUM源,才能进行后续的安装

  • 在CentOS官方YUM源中没有saltStack的安装包支持,需要先安装第三方的EPEL作为部署SaltStack的YUM源

# 导入GPG密钥
sudo rpm --import https://repo.saltproject.io/py3/redhat/7/x86_64/latest/SALTSTACK-GPG-KEY.pub


# 下载SaltStack源
curl -fsSL https://repo.saltproject.io/py3/redhat/7/x86_64/latest.repo | sudo tee /etc/yum.repos.d/salt.repo
  • 上面命令执行成功之后,执行如下命令,你将看到一个新的salt源
# master
[root@master ~]# ls /etc/yum.repos.d/
bak  CentOS-Base.repo  salt.repo


# minion
[root@minion ~]# ls /etc/yum.repos.d/
bak  CentOS-Base.repo  salt.repo

3.2、安装Master

  • 在Master端上安装salt-master软件。
[root@master ~]# yum -y install salt-master

3.3、安装Minion

  • 在Minion端上安装salt-minion软件。
[root@minion ~]# yum -y install salt-minion

3.4、配置Master

  • 修改Master的配置文件
[root@master ~]# vim /etc/salt/master
# 设置监听的地址(本地IP)
interface: 192.168.93.101
# 设置自动接受客户端发送过来的Key,如果服务器很多的话需要开启该功能
auto_accept: True
# 修改SaltStack文件根目录,取消注释
file_roots:
  base:
    - /srv/salt
    
    
    
    
[root@master ~]# mkdir /srv/salt
  • 修改后可以启动Master
[root@master ~]# systemctl start salt-master.service 
[root@master ~]# systemctl enable salt-master.service

3.5、配置Minion

  • 修改Minion的配置文件
[root@minion ~]# vim /etc/salt/minion
# 改成前面的Master服务器地址
master: 192.168.93.101
# 建议这里改为自己的主机名,便于Master端识别
id: minion
# 在配置文件末尾添加下面内容,设置每个10分钟自动同步Master配置
schedule:
  highstate:
    function: state.highstate
    minutes: 10
  • 修改后可以启动Minion
[root@minion ~]# systemctl start salt-minion.service 
[root@minion ~]# systemctl enable salt-minion.service
  • 当Minion启动后,会自动生成公钥和私钥,并将公钥发送到Master端。Minion不监听端口,全靠和Master保持长连接,可以通过netstat -anpt | grep ES命令查看是否连接成功。至此SaltStack安装完成。
# master
[root@master ~]# netstat -anpt | grep ES
tcp        0      0 192.168.93.101:4506     192.168.93.102:54936    ESTABLISHED 8614/python3


# minion
[root@minion ~]# netstat -anpt | grep ES
tcp        0      0 192.168.93.102:34740    192.168.93.101:4505     ESTABLISHED 8399/python3

四、SaltStack使用

  • 安装好SaltStack后,就可以在Master上面通过命令对Minion进行操作了。

4.1、SaltStack基本操作

  • Salt实时批量操作,语法如下:
salt [选项] '<target(目标)>' <function(方法有module提供)> [arguments方法的参数]
  • 在Master端测试Minion是否连接正常
# 以下命令中“*”为匹配所有主机,“test.ping”为salt一个函数。“*”号是正则,若分了多了组,可以通过类似于web*,来只匹配web服务器。回显为"True"表示TCP建立建立了
[root@master ~]# salt '*' test.ping
  • 查看所有主机的磁盘信息,cmd.run执行单个命令
[root@master ~]# salt '*' cmd.run 'df -hT'
  • 把本地脚本拷贝到远程主机上执行
# 脚本内容
[root@master ~]# cat /srv/salt/test.sh 
#!/bin/bash
echo "一共有多少个参数:$#" > /root/jiaoben.txt
# 这个命令就相当于在客户端上直接执行了,
[root@master ~]# salt '*' cmd.script salt://test.sh '1 2 3 4 5'
minion:
    ----------
    pid:
        8649
    retcode:
        0
    stderr:
    stdout:
# 来到客户端
[root@minion ~]# cat jiaoben.txt 
一共有多少个参数:5
  • 查看所有主机的磁盘信息,并设置该命令执行的超时控制
[root@master ~]# salt '*' cmd.run 'df -hT' -t 5
  • salt分组管理,在配置文件末尾/etc/salt/master中加入如下内容:
[root@master ~]# vim /etc/salt/master
nodegroups:
  group1: 'minion,minion01,minion02'
  group2: 'web01,web02'
  
  
[root@master ~]# systemctl restart salt-master.service


# 执行如下命令,就是查看group1组中的所有主机的主机名
[root@master ~]# salt -N group1 cmd.run 'hostname'
  • salt-run检查客户端up状态,具体操作如下所示
# 查看所有客户端up/down状态
[root@master ~]# salt-run manage.status
    
    
# 只显示up状态的客户端
[root@master ~]# salt-run manage.up


# 只显示down状态的客户端
[root@master ~]# salt-run manage.down
  • salt-cp批量拷贝文件,在master端执行
[root@master ~]# salt-cp '*' /etc/hosts /etc/hosts

4.2、SaltStack自动分发目录

  • 执行同步的目录后,文件只需要放到该目录下就会自动同步到Minion端
# 先定义入口配置文件
[root@master ~]# cat /srv/salt/top.sls 
base:
  '*':
    - send_director
# 定义要加载的sls文件
[root@master ~]# cat /srv/salt/send_directory.sls 
# send_directory只是一个标识,方便我们查看文件的作用
send_directory:
#  file.recurse函数用来管理文件
  file.recurse:
# 指定分发的目录 minion的哪个目录,乳沟目录存在会被覆盖
    - name: /tmp/test
# 指定源目录的路径,salt://test相当于/srv/salt/test
    - source: salt://test
# 之地你个目录的属主
    - user: root
# 指定目录下文件的权限
    - file_mode: 640
# 指定目录下字目录的权限
    - dir_mode: 750
# 如果目标路径/tmp/目录下没有test目录,则自动创建该目录
    - mkdir: True
# 设置当我们删除源目录下的文件或目录时,如果再执行sls文件,那么目标也会跟着删除
    - clean: True



# 注意:file.recurse并不会一锅端把源目录覆盖到目标目录,如果源目录下的子目录没有文件,那么这个子目录是不会被分发过去的
# 创建源目录
[root@master ~]# mkdir /srv/salt/test
[root@master ~]# touch /srv/salt/test/file1


# 通过state模块,会自动去找/src/salt/top.sls文件,然后top.sls会去加载send_directory.sls文件,最终实现目录分发
[root@master ~]# salt '*' state.highstate
minion:
----------
          ID: send_directory
    Function: file.recurse
        Name: /tmp/test
      Result: True
     Comment: Recursively updated /tmp/test
     Started: 09:28:48.897097
    Duration: 101.923 ms
     Changes:   
              ----------
              /tmp/test/file1:
                  ----------
                  diff:
                      New file
                  mode:
                      0640

Summary for minion
------------
Succeeded: 1 (changed=1)
Failed:    0
------------
Total states run:     1
Total run time: 101.923 ms


# minion端查看
[root@minion ~]# ls /tmp/test/
file1

4.3、SaltStack自动分发文件

  • 当文件出现变更时,匹配所有主机,同步文件到这些Minion上,并设置对应的文件权限
# 定义入口配置文件
[root@master ~]# cat /srv/salt/top.sls 
base:
  '*':
    - send_file
# 定义要加载的sls文件
[root@master ~]# cat /srv/salt/send_file.sls 
# send_file只是一个标识,方便我们查看这个文件的作用
send_file:
# file.anaged函数用来管理文件
  file.managed:
# 指定分发到目录minion的哪个目录下,
    - name: /tmp/1.txt
# 指定源文件路径,salt://1.txt相当于/src/salt/1.txt
    - source: salt://1.txt
# 指定文件的属主
    - user: root
# 指定文件的属组
    - group: root
# 指定文件的权限
    - mode: 640


# 创建源文件
[root@master ~]# touch /srv/salt/1.txt 
# 通过state模块,会自动去找/srv/salt/top.sls文件,然后top.sls会去加载send_file.sls文件,最终实现文件分发 
[root@master ~]# salt '*' state.highstate 

五、SaltStack模块及应用

  • SaltStack工具提供了非常多个功能模块,以便于对操作系统的基础功能和常用工具进行操作。

5.1、pkg模块

  • pkg模块的作用是包管理,包括增删更新。语法如下:
  • name: 包名称
5.1.1、安装单个httpd包
[root@master salt]# cat httpd.sls 
# 这一行定义一个状态ID,必须在这个文件中唯一
httpd:
# 这一行指定了要执行的状态函数
  pkg.installed:
# 这一行执行了要安装的包名称
    - name: httpd

# state.apply是一个状态管理函数,用于在minion上应用一个或多个状态,httpd着通常是一个.sls文件的名称(不包括.sls扩展名)
[root@master salt]# salt '*' state.apply httpd
# 上述执行成功以后,所有的客户端就都安装了httpd服务
[root@minion ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)
5.1.2、安装一系列软件包
# 下面这个文件执行过后,将会在所有客户端上安装unzip和tree软件
[root@master salt]# cat mypkgs.sls 
mypkgs:  
  pkg.installed:  
    - pkgs:  
      - unzip 
      - tree


[root@master salt]# salt '*' state.apply mypkgs
5.1.3、删除软件包
# 删除单个软件包
[root@master salt]# cat del.sls 
mypkgs:  
  pkg.removed:  
    - name: unzip


[root@master salt]# salt '*' state.apply del
# 删除多个软件包
[root@master salt]# cat del.sls 
mypkgs:  
  pkg.removed:  
    - pkgs:  
      - unzip  
      - tree
      
      
[root@master salt]# salt '*' state.apply del

5.2、file模块

  • file模块的作用是管理文件操作,包括同步文件,设置文件权限,所属用户组,删除文件等操作。file模块的参数如下所示:
# file.managed 文件管理
name:要同步到Minion上的文件路径+文件名
source:同步文件源为Master上的文件
backup:备份作用,如果有改动才会备份
		backup:.bak会在Minion上该文件的同级目录下加.bak备份
		backup:Minion,会备份到Minion下的/var/cache/salt/minion/backup_files下
mode:权限设置,例如644
owner:所属主设置
group:所属组设置
# file.append 向文件中添加内容
text:向文件中添加内容信息
# file.comment 文件注释操作
char:设置注释使用的字符,默认是#
regex:需要跟文件中每一行中信息匹配的正则表达式
# file.copy 把Minion本地文件复制到某个目录下
source:Minion本地文件
makedirs:如果复制的目录目录不存在是否要创建
force:如果复制的目录文件和源文件是相同的文件名,是否覆盖
# file.symlink 就建立link链接参数详解
name:源文件
target:目标文件
force:是否强制创建
# file.touch 创建空文件,或者修改文件三个时间
name:文件名
atime:访问时间
mtime:修改时间
makedirs:如果目录不存在,是否创建目录
5.2.1、YUM安装源配置文件同步
[root@master salt]# cat yum.sls 
yum:
  file.managed:
    - name: /etc/yum.repos.d/centos-bash.repo
    - source: salt://files/centos-bash.repo
    - mode: 644
    - owner: root
    - group: root


[root@master salt]# mkdir files
[root@master salt]# cp -p /etc/yum.repos.d/CentOS-Base.repo ./files/centos-bash.repo


[root@master salt]# salt '*' state.apply yum
5.2.2、同步之前备份文件
# 把/srv/salt/a.log文件,备份到Minion的/tmp目录下名字叫c.log
[root@master salt]# cat backup.sls 
/tmp/c.log:  
  file.managed:  
    - source: salt://a.log  
    - backup: .bak  
    - mode: 644  
    - owner: root  
    - group: root


[root@master salt]# touch a.log
[root@master salt]# salt '*' state.apply backup
5.2.3、向Minino的文件中追加内容
# 向Minion的/tmp/d.log文件添加两行内容(没有文件的话将会自动创建)
[root@master salt]# cat zhuijia.sls 
/tmp/d.log:
  file.append:
    - text: |
        Thou hadst better eat salt with the Philosophers of Gr
        than sugar with the Courtiers of Ita


[root@master salt]# salt '*' state.apply zhuijia
5.2.4、向文件中添加注释
  • 默认为添加#
# 向Minion的/tmp下d.log文件添加注释,但是匹配以t开头的行才会添加注释
[root@master salt]# cat zhushi.sls 
/tmp/d.log:
  file.comment:
    - regex: '^t'


[root@master salt]# salt '*' state.apply zhushi
5.2.5、把本地的文件拷贝到其他的目录中
# 将Minion/tmp/d.log文件复制到Minion/tmp/abc/名字叫a.log,目录不存在将会自动创建
[root@master salt]# cat cp.sls 
/tmp/abc/a.log:
  file.copy:
    - source: /tmp/d.log
    - makedirs: True
    - force: True


[root@master salt]# salt '*' state.apply cp
5.2.6、创建目录
[root@master salt]# cat dir.sls 
/tmp/aaa/bbb/ddd/fff:
  file.directory:
    - user: root
    - group: root
    - dir_mode: 755
    - file_mode: 644
    - makedirs: True 
    - recurse:


[root@master salt]# salt '*' state.apply dir
5.2.7、判断文件是否存在
[root@master salt]# cat exists.sls 
/tmp/a.log:
  file.exists


[root@master salt]# salt '*' state.apply exists
5.2.8、设置链接
# 将alink.log创建一个aaa.log符号链接
[root@master salt]# cat link.sls 
/tmp/aaa.log:
  file.symlink:
    - target: /tmp/alink.log
    - force: True
/tmp/alink.log:
  file.touch


[root@master salt]# salt '*' state.apply link
5.2.9、使用redlace替换文件内容
[root@master salt]# cat red.sls 
/tmp/d.log-replace:
  file.replace:  
    - name: /tmp/d.log  
    - pattern: 'Thou'   
    - repl: 'wzh'     
    - backup: '.bak'

[root@master salt]# salt '*' state.apply red

5.3、cmd模块

  • cmd模块的作用是在Minion上执行命令或者脚本,参数如下所示。

  • cmd.run参数

    • name:执行脚本或者命令的名字
    • onlyif:测试命令,如果执行测试命令返回true,cmd.run的命令蔡有可能执行
    • unless:与onlyif相反,如果执行后为false,cmd.run的命令才有可能执行
    • cwd:执行命令当前目录设置,默认为/root
    • user:执行命令的用户,默认root
    • group:执行命令的组,默认root
    • shell:执行命令使用的shell
    • env:执行命令的环境设置
    • umask:运行命令受umake设置
    • output_loglevel:执行命令日志输出级别,其中特殊的设置是quiet,不输出日志
    • timeout:执行命令的超时时间,如果超时就发送kill -l SIGTERM命令,如果“kill -l SIGTERM”被忽略,那么紧接着发送kill命令
  • cmd.wait参数

    • 与cmd.run中的参数相比,只是wait中没有timeout参数,其他参数意义一样。cmd.run和cmd.wait的区别是:多个判断条件的使用,只要满足一个条件就会执行cmd.run,只有所有的条件都满足才会执行cmd.wait
5.3.1、在/tmp目录下执行脚本
[root@master salt]# cat testscript.sls 
testscript:
  cmd.run:
    - name: /tmp/testscript
    - cwd: /
    - user: root
# Minion端脚本文件
[root@minion ~]# cat /tmp/testscript 
#!/bin/bash
touch /root/file3.txt
[root@minion ~]# chmod +x  /tmp/testscript 
[root@master salt]# salt '*' state.apply testscript
[root@minion ~]# ls file3.txt 
file3.txt
5.3.2、判断httpd配置文件是否改动
  • 判断httpd配置文件是否改动,执行同步,然后测试配置文件是否可用,如果可用,重新加载配置文件
[root@master salt]# cat httpd.sls 
"/etc/httpd/conf/httpd.conf":
  file.managed:
    - source: salt://httpd/conf/httpd.conf
reloadhttpd:
  cmd.wait:
    - name: "systemctl start httpd"
    - onlyif: "httpd -t"
    - watch: 
      - file: "/etc/httpd/conf/httpd.conf"


# 可以去搞一份httpd.conf配置文件,拷贝到httpd/conf目录下
[root@master salt]# mkdir -p httpd/conf/
[root@master salt]# salt '*' state.apply httpd

5.4、user模块

  • user模块的作用是管理系统账户操作,参数如下所示
  • user.present参数中uid、gid、home等选项没有设置是系统默认设置,参数详解
    • name:要创建的用户名
    • uid:设置uid(没有设置则系统默认设置)
    • gid:设置默认的组gid(没有设置则系统默认设置)
    • groups:设置用户所属组
    • home:用户的自定义登录目录
    • password:为用户设置密码
    • enforce_password:如果密码已经已设置且密码哈希值与“password”字段中设置的密码不同,则设置为False以防止密码被更改。如果未设置“password”,则忽略次选项,默认为True
    • shell:设置用户的登录后的Sehll,默认将设置为系统默认Shell
  • user.absent用于删除用户参数详解
    • name:设置需要删除的用户名
    • purge:是否删除用户家目录
    • force:如果用户当前已经登录,则absent state会失败。选项为True时,就算用户当前处于登录状态也会删除本用户
5.4.1、创建aaa用户
  • 创建用户aaa并设置密码、shell、home目录、uid、gid、其他所属组
[root@master salt]# cat aaa_create_user.sls 
aaa:
  user.present:
    - password: '7D2dlkjDoOO988DFDS'
    - shell: /bin/bash
    - home: /home/aaa
    - uid: 900
    - gid: 997
    - groups:
      - root
      
      
[root@master salt]# salt '*' state.apply aaa_create_user

5.5、service模块

  • service模块的作用是管理系统服务操作,包括start、stop、reload、restart,参数如下所示
    • name:服务名称
    • enable:设置自启动True,默认不设置
    • watch:监控一些条件,如果成立默认执行restart
    • reload:默认为False,如果设置为True时候,当tatch条件成立,则会reload不会restart
5.5.1、管理Apache服务
[root@master salt]# cat httpd_service.sls 
# 确保httpd包被安装
httpd-pkg:  
  pkg.installed:  
    - name: httpd  
# 管理httpd服务的运行状态  
httpd-service:  
  service:
    - running 
    - name: httpd  
    - enable: True  
    - reload: True
    - watch:  
      - pkg: httpd-pkg  # 注意这里应该是pkg状态的ID,而不是包名
      
      
[root@master salt]# salt '*' state.apply httpd_service

5.6、cron模块

  • cron模块作用管理cron(Linux周期计划任务)服务操作,参数如下所示
  • cron.present添加cron任务,参数
    • name:资源名字
    • user:默认root,或者指定用户执
    • minute、hour、daymonth、month、dayweek:参数默认是”*“
    • cron.absent:删除cron任务
5.6.1、添加cron任务
# 每小时的10分钟,同步一次aliyun时间
[root@master salt]# cat cron_ntpdate.sls 
/usr/sbin/ntpdate ntp.aliyun.com >> /root/date.txt:
  cron.present:
    - user: root
    - minute: 10


[root@master salt]# salt '*' state.apply cron_ntpdate
# 可以去Minion端查看crontab任务
[root@minion ~]# crontab -l
# Lines below here are managed by Salt, do not edit
# SALT_CRON_IDENTIFIER:/usr/sbin/ntpdate ntp1.aliyun.com >> /root/date.txt
10 * * * * /usr/sbin/ntpdate ntp1.aliyun.com >> /root/date.txt
5.6.2、删除cron任务
[root@master salt]# cat cron_del.sls 
/usr/sbin/ntpdate ntp1.aliyun.com >> /root/date.txt:
  cron.absent
  
  
[root@master salt]# salt '*' state.apply cron_del
# 再次查看Minion端任务计划就被删除
[root@minion ~]# crontab -l
# Lines below here are managed by Salt, do not edit

5.7、hosts模块

  • hosts模块的作用是管理/etc/hosts文件
    • hosts.present添加域名,参数:
      • name:域名
      • names:多个域名
      • ip:ip地址
    • hosts.absent删除域名
5.7.1、添加单个ip对一个域名
[root@master salt]# cat hosts.sls
dns:
  host.present:
    - ip: 192.168.93.11
    - name: www.bbb.com


[root@master salt]# salt '*' state.apply hosts
5.7.2、添加单个ip对多个域名
[root@master salt]# cat hosts.sls 
dns:
  host.present:
    - ip: 192.168.93.11
    - names: 
      - www.bbb.com 
      - www.test.com


[root@master salt]# salt '*' state.apply hosts
5.7.3、删除ip对应的域名
[root@master salt]# cat hosts_del.sls 
dns:
  host.absent:
    - ip: 192.168.93.11
    - name: www.bbb.com


[root@master salt]# salt '*' state.apply hosts_del

六、综合应用案例

  • 案例需求:
    • 使用YUM安装Apache服务
    • 设置Apache用户和组
    • 设置同步配置文件,并启动服务

6.1、定义Apache配置文件

[root@master salt]# cat httpd.conf | grep -v '#' | grep -v '^$'
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin root@localhost
<Directory />
    AllowOverride none
    Require all denied
</Directory>
DocumentRoot "/var/www/html"
<Directory "/var/www">
    AllowOverride None
    Require all granted
</Directory>
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>
<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>
<Files ".ht*">
    Require all denied
</Files>
ErrorLog "logs/error_log"
LogLevel warn
<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common
    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>
    CustomLog "logs/access_log" combined
</IfModule>
<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>
<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>
<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>
AddDefaultCharset UTF-8
<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>
EnableSendfile on
IncludeOptional conf.d/*.conf

6.2、定义index文件

[root@master salt]# cat index.html 
kgc

6.3、定义sls文件

[root@master salt]# cat httpd.sls 
httpd:
  pkg.installed:
    - pkgs:
      - httpd
      - php
      - httpd-tools
  service.running:
    - name: httpd
    - enable: true
    - reload: true
  group.present:
    - gid: 87
  user.present:
    - name: httpd
    - uid: 87
    - gid: 87
    - home: /var/www/html
    - shell: /sbin/nologin
  file.managed:
    - name: /etc/httpd/conf/httpd.conf
    - source: salt://httpd/httpd.conf
    - user: root
    - group: root
    - mode: 644
[root@master salt]# salt '*' state.apply http

6.4、验证

6.4.1、访问是否开启服务
[root@master salt]# salt '*' cmd.run 'systemctl status httpd'
minion:
    * httpd.service - The Apache HTTP Server
       Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
##############################################################
       Active: active (running) since Mon 2024-07-22 19:42:36 CST; 3min 38s ago
##############################################################
         Docs: man:httpd(8)
               man:apachectl(8)
     Main PID: 8686 (httpd)
       Status: "Total requests: 1; Current requests/sec: 0; Current traffic:   0 B/sec"
       CGroup: /system.slice/httpd.service
               |-8686 /usr/sbin/httpd -DFOREGROUND
               |-8687 /usr/sbin/httpd -DFOREGROUND
               |-8688 /usr/sbin/httpd -DFOREGROUND
               |-8689 /usr/sbin/httpd -DFOREGROUND
               |-8690 /usr/sbin/httpd -DFOREGROUND
               `-8691 /usr/sbin/httpd -DFOREGROUND
    
    Jul 22 19:42:36 minion systemd[1]: Starting The Apache HTTP Server...
    Jul 22 19:42:36 minion httpd[8686]: AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.93.102. Set the 'ServerName' directive globally to suppress this message
    Jul 22 19:42:36 minion systemd[1]: Started The Apache HTTP Server.

6.4.2、访问httpd服务

[root@master salt]# curl 192.168.93.102
kgc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值