Руководство по установке Nginx, PHP-FPM, MariaDB, PHPMYADMIN | LEMP на Debian 10
LEMP — это аббревиатура для Linux, HTTP-сервера Nginx, сервера баз данных MariaDB или MySQL и языка сценариев PHP-FPM. Данная группа программного обеспечения с открытым исходным кодом, используется для создания веб-приложений, а так же большинства систем управления контентом (CMS).
Системные требования:
Чтобы следовать этому руководству, вам необходимо установить операционную систему Debian 10 на локальном компьютере или приобрести выделенный сервер, на котором уже будет установлена данная ОС. Чтобы сэкономить время и сразу выложить наш проект в интернет, приобретем VPS (виртуальный частный сервер), у нашего партнера — хостинг провайдера ahost.eu.
Лучше приобретать сервер исходя из максимальных затрат по бюджету, то есть чем выше системные требование тем лучше.
Так проект будет более масштабируемый и не потребуется постоянно докупать железо, мучатся с переездом на другой сервер и т.д.
Для рабочего проекта будем использовать конфигурацию:
Жёсткий диск HDD: 45 Gb
Процессор: 2×2.2ГГц
Оперативная память: 4 Gb
И так приступим к установке.
Установка LEMP на Ubuntu, Debian
Обновим список пакетов:
1 | apt update&& apt upgrade |
Создаем нового пользователя:
1 | adduser mysite -m -U -s /bin/false |
Активируем окружение нового пользователя:
1 | su - mysite |
В домашнем каталог создаем три директории logs/ www/ и ssl/
1 2 3 | mkdir /home/mysite/logs/ mkdir /home/mysite/www/ mkdir /home/mysite/ssl/ |
Перейдем в директорию logs и создадим два лог файла nginx:
1 2 | cd /home/mysite/logs touch nginx_access.log nginx_error.log |
Генерируем самоподписный сертификат сроком на один год:
1 2 | cd /home/mysite/ssl openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout private.key -out server.crt |
Покидаем окружение пользователя mysite:
1 | exit |
Под пользователем root установим права для приватного ключа и сертификата:
1 2 | chmod 644 /home/mysite/ssl/server.crt chmod 600 /home/mysite/ssl/private.key |
Установка php и php-fpm
1 | apt install php7.3 php7.3-fpm |
!ПРИМЕЧАНИЕ. Чтобы проверить версию PHP, выполните команду php —version.
Запустим службу php-fpm:
1 | systemctl start php7.3-fpm |
Добавляем в автозагрузку:
1 | systemctl enable php7.3-fpm |
Проверить работоспособность службы php7.3-fpm:
1 | systemctl status php7.3-fpm |
Создать pool для PHP7.3-fpm
Перейдем в каталог:
1 | cd /etc/php/7.3/fpm/pool.d/www.conf |
сделаем резервную копию default пула:
1 | cp /etc/php/7.3/fpm/pool.d/www.conf /etc/php/7.3/fpm/pool.d/www.conf_bak |
удалим стандартный пул www.conf:
1 | rm www.conf |
создаем новый пул:
1 | nano /etc/php/7.3/fpm/pool.d/newpool.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [mysite] user = mysite group = mysite listen = /run/php/php7.3-fpm.sock listen.owner = mysite listen.group = mysite listen.mode = 0666 pm = ondemand pm.max_children = 100 pm.start_servers = 2 pm.min_spare_servers = 1 pm.max_spare_servers = 3 pm.max_requests = 200 pm.process_idle_timeout = 20s; rlimit_files = 65536 |
Сохраняем файл и презапускаем службу php-fpm:
1 | systemctl restart php7.3-fpm |
Установка базы данных MariaDB
Чтобы установить MariaDB для Debian 10, введите следующую команду:
1 2 3 | apt install mariadb-server -y systemctl enable mariadb systemctl start mariadb |
После установки сервер MariaDB проверьте статус работы службы:
1 | systemctl status mariadb |
После установки MariaDB настройте защиту, запустив сценарий безопасности, который поставляется вместе с пакетом.
1 | mysql_secure_installation |
Далее необходимо ответить на вопросы ниже, следуя руководству.
1 2 3 4 5 6 7 8 | Enter current password for root (enter for none): Just press the Enter Set root password? [Y/n]: Y New password: Enter password Re-enter new password: Repeat password Remove anonymous users? [Y/n]: Y Disallow root login remotely? [Y/n]: Y Remove test database and access to it? [Y/n]: Y Reload privilege tables now? [Y/n]: Y |
Перезапустите службу MariaDB:
1 | systemctl restart mariadb |
Установка Nginx на Debian, Ubuntu
Nginx является веб-сервером с открытым исходным кодом и одним из самых популярных веб-серверов в мире. Применяется в качестве балансировщика нагрузки, обратного прокси-сервера и HTTP-кэша.
1 | apt-get install nginx |
Добавим в автозагрузку:
1 | systemctl enable nginx |
Удаляем стандартные конфигурационные файлы:
1 2 | rm /etc/nginx/sites-available/default rm /etc/nginx/sites-enabled/default |
Создаем конфигурационный файл Nginx для сайта, который будет открывать 80 порт и работать по протоколу HTTP:
1 | nano /etc/nginx/sites-available/mysitenossl.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | server { #main listen 80; server_name mysite.com; root /home/mysite/www; #server_name localhost; index index.php; #logs error_log /home/mysite/logs/nginx_error.log; access_log /home/mysite/logs/nginx_access.log; ############LOCATION####################### location ~ \.php$ { fastcgi_pass unix:/run/php/php7.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; 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; include fastcgi_params; proxy_redirect off; client_max_body_size 100m; client_body_buffer_size 512k; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { proxy_redirect off; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 1024k; proxy_buffers 8 5120k; proxy_busy_buffers_size 10240k; proxy_temp_file_write_size 10240k; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; expires off; } location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ { root /home/mysite/www/; } } |
Теперь правим конфиг для сайта с поддержкой протокола HTTPS:
1 | nano /etc/nginx/sites-available/mysitessl.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | server { #main listen 443 ssl; root /home/mysite/www; #server server_name mysite.com; index index.php; #logs error_log /home/mysite/logs/nginx_error.log; access_log /home/mysite/logs/nginx_access.log; #ssl ssl on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 5m; ssl_stapling on; resolver 8.8.8.8; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers kEECDH+AES128:kEECDH:kEDH:-3DES:kRSA+AES128:kEDH+3DES:DES-CBC3-SHA:!RC4:!aNULL:!eNULL:!MD5:!EXPORT:!LOW:!SEED:!CAMELLIA:!IDEA:!PSK:!SRP:!SSLv2; ssl_prefer_server_ciphers on; add_header Strict-Transport-Security "max-age=31536000;"; ssl_certificate /home/mysite/ssl/server.crt; ssl_certificate_key /home/mysite/ssl/private.key; location ~ \.php$ { fastcgi_pass unix:/run/php/php7.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_script_name; 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; include fastcgi_params; proxy_redirect off; client_max_body_size 100m; client_body_buffer_size 512k; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location / { proxy_redirect off; client_max_body_size 10m; client_body_buffer_size 128k; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 1024k; proxy_buffers 8 5120k; proxy_busy_buffers_size 10240k; proxy_temp_file_write_size 10240k; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; expires off; } location ~* \.(jpg|jpeg|gif|png|ico|css|bmp|swf|js|html|txt)$ { root /home/mysite/www/; } } |
Создадим символические ссылки наших только, что созданных конфигурационных файлов в директорию sites-enabled:
1 2 | ln -s /etc/nginx/sites-available/mysitenossl.conf /etc/nginx/sites-enabled/ ln -s /etc/nginx/sites-available/mysitessl.conf /etc/nginx/sites-enabled/ |
Далее создадим тестовую страницу для проверки работоспособности нашего веб сервера.
Перейдем в окружение пользователя mysite:
1 | su - mysite |
1 2 | cd /home/mysite/www nano /home/mysite/www/index.php |
1 2 3 | <?php phpinfo(); ?> |
Созхраняем файл, устанавливаем права на файл:
1 | chown mysite:mysite /home/mysite/www/index.php |
Перезапускаем службы:
1 2 | systemctl restart nginx systemctl restart php7.3-fpm |
Проверяем работу phpinfo. Для этого откроем браузер и перейдем на наш сай:
mydomain.com/index.php
Вы должны увидеть информацию о PHP вашего сервера. Если страница phpinfo открылась, то PHP-скрипты будут работать правильно с веб-сервером Nginx.
Установка PhpmyAdmin
PhpMyAdmin — это веб-инструмент, который позволяет вам взаимодействовать с базами данных MariaDB, управлять учетными записями пользователей и привилегиями, выполнять SQL-операторы, импортировать и экспортировать данные и многое, многое другое.
Скачиваем последнюю версию PhpmyAdmin
1 | wget https://files.phpmyadmin.net/phpMyAdmin/5.0.2/phpMyAdmin-5.0.2-all-languages.zip |
Распаковаваем архив:
1 | unzip phpMyAdmin-5.0.2-all-languages.zip |
Перемещаем распакованный архив в директорию /usr/share/ :
1 | mv phpMyAdmin-5.0.2-all-languages /usr/share/phpmyadmin |
Устанавливаем права www-data на директорию phpmyadmin:
1 | chown -R www-data:www-data /usr/share/phpmyadmin |
Перейдем в директорию
1 | cd /etc/nginx/snippets |
Создадим конфигруационный файл phpmyadmin:
1 | nano phpmyadmin.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | location /phpmyadmin { root /usr/share/; index index.php index.html index.htm; location ~ ^/phpmyadmin/(.+\.php)$ { try_files $uri =404; root /usr/share/; fastcgi_pass unix:/run/php/php7.3-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } location ~* ^/phpmyadmin/(.+\.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ { root /usr/share/; } } |
Cохраняем файл
Пропишем наш снипет в конфигурацию нашего сайта в Nginx:
1 | nano /etc/nginx/sites-available/mysitenossl.conf |
1 | include snippets/phpmyadmin.conf; |
и для версии ssl:
1 | nano /etc/nginx/sites-available/mysitessl.conf |
перезапускаем Nginx и php-fpm:
1 2 | systemctl restart nginx systemctl restart php7.3-fpm |
Проверяем работоспособность подключенного phpmyadmin.
Перейдем по адресу: mydomain.com/phpmyadmin/
Логинимся и проверяем работоспособность нашей базы данных.
Ну вот и подошло к концу исчерпывающее руководство по установке LEMP на виртуальный выделенный сервер. Спасибо за внимание.
Спасибо большое! Это и правда исчерпывающее руководство по установке LEMP.