[首先配置好saltstack基础环境,确保master能远程minion,这里就不列举了]

 因为涉及到的目录较多,因此先规划好目录结构


[root@pc1 dev]# tree /srv/dev/

/srv/dev/nginx_install

                ├  initpkg.sls

         │          ├  initall .sls

                ├  nginx_init.sls

         │          ├  files

         │           └── nginx-1.9.2.tar.gz

         │           └── nginx.service

         │   

         └── top.sls



  一、修改配置文件,为不同的环境配置不同的文件目录

     [root@pc1 /]#vim /etc/salt/master

      file_roots:    

        base:

          - /srv/base

        dev:

          - /srv/dev

        prod:

          - /srv/prod

        [root@pc1 salt]# systemctl restart salt-master.service          重启服务

        [root@pc1 salt]# mkdir /srv/{base,dev,prod}                     创建目录


     二、指定环境路径

       1、 部署源码包运行环境

        [root@pc1 dev]# vim top.sls

        dev:

         ‘pc1’

            - nginx_install                                             只定义目录位置 会默认去init.sls 文件找


        2、创建目录,并把源码包拷贝过来

         [root@pc1 dev]#mkdir nginx_install

         [root@pc1 nginx_install]# mkdir files                           为了方便另创一个目录

         [root@pc1 nginx_install]# cp nginx-1.9.2.tar.gz files/          拷贝源码包    

         

        3、安装依赖包

           使用pkg.installed模块安装依赖包

          [root@pc1 nginx_install]# vim  initpkg.sls

          init_pkg_install:

            pkg.installed:                     

              - name:

              - gcc

              - gcc-c++

              - make

              - autoconf

              - openssl-devel

              - pcre-devel

           

         4、设定源码编译方式

           首先通过file.managed模块将源码分发至服务器

           [root@pc1 nginx_install]# vim install.sls

            nginx_src_install:

             file.managed:

                - name: /usr/local/src/nginx-1.9.2.tar.gz                  目标路径

                - source: salt://nginx_install/files/nginx-1.9.2.tar.gz    文件源路经

                - user: root                                               所有者

                - group: root                                              所属主

                - mode: 644                                                权限

                                        为了方便可以写个小脚本执行源码安装

            build_src:                                                     指定源码安装脚本路径

              cmd.scropt: 

                - source: salt://nginx_install/files/build.sh              指定脚本路径

                - cwd: usrlocal/src

                - user: root

                - unless: test -d usrlocal/nginx                            判断有这个文件就不执行脚本

                - repuire:

                - file: nginx_src_install                                   上面执行完才会执行脚本

                - pkg: init_pkg_install                                     判断是否已经安装依赖包

                                                                           

           5、创建脚本并存放在指定路径 

             [root@pc1 nginx_install]# vim files/build.sh

                #!/bin/bash

                useradd -s /sbin/nologin nginx

                tar zxf nginx-1.9.12.tar.gz

                cd nginx-1.9.12

                ./configure —prefix=usrlocal/nginx —user=nginx —group=nginx

                make

                make install


           三、配置开机启动服务

             1、创建开机启动的文件

                [root@pc1 nginx_install]# vim nginx_init.sls

                nginx_init:

                  file.managed:

                    - name: usrlib/systemd/system/nginx.service           拷贝服务单元文件

                    - source: salt://nginx_install/files/nginx.service    源文件路径

                    - user: root

                    - group: root

                    - mode: 644


                nginx_service:                                     设定服务运行状态

                  sevrice.running:

                    - name: nginx

                    - enable: true

                    - restart: true

                    - watch:                                          判断上述执行成功才运行服务

                    - file: nginx_init


             2、创建init.sls运行文件

                 

                [root@pc1 nginx_install]# vim init.sls   

                include:                                            按顺序执行

                  - .initpkg                                        . 当前目录

                  - .initall

                  - .nginx_init


             3、进行测试.

                [root@pc1 nginx_install]# salt ‘pc2’ state.highstate saltenv=dev test=true

               如果没有报错就执行False

                 [root@pc1 nginx_install]# salt ‘pc2’ state.highstate saltenv=dev test=false


             4、进入pc2上查看端口是否开启




              nginx.service文件


                [Unit]

                Description=nginx - high performance web server

                Documentation=http://nginx.org/en/docs/

                After=network.target remote-fs.target nss-lookup.target

                

                [Service]

                Type=forking

                PIDFile=usrlocal/nginx/logs/nginx.pid

                ExecStartPre=usrlocal/nginxsbinnginx -t -c usrlocal/nginx/conf/nginx.conf

                ExecStart=usrlocal/nginxsbinnginx -c usrlocal/nginx/conf/nginx.conf

                ExecReload=usrlocal/nginxsbinnginx -s reload

                ExecStop=usrlocal/nginxsbinnginx -s quit

                PrivateTmp=true

                

                [Install]

                WantedBy=multi-user.target