Содержание

phpsysinfo

https://github.com/phpsysinfo/phpsysinfo - веб-страница, показывающая информацию о системе.

Из контейнера получать информацию о хосте можно двумя способами:

  1. Монтирование корневой ФС в контейнер на чтение и задание параметра ROOTFS= в phpsysinfo.ini. В этом случае некоторые данные нужно получать на хосте через crontab, выгружая их в подкаталог data каталога phpsysinfo.
  2. Настройкой SSH в phpsysinfo.ini. В этом случае нужно ставить в контейнер phpsysinfo-php пакеты openssh и sshpass.

Установка

2 контейнера - фронтенд nginx и php-fpm. Обновления накатываются гитом каждый раз при запуске контейнера phpsysinfo-php.

docker-compose.yml
  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

Dockerfile
FROM nginx:alpine
WORKDIR /var/www/html
EXPOSE 80
COPY ./nginx/ /etc/nginx
nginx/conf.d/default.conf
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

Dockerfile
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.

start.sh
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"