В этой статье, я подробно расскажу как настроить полноценный WEB Сервер на операционной системе РЕД ОС 7.3.
РЕД ОС – Платформа для построения ИТ инфраструктуры с полным набором инструментов для обеспечения централизованного управления и мониторинга.
Два варианта установки:
– Графический сервер
– Минимальный сервер
В качестве основного сервера у нас будет использоваться nginx в связке с php-fpm. Для управления базами данных, установим с phpMyAdmin.
Так же получим бесплатные SSL сертификаты для наших сайтов.
Важно:
Для физические лиц: РЕД ОС предоставляется бесплатно для некоммерческого использования.
Для юридический лиц: РЕД ОС доступна для скачивания для целей изучения и тестирования. Для использования РЕД ОС необходимо приобрести лицензию на платной основе.
Вводные данные:
В данной статье у нашего сервера будет IP-Адрес: 62.113.119.41
Адрес основного сайта: srv-adm.ru
Адрес phpMyAdmin: pma.srv-adm.ru
Содержание статьи:
- Выбор сервера
- Создание A-записей в DNS-редакторе домена.
- Установка ОС
- Первоначальная настройка операционной системы
- Установка и настройка nginx
- Установка и настройка php-fpm
- Получение и установка бесплатного ssl сертификата Lets Encrypt
- Установка и настройка MariaDB сервер
- Установка панели управления 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
будут поправки на версию РЕДОС 7.3.2 ?
Добрый день!
Какие именно правки? Последнюю версию не смотрел еще, но я не думаю что там координально что-то отличается.
Будет авто продление сертификатов?