SaltStack安裝Nginx

1. 思路整理

五步走:

  • 整個base環境規劃

    工作當中,我們在使用SaltStack的時候,環境目錄的規劃儘量做到標準化,自己要嚴格要求好!這也是作爲一個運維工程師的基本技能要求。

  • 安裝Nginx(依賴包)

    在本文章中,我的Example使用的是源碼安裝,也是當前主流的安裝方式!(這裏會用到pkg.installed,cmd.run等多種狀態管理模塊)

  • 配置管理

    在安裝好服務之後,我們需要對服務進行基本的配置管理,通過模板文件來進行統一管理!(會用到"file.managed","file.directory"等多種狀態管理)

  • 服務啓動

    在安裝和配置完成之後,就可以啓動服務了!(這裏會用到service.running等狀態管理模塊)

  • top高級狀態指定

    在上述完成之後,在工作中,我們需要指定哪些角色主機安裝Nginx服務,這時候我們就需要在“top_file”中指定。

1.1 base環境規劃

這裏我展示一下我的目錄規劃。

  • 在master配置文件中的"file_roots"配置:

[root@linux-node1 ~]# cd /etc/salt/
[root@linux-node1 ~]# vim master
······
file_roots:
  base:
    - /srv/salt/base
  prod:
    - /srv/salt/prod
······

我的所有salt項放在基礎環境(base)及生產環境(prod)兩個項目目錄下。

  • 然後再/srv/salt/下創建兩個目錄,base和prod

[root@linux-node1 ~]# cd /srv/salt/
[root@linux-node1 salt]# mkdir -pv base prod
[root@linux-node1 salt]# tree
.
├── base
│   ├── init
│   │   ├── audit.sls
│   │   ├── dns.sls
│   │   ├── epel.sls
│   │   ├── files
│   │   │   ├── resolv.conf
│   │   │   └── zabbix_agentd.conf
│   │   ├── history.sls
│   │   ├── init.sls
│   │   ├── sysctl.sls
│   │   └── zabbix-agent.sls
│   └── top.sls
└── prod
    ├── bbs
    │   ├── files
    │   │   └── nginx-bbs.conf
    │   ├── memcached.sls
    │   └── web.sls
    ├── cluster
    │   ├── files
    │   │   ├── haproxy-outside.cfg
    │   │   └── haproxy-outside-keepalived.conf
    │   ├── haproxy-outside-keepalived.sls
    │   └── haproxy-outside.sls
    └── modules
        ├── haproxy
        │   ├── files
        │   │   ├── haproxy-1.6.3.tar.gz
        │   │   └── haproxy.init
        │   └── install.sls
        ├── keepalived
        │   ├── files
        │   │   ├── keepalived-1.2.17.tar.gz
        │   │   ├── keepalived.init
        │   │   └── keepalived.sysconfig
        │   └── install.sls
        ├── libevent
        │   ├── files
        │   │   └── libevent-2.0.22-stable.tar.gz
        │   └── install.sls
        ├── memcached
        │   ├── files
        │   │   └── memcached-1.4.24.tar.gz
        │   └── install.sls
        ├── nginx
        │   ├── files
        │   │   ├── nginx-1.10.1.tar.gz
        │   │   ├── nginx.conf
        │   │   └── nginx-init
        │   ├── install.sls
        │   └── service.sls
        ├── pcre
        │   ├── files
        │   │   └── pcre-8.37.tar.gz
        │   └── install.sls
        ├── php
        │   ├── files
        │   │   ├── init.d.php-fpm
        │   │   ├── memcache-2.2.7.tgz
        │   │   ├── php-5.6.9.tar.gz
        │   │   ├── php-fpm.conf.default
        │   │   ├── php.ini-production
        │   │   └── redis-2.2.7.tgz
        │   ├── install.sls
        │   ├── php-memcache.sls
        │   └── php-redis.sls
        ├── pkg
        │   └── make.sls
        └── user
            ├── test.sls
            └── www.sls

25 directories, 47 files

值得注意的是:在寫SLS文件的時候,儘量每個服務單獨寫一個SLS,將整個項目中的服務進行解耦,方便我們以後更好的引用。如果在別的項目中需要的時候,只需要include這個SLS就可以了!

2. 編寫安裝Nginx的SLS文件

2.1 安裝依賴包的SLS

[root@linux-node1 prod]# cd modules/
[root@linux-node1 modules]# cd pkg/
[root@linux-node1 pkg]# vim make.sls
make-pkg:
  pkg.installed:
    - pkgs:
      - gcc
      - gcc-c++
      - glibc
      - make
      - autoconf
      - openssl
      - openssl-devel
      - pcre
      - pcre-devel

2.2 編寫安裝Nginx的SLS文件

  • 需要提前下載源碼包:

[root@linux-node1 files]# wget http://nginx.org/download/nginx-1.10.1.tar.gz

Note:

需要放在/srv/salt/prod/modules/nginx/files/下。

  • 編寫SLS文件

[root@linux-node1 ~]# cd /srv/salt/prod/modules/nginx/
[root@linux-node1 ~]# vim install.sls
include:
  - module.pkg.make       
  - module.user.www

nginx-source-install:
  file.managed:
    - name: /usr/local/src/nginx-1.10.1.tar.gz
    - source: salt://modules/nginx/files/nginx-1.10.1.tar.gz
    - user: root
    - group: root
    - mode: 755
  cmd.run:
    - name: cd /usr/local/src && tar zxf nginx-1.10.1.tar.gz && cd nginx-1.10.1&& ./configure --prefix=/usr/local/nginx-1.10.1 --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-file-aio --with-http_dav_module && make && make install && ln -s /usr/local/nginx-1.10.1 /usr/local/nginx && chown -R www:www /usr/local/nginx
    - unless: test -d /usr/local/nginx
    - requrie:
      - user: www-user-group
      - file: nginx-install
      - pkg: make-pkg

這樣一個Nginx的安裝SLS文件,就完成了!接下來要做的就是配置管理。在這裏我們的安裝文件和配置啓動文件寫成了兩個,這樣方便以後我們多次使用。

2.3 配置管理及啓動SLS文件

[root@linux-node1 ~]# vim service.sls
include:
  - modules.nginx.install

nginx-init:
  file.managed:
    - name: /etc/init.d/nginx
    - source: salt://modules/nginx/files/nginx-init
    - mode: 755
    - user: root
    - group: root
  cmd.run:
    - name: chkconfig --add nginx
    - unless: chkconfig --list|grep nginx
    - require:
      - file: nginx-init

/usr/local/nginx/conf/nginx.conf:
  file.managed:
    - source: salt://modules/nginx/files/nginx.conf
    - user: www
    - group: www
    - mode: 644

#Starting Nginx Server
nginx-service:
  service.running:
    - name: nginx
    - enabled: True
    - reload: True
    - watch:
      - file: /usr/local/nginx/conf/nginx.conf
      - file: nginx-online

#下面的兩個ID聲明,一個是存放在線的服務主機,一個是存放已經從線上撤下來的服務主機。
nginx-online:
  file.directory:
    - name: /usr/local/nginx/conf/vhost_online

nginx-offline:
  file.directory:
    - name: /usr/local/nginx/conf/vhost_offline

Note:

在這個文件中,創建vhostonline和vhostoffline的目的是存放線上主機和線下服務主機的目錄。可能有的人問,爲什麼要這麼做?原因就是我們下線的主機最好不要刪除,而是另存爲。這樣方便以後我們再次使用的時候能夠拿到數據。

3. 在top file中指定哪些主機執行這個安裝操作

注意:我的top.sls是放在我的/srv/salt/base/下的。

[root@linux-node1 base]# vim top.sls
base:
  '*':
    - init.env_init

prod:
  'linux-node*':
    - modules.nginx.install
    - modules.nginx.service

主要添加的是prod後面的內容,表示匹配滿足主機名爲"linux-node*"這種格式的Minion都可以執行按照Nginx操作。

這樣我們就實現了用SaltStack安裝Nginx了。

Daily sentence

No matter how far you may fly, never forget where you come from.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章