суббота, 4 июля 2020 г.

Установка Apache 2.4, PHP7, SQLite3 в Windows 10

Apache 2.4, PHP7, SQLite3 на Windows 10

Apache

Apache скачиваем с сайта https://www.apachehaus.com/, например для 64 разрядной ОС нужно скачать файл: httpd-2.4.43-o111g-x64-vc15.zip. Создаем папку C:\Apache24 и распаковываем туда содержимое папки Apache24 из zip архива.
Запускаем командную строку и переходим в папку C:\Apache24\bin.
Запуск Apache выполняем так: C:\Apache24\bin>httpd.exe. При срабатывании Защитника Windows, предоставляем Apache доступ:
 
Пока мы не закрыли терминал, Apache будет работать. Увидеть приветственную страницу можно открыв в браузере адрес http://localhost/


PHP

PHP7 скачиваем с сайта https://windows.php.net/. Нам нужен архив с Thread Safe, например, файл php-7.4.7-Win32-vc15-x64.zip. Создаем папку C:\php7 и распаковываем туда содержимое zip архива.
Открываем файл C:\Apache24\conf\httpd.conf
После списка загружаемых модулей добавляем строки:
LoadModule php7_module "c:/php7/php7apache2_4.dll"
PHPIniDir "c:/php7"

В раздел <IfModule mime_module>….</IfModule> вставляем строки
    AddHandler application/x-httpd-php .php
    AddType application/x-httpd-php .php .html

В директории
<IfModule dir_module>…  </IfModule>
Меняем DirectoryIndex index.html на DirectoryIndex index.php index.html
Перезапускаем сервер Apache (CTRL+C, потом снова httpd.exe в командной строке).
Создаем файл phpinfo.php в каталоге C:\Apache24\htdocs\ с содержимым: <?php phpinfo(); ?>. Проверить отображение можно по ссылке: http://localhost/phpinfo.php:
 

SQLite

Специально устанавливать sqlite не нужно. PHP уже обладает модулем работы с этой базой данных.
Копируем файл C:\php7\php.ini-production в файл C:\php7\php.ini.
Для поддержки SQLite3 в файле php.ini нужно раскомментировать и модифицировать строки:
;extension=pdo_sqlite меняем на extension=c:\php7\ext\php_pdo_sqlite.dll
;extension=sqlite3 меняем на extension=c:\php7\ext\php_sqlite3.dll
Проверяем поддержку SQLite, создав в файл C:\Apache24\htdocs\sqlitetest.php с содержимым:
<?php
$dbname='base';
if(!class_exists('SQLite3')) die("SQLite 3 NOT supported.");
$base=new SQLite3($dbname, 0666);
echo "SQLite 3 supported.";
?>

Запускаем его в браузере:
http://localhost/sqlitetest.php
Должны получить:
 



Установка новой версии Python3 с SSL на старый Linux CentOS6 или CentOS7

Установка новой версии Python3 с SSL на старый Linux CentOS6 или CentOS7

Установим новую версию Python3 так, что бы она не мешала существующей версии Python2. Устанавливать Python3 будем с поддержкой SSL, так как без SSL установка дополнительных модулей с помощью pip может быть проблемой.
ПРИМЕЧАНИЕ. Пример ошибки, которая будет возникать при использовании альтернативной версии python3 в ОС без SSL:
ERROR: Could not find a version that satisfies the requirement requests (from versions: none)
WARNING: pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available.
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not

 
Устанавливаем утилиты wget и nano, если они еще не стоят в системе:
# yum install wget nano
Устанавливаем пакеты, необходимые для сборки Python3
# yum install gcc openssl-devel bzip2-devel sqlite-devel
Переходим в папку, куда будем скачивать исходные коды:
# cd /usr/src

Для сборки python3.8 с поддержкой SSL нужен собранный из исходников openssl. Для openssl нужен perl5.
Устанавливаем perl5
# wget http://www.cpan.org/src/perl-5.10.1.tar.gz
# tar -xf perl-5.10.1.tar.gz
# cd perl-5.10.1
# sh Configure -de -Dusethreads
# make
# make install
# cd ..


Устанавливаем openssl свежей версии в папку /usr/local/openssl
# wget https://www.openssl.org/source/openssl-1.1.1g.tar.gz
# tar xzf openssl-1.1.1g.tar.gz
# cd openssl-1.1.1g/
# ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl
# make
# make install
# cd ..


Делаем символьную ссылку на установленные библиотеки в основной каталог библиотек операционной системы:
# ln -s /usr/local/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
# ln -s /usr/local/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1

ПРИМЕЧАНИЕ: Если не прописать символьные линки, то в процессе установки Python будут выходить ошибки:
error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No such file or directory


Скачиваем дистрибутив Python
# wget https://www.python.org/ftp/python/3.8.3/Python-3.8.3.tgz
# tar xzf Python-3.8.3.tgz
# cd Python-3.8.3

Для сборки Python c поддержкой SSK, необходимо указать сборщику, где лежит недавно установленный openssl/. Это делается в файле /usr/src/Python-3.8.3/Modules/Setup
# nano Modules/Setup
Здесь нужно найти блок:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#       -L$(SSL)/lib -lssl –lcrypto

И заменить путь к SSL:
SSL=/usr/local/openssl
_ssl _ssl.c \
      -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
      -L$(SSL)/lib -lssl -lcrypto

Проводим установку Python с применением altinstall
Опция altinstall используется для того, что бы не заменить текущую версию python
# ./configure --enable-optimizations
# make altinstall


Проверка версий Python:
# python3.8 -V
Python 3.8.3

А текущая версия осталась прежней:
# python -V
Python 2.6.6


Для использования pip с предустановленным python 2.6, устанавливаем его так:
# yum install epel-release
# yum install python-pip

Установка пакетов теперь возможна через pip
# pip install mysql-connector
# pip install requests

Установка пакетов для python3 выполняется через pip3
# pip3.8 install requests



вторник, 30 июня 2020 г.

Установка и использование MONIT в CentOS

MONIT - утилита мониторинга процессов
Установка MONIT выполняется в CentOS из репозитария epel:
# yum install monit
Основной файл конфигурации - monitrc
В CentOS8 и CentOS7 лежит, как правило, тут - /etc/monitrc
В CentOS6 файл конфигурации тут: /etc/monit.conf
Дополнительная папка с конфигами - /etc/monit.d/

Редактируем файл /etc/monitrc (/etc/monit.conf)
Блок отвечающий за WEB-морду, работающую на порту 2812 изменяем для доступа по сети, например:
set httpd port 2812 and
    use address <IP адрес>
    allow localhost   
    allow 10.0.0.0/8
    allow admin:monit

Проверяем, что слдедующая директива расскоментирована:
include /etc/monit.d/*

Простой запуск службы выполняется так:
# monit
Регистрация в автозапуск при загрузке Linux:
В CentOS7 и 8 - # systemctl enable monit
В CentOS6  - # chkconfig monit on

Для доступа к MONIT по HTTPS открываем порт 2812
FIRREWALLD:
# firewall-cmd --permanent --add-port=2812/tcp
# firewall-cmd --reload


Доступ к интерфейсу MONIT по HTTP выполняется по URL http://<ip-адрес>:2812, логин admin, пароль monit
Вот так можно получить данные в XML http://<ip-адрес>:2812/_status?format=xml

Для наблюдения за сервисами нужно создать файлы мониторинга сервисов и поместить их в /etc/monit.d/
Примеры конфигурации мониторинга систем:
Сама система:
/etc/monit.d/system
check system $HOST
    if loadavg (1min) per core > 4 for 5 cycles then alert
    if loadavg (5min) per core > 2 for 10 cycles then alert
    if cpu usage > 90% for 5 cycles then alert
    if memory usage > 85% then alert
    if swap usage > 25% then alert

Сервис MySQL
/etc/monit.d/mysql
check process mysql matching "mysqld"
    if totalmem > 500 MB for 5 cycles then alert
    if cpu > 50% for 5 cycles then alert

Сервис Apache
/etc/monit.d/apache
check process apache with pidfile /var/run/httpd/httpd.pid
    if cpu > 60% for 2 cycles then alert
    if totalmem > 300.0 MB for 5 cycles then alert
    if children > 250 then alert
    if disk read > 500 kb/s for 10 cycles then alert
    if disk write > 500 kb/s for 10 cycles then alert

Сервис Zabbix
check process zabbix with pidfile /var/run/zabbix/zabbix_server.pid
    if cpu > 70% for 2 cycles then alert
    if totalmem > 1000.0 MB for 5 cycles then alert


Проверка конфигурации:
# monit -t
Рестарт демона, после изменения настроек:
# monit reload