====== phpsysinfo ======
https://github.com/phpsysinfo/phpsysinfo - веб-страница, показывающая информацию о системе.
Из контейнера получать информацию о хосте можно двумя способами:
- Монтирование корневой ФС в контейнер на чтение и задание параметра ''ROOTFS='' в phpsysinfo.ini. В этом случае некоторые данные нужно получать на хосте через crontab, выгружая их в подкаталог data каталога phpsysinfo.
- Настройкой SSH в phpsysinfo.ini. В этом случае нужно ставить в контейнер phpsysinfo-php пакеты openssh и sshpass.
===== Установка =====
2 контейнера - фронтенд nginx и php-fpm. Обновления накатываются гитом каждый раз при запуске контейнера phpsysinfo-php.
phpsysinfo:
build: ./phpsysinfo
container_name: phpsysinfo
restart: unless-stopped
depends_on:
- phpsysinfo-php
volumes:
- ./phpsysinfo-php/html:/var/www/html
ports:
- 80:80
# labels:
# - "traefik.enable=true"
# - "traefik.http.routers.phpsysinfo.rule=Host(`bva.dyndns.info`) && (PathPrefix(`/mon/`) || Path(`/mon`))"
# - "traefik.http.routers.phpsysinfo.tls.certresolver=le"
# - "traefik.http.routers.phpsysinfo.entrypoints=websecure"
phpsysinfo-php:
build: ./phpsysinfo-php
container_name: phpsysinfo-php
restart: unless-stopped
volumes:
# - /:/rootfs:ro # если используется ROOTFS в phpsysinfo.ini, а не SSH
- ./phpsysinfo-php/html:/var/www/html
==== phpsysinfo ====
FROM nginx:alpine
WORKDIR /var/www/html
EXPOSE 80
COPY ./nginx/ /etc/nginx
server {
# server_name bva.dyndns.info;
listen 80;
#listen 443 ssl;
#ssl_certificate /etc/ssl/cert.crt;
#ssl_certificate_key /etc/ssl/cert.key;
#ssl_protocols TLSv1.2 TLSv1.3;
root /var/www/html;
index index.php;
# Prevent access to phpsysinfo.ini
location ~ \.ini$ {
deny all;
return 404;
}
location ~ \.php$ {
try_files $uri $uri/ /index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param REDIRECT_STATUS 200;
fastcgi_pass phpsysinfo-php:9000;
}
}
==== phpsysinfo-php ====
FROM alpine:3.19
WORKDIR /var/www/html
COPY --chmod=550 start.sh /tmp/start.sh
RUN apk add \
sudo \
php83 \
php83-fpm \
php83-dom \
php83-xml \
php83-simplexml \
php83-mbstring \
php83-xsl \
pciutils \
openssh \
sshpass \
git && \
deluser www-data ; \
delgroup www-data ; \
addgroup -g 82 -S www-data && \
adduser -D -H -u 82 -s /bin/bash www-data -G www-data && \
sed -i '/user =/c user = www-data' /etc/php83/php-fpm.d/www.conf && \
sed -i '/group =/c group = www-data' /etc/php83/php-fpm.d/www.conf && \
sed -i '/listen = /c listen = 0.0.0.0:9000' /etc/php83/php-fpm.d/www.conf && \
ln -sf /usr/bin/php83 /usr/bin/php
CMD /tmp/start.sh
Файл запуска. Здесь установка идёт в подкаталог mon, соответственно, на URL ''/mon''.
cd /var/www/html
# fatal: detected dubious ownership in repository at '/var/www/html/mon' To add an exception for this directory, call:
git config --global --add safe.directory /var/www/html/mon
# Update/install phpsysinfo
git -C mon pull || git clone https://github.com/phpsysinfo/phpsysinfo.git mon
# Comment out SSH warning string (if you use SSH)
sed 's#^.*\($this.*SSH version of phpSysInfo.*\)#// \1#' mon/includes/os/class.SSH.inc.php
chown -R www-data:www-data mon
php-fpm83 -F
==== Работа через SSH ====
На мониторящемся хосте:
# Создать пользователя phpsysinfo и задать ему пароль. Без домашнего каталога работать не будет.
sudo useradd -m -s /bin/bash phpsysinfo
sudo passwd phpsysinfo
# Позволить пользователю phpsysinfo выполнять команды через sudo без запроса пароля (здесь: для мониторинга контейнеров и температуры)
sudo visudo -f /etc/sudoers.d/phpsysinfo
# Вставить туда
Cmnd_Alias PHPSYSINFO=/usr/bin/docker stats*, /usr/sbin/smartctl
phpsysinfo ALL = NOPASSWD: PHPSYSINFO
В phpsysinfo.ini прописать нужные команды для sudo: ''%%SUDO_COMMANDS="smartctl,docker"%%''