Поиск по сайту:

Как установить Nginx, MariaDB 10, PHP 7 (стек LEMP) в версиях 16.10/16.04


Стек LEMP — это аббревиатура, обозначающая группу пакетов (ОС Linux, веб-сервер Nginx, база данных MySQL\MariaDB и язык динамического программирования на стороне сервера PHP), которые используются для развертывания динамических веб-приложений и веб-страница.

Из этого руководства вы узнаете, как установить стек LEMP с поддержкой MariaDB 10, PHP 7 и HTTP 2.0 для Nginx . в Ubuntu 16.10 и Ubuntu 16.04 серверных/настольных версиях.

Требования

  1. Установка Ubuntu 16.04 Server Edition [инструкции также подходят для Ubuntu 16.10]

Шаг 1. Установите веб-сервер Nginx

1. Nginx — это современный и ресурсоэффективный веб-сервер, используемый для отображения веб-страниц посетителям в Интернете. Мы начнем с установки веб-сервера Nginx из официальных репозиториев Ubuntu с помощью командной строки apt.

sudo apt-get install nginx

2. Затем введите команды netstat и systemctl, чтобы убедиться, что Nginx запущен и привязывается к порту 80.

netstat -tlpn

sudo systemctl status nginx.service

Получив подтверждение того, что сервер запущен, вы можете открыть браузер и перейти к IP-адресу вашего сервера или записи DNS, используя протокол HTTP, чтобы посетить веб-страницу Nginx по умолчанию.

http://IP-Address

Шаг 2. Включите протокол Nginx HTTP/2.0.

3. Протокол HTTP/2.0, который по умолчанию встроен в последнюю версию двоичных файлов Nginx в Ubuntu 16.04, работает только в сочетании с SSL и обещает огромное улучшение скорости загрузки веб-страниц SSL.

Чтобы включить протокол в Nginx в Ubuntu 16.04, сначала перейдите к файлам конфигурации доступных сайтов Nginx и создайте резервную копию файла конфигурации по умолчанию, выполнив приведенную ниже команду.

cd /etc/nginx/sites-available/
sudo mv default default.backup

4. Затем с помощью текстового редактора создайте новую страницу по умолчанию, следуя приведенным ниже инструкциям:

server {
        listen 443 ssl http2 default_server;
        listen [::]:443 ssl http2 default_server;

        root /var/www/html;

        index index.html index.htm index.php;

        server_name 192.168.1.13;

        location / {
                try_files $uri $uri/ =404;
        }

        ssl_certificate /etc/nginx/ssl/nginx.crt;
        ssl_certificate_key /etc/nginx/ssl/nginx.key;

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_prefer_server_ciphers on;
        ssl_ciphers EECDH+CHACHA20:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
        ssl_dhparam  /etc/nginx/ssl/dhparam.pem;
        ssl_session_cache shared:SSL:20m;
        ssl_session_timeout 180m;
        resolver 8.8.8.8 8.8.4.4;
        add_header Strict-Transport-Security "max-age=31536000;
        #includeSubDomains" always;


        location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

        location ~ /\.ht {
                deny all;
        }

}

server {
       listen         80;
       listen    [::]:80;
       server_name    192.168.1.13;
       return         301 https://$server_name$request_uri;
}

Приведенный выше фрагмент конфигурации позволяет использовать HTTP/2.0 путем добавления параметра http2 ко всем директивам прослушивания SSL.

Кроме того, последняя часть отрывка, заключенного в директиве сервера, используется для перенаправления всего трафика, отличного от SSL, на хост SSL/TLS по умолчанию. Кроме того, замените директиву server_name, чтобы она соответствовала вашему собственному IP-адресу или записи DNS (желательно полное доменное имя).

5. Завершив редактирование файла конфигурации Nginx по умолчанию с указанными выше настройками, сгенерируйте и перечислите файл и ключ сертификата SSL, выполнив приведенные ниже команды.

Заполните сертификат своими собственными настройками и обратите внимание на настройку Общее имя, чтобы она соответствовала вашей записи полного доменного имени DNS или IP-адресу вашего сервера, который будет использоваться для доступа к веб-странице.

sudo mkdir /etc/nginx/ssl
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt
ls /etc/nginx/ssl/

6. Кроме того, создайте надежный шифр DH, который был изменен в приведенном выше файле конфигурации в строке инструкции ssl_dhparam, выполнив следующую команду:

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

7. После создания ключа Diffie-Hellman проверьте, правильно ли написан файл конфигурации Nginx и может ли он быть применен веб-сервером Nginx, и перезапустите демон, чтобы отразить изменения, выполнив приведенные ниже команды.

sudo nginx -t
sudo systemctl restart nginx.service

8. Чтобы проверить, использует ли Nginx протокол HTTP/2.0, выполните приведенную ниже команду. Наличие объявленного протокола h2 подтверждает, что Nginx успешно настроен для использования протокола HTTP/2.0. Все современные браузеры должны поддерживать этот протокол по умолчанию.

openssl s_client -connect localhost:443 -nextprotoneg ''

Шаг 3. Установите интерпретатор PHP 7.

Nginx можно использовать с интерпретатором языка динамической обработки PHP для создания динамического веб-контента с помощью диспетчера процессов FastCGI, полученного путем установки двоичного пакета php-fpm из официальных репозиториев Ubuntu.

9. Чтобы получить PHP7.0 и дополнительные пакеты, которые позволят PHP взаимодействовать с веб-сервером Nginx, введите следующую команду в консоли вашего сервера:

sudo apt install php7.0 php7.0-fpm 

10. После успешной установки интерпретатора PHP7.0 на ваш компьютер запустите и проверьте демон php7.0-fpm, выполнив следующую команду: команда:

sudo systemctl start php7.0-fpm
sudo systemctl status php7.0-fpm

11. Текущий файл конфигурации Nginx уже настроен на использование диспетчера процессов PHP FastCGI для серверного динамического контента.

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

location ~ \.php$ {
                include snippets/fastcgi-php.conf;
                fastcgi_pass unix:/run/php/php7.0-fpm.sock;
        }

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

12. Чтобы проверить связь веб-сервера Nginx с диспетчером процессов PHP FastCGI, создайте тестовый файл конфигурации PHP info.php, введя приведенную ниже команду, и проверьте настройки, посетив этот файл конфигурации. используя следующий адрес: http://IP_или домен/info.php.

sudo su -c 'echo "<?php phpinfo(); ?>" |tee /var/www/html/info.php'

Также проверьте, объявлен ли сервером протокол HTTP/2.0, найдя строку $_SERVER[’SERVER_PROTOCOL’] в блоке переменных PHP, как показано на снимке экрана ниже.

13. Чтобы установить дополнительные модули PHP7.0, используйте команду apt search php7.0, чтобы найти модуль PHP и установить его.

Также попробуйте установить следующие модули PHP, которые могут пригодиться, если вы планируете установить WordPress или другую CMS.

sudo apt install php7.0-mcrypt php7.0-mbstring

14. Чтобы зарегистрировать дополнительные модули PHP, просто перезапустите демон PHP-FPM, выполнив приведенную ниже команду.

sudo systemctl restart php7.0-fpm.service

Шаг 4. Установите базу данных MariaDB.

15. Наконец, чтобы завершить наш стек LEMP, нам нужен компонент базы данных MariaDB для хранения данных веб-сайта и управления ими.

Установите систему управления базой данных MariaDB, выполнив приведенную ниже команду, и перезапустите службу PHP-FPM, чтобы использовать модуль MySQL для доступа к базе данных.

sudo apt install mariadb-server mariadb-client php7.0-mysql
sudo systemctl restart php7.0-fpm.service

16. Чтобы защитить установку MariaDB, запустите сценарий безопасности, предоставленный двоичным пакетом из репозиториев Ubuntu, который попросит вас установить пароль root, удалить анонимных пользователей, удаленно отключить вход с правами root и удалить тестовую базу данных.

Запустите сценарий, введя приведенную ниже команду, и ответьте на все вопросы yes. Используйте скриншот ниже в качестве руководства.

sudo mysql_secure_installation

17. Чтобы настроить MariaDB так, чтобы обычные пользователи могли получить доступ к базе данных без системных привилегий sudo, перейдите в интерфейс командной строки MySQL с правами root и выполните следующие команды в интерпретаторе MySQL:

sudo mysql 
MariaDB> use mysql;
MariaDB> update user set plugin=’‘ where User=’root’;
MariaDB> flush privileges;
MariaDB> exit

Наконец, войдите в базу данных MariaDB и запустите произвольную команду без привилегий root, выполнив следующую команду:

mysql -u root -p -e 'show databases'

Все это! Теперь у вас есть стек LEMP, настроенный на серверах Ubuntu 16.10 и Ubuntu 16.04, который позволяет развертывать сложные динамические веб-приложения, способные взаимодействовать с базами данных.