
2025/1/8随笔
洗完澡,窝到沙发上刷手机等心心念念的橙C美式,是的,体重径直来到了78公斤,为了压压惊,我毫不犹豫义愤填膺的点了一杯鹿咖啡。 在京东上翻着想看看有没有什么值得买的东西,但是好像完全没有什么目标,突然门铃和手机APP同时响了,原来外卖小哥都已...
公司内部环境部署,第一阶段纳管设备10,000左右,分为办公网和生产网。
部署环境如下:APP服务器1台,DB服务器1台,如果是测试,用1台服务器也可以。
服务器操作系统:Windows Server 2019 Standard 1809 17763.107
数据库选用MySQL 8.4.5,php版本选用当下最新的8.3.22,GLPI版本10.0.18
一、安装MySQL数据库
1.官网下载MySQL8.4.5:
https://dev.mysql.com/get/Downloads/MySQL-8.4/mysql-8.4.5-winx64.msi
2.
二、部署GLPI运行环境
1.安装IIS 10
2.部署php8.3.22(GLPI10.0.18最大支持php8.4.0)
2.2.安装vs16 & vs19,可以到微软官方下载
页面地址:https://learn.microsoft.com/zh-cn/cpp/windows/latest-supported-vc-redist
直接下载链接:
ARM64:https://aka.ms/vs/17/release/vc_redist.arm64.exe
X86:https://aka.ms/vs/17/release/vc_redist.x86.exe
X64:https://aka.ms/vs/17/release/vc_redist.x64.exe
php.ini修改内容:
extension_dir = "ext"
cgi.force_redirect = 0 #Windows 用户:使用 IIS 时必须关闭此选项。
fastcgi.impersonate = 1 /*如果在 IIS 下运行,则启用。默认禁用。*/
cgi.rfc2616_headers = 1 /*有待考究,暂时没改*/
date.timezone = Asia/Shanghai /*有些教程写的PRC,但是官方不建议*/
将以下内容前的“;”删除
;extension=bz2
;extension=ldap
;extension=curl
;extension=fileinfo
;extension=gd
;extension=intl
;extension=mbstring
;extension=exif ; Must be after mbstring as it depends on it
;extension=mysqli
;extension=openssl
;extension=sodium
;extension=zip
;zend_extension=opcache
将session.cookie_httponly打开
session.cookie_httponly = on
三、安装GLPI
创建GLPI数据库账户及数据库
四、时区问题
GLPI官方为Windows用户提供的链接页面已经失效,mysql官方有相关说明
https://dev.mysql.com/doc/refman/8.4/en/time-zone-support.html
也提供了可导入文件:
https://dev.mysql.com/downloads/timezones.html
这里我们下载timezone_2025b_posix_sql.zip,然后进行导入。
导入完成后,需要给GLPI的数据库用户授权可访问该时区表,只读权限即可。
GRANT SELECT ON `mysql`.`time_zone_name` TO 'vicw_glpi'@'localhost';
最近接触的一些服务器都是受限环境,做个简单的笔记。
操作系统:Windows Server 2019 Standard
版本号:1809
操作系统版本:17763.107
服务器是完全与世隔绝的状态,需要在上面配置PHP8.4.6环境,做几个重点记录。
官网文档:PHP: php.ini 核心指令说明 - Manual
IIS10是以FastCGI的模式运行php,下面开始配置:
extension_dir = "ext"
cgi.force_redirect = 0 #Windows 用户:使用 IIS 时必须关闭此选项。
fastcgi.impersonate = 1 /*如果在 IIS 下运行,则启用。默认禁用。*/
cgi.rfc2616_headers = 1 /*有待考究*/
date.timezone = PRC
起因是在某个技术交流群里接了个话,答应给一位网友部署snipe-it,之前是用debian 12、apache、php、mysql部署的,最终没有选择这个产品,就删除了。
这次重新温习一下,环境稍微有点变化,debian 12、nginx 1.26.3、PHP 8.4、mysql 8.4.0,先记录个大概,后面再补详细过程。
先把环境搭建好了,直接进入正题:
一、从官网下载最新版的snipe-it,现在是8.0.4版
https://snipeitapp.com/download
二、看下官方的安装文档,一定要养成这个好习惯
https://snipe-it.readme.io/docs/installation
把php相关的模块、函数都配置好,具体的后面补充。
三、上传到服务器、解压,放到站点目录,根据.env.example复制一个.env文件,进行编辑
DB_DATABASE=数据库名称
DB_USERNAME=数据库用户名
DB_PASSWORD=数据库密码
# --------------------------------------------
# REQUIRED: BASIC APP SETTINGS
# --------------------------------------------
APP_ENV=production
APP_DEBUG=false
APP_KEY=ChangeMe
APP_URL=https://si.396736.com
APP_TIMEZONE='Asia/Shanghai'
APP_LOCALE='zh-CN'
MAX_RESULTS=500
四、安装Composer
--no-dev --prefer-source --ignore-platform-reqs
五、生成key
php artisan key:generate
六、配置站点,目录/public
七、修改Nginx配置文件
2025年,这么诡异的事情还是要继续。
操作系统版本:CentOS Linux release 7.9.2009 (Core)
Docker版本:28.0.4
Docker-Compose版本:2.34.0
Portainer-CE版本:2.27.3 LTS
一、事前检查(可做可不做,反正CentOS 7 内核版本目前支持)
操作系统版本确认,Docker安装要求Linux内核版本为3.10及以上。
1.查看内核版本号:
uname -r
# CentOS7内核版本号为:3.10.0-1160.el7.x86_64
2.查看系统版本:
cat /etc/redhat-release
# CentOS Linux release 7.9.2009 (Core)
二、Docker离线安装
1.下载安装包:
官方地址:
https://download.docker.com/linux/static/stable/x86_64/
这里选择当下最新版本,docker-28.0.4.tgz
2.上传压缩包并解压
tar zxvf docker-28.0.4.tgz
3.将解压后的 docke 文件夹拷贝或者移动到 /usr/bin/ 目录下
cp docker/* /usr/bin/
这里可以使用 docker -v 或者 docker info 查看是否可以输出 docker 信息。
4.创建启动单元配置
vim /etc/systemd/system/docker.service
配置如下:
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
5.给启动配置赋权
chmod +x /etc/systemd/system/docker.service
6.重载单元配置
systemctl daemon-reload
7.添加开机启动
systemctl enable docker
8.启动docker
systemctl start docker
三、Docker-Compose 离线安装
1.下载安装包
官方下载地址:
https://github.com/docker/compose/releases
今天是2025年4月3日,当前最新版本v2.34.0,根据实际部署系统选择安装文件,例如 docker-compose-linux-x86_64。
2.将安装文件拷贝或移动到 Docker 所在的目录下
# 查看 docker 位置
which docker
# 这里显示为 /usr/bin
# 拷贝并重命名
cp docker-compose-linux-x86_64 /usr/bin/docker-compose
3.赋予执行权限
chmod +x /usr/bin/docker-compose
4.安装验证
docker-compose -v
# 这里正常反馈 Docker Compose version v2.34.0
四、Portainer-CE 离线安装
官方教程地址:
https://docs.portainer.io/start/install-ce/server/docker/linux
1.创建Portainer Server将用来存储其数据库的卷
docker volume create portainer_data
2.下载并安装Portainer Server容器
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:lts
3.Portainer Server现已安装完毕。您可以检查Portainer Server容器是否已通过运行 docker ps
开始:
root@server:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
de5b28eb2fa9 portainer/portainer-ce:lts "/portainer" 2 weeks ago Up 9 days 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 0.0.0.0:9443->9443/tcp, :::9443->9443/tcp portainer
我一向主张原生部署,最后因各种原因,不得不采用此方法曲线救国,在此记录踩过的坑。
使用设备:Macbook Pro 15-inch, 2019
操作系统:macOS Sequoia Beta 15.4
软件版本:Docker Desktop for Mac - Intel Chip Version 4.39.0(18744)
官方的使用手册附上,建议先仔细阅读,养成阅读《说明书》的好习惯
https://www.zabbix.com/documentation/current/zh/manual/installation/containers
其实官方的教程基本讲的很明白了,这里再讲一遍,主要是记录一下踩过的坑。
官方 Zabbix 组建镜像选择,latest,根据官方的描述,基于 Alpine Linux 镜像的最新稳定版 Zabbix 组件。那我们就以这个为例了。
基于我个人的喜好,喜欢在稳定的情况下,追新。根据官方的资料,对 MySQL 8.4.4 作了支持更新,但是保守起见,选择 MySQL 8.0.41;Web Server 一般情况下我会采用 Apache,这里测试就选择 Nginx 好了。
1. 创建专用于 Zabbix 组件容器的网络:
# docker network create --subnet 172.20.0.0/16 --ip-range 172.20.240.0/20 zabbix-net
2. 启动空的 MySQL 服务器实例:
# docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-d mysql:8.0 \
--restart unless-stopped \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
这里官方的教程有1个坑,以上官方的命令启动会报错,需要将“--restart unless-stopped \”放到“-d mysql:8.0 \”前面,就可以正常启动了,完整命令如下:
# docker run --name mysql-server -t \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
--restart unless-stopped \
-d mysql:8.0 \
--character-set-server=utf8 --collation-server=utf8_bin \
--default-authentication-plugin=mysql_native_password
3. 启动 Zabbix Java 网关实例:
# docker run --name zabbix-java-gateway -t \
--network=zabbix-net \
--restart unless-stopped \
-d zabbix/zabbix-java-gateway
4. 启动 Zabbix server 实例,并将其关联到已创建的 MySQL server 实例:
# docker run --name zabbix-server-mysql -t \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
--network=zabbix-net \
-p 10051:10051 \
--restart unless-stopped \
-d zabbix/zabbix-server-mysql
说明:Zabbix server 实例将 10051/TCP端口(Zabbix trapper)暴露给主机。
5. 启动 Zabbix Web 界面,并将其关联到已创建的 MySQL server 和 Zabbix server 实例:
# docker run --name zabbix-web-nginx-mysql -t \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e DB_SERVER_HOST="mysql-server" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix_pwd" \
-e MYSQL_ROOT_PASSWORD="root_pwd" \
--network=zabbix-net \
-p 80:8080 \
--restart unless-stopped \
-d zabbix/zabbix-web-nginx-mysql
说明:Zabbix web 界面实例将 80/TCP 端口(HTTP)暴露给主机。
到此,Zabbix 7.2.4就部署好了,浏览器打开“http://localhost”就可以访问 Zabbix Web 界面,输入默认的用户名“Admin”,密码“zabbix”即可登录。
这里又有1个坑等着大家,有个问题项提示,IP为 127.0.0.1 的主机 Zabbix server 不可用,接口类型是Agent,端口是10050,按照传统的部署,安装 zabbix-agent,这里已经正常的监控到 Zabbix server 自身这台主机了。
大家莫慌,至此,大家已经在 Docker 里启动了4个实例,分别是 mysql-server、zabbix-java-gateway、zabbix-server-mysql、zabbix-web-nginx-mysql,还没有 zabbix-agent,并且此时 127.0.0.1 也只是指 zabbix-web-nginx-mysql 实例,并非 Docker 或者 宿主机。
非强迫症患者可以删除上述主机,开始自己的 Zabbix 体验之旅了。
强迫症患者咱们继续。
6. 启动 Zabbix agent 实例:
# docker run --name zabbix-agent -t \
-e ZBX_HOSTNAME="Zabbix server" \
-e ZBX_SERVER_HOST="172.20.240.0" \
-e ZBX_SERVER_PORT="10051" \
--privileged=true \
--network=zabbix-net \
--restart unless-stopped \
-p 10050:10050 \
-d zabbix/zabbix-agent
说明:--privileged=true \ 使用改参数,container 内的 root 拥有真正的 root 权限,从而获得几乎与主机相同的权限。这意味着容器可以访问和控制主机的所有硬件设备、操作系统内核和其他系统资源。
这里有1个大坑,第二行的参数 “ZBX_HOSTNAME” 的值为 “Zabbix server”,很多人都在这里掉坑了,如果不按照这个设置,zabbix-server-mysql、zabbix-agent 两个实例将会疯狂报错。
还有1个坑,第三行的参数 “ZBX_SERVER_HOST” 的值为 zabbix-server-mysql 的 IP,或者设置为 Zabbix 组件容器网络的【网关】,强烈推荐使用网关,我们这里是 “172.20.240.0”,使用网关的好处是,Docker Desktop 无论怎么重启,都可以正常连接,如果填写 zabbix-server-mysql 的 IP,下次重启 IP 可能就发生变化了,导致无法连接。
最后,回到 Zabbix web 界面,修改主机 Zabbix server 的 IP 地址为 172.20.240.0,更新后不一会,就可以正常连接,至此,问题解决。
2025年了,为什么会有这么诡异的事情,后续有时间了详解。