One place for hosting & domains

      Установка и настройка стека LEMP с помощью Software Collections в CentOS 7


      Автор выбрал Apache Software Foundation для получения пожертвования в размере $100 в рамках программы Write for DOnations.

      Введение

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

      Компоненты стека LEMP иногда устанавливаются с помощью репозитория EPEL CentOS 7. Однако этот репозиторий содержит устаревшие пакеты. Например, вы не можете установить версию PHP старше 5.4.16 из EPEL, хотя этот релиз не поддерживается уже длительное время. Для получения новых версий программного обеспечения рекомендуется использовать набор Software Collections, также известный как SCL. SCL — это коллекции ресурсов для разработчиков, предоставленные RedHat, которые позволяют использовать различные версии программного обеспечения в одной и той же системе без какого-либо влияния на ранее установленные пакеты.

      В этом руководстве вы установите стек LEMP на сервер с CentOS 7. Операционная система CentOS отвечает за работу компонентов Linux. Вы установите остальные компоненты с помощью репозитория Software Collections, а затем настроите их для обслуживания простой веб-страницы.

      Предварительные требования

      Прежде чем приступить к выполнению данного обучающего руководства, у вас должен быть сервер CentOS 7, настроенный согласно руководству по начальной настройке сервера CentOS 7, а также пользователь sudo без прав root.

      Шаг 1 — Активация репозитория Software Collections

      Для получения доступа к SCL для CentOS установите release-файл для Software Collections в CentOS:

      • sudo yum install centos-release-scl

      Просмотрите список доступных пакетов SCL с помощью следующей команды:

      • yum --disablerepo='*' --enablerepo='centos-sclo-rh' --enablerepo='centos-sclo-sclo' list available

      Для предотвращения конфликтов в рамках всей системы пакеты SCL устанавливаются в директорию /opt/rh. Это позволяет установить, например, Python 3.5 на компьютере с CentOS 7 без удаления или вмешательства в работу Python 2.7.

      Все файлы конфигурации для пакетов SCL хранятся в соответствующей директории внутри директории /etc/opt/rh/. Пакеты SCL содержат скрипты, которые определяют переменные среды, необходимые для использования приложений внутри пакета, например, PATH, LD_LIBRARY_PATH и MANPATH. Эти скрипты хранятся в файловой системе в каталоге /opt/rh/package-name/enable.

      Теперь вы можете начать установку пакетов, описанных в этом руководстве.

      Шаг 2 — Установка сервера Web Nginx

      Для показа веб-страниц посетителям мы будем использовать Nginx, современный и эффективный веб-сервер.

      Установите Nginx с помощью следующей команды yum. Обязательно замените выделенное значение версией Nginx, которую вы хотите установить; самая последняя версия будет иметь самый большой номер в имени пакета (112 на момент написания статьи):

      • sudo yum install rh-nginx112

      После завершения установки запустите службу Nginx:

      • sudo systemctl start rh-nginx112-nginx

      Проверьте, что Nginx запущен с помощью команды systemctl status​​​:

      • sudo systemctl status rh-nginx112-nginx

      Output

      ● rh-nginx112-nginx.service - The nginx HTTP and reverse proxy server Loaded: loaded (/usr/lib/systemd/system/rh-nginx112-nginx.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2018-03-19 15:15:43 UTC; 1min 17s ago Main PID: 10556 (nginx) CGroup: /system.slice/rh-nginx112-nginx.service ├─10556 nginx: master process /opt/rh/rh-nginx112/root/usr/sbin/nginx ├─10557 nginx: worker process └─10558 nginx: worker process Mar 19 15:15:43 lemp-centos-222 systemd[1]: Starting The nginx HTTP and reverse proxy server... Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: the configuration file /etc/opt/rh/rh-nginx... ok Mar 19 15:15:43 lemp-centos-222 nginx-scl-helper[10541]: nginx: configuration file /etc/opt/rh/rh-nginx112/...ful Mar 19 15:15:43 lemp-centos-222 systemd[1]: Started The nginx HTTP and reverse proxy server. Hint: Some lines were ellipsized, use -l to show in full.

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

      • sudo yum install firewalld

      После этого вы сможете запустить службу firewalld:

      • sudo systemctl start firewalld

      Затем добавьте ряд правил брандмауэра, чтобы разрешить доступ SSH-доступ к вашему серверу и подключение через HTTP и HTTPS к Nginx:

      • sudo firewall-cmd --permanent --add-service=ssh
      • sudo firewall-cmd --zone=public --permanent --add-service=http
      • sudo firewall-cmd --zone=public --permanent --add-service=https

      Перезапустите firewalld для вступления в силу новых правил брандмауэра:

      • sudo firewall-cmd --reload

      Подробнее о firewalld см. в статье Настройка брандмауэра с помощью FirewallD в CentOS 7.

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

      Если у вас нет доменного имени, указывающего на ваш сервер, и вы не знаете открытый IP-адрес вашего сервера, вы можете найти его, введя в терминал следующую команду:

      Введите полученный IP-адрес в адресную строку браузера, в результате чего вы должны увидеть используемую по умолчанию начальную страницу Nginx:

      http://server_domain_or_IP
      

      Страница Nginx по умолчанию

      Если вы видите эту страницу, это значит, что вы успешно установили Nginx. Перед продолжением активируйте запуск Nginx при загрузке сервера с помощью следующей команды:

      • sudo systemctl enable rh-nginx112-nginx

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

      Шаг 3 — Установка MariaDB для управления данными сайта

      Теперь, когда у нас есть веб-сервер, пришло время установить MariaDB, упрощенную версию MySQL, используемую для хранения данных вашего сайта и управления ими.

      Установите MariaDB с помощью следующей команды. Снова замените выделенное значение номером версии, которую вы хотите установить, самый большой номер является номером самой последней версии (102 на момент написания):

      • sudo yum install rh-mariadb102

      После завершения установки запустите службу MariaDB с помощью следующей команды:

      • sudo systemctl start rh-mariadb102-mariadb

      После этого службу MariaDB можно считать установленной и запущенной. Однако ее настройка еще не завершена.

      Для обеспечения безопасности MariaDB устанавливается вместе с скриптом безопасности, который напоминает вам о необходимости изменения небезопасных настроек по умолчанию. Запустите скрипт, введя следующую команду:

      • source /opt/rh/rh-mariadb102/enable
      • mysql_secure_installation

      Вам потребуется ввести ваш текущий пароль root. Так как вы только что установили MySQL, у вас нет пароля, поэтому оставьте это поле пустым и нажмите ENTER. После этого вам будет предложено установить пароль root. Введите Y и следуйте этим инструкциям:

      . . .
      Enter current password for root (enter for none):
      OK, successfully used password, moving on...
      
      Setting the root password ensures that nobody can log into the MariaDB
      root user without the proper authorization.
      
      Set root password? [Y/n] Y
      New password: password
      Re-enter new password: password
      Password updated successfully!
      Reloading privilege tables..
       ... Success!
      . . .
      

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

      Последнее, что нужно сделать, — это активировать для MariaDB запуск при загрузке сервера. Для этого используйте следующую команду:

      • sudo systemctl enable rh-mariadb102-mariadb

      В данный момент ваша система базы данных настроена, и вы можете переходить к настройке PHP на своем сервере.

      Шаг 4 — Установка и настройка PHP

      Теперь у вас есть Nginx для обслуживания ваших страниц и MariaDB для хранения и управления данными, однако у вас до сих пор не установлено ПО, которое может генерировать динамическое содержание. Именно для этого и нужен PHP.

      Поскольку Nginx не поддерживает нативную обработку PHP, как некоторые другие веб-серверы, вам потребуется установить php-fpm, т.е. «менеджер процессов fastCGI». Затем вы должны будете настроить Nginx, чтобы передавать PHP-запросы этому программному продукту.

      Установите этот модуль, а также захватите пакет helper, который позволит PHP обмениваться информацией с ПО, отвечающим за работу базы данных. При установке будут загружены необходимые файлы ядра PHP. Введите следующее:

      • sudo yum install rh-php71-php-fpm rh-php71-php-mysqlnd

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

      Откройте главный файл конфигурации php.ini с правами root:

      • sudo vi /etc/opt/rh/rh-php71/php.ini

      В этом файле вам нужно найти параметр, который устанавливает значение для cgi.fix_pathinfo. Он будет закомментирован с помощью точки с запятой (;) и имеет значение «1» по умолчанию.

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

      Измените оба эти условия, разкомментировав строку и установив значение «0»:

      71/php.ini’>/etc/opt/rh/rh-php71/php.ini

      cgi.fix_pathinfo=0
      

      Сохраните и закройте файл после завершения редактирования (нажмите ESC, введите :wq, а затем нажмите ENTER).“”

      Теперь откройте файл конфигурации php-fpm по адресу www.conf​​​​:

      • sudo vi /etc/opt/rh/rh-php71/php-fpm.d/www.conf

      По умолчанию этот файл настроен для работы с сервером Apache. Поскольку на вашем сервере установлен Nginx, найдите строки, которые устанавливают user и group и измените их значения с «apache» на «nginx»:

      71/php-fpm.d/www.conf’>/etc/opt/rh/rh-php71/php-fpm.d/www.conf

      user = nginx
      group = nginx
      

      Затем сохраните и закройте файл.

      Теперь запустите процессор PHP с помощью следующей команды:

      • sudo systemctl start rh-php71-php-fpm

      Активируйте запуск php-fpm при загрузке:

      • sudo systemctl enable rh-php71-php-fpm

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

      Шаг 5 — Настройка Nginx для использования процессора PHP

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

      Это изменение конфигурации выполняется уровне блока server (блоки сервера похожи на виртуальные хосты в Apache). Откройте файл конфигурации сервера Nginx по умолчанию, введя следующую команду:

      • sudo vi /etc/opt/rh/rh-nginx112/nginx/nginx.conf

      Раскомментируйте блок location ~ .php$ (сегмент файла, обрабатывающий запросы PHP и находящийся внутри блока server) и его содержимое, удалив символ решетки (#) в начале строки. Также вам нужно обновить параметр fastcgi_param и указать значение SCRIPT FILENAME $document_root$fastcgi_script_name. Это позволит PHP узнать местоположение документа root, где он сможет найти файлы для обработки.

      После внесения необходимых изменений блок server будет выглядеть следующим образом:

      /etc/nginx/sites-available/default

      ...
      server {
          listen       80 default_server;
          listen       [::]:80 default_server;
          server_name  _;
          root         /opt/rh/rh-nginx112/root/usr/share/nginx/html;
      
          # Load configuration files for the default server block.
          include      /etc/opt/rh/rh-nginx112/nginx/default.d/*.conf;
      
          location / {
          }
      
          error_page 404 /404.html;
          location = /40x.html {
          }
      
          error_page 500 502 503 504  /50x.html;
          location = /50x.html {
          }
      
          # proxy the PHP scripts to Apache listening on 127.0.0.1:80
          #
          #location ~ .php$ {
          #    proxy_pass   http://127.0.0.1;
          #}
      
          # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
          #
          location ~ .php$ {
              root           html;
              fastcgi_pass   127.0.0.1:9000;
              fastcgi_index  index.php;
              fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
              include        fastcgi_params;
          }
      
          # deny access to .htaccess files, if Apache's document root
          # concurs with nginx's one
          #
          #location ~ /.ht {
          #    deny  all;
          #}
      }
      ...
      

      После внесения необходимых изменений вы можете сохранить файл и закрыть редактор.

      Теперь проверьте файл конфигурации на ошибки синтаксиса, запустив следующую команду:

      • source /opt/rh/rh-nginx112/enable
      • sudo nginx -t

      При появлении сообщений о каких-либо ошибках, вернитесь и повторно проверьте ваш файл, прежде чем продолжать.

      После подтверждения корректности файла конфигурации перезагрузите Nginx, чтобы внесенные вами изменения вступили в силу:

      • sudo systemctl reload rh-nginx112-nginx

      Теперь, когда Nginx, PHP и MariaDB были установлены и настроены, осталось только подтвердить, что настройка стека LEMP способна корректно предоставлять содержание для посетителей вашего сайта.

      Шаг 6 — Создание файла PHP для тестовой конфигурации

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

      Откройте новый файл с названием info.php внутри корневой директории документа:

      • sudo vi /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

      Добавьте в новый файл следующую строку. Это корректный код PHP, который будет возвращать информацию о вашем сервере:

      112/root/usr/share/nginx/html/info.php’>/opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

      <?php phpinfo(); ?>
      

      После завершения редактирования сохраните и закройте файл. Затем откройте эту страницу в браузере, указав в адресной строке доменное имя вашего сервера или открытый IP-адрес и добавив /info.php:

      http://server_domain_or_IP/info.php
      

      Вы увидите веб-страницу, сгенерированную PHP, с информацией о вашем сервере:

      Страница PHP с информацией

      Если ваша страница выглядит таким образом, вам удалось успешно реализовать обработку PHP с помощью Nginx.

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

      Удалите файл, введя следующую команду:

      • sudo rm /opt/rh/rh-nginx112/root/usr/share/nginx/html/info.php

      Вы успешно подтвердили, что все компоненты стека LEMP установлены и настроены корректно на вашем сервере.

      Заключение

      Теперь у вас в распоряжении есть полностью настроенный стек LEMP на вашем сервере с CentOS 7. Он будет служить гибкой основой для предоставления веб-контента вашим посетителям.

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

      Дополнительную информацию о Software Collections вы можете найти на официальном сайте.



      Source link

      Установка Linux, Nginx, MySQL, PHP (набора LEMP) в Ubuntu 18.04


      Введение

      Набор LEMP — это комплекс программного обеспечения, используемый для обслуживания динамических веб-страниц и веб-приложений. Аббревиатура LEMP обозначает операционную систему Linux с веб-сервером Nginx (произносится как «энджинкс»). Данные серверной части хранятся в базе данных MySQL, а динамическая обработка выполняется PHP.

      В этом руководстве показывается, как установить комплекс LEMP на сервер Ubuntu 18.04. Операционная система Ubuntu обеспечивает выполнение первого требования. Далее мы расскажем, как настроить и запустить все остальные компоненты.

      Предварительные требования

      Для выполнения настоящего обучающего модуля на вашем сервере должна быть учетная запись обычного пользователя без привилегий root и с привилегиями sudo. Настройте эту учетную запись, следуя указаниям Руководства по начальной настройке сервера Ubuntu 18.04.

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

      Шаг 1 — Установка веб-сервера Nginx

      Для показа веб-страниц посетителям нашего сайта мы будем использовать современный и эффективный веб-сервер Nginx.

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

      Поскольку в этом сеансе мы будем использовать apt впервые, нужно обновить указатель пакетов вашего сервера. Затем нужно выполнить установку сервера:

      • sudo apt update
      • sudo apt install nginx

      В Ubuntu 18.04 настроен запуск Nginx сразу же после установки.

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

      Рекомендуется применять самый ограничивающий профиль, который будет разрешать желаемый трафик. Поскольку в этом модуле вы не настроили SSL для своего сервера, вам нужно будет только разрешить трафик на порту 80.

      Для этого введите следующее:

      • sudo ufw allow 'Nginx HTTP'

      Для проверки изменения используйте команду:

      Результат выполнения этой команды покажет, что трафик HTTP разрешен:

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

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

      Если у вас нет доменного имени, указывающего на ваш сервер, и вы не знаете публичный IP-адрес вашего сервера, вы можете найти его, введя в терминал следующую команду:

      • ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's//.*$//'

      Команда выведет несколько IP-адресов. Вы можете попробовать каждый из них в своем браузере.

      Также вы можете проверить доступность IP-адреса из других мест в интернете:

      Введите полученный адрес в браузер, и вы попадете на страницу Nginx по умолчанию:

      http://server_domain_or_IP
      

      Страница Nginx по умолчанию

      Если вы увидите эту страницу, вы успешно установили Nginx.

      Шаг 2 — Установка MySQL для управления данными сайта

      Теперь, когда у вас есть веб-сервер, вам нужно установить MySQL (система управления базами данных) для хранения и управления данными вашего сайта.

      Для установки MySQL введите следующее:

      • sudo apt install mysql-server

      Программное обеспечение СУБД MySQL установлено, но его настройка еще не завершена.

      Для защиты установки в комплект MySQL входит скрипт, запрашивающий подтверждение небезопасных изменений параметров по умолчанию. Запустите скрипт, введя следующую команду:

      • sudo mysql_secure_installation

      Скрипт предложит настроить VALIDATE PASSWORD PLUGIN.

      Предупреждение. Эту функцию следует активировать при наличии разумных оснований. Если она активирована, MySQL будет отклонять пароли, не соответствующие определенным критериям, и выводить сообщение об ошибке. Это может вызвать проблемы, если вы используете слабый пароль в сочетании с программным обеспечением для автоматической настройки учетных данных пользователя MySQL, например, с пакетами Ubuntu для phpMyAdmin. Оставить проверку отключенной достаточно безопасно, но для входа в базу данных всегда нужно использовать надежные уникальные пароли.

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

      VALIDATE PASSWORD PLUGIN can be used to test passwords
      and improve security. It checks the strength of password
      and allows the users to set only those passwords which are
      secure enough. Would you like to setup VALIDATE PASSWORD plugin?
      
      Press y|Y for Yes, any other key for No:
      

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

      There are three levels of password validation policy:
      
      LOW    Length >= 8
      MEDIUM Length >= 8, numeric, mixed case, and special characters
      STRONG Length >= 8, numeric, mixed case, special characters and dictionary                  file
      
      Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
      

      Затем вам нужно будет отправить и подтвердить пароль пользователя root:

      Please set the password for root here.
      
      New password:
      
      Re-enter new password:
      

      Для всех остальных вопросов нужно выбирать Y и нажимать ENTER в каждом диалоговом окне. В результате будут удалены некоторые анонимные пользователи и тестовая база данных, отключена возможность удаленного входа для пользователя root, и будут загружены новые правила, чтобы СУБД MySQL немедленно использовала внесенные изменения.

      В системах Ubuntu с СУБД MySQL 5.7 (и более поздними версиями) для пользователя root СУБД MySQL по умолчанию для аутентификации задан плагин auth_socket, а не пароль. Во многих случаях это обеспечивает более высокую безопасность и удобство, однако это также может осложнить ситуацию, если вам нужно предоставить доступ к пользователю внешней программе (например, phpMyAdmin).

      Если использование плагина auth_socket для доступа к MySQL соответствует вашим рабочим процессам, вы можете перейти к шагу 3. Если же вы предпочитаете использовать пароль при подключении к MySQL в качестве пользователя root, метод аутентификации нужно изменить с auth_socket на mysql_native_password. Для этого откройте командную строку MySQL через терминал:

      Затем проверьте, какой метод аутентификации используют ваши аккаунты пользователей MySQL с помощью следующей команды:

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

      В этом примере вы можете видеть, что root пользователь действительно использует метод аутентификации с помощью плагина auth_socket. Чтобы настроить для учетной записи root аутентификацию с помощью пароля, выполните следующую команду ALTER USER. Обязательно измените значение password на надежный пароль по вашему выбору:

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Затем выполните команду FLUSH PRIVILEGES, которая просит сервер перезагрузить предоставленные таблицы и ввести в действие изменения:

      Проверьте методы аутентификации, применяемые для каждого из ваших пользователей, чтобы подтвердить, что root-пользователь больше не использует для аутентификации плагин auth_socket:

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *3636DACC8616D997782ADD0839F92C1571D6D78F | mysql_native_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost | | debian-sys-maint | *CC744277A401A7D25BE1CA89AFF17BF607F876FF | mysql_native_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 4 rows in set (0.00 sec)

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

      Примечание. После настройки аутентификации с помощью пароля для пользователя root СУБД MySQL вы не сможете получать доступ к MySQL с помощью команды sudo mysql, которая использовалась до этого. Вместо этого нужно запустить следующую команду:

      После ввода заданного пароля вы увидите командную строку MySQL.

      Теперь СУБД настроена, и вы можете переходить к установке PHP.

      Шаг 3 – Установка PHP и настройка Nginx для использования процессора PHP

      Теперь у вас есть Nginx для обслуживания ваших страниц и MySQL для хранения и управления данными, однако у вас до сих пор не установлено ПО, которое может генерировать динамический контент. Для этого требуется установить PHP.

      Поскольку Nginx не поддерживает нативную обработку PHP, как некоторые другие веб-серверы, вам потребуется установить php-fpm, т.е. «менеджер процессов fastCGI». Мы укажем Nginx передавать запросы PHP в это программное обеспечение для обработки.

      Примечание. В зависимости от поставщика облачных услуг вам может потребоваться установить хранилище Ubuntu universe, которое включает бесплатное программное обеспечение и программное обеспечение с открытым исходным кодом, поддерживаемое сообществом Ubuntu, прежде чем устанавливать пакет php-fpm. Для этого можно ввести следующую команду:

      • sudo add-apt-repository universe

      Установите модуль php-fpm с дополнительным вспомогательным пакетом php-mysql, который позволит PHP взаимодействовать с серверной частью вашей базы данных. При установке будут загружены необходимые файлы ядра PHP. Введите следующее:

      • sudo apt install php-fpm php-mysql

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

      Это изменение конфигурации выполняется уровне блока сервера (блоки сервера похожи на виртуальные хосты в Apache). Откройте новый файл конфигурации блока сервера в каталоге /etc/nginx/sites-available/. В этом примере новый файл конфигурации блока сервера имеет имя example.com, хотя вы можете использовать любое желаемое имя:

      • sudo nano /etc/nginx/sites-available/example.com

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

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

      /etc/nginx/sites-available/example.com

      server {
              listen 80;
              root /var/www/html;
              index index.php index.html index.htm index.nginx-debian.html;
              server_name example.com;
      
              location / {
                      try_files $uri $uri/ =404;
              }
      
              location ~ .php$ {
                      include snippets/fastcgi-php.conf;
                      fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
              }
      
              location ~ /.ht {
                      deny all;
              }
      }
      

      Ниже описано действие этих директив и блоков расположения:

      • listen — определяет, что будет прослушивать порт Nginx. В данном случае он будет прослушивать порт 80, используемый по умолчанию для протокола HTTP.
      • root — определяет корневой каталог документа, где хранятся файлы, обслуживаемые сайтом.
      • index — задает для Nginx приоритет обслуживания файлов с именем index.php (при наличии) при запросе файла индекса.
      • server_name — определяет, какой серверный блок должен использоваться для заданного запроса вашего сервера. Эта директива должна указывать на доменное имя или публичный IP-адрес вашего сервера.
      • location / — первый блок расположения включает директиву try_files, которая проверяет наличие файлов, соответствующих запросу URI. Если Nginx не сможет найти соответствующий файл, будет возвращена ошибка 404.
      • location ~ .php$ — этот блок расположения отвечает за фактическую обработку PHP посредством указания Nginx на файл конфигурации fastcgi-php.conf и файл php7.2-fpm.sock file, который объявляет, какой сокет ассоциирован с php-fpm.
      • location ~ /.ht — последний блок расположения отвечает за файлы .htaccess, которые Nginx не обрабатывает. При добавлении директивы deny all из файлов .htaccess в корневой каталог документа они не будут выводиться посетителям.

      После добавления этого содержания следует сохранить и закрыть файл. Для активации нового серверного блока создайте символическую ссылку от нового файла конфигурации серверного блока (в каталоге /etc/nginx/sites-available/) на каталог /etc/nginx/sites-enabled/:

      • sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

      Затем уберите ссылку на файл конфигурации по умолчанию из каталога /sites-enabled/:

      • sudo unlink /etc/nginx/sites-enabled/default

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

      • sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/

      Протестируйте новый файл конфигурации на ошибки синтаксиса:

      При появлении сообщений о каких-либо ошибках, вернитесь и повторно проверьте ваш файл, прежде чем продолжать.

      Когда вы будете готовы, перезагрузите Nginx для внесения необходимых изменений:

      • sudo systemctl reload nginx

      Это завершает установку и настройку набора LEMP. Однако будет разумно убедиться, что все компоненты могут связываться друг с другом.

      Шаг 4 — Создание файла PHP для тестовой конфигурации

      Теперь набор LEMP должен быть полностью настроен. Вы можете протестировать его, чтобы убедиться, что Nginx может правильно передавать файлы .php на процессор PHP.

      Используйте текстовый редактор, чтобы создать тестовый файл PHP с именем info.php в корневом каталоге документа:

      • sudo nano /var/www/html/info.php

      Введите в новый файл следующие строки: Это корректный код PHP, который будет возвращать информацию о вашем сервере:

      /var/www/html/info.php

      <?php
      phpinfo();
      

      После завершения редактирования сохраните и закройте файл.

      Теперь вы можете открыть эту страницу в браузере, указав в адресной строке доменное имя вашего сервера или публичный IP-адрес и добавив /info.php:

      http://your_server_domain_or_IP/info.php
      

      Вы увидите веб-страницу с информацией о вашем сервере, сгенерированную PHP:

      Страница PHP с информацией

      Если ваша страница выглядит таким образом, вам удалось успешно реализовать обработку PHP с помощью Nginx.

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

      Удалите файл:

      • sudo rm /var/www/html/info.php

      Теперь на вашем сервере Ubuntu 18.04 имеется полностью настроенный и работающий набор LEMP.

      Заключение

      Набор LEMP — это мощная платформа, позволяющая размещать и обслуживать на сервере практически любой сайт или приложение.

      Теперь можно выполнить ряд последующих шагов. Например, вы можете проверить защищенность соединений с вашим сервером. Для этого вы можете обеспечить безопасность установки Nginx с помощью Let’s Encrypt. Следуя указаниям настоящего руководства, вы получите бесплатный сертификат TLS/SSL для вашего сервера, который позволит ему обслуживать контент через протокол HTTPS.



      Source link

      Установка WordPress со стеком LEMP в Ubuntu 18.04


      Введение

      WordPress — это самая популярная CMS (система управления контентов) в сети Интернет. Она позволяет вам легко настраивать блоги и веб-сайты, устанавливаемые поверх отвечающего за за серверную часть MySQL с поддержкой PHP. WordPress обладает невероятной адаптивностью и позволяет в кратчайшие сроки создать и запустить веб-сайт. После настройки практически все административные функции доступны через пользовательский веб-интерфейс.

      В этом руководстве мы сфокусируемся главным образом на создании экземпляра WordPress на стеке LEMP (Linux, Nginx, MySQL и PHP) на сервере Ubuntu 18.04.

      Предварительные требования

      Для выполнения этого обучающего руководства вам потребуется доступ к серверу Ubuntu 18.04.

      Вам нужно будет выполнить следующие действия перед выполнением инструкций из данного руководства:

      • Создайте пользователя sudo на вашем сервере: мы будем выполнять шаги из этого руководства, используя пользователя без прав root с привилегиями sudo. Вы можете создать пользователя с привилегиями sudo, следуя указаниям нашего Руководства по начальной настройке сервера Ubuntu 18.04.
      • *Установите стек LEMP *: WordPress требуется веб-сервер, база данных и PHP для корректной работы. Настройка стека LEMP (Linux, Nginx, MySQL и PHP) позволяет удовлетворить все эти требования. Воспользуйтесь этим руководством для установки и настройки данного программного обеспечения.
      • Защитите ваш сайт с помощью SSL: WordPress обслуживает динамический контент и отвечает за аутентификацию и авторизацию пользователя. TLS/SSL — это технология, которая позволяет вам шифровать трафик с сайта для защиты вашего соединения. Способ настройки SSL зависит от того, есть ли у вашего сайта доменное имя.
        • Если у вас есть доменное имя… самым простым способом защиты вашего сайта будет использование Let’s Encrypt, который предоставляет бесплатные доверенные сертификаты. Воспользуйтесь нашим Руководством по Nginx для выполнения настройки.
        • Если у вас нет домена… и вы просто используете данную конфигурацию для тестирования или в личных целях, вы можете использовать самоподписанный сертификат. Данный способ обеспечивает аналогичный тип шифрования, но без подтверждения домена. Воспользуйтесь нашим руководством по самоподписанным сертификатам SSL для Nginx для настройки.

      Завершив выполнение действий по настройке, выполните вход на ваш сервер с помощью пользователя sudo и переходите к описанным ниже действиям.

      Шаг 1 — Создание базы данных MySQL и пользователя для WordPress

      Первый шаг, который мы выполним, будет подготовительным. WordPress использует MySQL для управления и хранения сайта, а также информации пользователя. Мы уже установили MySQL, но нам нужно создать базу данных и пользователя, которые будет использовать WordPress.

      Выполните вход в учетную запись MySQL с правами root (административную запись). Если MySQL настроен для использования плагина аутентификации auth_socket (по умолчанию), вы можете войти в административную учетную запись MySQL с помощью sudo:

      Если вы измените метод аутентификации на использование пароля для учетной записи MySQL с правами root, воспользуйтесь следующим форматом:

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

      Сначала нам нужно создать отдельную базу данных, которую сможет контролировать WordPress. Вы можете использовать любое название, но мы в этом руководстве будем использовать wordpress для простоты. Создайте базу данных для WordPress, введя следующую команду:

      • CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

      Примечание. Каждый оператор MySQL должен заканчиваться точкой с запятой (;). Убедитесь, что это правило не нарушено, если вы столкнетесь с какими-либо проблемами.

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

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

      • GRANT ALL ON wordpress.* TO 'wordpressuser'@'localhost' IDENTIFIED BY 'password';

      Теперь у вас есть база данных и учетная запись пользователя, которые созданы специально для WordPress. Нам нужно установить права, чтобы текущий экземпляр MySQL узнал о последних внесенных нами изменениях:

      Выйдите из MySQL, введя следующую команду:

      Сессия MySQL будет закрыта, а вы вернетесь к стандартной командной строке Linux.

      Шаг 2 — Установка дополнительных расширений PHP

      При настройке нашего стека LEMP нам требуется только минимальный набор расширений, чтобы реализовать коммуникацию PHP с MySQL. WordPress и многие плагины используют дополнительные расширения PHP.

      Мы можем загрузить и установить некоторые из самых популярных расширений PHP, которые будет использовать WordPress, введя следующую команду:

      • sudo apt update
      • sudo apt install php-curl php-gd php-intl php-mbstring php-soap php-xml php-xmlrpc php-zip

      Примечание. Каждый плагин WordPress имеет собственный набор требований. Для поддержки некоторых из них может потребоваться установка дополнительных пакетов PHP. Ознакомьтесь с документацией плагина для получения информации о требованиях к PHP. Если они доступны, их можно установить с помощью apt, как показано выше.

      Завершив установку расширений, перезапустите процесс PHP-FPM, чтобы запущенный процессор PHP мог использовать новые установленные функции:

      • sudo systemctl restart php7.2-fpm

      Теперь у нас на сервере есть все необходимые расширения PHP.

      Шаг 3 — Настройка Nginx

      Далее мы внесем несколько незначительных изменений в наши файлы серверного блока Nginx. Согласно руководствам по предварительным требованиям, у вас должен быть файл конфигурации для вашего сайта в директории /etc/nginx/sites-available/, настроенный на ответ на доменное имя или IP-адрес вашего сервера, и защищенный сертификат TLS/SSL. В качестве примера мы будем использовать /etc/apache2/sites-available/wordpress, но вы должны использовать путь к вашему файлу конфигурации при необходимости.

      Также мы будем использовать /var/www/wordpress в качестве корневой директории для нашей установки WordPress. Вы должны корневой веб-узел, указанный в вашей собственной конфигурации.

      Примечание. вы можете использовать конфигурацию /etc/nginx/sites-available/default по умолчанию (с /var/www/html в качестве корневого веб-узла). Это допустимо, если вы собираетесь размещать только один веб-сайт на этом сервере. Если нет, рекомендуется разделить необходимую конфигурацию на логические части, по одному файлу на каждый сайт.

      Чтобы начать, откройте файл серверного блока вашего сайта с привилегиями sudo:

      • sudo nano /etc/nginx/sites-available/wordpress

      Внутри основного блока server нам нужно добавить несколько блоков location.

      Начнем с создания блоков с точным совпадением расположения для запросов к /favicon.ico и /robots.txt, для которых мы не хотим регистрировать запросы.

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

      /etc/nginx/sites-available/wordpress

      server {
          . . .
      
          location = /favicon.ico { log_not_found off; access_log off; }
          location = /robots.txt { log_not_found off; access_log off; allow all; }
          location ~* .(css|gif|ico|jpeg|jpg|js|png)$ {
              expires max;
              log_not_found off;
          }
          . . .
      }
      

      Внутри существующего блока location / нам нужно изменить список try_files, чтобы вместо возвращения ошибки 404 по умолчанию, управление передавалось файлу index.php с аргументами запроса.

      Вы должны получить примерно следующий вывод:

      /etc/nginx/sites-available/wordpress

      server {
          . . .
          location / {
              #try_files $uri $uri/ =404;
              try_files $uri $uri/ /index.php$is_args$args;
          }
          . . .
      }
      

      После завершения редактирования сохраните и закройте файл.

      Теперь мы можем проверить нашу конфигурацию на наличие ошибок в синтаксисе, введя следующую команду:

      Если не будет выявлено ошибок, перезагрузите Nginx, введя следующую команду:

      • sudo systemctl reload nginx

      Теперь мы загрузим и настроим непосредственно WordPress.

      Шаг 4 — Загрузка WordPress

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

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

      • cd /tmp
      • curl -LO https://wordpress.org/latest.tar.gz

      Извлеките сжатый файл для создания структуры директории WordPress:

      Мы сразу же перенесем эти файлы в корневую директорию документов. Перед этим мы можем скопировать пример файла конфигурации и присвоить имя файла, который считывается WordPress:

      • cp /tmp/wordpress/wp-config-sample.php /tmp/wordpress/wp-config.php

      Теперь мы можем скопировать все содержимое директории в корневую директорию. Мы будем использовать флаг -a для гарантии того, что наши разрешения поддерживаются. Мы используем точку в конце директории источника, чтобы указать, что все содержимое директории должно быть скопировано, включая любые скрытые файлы.

      • sudo cp -a /tmp/wordpress/. /var/www/wordpress

      Теперь, когда наши файлы на месте, мы укажем принадлежность к пользователю и группе www-data. Именно этот пользователь и группа используются Nginx, а Nginx потребуется выполнять чтение и запись файлов WordPress для обслуживания веб-сайта и выполнения автоматических обновлений.

      • sudo chown -R www-data:www-data /var/www/wordpress

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

      Шаг 5 — Настройка файла конфигурации WordPress

      Далее нам нужно внести некоторые изменения в основной файл конфигурации WordPress.

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

      Чтобы получить безопасные значения из генератора секретных ключей WordPress, введите:

      • curl -s https://api.wordpress.org/secret-key/1.1/salt/

      Вы получите уникальные значения, которые будут выглядеть следующим образом:

      Предупреждение. Важно каждый раз запрашивать уникальные значения. НЕ копируйте значения, приведенные ниже!

      Output

      define('AUTH_KEY', '1jl/vqfs<XhdXoAPz9 DO NOT COPY THESE VALUES c_j{iwqD^<+c9.k<J@4H'); define('SECURE_AUTH_KEY', 'E2N-h2]Dcvp+aS/p7X DO NOT COPY THESE VALUES {Ka(f;rv?Pxf})CgLi-3'); define('LOGGED_IN_KEY', 'W(50,{W^,OPB%PB<JF DO NOT COPY THESE VALUES 2;y&,2m%3]R6DUth[;88'); define('NONCE_KEY', 'll,4UC)7ua+8<!4VM+ DO NOT COPY THESE VALUES #`DXF+[$atzM7 o^-C7g'); define('AUTH_SALT', 'koMrurzOA+|L_lG}kf DO NOT COPY THESE VALUES 07VC*Lj*lD&?3w!BT#-'); define('SECURE_AUTH_SALT', 'p32*p,]z%LZ+pAu:VY DO NOT COPY THESE VALUES C-?y+K0DK_+F|0h{!_xY'); define('LOGGED_IN_SALT', 'i^/G2W7!-1H2OQ+t$3 DO NOT COPY THESE VALUES t6**bRVFSD[Hi])-qS`|'); define('NONCE_SALT', 'Q6]U:K?j4L%Z]}h^q7 DO NOT COPY THESE VALUES 1% ^qUswWgn+6&xqHN&%');

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

      Теперь откройте файл конфигурации WordPress:

      • sudo nano /var/www/wordpress/wp-config.php

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

      /var/www/wordpress/wp-config.php

      . . .
      
      define('AUTH_KEY',         'put your unique phrase here');
      define('SECURE_AUTH_KEY',  'put your unique phrase here');
      define('LOGGED_IN_KEY',    'put your unique phrase here');
      define('NONCE_KEY',        'put your unique phrase here');
      define('AUTH_SALT',        'put your unique phrase here');
      define('SECURE_AUTH_SALT', 'put your unique phrase here');
      define('LOGGED_IN_SALT',   'put your unique phrase here');
      define('NONCE_SALT',       'put your unique phrase here');
      
      . . .
      

      Удалите эти строки и добавьте значения, которые вы скопировали из командной строки:

      /var/www/wordpress/wp-config.php

      . . .
      
      define('AUTH_KEY',         'VALUES COPIED FROM THE COMMAND LINE');
      define('SECURE_AUTH_KEY',  'VALUES COPIED FROM THE COMMAND LINE');
      define('LOGGED_IN_KEY',    'VALUES COPIED FROM THE COMMAND LINE');
      define('NONCE_KEY',        'VALUES COPIED FROM THE COMMAND LINE');
      define('AUTH_SALT',        'VALUES COPIED FROM THE COMMAND LINE');
      define('SECURE_AUTH_SALT', 'VALUES COPIED FROM THE COMMAND LINE');
      define('LOGGED_IN_SALT',   'VALUES COPIED FROM THE COMMAND LINE');
      define('NONCE_SALT',       'VALUES COPIED FROM THE COMMAND LINE');
      
      . . .
      

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

      Еще одно изменение, которое нам нужно внести, — это настройка метода, который WordPress должен использовать для записи данных в файловой системе. Поскольку мы предоставили веб-серверу разрешение на запись там, где ему потребуется, мы можем прямо установить для метода записи значение «прямая». Если бы мы не внесли это изменение в текущие настройки, это привело бы к тому, что при выполнении некоторых действий WordPress будет запрашивать данные учетной записи для FTP. Эта настройка может быть добавлена под настройками подключения базы данных или в любом другом месте в файле:

      /var/www/wordpress/wp-config.php

      . . .
      
      define('DB_NAME', 'wordpress');
      
      /** MySQL database username */
      define('DB_USER', 'wordpressuser');
      
      /** MySQL database password */
      define('DB_PASSWORD', 'password');
      
      . . .
      
      define('FS_METHOD', 'direct');
      

      Сохраните файл и закройте его после завершения.

      Шаг 6 — Завершение установки через веб-интерфейс

      Теперь, когда настройка сервера завершена, мы можем завершить установку через веб-интерфейс.

      В адресной строке браузера введите доменное имя или открытый IP-адрес вашего сервера:

      http://server_domain_or_IP
      

      Выберите язык, который вы хотите использовать:

      Выбор языка WordPress

      После этого вы должны попасть на главную страницу настройки.

      Выберите имя для вашего сайта WordPress и имя пользователя (не рекомендуется использовать имя «admin» или что-то подобное в целях безопасности). Надежный пароль создается автоматически. Сохраните этот пароль или выберите другой надежный пароль.

      Введите адрес электронной почты и укажите, хотите ли вы, чтобы поисковые машины индексировали ваш сайт:

      Настройка установки WordPress

      При нажатии далее вы перейдете на страницу входа:

      Запрос входа в WordPress

      После входа вы перейдете в панель управления WordPress:

      Запрос входа в WordPress

      Заключение

      WordPress установлен и готов к использованию! Ниже представлены некоторые общие шаги по выбору параметров для постоянных ссылок для ваших постов (см. Настройка > Постоянные ссылки) или выбора новой темы (см. Внешний вид > Темы). Если вы впервые работаете с WordPress, краткое изучите интерфейс для знакомства с вашей новой CMS.



      Source link