В этой заметке я устанавливаю Zabbix на ОС Debian с немного изменённым списком пакетов. Вместо Nginx я использую его форк Angie.
Необходимо установить пакеты для Angie, PHP, PostgreSQL, TimescaleDB и самого Zabbix. Пакет zabbix-nginx-conf
не нужен, так как мы воссоздадим его конфигурацию на Angie.
- Добавить репозиторий и установить пакеты Angie:
1
| . /etc/os-release; curl -fsSLo '/etc/apt/keyrings/angie.gpg' 'https://angie.software/keys/angie-signing.gpg' && echo "deb [signed-by=/etc/apt/keyrings/angie.gpg] https://download.angie.software/angie/${ID}/${VERSION_ID} ${VERSION_CODENAME} main" | tee '/etc/apt/sources.list.d/angie.list' && apt update && apt install --yes angie angie-module-brotli
|
- Добавить репозиторий и установить пакеты PHP-FPM:
1
| . /etc/os-release; v='8.3'; p=("php${v}-fpm" "php${v}-bcmath" "php${v}-bz2" "php${v}-cli" "php${v}-curl" "php${v}-gd" "php${v}-gmp" "php${v}-imagick" "php${v}-imap" "php${v}-intl" "php${v}-ldap" "php${v}-mbstring" "php${v}-memcached" "php${v}-mysql" "php${v}-odbc" "php${v}-opcache" "php${v}-pgsql" "php${v}-redis" "php${v}-uploadprogress" "php${v}-xml" "php${v}-zip" "php${v}-zstd"); curl -fsSLo '/etc/apt/keyrings/php.gpg' 'https://packages.sury.org/php/apt.gpg' && echo "deb [signed-by=/etc/apt/keyrings/php.gpg] https://packages.sury.org/php ${VERSION_CODENAME} main" | tee '/etc/apt/sources.list.d/php.list' && apt update && apt install --yes "${p[@]}"
|
- Добавить репозиторий и установить пакеты PostgreSQL:
1
| . /etc/os-release; curl -fsSL 'https://www.postgresql.org/media/keys/ACCC4CF8.asc' | gpg --dearmor -o '/etc/apt/keyrings/pgsql.gpg' && echo "deb [signed-by=/etc/apt/keyrings/pgsql.gpg] https://apt.postgresql.org/pub/repos/apt ${VERSION_CODENAME}-pgdg main" | tee '/etc/apt/sources.list.d/pgsql.list' && apt update && apt install --yes postgresql-16
|
- Добавить репозиторий и установить пакеты TimescaleDB
2.18.*
:
1
| . /etc/os-release; curl -fsSL 'https://packagecloud.io/timescale/timescaledb/gpgkey' | gpg --dearmor -o '/etc/apt/keyrings/timescaledb.gpg' && echo "deb [signed-by=/etc/apt/keyrings/timescaledb.gpg] https://packagecloud.io/timescale/timescaledb/debian/ ${VERSION_CODENAME} main" | tee '/etc/apt/sources.list.d/timescaledb.list' && apt update && apt install --yes timescaledb-2-postgresql-16='2.18.*' timescaledb-2-loader-postgresql-16='2.18.*' timescaledb-tools
|
- Добавить репозиторий и установить пакеты Zabbix:
1
| . /etc/os-release; curl -fsSL 'https://repo.zabbix.com/RPM-GPG-KEY-ZABBIX-B5333005' | gpg --dearmor -o '/etc/apt/keyrings/zabbix.gpg' && echo "deb [signed-by=/etc/apt/keyrings/zabbix.gpg] https://repo.zabbix.com/zabbix/7.0/debian ${VERSION_CODENAME} main" | tee '/etc/apt/sources.list.d/zabbix.list' && apt update && apt install --yes zabbix-server-pgsql zabbix-frontend-php zabbix-sql-scripts zabbix-agent2
|
Установка Zabbix состоит из этапов:
- Настройка базы данных.
- Настройка конфигурации Nginx (в данном случае Angie).
- Настройка конфигурации PHP-FPM.
- Создать пользователя и базу данных
zabbix
, импортировать схему для базы данных zabbix
:
1
| u='zabbix'; sudo -u 'postgres' createuser --pwprompt "${u}" && sudo -u 'postgres' createdb -O "${u}" "${u}" && zcat '/usr/share/zabbix-sql-scripts/postgresql/server.sql.gz' | sudo -u "${u}" psql "${u}"
|
- Добавить расширение, импортировать схему TimescaleDB для базы данных
zabbix
:
1
| u='zabbix'; echo 'CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;' | sudo -u 'postgres' psql "${u}" && cat '/usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql' | sudo -u "${u}" psql "${u}"
|
- Открыть файл
/etc/zabbix/zabbix_server.conf
и отредактировать параметр:
- Создать файл
/etc/angie/http.d/zabbix.conf
со следующем содержимым:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
| server {
listen 80;
listen [::]:80;
server_name example.com;
root '/usr/share/zabbix';
index index.php;
location = /favicon.ico {
log_not_found off;
}
location / {
try_files $uri $uri/ =404;
}
location /assets {
access_log off;
expires 10d;
}
location ~ /\.ht {
deny all;
}
location ~ /(api\/|conf[^\.]|include|locale) {
deny all;
return 404;
}
location /vendor {
deny all;
return 404;
}
location ~ [^/]\.php(/|$) {
fastcgi_pass unix:/var/run/php/zabbix.sock;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_index index.php;
fastcgi_param DOCUMENT_ROOT /usr/share/zabbix;
fastcgi_param SCRIPT_FILENAME /usr/share/zabbix$fastcgi_script_name;
fastcgi_param PATH_TRANSLATED /usr/share/zabbix$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
}
|
- Создать файл
/etc/php/8.3/fpm/pool.d/zabbix.conf
со следующем содержимым:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| [zabbix]
user = www-data
group = www-data
listen = /var/run/php/zabbix.sock
listen.owner = www-data
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 200
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/sessions/
php_value[max_execution_time] = 300
php_value[memory_limit] = 128M
php_value[post_max_size] = 16M
php_value[upload_max_filesize] = 2M
php_value[max_input_time] = 300
php_value[max_input_vars] = 10000
|
- Перезапустить сервер Zabbix и сопутствующие службы:
1
| systemctl restart zabbix-server zabbix-agent2 angie php${v}-fpm
|
- Включить автоматический запуск сервера Zabbix и сопутствующих служб:
1
| systemctl enable zabbix-server zabbix-agent2 angie php${v}-fpm
|
- Для запуска мастера установки, необходимо в браузере открыть домен, указанный в конфигурации Angie.
- Создать резервную копию базы данных
zabbix
:
1
| f='zabbix.backup.sql'; pg_dump --host='127.0.0.1' --port='5432' --username='zabbix' --password --dbname='zabbix' --file="${f}" && xz "${f}" && rm -f "${f}"
|
- Удалить существующую базу данных
zabbix
:
1
| sudo -u 'postgres' dropdb 'zabbix'
|
- Создать новую базу данных
zabbix
с владельцем zabbix
:
1
| sudo -u 'postgres' createdb -O 'zabbix' 'zabbix'
|
- Создать расширение
timescaledb
для базы данных zabbix
:
1
| echo 'CREATE EXTENSION IF NOT EXISTS timescaledb CASCADE;' | sudo -u 'postgres' psql 'zabbix'
|
- Остановить процессы
timescaledb
в базе данных zabbix
перед восстановлением:
1
| echo 'SELECT timescaledb_pre_restore();' | sudo -u 'postgres' psql 'zabbix'
|
- Восстановить информацию в базе данных
zabbix
из файла zabbix.backup.sql.xz
:
1
| f='zabbix.backup.sql'; xz -d "${f}.xz" && sudo -u 'postgres' psql --dbname='zabbix' --file="${f}"
|
- Запустить процессы
timescaledb
после восстановления базы данных zabbix
:
1
| echo 'SELECT timescaledb_post_restore();' | sudo -u 'postgres' psql 'zabbix'
|
- Запустить Vacuum после восстановления базы данных
zabbix
:
1
| sudo -u 'postgres' vacuumdb --all --analyze
|
Обновление Zabbix состоит из двух этапов:
- Остановка сервера Zabbix, обновление пакетов и запуск сервера Zabbix.
- Остановка сервера Zabbix, обновление схемы TimescaleDB и запуск сервера Zabbix.
1
| systemctl stop zabbix-server zabbix-agent2
|
- Обновление пакетов Zabbix:
1
| apt update && apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-sql-scripts zabbix-agent2
|
1
| systemctl start zabbix-server zabbix-agent2
|
1
| systemctl stop zabbix-server zabbix-agent2
|
- Обновление схемы TimescaleDB:
1
| cat '/usr/share/zabbix-sql-scripts/postgresql/timescaledb/schema.sql' | sudo -u 'zabbix' psql 'zabbix'
|
Если обновляются пакеты TimescaleDB, то по завершении процесса обновления, необходимо выполнить следующую команду:
1
| echo "ALTER EXTENSION timescaledb UPDATE;" | sudo -u 'postgres' psql 'zabbix'
|
Эта команда обновит расширение TimescaleDB, подключённое к базе данных zabbix
.
1
| systemctl start zabbix-server zabbix-agent2
|