Saltstack部署zabbix

本文档详细介绍了使用Saltstack自动化部署Zabbix监控系统的步骤,包括LAMP架构的搭建,PHP、MySQL和Apache的安装配置,以及Zabbix的安装和配置。通过 Saltstack 的状态文件(sls)进行配置管理,确保了整个部署过程的标准化和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Saltstack部署zabbix

目录树

[root@master ~]# cd /srv/salt/prod/
[root@master prod]# tree
.
|-- modules
|   |-- application
|   |   `-- php
|   |       |-- files
|   |       |   |-- install.sh
|   |       |   |-- 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
|   |       |   |-- mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz
|   |       |   |-- mysql.server
|   |       |   `-- mysqld.service
|   |       `-- install.sls
|   `-- web
|       `-- apache
|           |-- files
|           |   |-- apr-1.7.0.tar.gz
|           |   |-- apr-util-1.6.1.tar.gz
|           |   |-- httpd-2.4.48.tar.gz
|           |   |-- httpd.conf
|           |   |-- httpd.service
|           |   `-- install.sh
|           `-- install.sls
`-- zabbix
    |-- apache.sls
    |-- files
    |   |-- index.php
    |   |-- my.cnf
    |   |-- mysql.conf
    |   `-- vhosts.conf
    |-- main.sls
    |-- mysql.sls
    `-- zabbix
        |-- install.sh
        |-- zabbix-5.4.4.tar.gz
        `-- zabbix.sls

13 directories, 31 files
[root@master prod]#

先部署LAMP架构

PHP安装部分

/srv/salt/prod/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

dnf -y install epel-release:
  cmd.run

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

/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'

salt://modules/application/php/files/install.sh:
  cmd.script

copy-php:
  file.managed:
    - names:
      - /etc/init.d/php-fpm:
        - source: salt://modules/application/php/files/php-fpm
        - user: root
        - group: root
        - mode: '0755'
      - /usr/local/php7/etc/php-fpm.conf:
        - source: salt://modules/application/php/files/php-fpm.conf
      - /usr/local/php7/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

php-fpm.service:
  service.running:
    - enable: true
/srv/salt/prod/modules/application/php/files/install.sh
#!/bin/bash
  
cd /usr/src
rm -rf php-8.0.10
tar xf php-7.4.24.tar.gz -C /usr/local
cd /usr/local/php-7.4.24
./configure --prefix=/usr/local/php7  \
--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
/srv/salt/prod/modules/application/php/files/php.ini
...
409 max_execution_time = 300
....
419 max_input_time = 300
...
703 post_max_size = 16M
...
973 date.timezone = Asia/Shanghai
....
/srv/salt/prod/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

MySQL安装部分

/srv/salt/prod/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: /opt/data
    - 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'

salt://modules/database/mysql/files/install.sh:
  cmd.script

trasfer-files:
  file.managed:
    - names:
      - /usr/local/mysql/support-files/mysql.server:
        - source: salt://modules/database/mysql/files/mysql.server
      - /usr/lib/systemd/system/mysqld.service:
        - source: salt://modules/database/mysql/files/mysqld.service
/srv/salt/prod/modules/database/mysql/files/install.sh
cd /usr/src
tar xf mysql-5.7.34-linux-glibc2.12-x86_64.tar.gz -C /usr/local
ln -s mysql-5.7.34-linux-glibc2.12-x86_64 /usr/local/mysql
chown -R mysql.mysql /usr/local/mysql*
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --datadir=/opt/data/
echo "export PATH=/usr/local/mysql/bin:\$PATH" > /etc/profile.d/mysqld.sh
/srv/salt/prod/modules/database/mysql/files/mysql.server
...
46 basedir=/usr/local/mysql
47 datadir=/opt/data
...
/srv/salt/prod/modules/database/mysql/files/mysqld.service
[Unit]
Description=Mysql server daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/support-files/mysql.server start
ExecStop=/usr/local/mysql/support-files/mysql.server stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

apache安装部分

/srv/salt/prod/modules/web/apache/install.sls
apache-dep-package:
  pkg.installed:
    - pkgs:
      - openssl
      - pcre-devel
      - expat-devel
      - gcc
      - gcc-c++
      - libtool
      - make

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

apache-download:
  file.managed:
    - names:
      - /usr/src/apr-1.7.0.tar.gz:
        - source: salt://modules/web/apache/files/apr-1.7.0.tar.gz
      - /usr/src/apr-util-1.6.1.tar.gz:
        - source: salt://modules/web/apache/files/apr-util-1.6.1.tar.gz
      - /usr/src/httpd-2.4.48.tar.gz:
        - source: salt://modules/web/apache/files/httpd-2.4.48.tar.gz

salt://modules/web/apache/files/install.sh:
  cmd.script
  
/usr/lib/systemd/system/httpd.service:
  file.managed:
    - source: salt://modules/web/apache/files/httpd.service
    - user: root
    - group: root
    - mode: '0644'

systemctl daemon-reload:
  cmd.run

/usr/local/httpd/conf/httpd.conf:
  file.managed:
    - source: salt://modules/web/apache/files/httpd.conf
    - user: root
    - group: root
    - mode: '0644'
/srv/salt/prod/modules/web/apache/file/install.sh
#!/bin/bash
  
cd /usr/src
rm -rf apr-1.7.0 apr-util-1.6.1 httpd-2.4.48
tar xf apr-1.7.0.tar.gz
tar xf apr-util-1.6.1.tar.gz
tar xf httpd-2.4.48.tar.gz

cd /usr/src/apr-1.7.0
sed -i '/$RM "$cfgfile"/d' configure
./configure --prefix=/usr/local/apr && \
        make && make install
cd ../apr-util-1.6.1
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr && \
        make && make install
cd ../httpd-2.4.48
./configure --prefix=/usr/local/httpd \
            --with-apr=/usr/local/apr \
            --with-apr-util=/usr/local/apr-util/ && \
         make && make install
/srv/salt/prod/modules/web/apache/file/httpd.conf
.....
489 #Include conf/extra/httpd-default.conf
490 Include conf/extra/vhosts.conf   #
......
/srv/salt/prod/modules/web/apache/file/httpd.service
[Unit]
Description=httpd server daemon
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/httpd/bin/apachectl start
ExecStop=/usr/local/httpd/bin/apachectl stop
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

组合部分

/srv/salt/prod/modules/zabbix/main.sls
include:
  - zabbix.apache
  - zabbix.mysql
  - modules.application.php.install

apache配置部分

/srv/salt/prod/modules/zabbix/apache.sls
"Development Tools":
  pkg.group_installed

include:
  - modules.web.apache.install

/usr/include/httpd:
  file.symlink:
    - target: /usr/local/apache/include

/usr/local/httpd/htdocs:
  file.directory:
    - user: apache
    - group: apache
    - mode: '0755'
    - makedirs: true

/usr/local/httpd/conf/extra/vhosts.conf:
  file.managed:
    - source: salt://zabbix/files/vhosts.conf
    - user: root
    - group: root
    - mode: '0644'

/usr/local/httpd/htdocs/zabbix:
  file.directory:
    - user: root
    - group: root
    - mode: '0755'
    - makedirs: true
    
/usr/local/httpd/htdocs/zabbix/index.php:
  file.managed:
    - source: salt://zabbix/files/index.php
    - user: apache
    - group: apache
    - mode: '0644'

zabbix-apache-service:
  service.running:
    - name: httpd
    - enable: true

MySQL配置部分

/srv/salt/prod/modules/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
      - /etc/ld.so.conf.d/mysql.conf:
        - source: salt://zabbix/files/mysql.conf

/usr/local/include/mysql:
  file.symlink:
    - target: /usr/local/mysql/include

mysqld-start:
  service.running:
    - name: mysqld
    - enable: true

set-password:
  cmd.run:
    - name: /usr/local/mysql/bin/mysql -e "set password=password('123456');"

配置文件部分

/srv/salt/prod/modules/zabbix/files/index.php
<?php
        phpinfo();
?>
/srv/salt/prod/modules/zabbix/files/my.cnf
[mysqld]
port = 3306
datadir = /opt/data
basedir = /usr/local/mysql
socket = /tmp/mysql.sock
pid-file = /opt/data/mysql.pid
log-error = /opt/data/mysql.err
skip-name-resolve
/srv/salt/prod/modules/zabbix/files/mysql.conf
/usr/local/mysql/lib
/srv/salt/prod/modules/zabbix/files/vhosts.conf
<VirtualHost *:80>
    DocumentRoot "/usr/local/httpd/htdocs/zabbix"
    ServerName zabbix.example.com
    ProxyRequests Off
    ProxyPassMatch ^/(.*\.php)$ fcgi://0.0.0.0:9000/usr/local/httpd/htdocs/zabbix/$1
    <Directory "/usr/local/httpd/htdocs/zabbix">
        Options none
        AllowOverride none
        Require all granted
    </Directory>
</VirtualHost>

zabbix安装部分

执行salt 'node1' state.sls zabbix.zabbix.zabbix saltenv=prod

/srv/salt/prod/zabbix/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'

salt://zabbix/zabbix/install.sh:
  cmd.script

/var/lib/mysql:
  file.directory:
    - user: root
    - group: root
    - mode: '0755'
    - makedirs: true

ln -s /tmp/mysql.sock /var/lib/mysql/:
  cmd.run

zabbix_server:
  cmd.run

zabbix_agentd:
  cmd.run

service php-fpm restart:
  cmd.run

cp -r /usr/local/zabbix-5.4.4/ui/* /usr/local/httpd/htdocs/zabbix/:
  cmd.run

/usr/local/httpd/htdocs:
  file.directory:
    - user: apache
    - group: apache
    - mode: '0755'

chmod 777 /usr/local/httpd/htdocs/zabbix/conf:
  cmd.run

systemctl restart httpd:
  cmd.run
/srv/salt/prod/zabbix/zabbix/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 -p123456 -e "create database zabbix character set utf8 collate utf8_bin;" && \
/usr/local/mysql/bin/mysql -uroot -p123456 -e "create user 'zabbix'@'localhost' identified by 'zabbix';" && \
/usr/local/mysql/bin/mysql -uroot -p123456 -e "grant all privileges on zabbix.* to 'zabbix'@'localhost';" && \
/usr/local/mysql/bin/mysql -uroot -p123456 -e "flush privileges;"

cd /usr/local/zabbix-5.4.4/database/mysql
/usr/local/mysql/bin/mysql -uroot -p123456  zabbix < schema.sql && \
/usr/local/mysql/bin/mysql -uroot -p123456  zabbix < images.sql && \
/usr/local/mysql/bin/mysql -uroot -p123456  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

结果显示

在这里插入图片描述
在这里插入图片描述
请添加图片描述
请添加图片描述
请添加图片描述

<template> <div class="box bgc3 sku-sale-rank"> <!-- TODO: 分辨大怎么展示问UI --> <div class="header"> <div class="title"> 商品热榜<span class="sub-title">{{ start }} ~ {{ end }}</span> </div> </div> <div class="body"> <el-row v-for="(item, index) in skuSaleRank" :key="index"> <el-col :span="5"> <div :class="'top top' + (index + 1)"> {{ index + 1 }} </div> </el-col> <el-col :span="13"> <div class="sku-name" :title="item.skuName"> {{ item.skuName }} </div> </el-col> <el-col :span="6"> <div class="count">{{ item.count }}单</div> </el-col> </el-row> </div> </div> </template> <script setup> import dayjs from "dayjs"; // 定义变量 const skuSaleRank = ref([ { skuId: "0", skuName: "可口可乐", count: 9, amount: 0, }, { skuId: "0", skuName: "营养快线", count: 8, amount: 0, }, { skuId: "0", skuName: "阿萨姆奶茶", count: 6, amount: 0, }, { skuId: "0", skuName: "星巴克摩卡味", count: 2, amount: 0, }, { skuId: "0", skuName: "美汁源果粒橙", count: 1, amount: 0, }, { skuId: "0", skuName: "怡宝", count: 1, amount: 0, }, ]); const start = dayjs().startOf("month").format("YYYY.MM.DD"); const end = dayjs().endOf("day").format("YYYY.MM.DD"); </script> <style lang="scss" scoped> @import "@/assets/styles/variables.module.scss"; .sku-sale-rank { display: flex; flex-direction: column; height: calc((100vh - 120px) * 0.6); min-height: 538px; background: #ffffff; border-radius: 20px; .body { flex: 1; display: flex; flex-direction: column; justify-content: space-between; margin-top: 20px; .top { display: inline-block; width: 16px; height: 20px; margin-left: 10px; background: url("@/assets/user-task-stats/top.png"); text-align: center; font-size: 12px; font-weight: normal; color: #e9b499; line-height: 14px; } .top1 { width: 21px; height: 20px; background: url("@/assets/user-task-stats/top1.png"); color: #8e5900; } .top2 { width: 21px; height: 20px; background: url("@/assets/user-task-stats/top2.png"); color: #494949; } .top3 { width: 21px; height: 20px; background: url("@/assets/user-task-stats/top3.png"); color: #cf6d3d; } .sku-name { height: 20px; font-size: 14px; font-weight: 500; color: $--color-text-primary; line-height: 20px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .count { height: 20px; font-size: 14px; font-family: PingFangSC-Regular, PingFang SC; font-weight: 400; color: #737589; line-height: 20px; text-align: right; } } } </style> 基于后端接口export function getTopSelling() { return request({ url: "/manage/order/top-selling", method: "get", }); }改造前端代码,使其调用接口动态获取数据而不是写死
最新发布
03-30
<think>嗯,用户给了一个Vue组件的代码,需要根据后端接口改造前端,动态获取数据而不是写死的。首先,我得先理解现有的代码结构。看起来这是一个显示商品销售排名的组件,模板部分用了Element UI的el-row和el-col来布局,数据是写死在ref里的。目标是要调用getTopSelling接口获取真实数据。 首先,我需要确定如何在Vue的setup函数中发起请求。用户已经导入了dayjs,所以日期处理应该没问题。接下来,需要引入API方法,比如从某个api模块导入getTopSelling。然后,使用onMounted钩子来在组件挂载时调用接口。 然后,数据方面,原本的skuSaleRank是ref里的静态数据,现在需要替换成接口返回的数据。因此,应该将skuSaleRank初始化为空数组,然后在接口成功返回后更新它。可能需要处理加载状态和错误情况,但用户没提到,可能暂时不需要,但最好加上加载中和错误提示会更友好。 接下来,接口返回的数据结构是否和现有结构匹配?比如,后端返回的数据是否有skuId、skuName、count这些字段?如果不同,需要进行映射。假设接口返回的数据结构一致,那直接赋值即可;否则需要调整字段名。 另外,日期部分,start是当月第一天,end是当天,这个逻辑应该保留,因为用户可能希望显示当前时间段的数据。但需要确认后端是否需要这些日期作为参数,或者接口是否已经处理了时间范围。根据接口定义,getTopSelling是GET请求,可能不需要参数,但可能需要传递start和end。需要检查接口文档,但用户提供的接口函数没有参数,所以可能不需要。 然后,模板部分,v-for循环skuSaleRank,显示排名、商品名和订单数。如果接口返回的数据正确,这部分应该不需要修改,只需要确保数据正确加载即可。 样式方面,可能不需要改动,但需要注意如果数据为空时的展示情况。比如,如果接口没有返回数据,可能需要显示“暂无数据”的提示,提升用户体验。 另外,需要考虑异步加载时的状态,比如在数据加载前显示加载中的提示,避免页面空白。可以使用v-if或v-show来控制显示。 还有错误处理,比如网络请求失败时,应该捕获错误并提示用户,但用户可能暂时不需要,但最好加上。 综上,步骤大概是:引入API,使用onMounted调用接口,处理响应数据,替换静态数据,处理加载和错误状态,确保模板正确渲染。同时检查字段映射是否正确,是否需要参数传递时间范围。</think>我将分步骤为您讲解如何改造这个组件为动态获取数据模式: $$ 改造步骤 = [接口调用, 数据绑定, 状态处理, 错误处理]^T $$ 一、接口调用层改造 1. 添加接口引入 ```javascript import { getTopSelling } from '@/api/order' // 假设接口文件路径 ``` 2. 创建数据获取逻辑 ```javascript const loading = ref(false) const fetchData = async () => { try { loading.value = true const { data } = await getTopSelling() skuSaleRank.value = data // 假设接口返回数组结构一致 } catch (e) { console.error('获取热销数据失败:', e) // 可添加ElMessage错误提示 } finally { loading.value = false } } ``` 二、生命周期处理 ```javascript onMounted(() => { fetchData() }) ``` 三、模板优化(添加加载状态) ```html <template> <div class="box ..."> <!-- 原有header保持不变 --> <div class="body"> <template v-if="loading"> <el-skeleton :rows="6" animated /> </template> <template v-else> <el-row v-for="(item, index) in skuSaleRank" :key="item.skuId"> <!-- 原有内容 --> </el-row> </template> </div> </div> </template> ``` 四、数据映射建议(若接口字段不一致) ```javascript // 如果接口返回字段不同,例如返回salesCount而不是count: skuSaleRank.value = data.map(item => ({ skuId: item.productId, skuName: item.name, count: item.salesCount, amount: item.totalAmount })) ``` 五、日期参数传递(根据接口需求) ```javascript // 如果接口需要时间参数: const params = { start: dayjs().startOf('month').format('YYYY-MM-DD'), end: dayjs().endOf('day').format('YYYY-MM-DD') } const { data } = await getTopSelling(params) ``` 六、最终代码结构示意图: $$ \begin{array}{ccc} \text{组件初始化} & \rightarrow & \text{onMounted} \\ & \downarrow & \\ \text{API调用} & \leftrightarrow & \text{数据处理} \\ & \downarrow & \\ \text{UI渲染} & \leftarrow & \text{状态更新} \\ \end{array} $$ 改造要点: 1. 使用`ref`保持响应式数据 2. 添加加载状态提升用户体验 3. 需要验证接口返回数据结构 4. 建议添加错误边界处理 5. 如果时间范围需要作为参数,需与后端确认格式 请根据实际接口返回数据结构调整字段映射,推荐使用Postman先验证接口返回格式。如果遇到跨域问题需要配置代理,可在vue.config.js中添加代理设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值