One place for hosting & domains

      Установка 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

      Como Usar o Ansible para Instalar e Configurar o LEMP no Ubuntu 18.04


      Introdução

      A automação de servidores desempenha agora um papel essencial na administração de sistemas, devido à natureza descartável dos ambientes das aplicações modernas. Ferramentas de Gerenciamento de configuração tais como o Ansible são normalmente usadas para otimizar o processo de automatização da configuração do servidor, estabelecendo procedimentos padrão para novos servidores e reduzindo também o erro humano associado às configurações manuais.

      O Ansible oferece uma arquitetura simples que não requer a instalação de software especial nos nodes. Ele também fornece um conjunto robusto de recursos e módulos internos que facilitam a criação de scripts de automação.

      Este guia explica como usar o Ansible para automatizar os passos contidos em nosso guia Como instalar o Linux, o Nginx, o MySQL, o PHP (pilha LEMP) no Ubuntu 18.04. A pilha de software LEMP é um grupo de software que pode ser usado para servir páginas web dinâmicas e aplicações web. Este é um acrônimo que descreve um sistema operacional Linux, com um servidor Nginx (pronunciado como “Engine-X”). Os dados de back-end são armazenados no banco de dados MySQL e o processamento dinâmico é tratado pelo PHP.

      Pré-requisitos

      Para executar a configuração automatizada fornecida pelo playbook que estamos discutindo neste guia, você precisará de:

      Antes de continuar, primeiro você precisa garantir que o node de controle do Ansible possa conectar e executar comandos no(s) host(s) Ansible. Para um teste de conexão, verifique o passo 3 de Como instalar e configurar o Ansible no Ubuntu 18.04.

      O que Este Playbook Faz?

      Este Playbook Ansible fornece uma alternativa à execução manual do procedimento descrito em nosso guia sobre Como instalar o Linux, o Nginx, o MySQL, o PHP (pilha LEMP) no Ubuntu 18.04.

      A execução deste playbook executará as seguintes ações em seus hosts Ansible:

      1. Instalar o aptitude, que é preferido pelo Ansible como uma alternativa ao gerenciador de pacotes apt.
      2. Instalar os pacotes necessários do LEMP.
      3. Configurar o arquivo de configuração do Nginx usando o modelo fornecido.
      4. Habilitar a nova configuração do Nginx e desabilitar a configuração padrão.
      5. Definir a senha para o usuário root do MySQL.
      6. Remover contas anônimas do MySQL e o banco de dados de teste.
      7. Configurar o UFW para permitir o tráfego HTTP na porta configurada (80 por padrão).
      8. Configurar um script de teste PHP usando o modelo fornecido.

      Quando o playbook terminar de ser executado, você terá um ambiente web PHP em execução no Nginx, com base nas opções que você definiu nas variáveis de configuração.

      Como Usar Este Playbook

      A primeira coisa que precisamos fazer é obter o playbook do LEMP e suas dependências no repositório do-community/ansible-playbooks. Precisamos clonar esse repositório em uma pasta local dentro do Node de Controle Ansible.

      Caso você tenha clonado este repositório antes, enquanto seguia um guia diferente, acesse sua cópia existente do ansible-playbooks e execute um comando git pull para garantir que você tenha conteúdo atualizado:

      • cd ~/ansible-playbooks
      • git pull

      Se esta é sua primeira vez usando o repositório do-community/ansible-playbooks, você deve começar clonando o repositório na sua pasta home com:

      • cd ~
      • git clone https://github.com/do-community/ansible-playbooks.git
      • cd ansible-playbooks

      Os arquivos em que estamos interessados estão localizados dentro da pasta lemp_ubuntu1804, que possui a seguinte estrutura:

      lemp_ubuntu1804
      ├── files
      │   ├── info.php.j2
      │   └── nginx.conf.j2
      ├── vars
      │   └── default.yml
      ├── playbook.yml
      └── readme.md
      

      Aqui está o que cada um desses arquivos representa:

      • files/info.php.j2: Arquivo de modelo para configurar uma página de teste PHP na raiz do servidor web.
      • files/nginx.conf.j2: Arquivo de modelo para configurar o servidor Nginx.
      • vars/default.yml: Arquivo de variáveis para personalizar as configurações do playbook.
      • playbook.yml: O arquivo do playbook, contendo as tarefas a serem executadas nos servidores remotos.
      • readme.md: Um arquivo de texto contendo informações sobre este playbook.

      Editaremos o arquivo de variáveis do playbook para personalizar as configurações do MySQL e do Nginx. Acesse o diretório lemp_ubuntu1804 e abra o arquivo vars/default.yml usando o editor de linha de comando de sua escolha:

      • cd lemp_ubuntu1804
      • nano vars/default.yml

      Este arquivo contém algumas variáveis que requerem sua atenção:

      vars/default.yml

      ---
      mysql_root_password: "mysql_root_password"
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      

      A lista a seguir contém uma breve explicação de cada uma dessas variáveis e como você pode alterá-las:

      • mysql_root_password: A senha desejada para a conta root do MySQL.
      • http_host: O nome do host ou o endereço IP para o servidor web.
      • http_conf: O nome do arquivo de configuração a ser criado dentro de /etc/nginx/sites-available, normalmente definido como o nome do host ou da aplicação para facilitar a identificação.
      • http_port: A porta que o Nginx utilizará para servir este site. Esta é a porta 80 por padrão, mas se você deseja servir seu site ou aplicação em uma porta diferente, digite-a aqui.

      Quando terminar de atualizar as variáveis dentro de vars/default.yml, salve e feche este arquivo. Se você usou nano, faça isso pressionando CTRL + X, Y, e, em seguida, ENTER.

      Agora você está pronto para executar este playbook em um ou mais servidores. A maioria dos playbooks está configurada para ser executada em todos os servidores do seu inventário, por padrão. Podemos usar a flag -l para garantir que apenas um subconjunto de servidores ou um único servidor seja afetado pelo playbook. Também podemos usar a flag -u para especificar qual usuário no servidor remoto que estamos usando para conectar e executar os comandos do playbook nos hosts remotos.

      Para executar o playbook apenas no servidor server1, conectando-se como sammy, você pode usar o seguinte comando:

      • ansible-playbook playbook.yml -l server1 -u sammy

      Você obterá uma saída semelhante a esta:

      Output

      PLAY [all] ***************************************************************************************************************************** TASK [Gathering Facts] ***************************************************************************************************************** ok: [server1] TASK [Install Prerequisites] *********************************************************************************************************** changed: [server1] => (item=aptitude) ... TASK [UFW - Allow HTTP on port 80] ***************************************************************************************************** changed: [server1] TASK [Sets Up PHP Info Page] *********************************************************************************************************** changed: [server1] RUNNING HANDLER [Reload Nginx] ********************************************************************************************************* changed: [server1] PLAY RECAP ***************************************************************************************************************************** server1 : ok=12 changed=9 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

      Nota: Para obter mais informações sobre como executar os playbooks Ansible, consulte nosso guia de referência Ansible Cheat Sheet Guide.

      Quando o playbook terminar de ser executado, abra seu navegador web e acesse o host ou o endereço IP do servidor, conforme configurado nas variáveis do playbook, seguido de /info.php:

      http://host_ou_ip_do_servidor/info.php
      

      Você verá uma página como esta:

      phpinfo page

      Como esta página contém informações confidenciais sobre o seu ambiente PHP, é recomendável que você a remova do servidor executando um comando rm -f /var/www/info.php após concluir a configuração.

      O Conteúdo do Playbook

      Você pode encontrar a configuração do servidor LEMP apresentada neste tutorial na página lemp_ubuntu1804 dentro do repositório DigitalOcean Community Playbooks. Para copiar ou baixar o conteúdo do script diretamente, clique no botão Raw na parte superior de cada script.

      O conteúdo completo do playbook, bem como os arquivos associados, também estão incluídos aqui para sua conveniência.

      vars/default.yml

      O arquivo de variáveis default.yml contém valores que serão usados nas tarefas do playbook, como a senha da conta root do MySQL e o nome do domínio a ser configurado no Nginx.

      vars/default.yml

      ---
      mysql_root_password: "mysql_root_password"
      http_host: "your_domain"
      http_conf: "your_domain.conf"
      http_port: "80"
      

      files/nginx.conf.j2

      O arquivo nginx.conf.j2 é um template ou modelo Jinja 2 que configura o servidor web Nginx. As variáveis usadas neste modelo são definidas no arquivo de variáveis vars/default.yml.

      files/nginx.conf.j2

      server {
             listen {{ http_port }};
             root /var/www/html;
             index index.php index.html index.htm index.nginx-debian.html;
             server_name {{ http_host }};
      
             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;
             }
      }
      
      

      files/info.php.j2

      O arquivo info.php.j2 é outro modelo Jinja, usado para configurar um script PHP de teste na raiz de documentos do servidor LEMP recém-configurado.

      files/info.php.j2

      <?php
      phpinfo();
      
      

      playbook.yml

      O arquivo playbook.yml é onde todas as tarefas desta configuração são definidas. Ele começa definindo o grupo de servidores que deve ser o alvo dessa configuração (all), após o qual ele usa become: true para definir que as tarefas devem ser executadas com escalação de privilégios (sudo) por padrão. Em seguida, inclui o arquivo de variáveis vars/default.yml para carregar as opções de configuração.

      playbook.yml

      ---
      - hosts: all
        become: true
        vars_files:
         - vars/default.yml
      
       tasks:
         - name: Install Prerequisites
           apt: name={{ item }} update_cache=yes state=latest force_apt_get=yes
           loop: [ 'aptitude' ]
      
         - name: Install LEMP Packages
           apt: name={{ item }} update_cache=yes state=latest
           loop: [ 'nginx', 'mysql-server', 'python3-pymysql', 'php-fpm', 'php-mysql' ]
      
      # Nginx Configuration
      
         - name: Sets Nginx conf file
           template:
             src: "files/nginx.conf.j2"
             dest: "/etc/nginx/sites-available/{{ http_conf }}"
      
         - name: Enables new site
           file:
             src: "/etc/nginx/sites-available/{{ http_conf }}"
             dest: "/etc/nginx/sites-enabled/{{ http_conf }}"
             state: link
           notify: Reload Nginx
      
         - name: Removes "default" site
           file:
             path: "/etc/nginx/sites-enabled/default"
             state: absent
           notify: Reload Nginx
      
      # MySQL Configuration
      
         - name: Sets the root password
           mysql_user:
             name: root
             password: "{{ mysql_root_password }}"
             login_unix_socket: /var/run/mysqld/mysqld.sock
      
         - name: Removes all anonymous user accounts
           mysql_user:
             name: ''
             host_all: yes
             state: absent
             login_user: root
             login_password: "{{ mysql_root_password }}"
      
         - name: Removes the MySQL test database
           mysql_db:
             name: test
             state: absent
             login_user: root
             login_password: "{{ mysql_root_password }}"
      
      # UFW Configuration
      
         - name: "UFW - Allow HTTP on port {{ http_port }}"
           ufw:
             rule: allow
             port: "{{ http_port }}"
             proto: tcp
      
      # Sets Up PHP Info Page
      
         - name: Sets Up PHP Info Page
           template:
             src: "files/info.php.j2"
             dest: "/var/www/html/info.php"
      
      # Handlers
      
       handlers:
         - name: Reload Nginx
           service:
             name: nginx
             state: reloaded
      
         - name: Restart Nginx
           service:
             name: nginx
             state: restarted
      
      

      Sinta-se à vontade para modificar este playbook para melhor atender às suas necessidades individuais dentro do seu próprio fluxo de trabalho.

      Conclusão

      Neste guia, usamos o Ansible para automatizar o processo de instalação e configuração de um ambiente LEMP em um servidor remoto. Como cada pessoa normalmente tem necessidades diferentes ao trabalhar com bancos de dados e usuários do MySQL, recomendamos que você verifique a documentação oficial do Ansible para obter mais informações e casos de uso do módulo Ansible mysql_user.

      Se você deseja incluir outras tarefas neste playbook para personalizar ainda mais sua configuração inicial de servidor, consulte nosso guia introdutório de Ansible em Configuration Management 101: Writing Ansible Playbooks.



      Source link