docker compose方式部署Zabbix 7.0 LTS

docker compose方式部署 Zabbix 7.0 LTS

Zabbix 由几个主要的功能组件组成
  • zabbix-server 是 Zabbix agent 向其报告可用性、系统完整性信息和统计信息的核心组件。
  • zabbix-agent 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
  • zabbix-web 提供基于 web 的界面(Apache 或 Nginx)。
  • Zabbix-Web-Service 在Zabbix5.4版中首次出现,基于Go编写。主要作用是定期发送巡检报告到指定邮件账户。
  • zabbix-java-gateway
  • zabbix-snmptraps
  • zabbix-proxy

可以根据不同组合,搭配不同的docker镜像,如下

Zabbix server 收集数据存储(可选MySQL、PostgreSQL等)

  • MySQL 数据库支持的 Zabbix server - zabbix/zabbix-server-mysql
  • PostgreSQL 数据库支持的 Zabbix server - zabbix/zabbix-server-pgsql

Zabbix web-interface

  • 基于 Apache2 Web 服务器以及支持 MySQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-apache-mysql
  • 基于 Apache2 Web 服务器以及支持 PostgreSQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-apache-pgsql
  • 基于 Nginx Web 服务器以及支持 MySQL 数据库的 Zabbix web 接口 - zabbix/zabbix-web-nginx-mysql
  • 基于 Nginx Web 服务器以及支持 PostgreSQL 数据库的 Zabbix web 接口 - - zabbix/zabbix-web-nginx-pgsql
安装环境版本

单机安装以下服务。不使用docker安装zabbix agent,安装在容器中的agent监控的是容器的状态,而不是宿主机的状态。

OS: Rocky Linux 9.2 x86_64
docker compose组合: zabbix 7.0 LTS + MySQL 8.0 + Nginx
docker宿主机IP: 10.10.88.2 (这里选择宿主机安装zabbix agent2)

1、前期准备工作

省略docker安装步骤。

2、zabbix docker compose 配置文件

从 Zabbix github官网 获取7.0 LTS 版本 docker compose.yaml
Zabbix 为 Docker 提供了定义和运行复杂 Zabbix 组件的 compose 文件。这些 compose 文件可以在 Zabbix docker 官方镜像仓库 中找到。

官方提供的 docker compose 文件很多,都是根据组件搭配命名

  • v3 为 docker compose 版本,具体对应关系在这里查看https://docs.docker.com/compose/compose-file/compose-versioning/
  • 基础镜像类型,有 alpine/ubuntu/Oracle linux 可选。
  • MySQL 为 zabbix server 所使用的数据库类型,目前有 MySQL/PostgreSQL 二种。
  • latest 表示为使用官方的最新镜像,local 是下载本地进行 build 镜像。

这里使用基于 docker-compose_v3_alpine_mysql_latest.yaml 模板,调整适合公司使用。

基于alpine Linux镜像,Zabbix server 后端使用MySQL数据库, Zabbix web使用Nginx展示

也可以通过git方式获取基于 zabbix7.0 LTS配置(可选,非必须)

git clone https://github.com/zabbix/zabbix-docker.git如果之前已经clone过了,重现拉取服务器最新配置,如:
git pullgit切换分支为7.0,也就是长期支持版本(LTS)
git checkout 7.0[root@VM8802 zabbix-docker]# ll -tha
已省略部分……
-rw-r--r--  1 root root 2.8K Jun  6 11:20 .env
drwxr-xr-x  3 root root 4.0K Jun  6 11:20 env_vars
-rw-r--r--  1 root root  44K Jun  6 11:20 kubernetes.yaml
-rw-r--r--  1 root root  338 Jun  6 11:20 compose_additional_components.yaml
-rw-r--r--  1 root root 2.6K Jun  6 11:20 compose_databases.yaml
lrwxrwxrwx  1 root root   42 Jun  6 11:20 compose.yaml -> docker-compose_v3_alpine_mysql_latest.yaml
-rw-r--r--  1 root root  14K Jun  6 11:20 compose_zabbix_components.yaml
-rw-r--r--  1 root root 4.1K Jun  6 11:20 docker-compose_v3_ubuntu_mysql_latest.yaml
-rw-r--r--  1 root root 7.4K Jun  6 11:20 docker-compose_v3_ubuntu_mysql_local.yaml
-rw-r--r--  1 root root 4.1K Jun  6 11:20 docker-compose_v3_ubuntu_pgsql_latest.yaml
-rw-r--r--  1 root root 7.7K Jun  6 11:20 docker-compose_v3_ubuntu_pgsql_local.yaml
-rw-r--r--  1 root root 4.4K Jun  6 11:20 docker-compose_v3_alpine_mysql_latest.yaml
-rw-r--r--  1 root root 7.6K Jun  6 11:20 docker-compose_v3_alpine_mysql_local.yaml
-rw-r--r--  1 root root 4.4K Jun  6 11:20 docker-compose_v3_alpine_pgsql_latest.yaml
-rw-r--r--  1 root root 8.0K Jun  6 11:20 docker-compose_v3_alpine_pgsql_local.yaml
-rw-r--r--  1 root root 4.3K Jun  6 11:20 docker-compose_v3_ol_mysql_latest.yaml
-rw-r--r--  1 root root 7.4K Jun  6 11:20 docker-compose_v3_ol_mysql_local.yaml
-rw-r--r--  1 root root 4.3K Jun  6 11:20 docker-compose_v3_ol_pgsql_latest.yaml
-rw-r--r--  1 root root 7.7K Jun  6 11:20 docker-compose_v3_ol_pgsql_local.yaml可以看到当前 compose.yaml 是链接指向 docker-compose_v3_alpine_mysql_latest.yaml
# docker compose -f ./docker-compose_v3_alpine_mysql_latest.yaml up -d
2.1 docker compose配置

官网提供的docker compose文件把所有组件都写上了。可根据自己需求,删除一些不需要的组件配置部分。

当前配置如下组件
zabbix-server
zabbix-server-mysql
zabbix-web-nginx-mysql
zabbix-java-gateway
zabbix-snmptraps

配置文件列表
# tree -a /data/zabbix/
/data/zabbix/
├── compose.yaml
└── zbx_env├── .env_db_mysql├── .env_java├── .env_srv└── .env_web

官网默认配置了两个网段,其中zabbix-server和zabbix-java-gateway在不同的网段,导致互通有些干扰,这里就仅保留一个网段配置。

compose.yaml 完整配置(基于 docker-compose_v3_alpine_mysql_latest.yaml 修改)

services:zabbix-server:image: zabbix/zabbix-server-mysql:alpine-7.0-latestports:- 10051:10051volumes:- /etc/localtime:/etc/localtime:ro- /etc/timezone:/etc/timezone:ro- /data/zabbix/zbx_env/usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro- /data/zabbix/zbx_env/usr/lib/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro- /data/zabbix/zbx_env/var/lib/zabbix/dbscripts:/var/lib/zabbix/dbscripts:ro- /data/zabbix/zbx_env/var/lib/zabbix/export:/var/lib/zabbix/export:rw- /data/zabbix/zbx_env/var/lib/zabbix/modules:/var/lib/zabbix/modules:ro- /data/zabbix/zbx_env/var/lib/zabbix/enc:/var/lib/zabbix/enc:ro- /data/zabbix/zbx_env/var/lib/zabbix/ssh_keys:/var/lib/zabbix/ssh_keys:ro- /data/zabbix/zbx_env/var/lib/zabbix/mibs:/var/lib/zabbix/mibs:ro- snmptraps:/var/lib/zabbix/snmptraps:rwulimits:nproc: 65535nofile:soft: 20000hard: 40000deploy:resources:limits:cpus: '0.70'memory: 2Greservations:memory: 512Menv_file:- /data/zabbix/zbx_env/.env_db_mysql- /data/zabbix/zbx_env/.env_srvdepends_on:- mysql-servernetworks:zbx_net:aliases:- zabbix-server- zabbix-server-mysqlstop_grace_period: 30ssysctls:- net.ipv4.ip_local_port_range=1024 64999- net.ipv4.conf.all.accept_redirects=0- net.ipv4.conf.all.secure_redirects=0- net.ipv4.conf.all.send_redirects=0labels:com.zabbix.description: Zabbix server with MySQL database supportcom.zabbix.company: "Zabbix LLC"com.zabbix.component: zabbix-servercom.zabbix.dbtype: mysqlcom.zabbix.os: "Alpine"zabbix-web-nginx-mysql:image: zabbix/zabbix-web-nginx-mysql:alpine-7.0-latestports:- 80:8080- 443:8443volumes:- /etc/localtime:/etc/localtime:ro- /etc/timezone:/etc/timezone:ro- /data/zabbix/zbx_env/etc/ssl/nginx:/etc/ssl/nginx:ro- /data/zabbix/zbx_env/usr/share/zabbix/modules/:/usr/share/zabbix/modules/:rodeploy:resources:limits:cpus: '0.70'memory: 1024Mreservations:memory: 256Menv_file:- /data/zabbix/zbx_env/.env_db_mysql- /data/zabbix/zbx_env/.env_webdepends_on:- mysql-serverhealthcheck:test: ["CMD", "curl", "-f", "http://localhost:8080/ping"]interval: 10stimeout: 5sretries: 3start_period: 30snetworks:zbx_net:aliases:- zabbix-web-nginx-mysqlstop_grace_period: 10ssysctls:- net.core.somaxconn=65535labels:com.zabbix.description: "Zabbix frontend on Nginx web-server with MySQL database support"com.zabbix.company: "Zabbix LLC"com.zabbix.component: zabbix-frontendcom.zabbix.webserver: nginxcom.zabbix.dbtype: mysqlcom.zabbix.os: "Alpine"zabbix-java-gateway:image: zabbix/zabbix-java-gateway:alpine-7.0-latestports:- 10052:10052deploy:resources:limits:cpus: '0.5'memory: 512Mreservations:memory: 256Menv_file:- /data/zabbix/zbx_env/.env_javanetworks:zbx_net:aliases:- zabbix-java-gatewaystop_grace_period: 5slabels:com.zabbix.description: "Zabbix Java Gateway"com.zabbix.company: "Zabbix LLC"com.zabbix.component: "java-gateway"com.zabbix.os: "Alpine"zabbix-snmptraps:image: zabbix/zabbix-snmptraps:alpine-7.0-latestprofiles:- full- allports:- 162:1162/udpvolumes:- snmptraps:/var/lib/zabbix/snmptraps:rwdeploy:resources:limits:cpus: '0.5'memory: 256Mreservations:memory: 128Mnetworks:zbx_net:aliases:- zabbix-snmptrapsstop_grace_period: 5slabels:com.zabbix.description: "Zabbix snmptraps"com.zabbix.company: "Zabbix LLC"com.zabbix.component: snmptrapscom.zabbix.os: "Alpine"mysql-server:image: mysql:8.0-oraclesecurity_opt:- seccomp:unconfinedcommand:- mysqld- --skip-mysqlx- --character-set-server=utf8mb4- --collation-server=utf8mb4_bin# Only during upgrade from versions prior 6.4 and new installations (schema deployment)#- --log_bin_trust_function_creators=1- --log_timestamps=SYSTEM- --binlog_expire_logs_seconds=3600- --innodb_buffer_pool_size=2G- --max_connections=500- --wait_timeout=1200- --interactive_timeout=1200volumes:- /etc/localtime:/etc/localtime:ro- /data/zabbix/zbx_env/var/lib/mysql:/var/lib/mysql:rw- /data/backup/mysql:/data/backup/mysql:rwenv_file:- /data/zabbix/zbx_env/.env_db_mysqlstop_grace_period: 1mnetworks:zbx_net:aliases:- mysql-server- zabbix-database- mysql-databasedb_data_mysql:image: busyboxvolumes:- /data/zabbix/zbx_env/var/lib/mysql:/var/lib/mysql:rw
networks:zbx_net:driver: bridgedriver_opts:com.docker.network.enable_ipv6: "false"ipam:driver: defaultconfig:- subnet: 172.16.238.0/24
volumes:snmptraps: 
2.2 环境变量文件

在 compose 文件中找到每个组件的默认环境变量文件,这些环境变量文件名类似 .env_<type of component>

  1. 配置mysql:.env_db_mysql
# DB_SERVER_HOST=mysql-server
# DB_SERVER_PORT=3306
# DB_SERVER_SOCKET=/var/run/mysqld/mysqld.sock
# MYSQL_USER_FILE=/run/secrets/MYSQL_USER
# MYSQL_PASSWORD_FILE=/run/secrets/MYSQL_PASSWORD
MYSQL_USER=zabbix
MYSQL_PASSWORD=yourzabbix
MYSQL_ROOT_PASSWORD=yourmysql
# MYSQL_ROOT_PASSWORD_FILE=/run/secrets/MYSQL_ROOT_PASSWORD
# MYSQL_ALLOW_EMPTY_PASSWORD=false
# MYSQL_DATABASE=zabbix
MYSQL_DATABASE=zabbix
  1. 配置zabbix-java-gateway:.env_java
ZBX_START_POLLERS=5
ZBX_TIMEOUT=3
  1. 配置Zabbix server:.env_srv
ZBX_STARTPOLLERS=7
ZBX_STARTPOLLERSUNREACHABLE=7
ZBX_STARTTRAPPERS=20
ZBX_STARTPINGERS=7
ZBX_STARTDISCOVERERS=7
ZBX_JAVAGATEWAY_ENABLE=true
ZBX_JAVAGATEWAY=zabbix-java-gateway
ZBX_JAVAGATEWAYPORT=10052
ZBX_STARTJAVAPOLLERS=5
ZBX_ENABLE_SNMP_TRAPS=true
ZBX_CACHESIZE=1024M
ZBX_HISTORYCACHESIZE=128M
ZBX_TIMEOUT=15
  1. 配置Nginx:.env_web
ZBX_SERVER_HOST=zabbix-server
ZBX_SERVER_NAME=Your Corp. IT
PHP_TZ=Asia/Shanghai

docker compose 配置说明

  1. 修改时区(web页面显示中文)
    修改 .env_web 配置相关项 PHP_TZ=Asia/Shanghai
  2. 解决zebbix web图片中文显示乱码(zabbix7.0下不指定也可以正常显示中文)
3、部署服务
cd /data/zabbix/
docker compose up -d

浏览 zabbix web界面

启动之后即可使用 <http://ip> 直接访问 zabbix web界面
默认用户名:Admin ,密码:zabbix (注意区分大小写)

配置已经设置了持久化数据目录映射到本地。

4、独立安装Zabbix agent2

安装Zabbix仓库(这里选择国内的腾讯源),然后安装Zabbix agent2

# rpm -Uvh https://mirrors.tencent.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-latest.el9.noarch.rpm
# dnf clean all# dnf install zabbix-agent2

如果是 Rocky Linux 9.x 版本,则需要注意:
EL9 的 EPEL 存储库也提供了 Zabbix 包。 如果同时安装了官方 Zabbix 存储库和 EPEL 存储库,那么 EPEL 中的 Zabbix 包必须通过在 /etc/yum.repos.d/ 下的 EPEL 存储库配置文件中添加以下子句来排除,更详细说明可访问官网安装文档。

[epel]
...
excludepkgs=zabbix*然后安装即可
rpm -ivh https://mirrors.tencent.com/zabbix/zabbix/7.0/rhel/9/x86_64/zabbix-release-7.0-2.el9.noarch.rpm
yum install zabbix-agent2

修改 /etc/zabbix/zabbix_agent2.conf ,指定 zabbix server 地址,如:

Server=127.0.0.1,172.16.238.4       # 172.16.238.4 为zabbix server容器IP
ServerActive=127.0.0.1,172.16.238.4
Hostname=10.10.88.2   # 这里为Linux主机IP

查看zabbix server容器(容器名为 zabbix-zabbix-server-1 )IP方法

# docker inspect zabbix-zabbix-server-1 |grep IPAddress |tail -1 |awk '{print $2}' |tr '"' " " |tr ',' ' ' 172.16.238.4   进入zabbix server容器
# docker exec -it zabbix-zabbix-server-1 bash测试访问 zabbix agent2 的端口是否可以正常连通(端口不通,提示:wget: can't connect to remote host (10.10.88.2): Connection refused)
78d0d09dfa31:/var/lib/zabbix$ wget 10.10.88.2:10050
Connecting to 10.10.88.2:10050 (10.10.88.2:10050)
wget: error getting response

如果zabbix-server 服务器ip地址有更改,这里配置也需要修改,然后重启agent2服务
systemctl restart zabbix-agent2.service

5、设置允许docker容器访问宿主机

默认情况下宿主机内docker容器是禁止访问宿主机IP

防火墙firewalld开放zabbix server容器IP段(172.16.238.0/24)访问zabbix agent端口(tcp 10050)

# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=172.16.238.0/24 port port=10050 protocol=tcp accept' --permanent
# firewall-cmd --reload

上面的命令等同于修改配置 /etc/firewalld/zones/public.xml ,在 <zone> 区域内添加如下:

  <rule family="ipv4"><source address="172.16.238.0/24"/><port protocol="tcp" port="10050"/><accept/></rule>

然后重启防火墙服务 systemctl restart firewalld.service 即可。

zabbix web页面里配置 zabbix server 主机接口 Agent(类型)地址由默认的 127.0.0.1:10050 改为 your-zabbix-server-ip:10050

日常维护

先切换到 compose.yaml 目录
cd /data/zabbix停止 zabbix 所有服务   
docker compose down启动 zabbix 所有服务   
docker compose up -d停止mysql服务  
docker compose stop mysql-server查看指定容器IP
docker inspect zabbix-zabbix-server-1 |grep IPAddress |tail -1 |awk '{print $2}' |tr '"' " " |tr ',' ' '更新配置缓存
/usr/local/sbin/zabbix_server -R config_cache_reload

zabbix server日志默认位置(容器内): /var/log/zabbix/zabbix_server.log

MySQL持久化目录 /data/zabbix/zbx_env/var/lib/mysql
MySQL备份目录 /data/backup/mysql

zabbix官方监控模板

由于使用的zabbix是从低版本升级上来的,需要使用新版本只能手动从 Zabbix Git 存储库下载,然后zabbix web页面的 ConfigurationTemplates(配置 → 模板)手动导入。

升级

Only during upgrade from versions prior 6.4 and new installations (schema deployment)
mysql> set global log_bin_trust_function_creators = 1;

从 zabbix6.0.x 升级为 zabbix7.0.0

停止服务,修改配置 docker.yaml 把指定镜像alpine-6.0所有替换为alpine-7.0即可,
如:image: zabbix/zabbix-server-mysql:alpine-6.0-latest 替换为 image: zabbix/zabbix-server-mysql:alpine-7.0-latest

然后启动服务就可以看到日志里有升级信息提示。

zabbix6.0 迁移至新机器并升级为zabbix7.0 步骤

升级前 zabbix6.0.23 LTS (MySQL 8.0.35)
升级后 zabbix7.0.0 LTS (MySQL 8.0.37)

zabbix server初次启动时,会自动升级MySQL数据库结构。

启动服务
docker compose up -d除了msyql服务,其它服务都停止
docker compose stop zabbix-web-nginx-mysql
docker compose stop zabbix-java-gateway 
docker compose stop zabbix-server进入msyql容器,删除原zabbix数据库。
docker exec -it zabbix-mysql-server-1 bash
mysqlsh -p因为mysql账号zabbix都在,所以重建库后,就可以开始导入库了
mysql> drop database zabbix;
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;导入前临时更改,导入后改回默认值 0
mysql> set global log_bin_trust_function_creators = 1;导入备份(视情况选择)
方式1(sql备份文件):
mysql> use zabbix;
mysql> source /var/lib/mysql/zabbix_backup.sql;方式2(mysql shell备份文件):
MySQL JS > \sql SET GLOBAL local_infile = 'ON';
MySQL JS > \sql show global variables like 'local_infile';
MySQL JS > \sql ALTER INSTANCE DISABLE INNODB REDO_LOG;
MySQL JS > \sql SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled';
MySQL JS > util.loadDump("/data/backup/mysql/zabbix_20240605", {"threads": 4,"ignoreVersion": true})Disable log_bin_trust_function_creators option after importing database schema.
mysql> set global log_bin_trust_function_creators = 0;导入完成后,再次停止服务
docker compose down然后启动(这是启动zabbix server会自动进行升级数据库)
docker compose up -d
参考文档
  1. https://www.zabbix.com/documentation/7.0/en/manual/installation/containers

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/866212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Miniconda安装教程

文章目录 Conda和Miniconda的区别一、安装 Miniconda 1、创建目录2、下载 Miniconda&#xff08;Python3 版本&#xff09;3、安装 Miniconda4、取消默认进入conda&#xff08;base&#xff09;环境5、配置 conda 国内镜像 二、创建 Python3.8 环境 1、创建指令2、激活 py38 环…

Pinia:Vue 2 和 Vue 3 中更好用的状态管理框架

前言 还在用Vuex? 在Vue应用程序的开发过程中&#xff0c;高效且易于维护的状态管理一直是开发者关注的核心问题之一。随着Vue 3的发布&#xff0c;状态管理领域迎来了一位新星——Pinia&#xff0c;它不仅为Vue 3量身打造&#xff0c;同时也向下兼容Vue 2&#xff0c;以其简…

ios调用高德地图定位报错

错误信息如下&#xff1a; Thread Performance Checker: Thread running at User-interactive quality-of-service class waiting on a lower QoS thread running at Default quality-of-service class. Investigate ways to avoid priority inversions PID: 1668, TID: 1538…

PostgreSQL 在Windows下保姆级图文安装教程

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主。 &#x1f913; 同时欢迎大家关注其他专栏&#xff0c;我将分享Web前后端开发、人工智能、机器学习、深…

The Plant Cell:DAP-seq技术助力揭示MdWRKY75调控苹果耐热性的分子机制

2024年6月12日&#xff0c;西北农林科技大学作物抗逆与高效生产全国重点实验室/园艺学院苹果抗逆与品质改良创新团队马锋旺教授/李超课题组在植物学知名期刊The Plant Cell&#xff08;影响因子10&#xff09;在线发表了题为“The MdHSC70-MdWRKY75 module mediates basal appl…

定个小目标之刷LeetCode热题(35)

155. 最小栈 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void pop() 删除堆栈顶部的元素。int top() 获取堆栈顶部的…

heapq.nlargest函数

函数解释 heapq.nlargest(n, iterable, keyNone) 该函数用于从可迭代对象iterable中返回前n个最大的元素。它的参数包括&#xff1a; n&#xff1a;要返回的最大元素的数量iterable&#xff1a;要从中查找最大元素的可迭代对象key&#xff1a;一个函数&#xff0c;用于从每个…

微信小程序 调色板

注意&#xff1a;是在uniapp中直接使用的一个color-picker插件&#xff0c;改一下格式即可在微信小程序的原生代码中使用 https://github.com/KirisakiAria/we-color-picker 这是插件的地址&#xff0c;使用的话先把这个插件下载下来&#xff0c;找到src&#xff0c;在项目创…

Python API构建TensorRT加速模型的步骤详解

先来一段摘抄自网上的TensorRT介绍&#xff1a; TensorRT是英伟达针对自家平台做的加速包&#xff0c;TensorRT主要做了这么两件事情&#xff0c;来提升模型的运行速度。 TensorRT支持INT8和FP16的计算。深度学习网络在训练时&#xff0c;通常使用 32 位或 16 位数据。Tensor…

九、函数的声明和定义

函数声明&#xff1a; 1. 告诉编译器有一个函数叫什么&#xff0c;参数是什么&#xff0c;返回类型是什么。但是具体是不是存在&#xff0c;函数 声明决定不了。 2. 函数的声明一般出现在函数的使用之前。要满足先声明后使用。 3. 函数的声明一般要放在头文件中的。 定义的函…

开发个人Ollama-WebUI--4 用户管理

开发个人Ollama-WebUI–4 用户管理 先看下我的目录结构&#xff0c;可以根据个人爱好&#xff0c;进行重构 |-- Dockerfile |-- LICENSE |-- common | |-- callmodel | | |-- gemma.go | | -- models.go | |-- consts | | |-- code.go | | |-- common.go…

股价持续低迷,业绩颓势不减,冀光恒难救平安银行?

文&#xff5c;新熔财经 作者&#xff5c;宏一 周一一上班&#xff0c;就听到旁边的同事感慨今年股市行情很不错&#xff0c;尤其是银行股&#xff0c;上半年累计上涨了17.02%&#xff0c;是涨幅最大的板块。 听到这里&#xff0c;我美滋滋地打开自己的账户&#xff0c;结…

如何使用PostgreSQL

要使用PostgreSQL&#xff0c;你可以按照以下步骤进行操作&#xff1a; 1. 安装PostgreSQL&#xff1a;根据你的操作系统&#xff0c;下载并安装相应版本的PostgreSQL。 2. 启动PostgreSQL服务器&#xff1a;安装完成后&#xff0c;你需要启动PostgreSQL服务器。在Windows上&…

spdlog一个非常好用的C++日志库(四): 源码分析之logger类

目录 1.简介 2.类图关系 3.logger数据成员 4.logger函数成员 4.1.构造与析构 4.1.1.构造函数 4.1.2.拷贝构造、移动构造 4.2.交换操作 4.3.log()记录日志消息 4.3.1.格式串 4.3.2.普通字符串 4.3.3.日志级别 4.3.4.宽字符支持 4.4.sink_it_&#xff1a;将log消息…

PLC工作原理

PLC&#xff08;可编程逻辑控制器&#xff09;的工作原理简述为&#xff1a;集中采样、集中输出、周期性循环扫描。 西门子PLC 一、集中采样 顺序读取所有输入端子的通断状态&#xff0c;并将所读取的信息存到输入映像寄存器中&#xff0c;此时输入映像寄存器被刷新&#xff…

三坐标测量机:柔性生产制造中的高精度测量解决方案

柔性生产制造是制造业的核心竞争力之一。它强调生产线的灵活性和适应性&#xff0c;以满足市场对产品多样化和个性化的需求。在当今快速变化的工业环境中&#xff0c;随着消费者对产品个性化和定制化需求的增加&#xff0c;柔性生产制造和三坐标测量机的结合&#xff0c;为智能…

尽量不写一行if...elseif...写出高质量可持续迭代的项目代码

背景 无论是前端代码还是后端代码&#xff0c;都存在着定位困难&#xff0c;不好抽离&#xff0c;改造困难的问题&#xff0c;造成代码开发越来越慢&#xff0c;此外因为代码耦合较高&#xff0c;总是出现改了一处地方&#xff0c;然后影响其他地方&#xff0c;要么就是要修改…

通讯录(C语言详细版)

1. 前言 通讯录是在动态顺序表的基础上实现的&#xff0c;其实就是顺序表的每个元素存储的不再是数字&#xff0c;而是存储一个联系人的结构体&#xff0c;所以如果有些小伙伴看不懂的话&#xff0c;可以移步参考一下动态顺序表的实现&#xff1a;顺序表&#xff08;C语言详细…

【C语言】auto 关键字

在C语言中&#xff0c;auto关键字用于声明局部变量&#xff0c;但它的使用已经变得很少见。事实上&#xff0c;从C99标准开始&#xff0c;auto关键字的默认行为就是隐含的&#xff0c;因此在大多数情况下无需显式使用它。 基本用法 在C语言中&#xff0c;auto关键字用于指定变…

ntp服务

https://blog.csdn.net/weixin_39168541/article/details/123741031