В этой статье, я подробно расскажу как настроить полноценный WEB Сервер на операционной системе РЕД ОС 7.3.
РЕД ОС – Платформа для построения ИТ инфраструктуры с полным набором инструментов для обеспечения централизованного управления и мониторинга.
Два варианта установки:
– Графический сервер
– Минимальный сервер

В качестве основного сервера у нас будет использоваться nginx в связке с php-fpm. Для управления базами данных, установим с phpMyAdmin.
Так же получим бесплатные SSL сертификаты для наших сайтов.

 

 

Важно:

Для физические лиц: РЕД ОС предоставляется бесплатно для некоммерческого использования.

Для юридический лиц: РЕД ОС доступна для скачивания для целей изучения и тестирования.  Для использования РЕД ОС необходимо приобрести лицензию на платной основе.

 

Вводные данные:

В данной статье у нашего сервера будет IP-Адрес: 62.113.119.41

Адрес основного сайта: srv-adm.ru

Адрес phpMyAdmin: pma.srv-adm.ru

 

Содержание статьи:

  1.  Выбор сервера
  2. Создание A-записей в DNS-редакторе домена.
  3. Установка ОС
  4. Первоначальная настройка операционной системы
  5. Установка и настройка nginx
  6. Установка и настройка php-fpm
  7. Получение и установка бесплатного ssl сертификата Lets Encrypt
  8. Установка и настройка MariaDB сервер
  9. Установка панели управления phpMyAdmin

 

 

1. Выбор сервера.

Я выбрал сервер у компании VDSINA.RU. По этой ссылке можно получит скидку 10% на услуги.

После регистрации загружаем образ РЕД.ОС сервер в панели управления.

Далее нам необходимо создать сервер. Для тестов, подойдёт следующая конфигурация за 6.6 рублей в день.

 

После создания сервера, мы получаем его IP-Адрес. В нашем случае это 62.113.119.41

 

2. Настройка панели управления DNS

Теперь нам необходимо настроить DNS и привязать наш IP адрес сервера, к доменному имени.

Заходим в панель управления хостингом. Нам необходимо создать А запись  с IP адресом: 62.113.119.41 и связать её с нашим доменом srv-adm.ru

Так же нам надо создать поддомен pma.srv-adm.ru и так же связать его с нашим IP адресом: 62.113.119.41

 

После того как это было сделано, я рекомендую подождать несколько часов, что бы DNS записи обновились.

 

3. Установка операционной системы.

После того как ваши DNS записи обновились, нам необходимо установить РЕД ОС на наш новый виртуальный сервер. Весь процесс установки, я описывать не буду, остановлюсь только на паре моментов:

Заходим в меню “Место установки”

Выбираем “Стандартная установка”.

Место где у нас будет сам веб-сервер, я вынес на отдельный раздел /web. Вы можете сделать по другому. По итогу у меня получилась следующая схема разбивки диска.

Далее выбираем конфигурацию “Сервер минимальный”, настраиваем сеть, задаём пароль учётной записи root и заводим 2-ого пользователя.

После этого нажимаем “Начать установку”

 

4. Первоначальная настройка операционной системы.

После установки операционной системы, подключаемся к ней по ssh. Я использую программу putty. Подключаемся сразу под пользователем root, т.к все действия будем производить именно от этой учётной записи.

Первым делом, нам надо обновить нашу систему

dnf update

 

 

После обновления, нам нужно отключит SELinux, да, кто-то может сказать, что это не правильно, что его нужно настроить  и тп. Но в рамках этой статьи, мы его отключим, т.к если его не отключить, то часть служб не будет запускаться. Защиту сервера, можно настроить позже, в частности и firewalld, iptables и тп.

Для отключения SELinux выполним команду

 sudo sed -i "s/SELINUX=enforcing/SELINUX=permissive/" /etc/selinux/config

 

После этого необходимо перезагрузить сервер

reboot

5. Установка и настройка nginx

Для установки nginx на нашем сервере выполним команду

 

dnf install nginx

Затем нам необходимо запустить nginx и добавить его в автозагрузку.  Для этого выполним команды

systemctl start nginx
systemctl enable nginx

После этого, мы можем зайти в браузере по адресу: srv-adm.ru и увидим что nginx – заработал.

Далее нам необходимо настроить основной конфигурационный файл.  Он располагается  /etc/nginx/nginx.conf
Перед тем,как настроить конфигурационный файл, нам необходимо создать каталог /var/cache/nginx/client_temp

mkdir -p /var/cache/nginx/client_temp

Далее даём права на этот каталог пользователю nginx

chown -R nginx.nginx /var/cache/nginx/client_temp/

Теперь, переходим непосредственно к редактированию конфига. Все файлы я редактирую с помощью программы mc, она по умолчанию уже установлена в операционной системе. Вы можете редактировать в той программе, которая вам больше нравится. Далее все команды, будут написаны из под этой программы.

Итак, для редактирования файла вводим

 

mcedit /etc/nginx/nginx.conf

Далее нам необходимо очистить этот файл, и добавить следующий код.  Подробно про все параметры, можно почитать в официальной документации nginx.

user  nginx;
worker_processes auto;
worker_cpu_affinity auto;
worker_rlimit_nofile 30000;
pid /var/run/nginx.pid;
pcre_jit on;

events {
    worker_connections 8192;
    multi_accept on;
}

http {

    # Basic #######################
    
    sendfile			on;
    tcp_nopush			on;
    tcp_nodelay			on;
    reset_timedout_connection 	on;
    keepalive_timeout 		120;
    keepalive_requests		1000;
    types_hash_max_size		2048;
    server_tokens		off;
    send_timeout		30;
    client_body_timeout		30;
    client_header_timeout	30;
    server_names_hash_max_size	4096;

    # Limits ######################
    
    client_max_body_size	30m;
    client_body_buffer_size	128k;
    client_body_temp_path	/var/cache/nginx/client_temp;

    proxy_connect_timeout	60;
    proxy_send_timeout		60;
    proxy_read_timeout		60;
    proxy_buffer_size		4k;
    proxy_buffers		8 16k;
    proxy_busy_buffers_size	64k;
    proxy_temp_file_write_size	64k;
    proxy_temp_path		/var/cache/nginx/proxy_temp;

    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
 
    # Logs ########################

    log_format  main	'$remote_addr - $host [$time_local] "$request" '
        '$status $body_bytes_sent "$http_referer" '
        '"$http_user_agent" "$http_x_forwarded_for"'
        'rt=$request_time ut=$upstream_response_time '
        'cs=$upstream_cache_status';
    log_format full	'$remote_addr - $host [$time_local] "$request" '
               'request_length=$request_length '
               'status=$status bytes_sent=$bytes_sent '
               'body_bytes_sent=$body_bytes_sent '
               'referer=$http_referer '
               'user_agent="$http_user_agent" '
               'upstream_status=$upstream_status '
               'request_time=$request_time '
               'upstream_response_time=$upstream_response_time '
               'upstream_connect_time=$upstream_connect_time '
               'upstream_header_time=$upstream_header_time';

    access_log  /var/log/nginx/access.log  main;
    error_log  /var/log/nginx/error.log;

    # Gzip ########################

    gzip on; 
    gzip_static on; 
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/x-icon image/svg+xml application/x-font-ttf;
    gzip_comp_level 9;
    gzip_proxied any;
    gzip_min_length 1000;
    gzip_disable "msie6";
    gzip_vary on;

    etag off;

    # Cache #######################

    #proxy_cache_valid 1m;
    #proxy_cache_key $scheme$proxy_host$request_uri$cookie_US;
    #proxy_cache_path /web/sites/nginx_cache levels=1:2 keys_zone=main:1000m;

    # Zone limits ################

    limit_conn_zone $binary_remote_addr zone=perip:10m;
    limit_req_zone $binary_remote_addr zone=lim_5r:10m rate=5r/s; # lim for dynamic page
    limit_req_zone $binary_remote_addr zone=lim_1r:10m rate=1r/s; # lim for search page
    limit_req_zone $binary_remote_addr zone=lim_10r:10m rate=10r/s;

    # SSL #########################

    ssl_session_cache shared:SSL:50m;
    ssl_session_timeout 1d;
    ssl_session_tickets on;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers 'TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-256-GCM-SHA384:ECDHE:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/ssl/certs/dhparam.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security max-age=15768000;
    resolver 77.88.8.8;

    include /etc/nginx/conf.d/*.conf;

    # For monitoring ###########
    
    server {
    listen 127.0.0.1:80;
    server_name status.localhost;
    keepalive_timeout	0;
    allow	127.0.0.1;
    deny	all;
    access_log	off;

        location /server-status {
    stub_status	on;
        }

        location /status {
    access_log off;
    allow 127.0.0.1;
    deny all;
    include fastcgi_params;
    fastcgi_pass   unix:/run/php-fpm/www.sock;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

Далее нам необходимо проверить, что всю конфигурацию мы сделали правильно. Для этого вводим команду

nginx -t

 

Если мы видим данное сообщение, это значит что конфиг без ошибок. Если вы видите иное сообщение об ошибке, значит что-то вы не правильно сделали в конфиге, необходимо вернуться и проверить.

После этого перезапускаем nginx

nginx -s reload

Далее нам необходимо создать структуру наших 2х сайтов. При установке, я делал отдельный раздел web, как раз для сайтов. Если в моменте установки вы делали другой раздел, вам необходимо подкорректировать пути, относительно своих папок.

Первый сайт у нас будет srv-adm.ru
Второй сайт у нас будет pma.srv-adm.ru

Для этого выполняем команды:

mkdir -p /web/sites/srv-adm.ru/{www,log}
mkdir -p /web/sites/pma.srv-adm.ru/{www,log}

Далее назначаем права на каталоги

chown -R nginx.nginx /web/sites/

Все команды должны выполниться без ошибок

 

Далее нам необходимо создать конфигурационные файлы наших сайтов. По-скольку далее, мы будем выпускать ssl сертификаты для сайтов, конфиги будут с учётом https, поэтому перезапускать nginx не нужно, т.к будет выходить ошибка (т.к сертификаты ssl мы еще не получили)
Все конфиги мы будем сохранять в папке /etc/nginx/conf.d/

Для создания конфига сайта srv-adm.ru
Вводим команду

mcedit /etc/nginx/conf.d/srv-adm.ru.conf

И далее вставляем данный конфиг в файл и сохраняем

server {
    listen 443 ssl http2;
    server_name srv-adm.ru;
    root /web/sites/srv-adm.ru/www/;
    index index.php index.html index.htm;
    access_log /web/sites/srv-adm.ru/log/access.log main;
    error_log /web/sites/srv-adm.ru/log/error.log;

    ssl_certificate		/etc/letsencrypt/live/srv-adm.ru/fullchain.pem;
    ssl_certificate_key		/etc/letsencrypt/live/srv-adm.ru/privkey.pem;

    location / {
    try_files $uri $uri/ /index.php?$args;
    }

    location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
    access_log off;
    expires max;
    }

    location ~ \.php$ {
    try_files  $uri =404;
    fastcgi_pass   unix:/run/php-fpm/www.sock;
    fastcgi_index index.php;
    fastcgi_param DOCUMENT_ROOT /web/sites/srv-adm.ru/www/;
    fastcgi_param SCRIPT_FILENAME /web/sites/srv-adm.ru/www$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED /web/sites/srv-adm.ru/www$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_param HTTPS on;
    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;
    }

    location = /favicon.ico {
    log_not_found off;
    access_log off;
    }

    location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }

    location ~ /\.ht {
    deny all;
    }
}

server {
     listen  443 ssl http2;
     server_name  www.srv-adm.ru.ru;
     return 301 https://srv-adm.ru$request_uri;
}

server {
    listen 80;
    server_name srv-adm.ru.ru;
    root /web/sites/srv-adm.ru/www/;
    index index.php index.html index.htm;
    access_log /web/sites/srv-adm.ru/log/access.log main;
    error_log /web/sites/srv-adm.ru/log/error.log;

    location / {
    return 301 https://srv-adm.ru$request_uri;
    }
}

server {
     listen  80;
     server_name  www.srv-adm.ru.ru;
     return 301 http://srv-adm.ru$request_uri;
}

Переходим к сайту pma.srv-adm.ru Его дополнительно будем защищать паролем. Т.е перед тем как откроется страница pma.srv-adm.ru сайт попросит ввести дополнительный логин и пароль. В качестве логина я буду использовать pma-admin. Вы можете использовать любое другое название, главное, измените его в команде.
Для этого необходимо выполнить команду:

sh -c "echo -n 'pma-admin:' >> /etc/nginx/.htpasswd"

Этой командной мы задали юзера pma-admin
Далее вводим команду для установки пароля пользователю pma-admin

sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd"

После выполнения команды, система попросит задать пароль, а затем его подтвердить. Вводим пароль, который вам необходим. Он не обязательно должен совпадать с паролем учётной записи root

Теперь переходим к созданию конфигурационного файла для сайта pma.srv-adm.ru

mcedit /etc/nginx/conf.d/pma.srv-adm.ru.conf

И вставляем код

server {
    listen 443 ssl http2;
    server_name pma.srv-adm.ru;
    root /web/sites/pma.srv-adm.ru/www/;
    index index.php index.html index.htm;
    access_log /web/sites/pma.srv-adm.ru/log/access.log main;
    error_log /web/sites/pma.srv-adm.ru/log/error.log;

    auth_basic "Restricted Content";
    auth_basic_user_file /etc/nginx/.htpasswd;

    ssl_certificate		/etc/letsencrypt/live/pma.srv-adm.ru/fullchain.pem;
    ssl_certificate_key		/etc/letsencrypt/live/pma.srv-adm.ru/privkey.pem;

    location ~ \.php$ {
    fastcgi_pass   unix:/run/php-fpm/www.sock;
    fastcgi_index index.php;
    fastcgi_param DOCUMENT_ROOT /web/sites/pma.srv-adm.ru/www/;
    fastcgi_param SCRIPT_FILENAME /web/sites/pma.srv-adm.ru/www$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED /web/sites/pma.srv-adm.ru/www$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;
    }
}

server {
    listen 80;
    server_name pma.srv-adm.ru;
    root /web/sites/pma.srv-adm.ru/www/;
    index index.php index.html index.htm;
    access_log /web/sites/pma.srv-adm.ru/log/access.log main;
    error_log /web/sites/pma.srv-adm.ru/log/error.log;

    location / {
    return 301 https://pma.srv-adm.ru$request_uri;
    }
}

И сохраняем конфиг.

Теперь нам необходимо сформировать файл dhparam.pem. Процесс может занимать от 5 минут до 30+, в зависимости от того какой у вас сервер. Этот файл нужен для повышения безопасности вашего сервера и получения максимального рейтинга ssl.
Выполняем команду:

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096

Начался процесс формирования файла. Ждём его окончания

Процесс формирования файла завершился.

 

6. Установка и настройка php-fpm

Устанавливаем php-fpm и дополнительные модули

dnf install php php-fpm php-cli php-mysql php-json php-gmp php-imap php-gd php-ldap php-odbc php-common php-opcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap php-zip php-curl php-imagick php-intl

После установки, меняем имя пользователя от которого будет запускать php-fpm . Для этого редактируем файл

mcedit /etc/php-fpm.d/www.conf

В файле мы должны изменить user/group c apache на nginx

user = nginx
group = nginx

Далее перезапускаем php-fpm

systemctl restart php-fpm

Назначаем права на директорию сессий

chown -R nginx. /var/lib/php/session

7. Получение и установка бесплатного ssl сертификата Lets Encrypt

Для того что бы получить и установить сертификат, нам необходимо установить пакет certbot, но в репозитории РЕД ОС данного пакета нет, поэтому будем устанавливать его с помощью python.
Python у нас уже установлен, установил недостающий нам пакет

dnf install  python-virtualenv

Создаем каталог

mkdir -p /web/install/python/

Переходим в этот каталог

cd /web/install/python/

Далее нам необходимо создать виртуальную среду для приложения. Саму среду мы назовём python-red

python3 -m venv python-red

Далее, активируем среду приложения python-red

 source python-red/bin/activate

Если всё сделано правильно, мы увидим что перешли в среду разработки python

Далее, нам необходимо обновить

 pip install --upgrade pip

В результате должно получиться вот так

Теперь устанавливаем пакет certbot

 pip install certbot

После установки пакета, запускаем процедуру получения ssl сертификатов
Сначала временно остановим nginx

 systemctl stop nginx

Далее вводим

 certbot certonly

Выбираем 1

Здесь необходимо указать адрес вашей почты, на которую будут приходить уведомления об окончании сертификата

Далее необходимо согласиться с правилами (y) а нажимаем Enter

Здесь спрашивают хотим ли мы получать новости,  и прочее

Следующий шаг, очень важно. Здесь необходимо ввести адреса сайтов, на которые мы будем получать ssl-сертификат. Для начала получим его на сайт srv-adm.ru

Вводим srv-adm.ru

 

Если всё сделано верно, мы увидим сообщение об успешном получении сертификата.

Если будет ошибка – необходимо разбираться. Зачастую ошибка возникает из-за неверно настроенных DNS записей, либо если они еще не успели обновиться.

 

Теперь опять пишем

 certbot certonly

И уже повторяем для сайта pma.srv-adm.ru

 

По итогу, мы получили 2 сертификата для 2х наших сайтов: srv-adm.ru и pma.srv-adm.ru
Теперь сделаем так, чтобы сертификаты автоматически обновлялись перед истечением срока действия. Для этого меняем конфигурации файлов-доменов. Они располагаются в директории /etc/letsencrypt/renewal.

Сначала редактируем файл для srv-adm:

 mcedit /etc/letsencrypt/renewal/srv-adm.ru.conf

Этот файл выглядит следующим образом:

На необходимо заменить:

authenticator = webroot

И в конце файла добавить:
post_hook = nginx -s reload
[[webroot_map]] srv-adm.ru = /web/sites/srv-adm.ru/www

По итогу должно получиться вот так:

Тоже самое, делаем для второго нашего сайта pma.srv-adm.ru

Теперь можно сделать bash-скрипт, добавить его в крон для автоматического обновления.

После того, как получили сертификаты на 2 наших сайта, можно проверить конфиг nginx и запустить его. Ошибок быть не должно. Если они есть, то необходимо разобраться, где именно вы допустили ошибку.

 nginx -t
 systemctl start nginx


8. Установка mariadb на РЕД ОС 7.3

Теперь нам необходимо установить сервер баз данных mysql для web сервера — MariaDB. Всё находится в репозитории, поэтому выполняем команду

 dnf install mariadb mariadb-server

И устанавливаем MariaDB

После установки запускаем mariadb

 systemctl start mariadb

и добавляем в автозагрузку.

 systemctl enable mariadb

Далее выполняем первичную инициализацию

/usr/bin/mysql_secure_installation

На все вопросы соглашаемся.

Сервер баз данных mysql для нашего web сервера готов.

 

9. Установка phpMyAdmin

Установим панель управления mysql — phpmyadmin, она так же есть в репозитории.
Для этого выполняем команду

 dnf install phpmyadmin

После установки, нам необходимо перенести каталог phpmyadmin в папку с нашим сайтом, для этого выполняем команду:

 cp -R /usr/share/phpMyAdmin/* /web/sites/pma.srv-adm.ru/www

Не забываем, выдать права на папку:

 chown -R nginx.nginx /web/sites/pma.srv-adm.ru/www

Теперь нам необходимо проверить, всё ли мы правильно сделали. Для этого в браузере открываем адрес: https://pma.srv-adm.ru

Как мы видим, у нас сначала сработала “первая линия” защиты, а именно необходимо указать имя пользователя и пароль, который мы указывали на этапе создания конфига. В нашем случае это pma-admin
После того как ввели логин и пароль у нас открывается страница phpMyAdmin

Можно зайти в панель и создать базу mysql для тестового сайта srv-adm.ru.

На этом все. Я рассмотрел основные моменты, которые необходимы для установки и настройки web сервера на основе nginx и php-fpm в операционной системе РЕД ОС 7.3

3 комментария для “Настройка WEB Сервера на РЕД ОС 7.3”
    1. Добрый день!
      Какие именно правки? Последнюю версию не смотрел еще, но я не думаю что там координально что-то отличается.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *