====== 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"%%''