SaltStack状态文件LNMP部署zabbix

SaltStack状态文件LNMP部署zabbix

环境说明:

salt-master(master)salt-minion(node1)
192.168.220.9192.168.220.10

添加变量

[root@master ~]# vim /etc/salt/master
......
 667  file_roots:
 668 #   base:
 669 #     - /srv/salt/
 670 #   dev:
 671 #     - /srv/salt/dev/services
 672 #     - /srv/salt/dev/states
 673    prod:
 674       - /srv/salt/prod
......
 849 pillar_roots:
 850   prod:
 851     - /srv/pillar/prod
......
[root@master ~]# mkdir /srv/pillar/prod
[root@master ~]# systemctl restart salt-master
[root@master ~]# cd /srv/pillar/prod/
[root@master prod]# ls
 mysql.sls  nginx.sls  php.sls  top.sls

[root@master prod]# cat nginx.sls 
nginx_installdir: /usr/local/nginx

[root@master prod]# cat mysql.sls 
mysql_installdir: /usr/local/mysql
mysql_datadir: /opt/data
mysql_password: 123

[root@master prod]# cat php.sls 
php_installdir: /usr/local/php7

[root@master prod]# cat top.sls 
prod:
  'node1':
     - nginx
     - mysql
     - php
     
     
[root@master prod]# salt node1 test.ping
node1:
    True
[root@master prod]# salt node1 pillar.items
node1:
    ----------
    mysql_datadir:
        /opt/data
    mysql_installdir:
        /usr/local/mysql
    mysql_password:
        123
    nginx_installdir:
        /usr/local/nginx
    php_installdir:
        /usr/local/php7     

目录结构

[root@master prod]# cd /srv/salt/prod/
[root@master prod]# tree
.
|-- modules
|   |-- application
|   |   `-- php
|   |       |-- files
|   |       |   |-- install.sh.j2
|   |       |   |-- oniguruma-devel-6.8.2-2.el8.x86_64.rpm
|   |       |   |-- php-7.4.24.tar.gz
|   |       |   |-- php-fpm
|   |       |   |-- php-fpm.conf
|   |       |   |-- php-fpm.service
|   |       |   |-- php.ini
|   |       |   `-- www.conf
|   |       `-- install.sls
|   |-- database
|   |   `-- mysql
|   |       |-- files
|   |       |   |-- install.sh.j2
|   |       |   |-- mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
|   |       |   |-- mysql.server.j2
|   |       |   `-- mysqld.service.j2
|   |       `-- install.sls
|   `-- web
|       |                        
|       |   
|       `-- nginx
|           |
|           |-- files
|           |   |-- install.sh.j2
|           |   |-- nginx-1.20.1.tar.gz
|           |   `-- nginx.service.j2
|           `-- install.sls
`-- zabbix
    |-- files
    |   |-- index.php
    |   |-- my.cnf.j2
    |   |-- mysql.conf.j2
    |   |-- nginx.conf
    |   
    |-- main.sls
    |-- mysql.sls
    |-- nginx.sls
    `-- zabbix
        |-- install.sh
        |-- zabbix-5.4.4.tar.gz
        `-- zabbix.sls

15 directories, 39 files

Nginx

[root@master prod]# cat modules/web/nginx/install.sls  
nginc-dev-package:
  pkg.installed:
    - pkgs:
      - pcre-devel 
      - openssl 
      - openssl-devel 
      - gd-devel 
      - gcc 
      - gcc-c++ 
      - make 
      - wget    

nginx:
  user.present:
    - shell: /sbin/nologin
    - createhome: false
    - system: true

/usr/src/nginx-1.20.1.tar.gz:
  file.managed:
    - source: salt://modules/web/nginx/files/nginx-1.20.1.tar.gz

nginx-installsh:
  cmd.script:
    - name: salt://modules/web/nginx/files/install.sh.j2
    - template: jinja
    - unless: test -d {{ pillar['nginx_installdir'] }}

/usr/lib/systemd/system/nginx.service:
  file.managed:
    - source: salt://modules/web/nginx/files/nginx.service.j2
    - user: root
    - group: root
    - mode: '0644'
    - template: jinja

systemctl daemon-reload:
  cmd.run
  
  
[root@master prod]# cat modules/web/nginx/files/install.sh.j2 
#!/bin/bash
cd /usr/src
rm -rf nginx-1.20.1
tar xf nginx-1.20.1.tar.gz
cd nginx-1.20.1
./configure \
      --prefix="{{ pillar['nginx_installdir']}}" \
      --user=nginx \
      --group=nginx \
      --with-debug \
      --with-http_ssl_module \
      --with-http_realip_module \
      --with-http_image_filter_module \
      --with-http_gunzip_module \
      --with-http_gzip_static_module \
      --with-http_stub_status_module \
      --http-log-path=/var/log/nginx/access.log \
      --error-log-path=/var/log/nginx/error.log  && make && make install
      
      
[root@master prod]# cat modules/web/nginx/files/nginx.service.j2
[Unit]
Description=nginx server daemon
After=network.target

[Service]
Type=forking
ExecStart={{ pillar['nginx_installdir'] }}/sbin/nginx  
ExecStop={{ pillar['nginx_installdir'] }}/sbin/nginx  -s stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target


[root@master prod]# cat zabbix/nginx.sls
"Development Tools":
  pkg.group_installed

include:
  - modules.web.nginx.install

/var/log/nginx:
  file.directory:
    - user: nginx
    - group: nginx
    - mode: '0755'
    - makedirs: true
     
{{ pillar['nginx_installdir'] }}/html/index.php:
  file.managed:
    - source: salt://zabbix/files/index.php
    - user: nginx
    - group: nginx
    - mode: '0644'
    - require:
      - cmd: nginx-installsh

{{ pillar['nginx_installdir'] }}/conf/nginx.conf:
  file.managed:
    - source: salt://zabbix/files/nginx.conf
    - user: root
    - group: root
    - mode: '0644'
    - require:
      - cmd: nginx-installsh

zabbix-nginx-service:
  service.running:
    - name: nginx
    - enable: true
    - reload: true
    - watch:
      - file: {{ pillar['nginx_installdir'] }}/conf/nginx.conf
    - require:
      - cmd: nginx-installsh
      - file: {{ pillar['nginx_installdir'] }}/conf/nginx.conf
      
      
[root@master prod]# vim zabbix/files/nginx.conf
......
 43         location / {
 44             root   html;
 45             index  index.php index.html index.htm;  # 添加index.php
 46         }
 .......
 65         location ~ \.php$ {
 66             root           html;
 67             fastcgi_pass   127.0.0.1:9000;
 68             fastcgi_index  index.php;
 69             fastcgi_param  SCRIPT_FILENAME  $Document_root$fastcgi_script_name; # 修改为$Document_root
 70             include        fastcgi_params;
 71         }
 .......

MySQL

[root@master prod]# cat modules/database/mysql/install.sls
ncurses-compat-libs:
  pkg.installed

create-mysql-user:
  user.present:
    - name: mysql
    - createhome: false
    - system: true
    - shell: /sbin/nologin

create-datadir:
  file.directory:
    - name: {{ pillar['mysql_datadir'] }}
    - user: mysql
    - group: mysql
    - mode: '0755'
    - makedirs: true

/usr/src/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz:
  file.managed:
    - source: salt://modules/database/mysql/files/mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
    - user: root
    - group: root
    - mode: '0644'

mysql-install:
  cmd.script:
    - name: salt://modules/database/mysql/files/install.sh.j2
    - template: jinja
    - unless: test -d {{ pillar['mysql_installdir'] }}

trasfer-files:
  file.managed:
    - names:
      - {{ pillar['mysql_installdir'] }}/support-files/mysql.server:
        - source: salt://modules/database/mysql/files/mysql.server.j2
        - template: jinja
      - /usr/lib/systemd/system/mysqld.service:
        - source: salt://modules/database/mysql/files/mysqld.service.j2
        - template: jinja
    - require:
      - cmd: mysql-install
      
      
[root@master prod]# cat modules/database/mysql/files/install.sh.j2
#!/bin/bash
cd /usr/src
tar xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
ln -s /usr/src/mysql-5.7.34-linux-glibc2.12-x86_64 {{ pillar['mysql_installdir'] }}
chown -R mysql.mysql {{ pillar['mysql_installdir'] }}
{{ pillar['mysql_installdir'] }}/bin/mysqld --initialize-insecure --user=mysql --datadir="{{ pillar['mysql_datadir'] }}"
echo "export PATH={{ pillar['mysql_installdir'] }}/bin:\$PATH" > /etc/profile.d/mysqld.sh



[root@master prod]# cat modules/database/mysql/files/mysqld.service.j2
[Unit]
Description=Mysql server daemon
After=network.target 

[Service]
Type=forking
ExecStart={{ pillar['mysql_installdir'] }}/support-files/mysql.server start
ExecStop={{ pillar['mysql_installdir'] }}/support-files/mysql.server stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

[root@master prod]# vim modules/database/mysql/files/mysql.server.j2
......
 46 basedir={{ pillar['mysql_installdir'] }}
 47 datadir={{ pillar['mysql_datadir'] }}
 ......
 
 
[root@master prod]# cat zabbix/mysql.sls
lamp-dep-package:
  pkg.installed:
    - pkgs:
      - ncurses-devel 
      - openssl-devel
      - openssl
      - cmake
      - mariadb-devel
      - ncurses-compat-libs 

include:
  - modules.database.mysql.install

provides-mysql-file:
  file.managed:
    - user: root
    - group: root
    - mode: '0644'
    - names:
      - /etc/my.cnf:
        - source: salt://zabbix/files/my.cnf.j2
        - template: jinja
      - /etc/ld.so.conf.d/mysql.conf:
        - source: salt://zabbix/files/mysql.conf.j2
        - template: jinja     
 
/usr/local/include/mysql:
  file.symlink:
    - target: {{ pillar['mysql_installdir'] }}/include

mysqld-start:
  service.running:
    - name: mysqld
    - enable: true
    - reload: true
    - require:
      - cmd: mysql-install
      - file: trasfer-files
    - watch:
      - file: provides-mysql-file    
  
set-password:
  cmd.run:
    - name: {{ pillar['mysql_installdir'] }}/bin/mysql -e "set password = password('{{ pillar['mysql_password'] }}');"
    - require:
      - service: mysqld-start
    - unless: {{ pillar['mysql_installdir'] }}/bin/mysql -uroot -p{{ pillar['mysql_password'] }} -e "exit"
   
   
[root@master prod]# cat zabbix/files/my.cnf.j2
[mysqld]
port = 3306
datadir = {{ pillar['mysql_datadir'] }}
basedir = {{ pillar['mysql_installdir'] }}
socket = /tmp/mysql.sock
pid-file = {{ pillar['mysql_datadir'] }}/mysql.pid
log-error = {{ pillar['mysql_datadir'] }}/mysql.err
skip-name-resolve
    
    
[root@master prod]# cat zabbix/files/mysql.conf
{{ pillar['mysql_installdir'] }}/lib



PHP

[root@master prod]# cat modules/application/php/install.sls
/usr/src/oniguruma-devel-6.8.2-2.el8.x86_64.rpm:
  file.managed:
    - source: salt://modules/application/php/files/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
    - user: root
    - group: root
    - mode: '0644'
  cmd.run:
    - name: yum -y install /usr/src/oniguruma-devel-6.8.2-2.el8.x86_64.rpm
    - unless: rpm -q oniguruma-devel

epel-install:
  cmd.run:
    - name: dnf -y install epel-release
    - unless: rpm -q epel-release

dep-pkckages-install:
  pkg.installed:
    - pkgs:
      - sqlite-devel
      - libzip-devel
      - libxml2
      - libxml2-devel
      - openssl
      - openssl-devel
      - bzip2
      - bzip2-devel
      - libcurl
      - libcurl-devel
      - libicu-devel
      - libjpeg-turbo
      - libjpeg-turbo-devel
      - libpng
      - libpng-devel
      - openldap-devel
      - pcre-devel
      - freetype
      - freetype-devel
      - gmp
      - gmp-devel
      - libmcrypt
      - libmcrypt-devel
      - readline
      - readline-devel
      - libxslt
      - libxslt-devel
      - mhash
      - mhash-devel
      - gcc
      - gcc-c++
      - make

/usr/src/php-7.4.24.tar.gz:
  file.managed:
    - source: salt://modules/application/php/files/php-7.4.24.tar.gz
    - user: root
    - group: root
    - mode: '0644'

php-install:
  cmd.script:
    - name: salt://modules/application/php/files/install.sh.j2 
    - template: jinja
    - unless: test -d {{ pillar['php_installdir' ] }}    

copy-php:
  file.managed:
    - names:
      - /etc/init.d/php-fpm:
        - source: salt://modules/application/php/files/php-fpm
        - user: root
        - group: root
        - mode: '0755' 
      - {{ pillar['php_installdir' ] }}/etc/php-fpm.conf:
        - source: salt://modules/application/php/files/php-fpm.conf
      - {{ pillar['php_installdir' ] }}/etc/php-fpm.d/www.conf:
        - source: salt://modules/application/php/files/www.conf
      - /usr/lib/systemd/system/php-fpm.service:
        - source: salt://modules/application/php/files/php-fpm.service
      - /etc/php.ini:
        - source: salt://modules/application/php/files/php.ini  
    - require:
      - cmd: php-install

php-fpm.service:
  service.running:
    - enable: true
    - reload: true
    - require:
      - cmd: php-install
      - file: copy-php
    - watch:
      - file: copy-php
      
      
[root@master prod]# cat modules/application/php/files/install.sh.j2
#!/bin/bash

cd /usr/src
rm -rf php-7.4.24 
tar xf php-7.4.24.tar.gz
cd /usr/src/php-7.4.24
./configure --prefix="{{ pillar['php_installdir'] }}"  \
--with-config-file-path=/etc \
--enable-fpm \
--disable-debug \
--disable-rpath \
--enable-shared \
--enable-soap \
--with-openssl \
--enable-bcmath \
--with-iconv \
--with-bz2 \
--enable-calendar \
--with-curl \
--enable-exif  \
--enable-ftp \
--enable-gd \
--with-jpeg \
--with-zlib-dir \
--with-freetype \
--with-gettext \
--enable-mbstring \
--enable-pdo \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-readline \
--enable-shmop \
--enable-simplexml \
--enable-sockets \
--with-zip \
--enable-mysqlnd-compression-support \
--with-pear \
--enable-pcntl \
--enable-posix && make && make install


[root@master prod]# cat modules/application/php/files/p
...
409 max_execution_time = 300
....
419 max_input_time = 300
...
703 post_max_size = 16M
...
973 date.timezone = Asia/Shanghai
....



[root@master prod]# cat modules/application/php/files/php-fpm.service
[Unit]
Description=php-fpm server daemon
After=network.target 

[Service]
Type=forking
ExecStart=/etc/init.d/php-fpm start
ExecStop=/etc/init.d/php-fpm stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target


[root@master prod]# cat zabbix/files/index.php
<?php
        phpinfo();
?>

执行LNMP部分的安装

[root@master prod]# cat zabbix/main.sls 
include:
  - zabbix.nginx
  - zabbix.mysql
  - modules.application.php.install

[root@master prod]# salt node1 state.sls zabbix.main saltenv=prod

在这里插入图片描述

zabbix 部署  zabbix.sls

zabbix-dep-package:
  pkg.installed:
    - pkgs:
      - net-snmp-devel
      - libevent-devel
      - make
      - gcc
      - gcc-c++

zabbix:
  user.present:
    - shell: /sbin/nologin
    - createhome: false
    - system: true

/usr/src/zabbix-5.4.4.tar.gz:
  file.managed:
    - source: salt://zabbix/zabbix/zabbix-5.4.4.tar.gz
    - user: root
    - group: root
    - mode: '0644'

zabbix-install:
  cmd.script:
    - name: salt://zabbix/zabbix/install.sh
  
/var/lib/mysql:
  file.directory:
    - user: root
    - group: root
    - mode: '0755'
    - makedirs: true

create-link:
  cmd.run:
    - name: ln -s /tmp/mysql.sock /var/lib/mysql/
    - unless: test -L /var/lib/mysql/mysql.sock    

zabbix_server:
  cmd.run
       
zabbix_agentd:
  cmd.run

/usr/local/nginx/html/:
  file.directory:
    - user: nginx
    - group: nginx
    - mode: '0777'

copy-file-ui:
  cmd.run:
    - name: cp -r /usr/local/zabbix-5.4.4/ui/* /usr/local/nginx/html/

/usr/local/nginx/html/conf:
  file.directory:
    - user: nginx
    - group: nginx
    - mode: '0777'
    
    
# 安装脚本内容: install.sh

#!/bin/bash

rm -rf zabbix-5.4.4
cd /usr/src/
tar xf zabbix-5.4.4.tar.gz -C /usr/local

/usr/local/mysql/bin/mysql -uroot -p123 -e "create database zabbix character set utf8 collate utf8_bin;" && \
/usr/local/mysql/bin/mysql -uroot -p123 -e "create user 'zabbix'@'localhost' identified by 'zabbix';" && \
/usr/local/mysql/bin/mysql -uroot -p123 -e "grant all privileges on zabbix.* to 'zabbix'@'localhost';" && \
/usr/local/mysql/bin/mysql -uroot -p123 -e "flush privileges;"

cd /usr/local/zabbix-5.4.4/database/mysql
/usr/local/mysql/bin/mysql -uroot -p123  zabbix < schema.sql && \
/usr/local/mysql/bin/mysql -uroot -p123  zabbix < images.sql && \
/usr/local/mysql/bin/mysql -uroot -p123  zabbix < data.sql

cd /usr/local/zabbix-5.4.4/
 ./configure --enable-server \
 --enable-agent \
 --with-mysql \
 --with-net-snmp \
 --with-libcurl \
 --with-libxml2 && make install

sed -i 's/# DBPassword=/DBPassword=zabbix/' /usr/local/etc/zabbix_server.conf

执行zabbix安装部分

[root@master prod]# salt node1 state.sls zabbix.zabbix.zabbix saltenv=prod

浏览器输入IP访问

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值