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

Руководство по серверу LAMP Ubuntu 16.04 (LTS) с Apache, PHP 7 и MySQL


LAMP — это сокращение от Linux, Apache, MySQL, PHP. В этом руководстве показано, как установить веб-сервер Apache на сервер Ubuntu 16.04 LTS (Xenial Xerus) с поддержкой PHP 7 (mod_php) и MySQL/MariaDB, а также как настроить SSL-сертификат с помощью Lets encrypt. Кроме того, я установлю PHPMyAdmin, чтобы упростить администрирование MySQL. Установка LAMP является идеальной основой для популярных систем CMS, таких как Joomla, Wordpress или Drupal.

Предварительное примечание

В этом руководстве я буду использовать имя хоста server1.example.com с IP-адресом 192.168.1.100. Эти настройки могут отличаться для вас, поэтому вам придется заменить их там, где это необходимо.

Я рекомендую использовать минимальную настройку сервера Ubuntu в качестве основы для руководства, это может быть образ виртуального или корневого сервера с минимальной установкой Ubuntu 16.04 от веб-хостинговой компании, или вы можете использовать наше минимальное руководство по серверу для установки сервера с нуля.

Я выполняю все шаги в этом руководстве с привилегиями root, поэтому убедитесь, что вы вошли в систему как root:

sudo su

1. Установка базы данных MySQL или MariaDB

В настоящее время доступны две широко используемые системы баз данных MySQL: классический сервер «MySQL», разработанный Oracle и доступный сейчас в версии 5.7, и ответвление MySQL под названием MariaDB, разработанное первоначальным разработчиком MySQL Монти Видениусом.

Я покажу вам, как установить обе альтернативы ниже. Просто следуйте либо главе 1.1, либо главе 1.2, но не обоим сразу. Я буду использовать MySQL 5.7 для образа виртуальной машины, который можно загрузить с Howtoforge.

1.1 Установите MySQL 5.7

Чтобы установить MySQL 5.7, выполните эту команду:

apt-get -y install mysql-server mysql-client

Пакеты mysql-server и mysql-client являются так называемыми метапакетами, они всегда устанавливают последнюю версию MySQL, доступную в Ubuntu. В настоящее время последней версией является MySQL 5.7.

Мы установили пароль root для MySQL уже во время установки, но я хотел бы удалить анонимного пользователя и тестовую базу данных из соображений безопасности. Для этого выполните приведенную ниже команду mysql_secure_installation.

mysql_secure_installation

Вам будут заданы следующие вопросы:

Securing the MySQL server deployment.
Enter password for user root: <-- Enter the MySQL root password
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:
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : <-- Choose 'y' here if you like to enable the password validation, I don't need that function, so I choose 'n' here.
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : <-- y
Success.

Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : <-- y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : <-- y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : <-- y
Success.
All done!

Теперь установка MySQL защищена.

1.2 Установите MariaDB 10

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

apt-get -y install mariadb-server mariadb-client

Теперь мы устанавливаем пароль root для MariaDB.

mysql_secure_installation

Вам будут заданы следующие вопросы:

Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y

Проверьте вход в MariaDB с помощью \команды mysql\

mysql -u root -p

и введите корневой пароль MariaDB, который вы установили выше. Результат должен быть похож на скриншот ниже:

Чтобы выйти из оболочки MariaDB, введите команду «выход» и нажмите клавишу ввода.

2. Установите веб-сервер Apache

Apache 2 доступен в виде пакета Ubuntu, поэтому мы можем установить его следующим образом:

apt-get -y install apache2

Теперь направьте свой браузер на http://192.168.1.100, и вы должны увидеть страницу Apache2 по умолчанию (это работает!):

Корень документа виртуального хоста apache по умолчанию — /var/www/html в Ubuntu, а основной файл конфигурации — /etc/apache2/apache2.conf. Система конфигурации полностью задокументирована в /usr/share/doc/apache2/README.Debian.gz.

3. Установите PHP 7

Мы можем установить PHP 7 и модуль Apache PHP следующим образом:

apt-get -y install php7.0 libapache2-mod-php7.0

Затем перезапустите Апач:

systemctl restart apache2

4. Протестируйте PHP и получите подробную информацию о вашей установке PHP

Корень документа веб-сайта по умолчанию — /var/www/html. Теперь мы создадим небольшой файл PHP (info.php) в этом каталоге и вызовем его в браузере. Файл будет отображать множество полезных сведений о нашей установке PHP, например, установленную версию PHP.

nano /var/www/html/info.php
<?php
phpinfo();
?>

Затем измените владельца файла info.php на пользователя и группу www-data.

chown www-data:www-data /var/www/html/info.php

Теперь мы вызываем этот файл в браузере (например, http://192.168.1.100/info.php):

Как видите, PHP 7.0 работает и работает через обработчик Apache 2.0, как показано в строке API сервера. Если вы прокрутите дальше вниз, вы увидите все модули, которые уже включены в PHP5. MySQL там не указан, что означает, что у нас пока нет поддержки MySQL/MariaDB в PHP.

5. Получите поддержку MySQL/MariaDB в PHP

Чтобы получить поддержку MySQL в PHP, мы можем установить пакет php7.0-mysql. Это хорошая идея, чтобы установить некоторые другие модули PHP, а также они могут вам понадобиться для ваших приложений. Вы можете искать доступные модули PHP следующим образом:

apt-cache search php7.0

Выберите те, которые вам нужны, и установите их следующим образом:

apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache  php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext

Теперь перезапустите Apache2:

systemctl restart apache2

PHP 7 теперь поддерживает MySQL/MariaDB, как показано выше в phpinfo().

6. Установите кеш PHP Opcache + APCu для ускорения PHP

PHP 7 поставляется со встроенным кэшером кода операции для кэширования и оптимизации промежуточного кода PHP, он называется opcache и доступен в пакете php7.0-opcache. Настоятельно рекомендуется установить Opcache для ускорения PHP-страницы. Помимо opcache, я установлю APCu, который является оболочкой совместимости для opcache, чтобы обеспечить функции кеша APC, часто используемой системы кэширования в версиях PHP 5.x, и многие системы CMS все еще используют ее.

Opcache и APCu можно установить следующим образом:

apt-get -y install php7.0-opcache php-apcu

Не беспокойтесь, если он покажет, что Opcache уже установлен.

Теперь перезапустите Apache:

systemctl restart apache2

Теперь перезагрузите http://192.168.1.100/info.php в браузере и снова прокрутите вниз до раздела модулей. Теперь вы должны найти там много новых модулей:

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

rm -f /var/www/html/info.php

7. Включите веб-сайт SSL в apache.

SSL/TLS — это уровень безопасности для шифрования соединения между веб-браузером и вашим сервером. Сегодня большинство веб-браузеров начинают показывать сайты как небезопасные, когда соединение между сервером и веб-браузером не зашифровано с помощью SSL. В этой главе я покажу вам, как защитить ваш сайт с помощью SSL.

Выполните следующие команды на своем сервере, чтобы включить поддержку SSL (https://). Бегать:

a2enmod ssl
a2ensite default-ssl

который включает модуль SSL и добавляет символическую ссылку в папку /etc/apache2/sites-enabled на файл /etc/apache2/sites-available/default-ssl.conf, чтобы включить его в активную конфигурацию apache. Затем перезапустите apache, чтобы включить новую конфигурацию:

systemctl restart apache2

Теперь проверьте соединение SSL, открыв https://192.168.1.100 в веб-браузере.

Вы получите предупреждение SSL, поскольку сертификат SSL сервера является «самозаверяющим» сертификатом SSL, это означает, что браузер не доверяет этому сертификату по умолчанию, и вы должны сначала принять предупреждение системы безопасности. Приняв предупреждение, вы увидите страницу apache по умолчанию.

Закрытый «Зеленый замок» перед URL-адресом в браузере показывает, что соединение зашифровано.

Есть два способа избавиться от предупреждения SSL: либо заменить самозаверяющий SSL-сертификат /etc/ssl/certs/ssl-cert-snakeoil.pem на официально подписанный SSL-сертификат, который вы покупаете в центре SSL, либо вы получаете бесплатный SSL-сертификат от Lets encrypt, о котором я расскажу в главе 8.

8. Получите бесплатный SSL-сертификат от Lets Encrypt

Первым шагом для защиты веб-сайта с помощью SSL-сертификата Lets Encrypt является установка пакета python-letsencrypt-apache. Выполните следующую команду:

apt-get -y install python-letsencrypt-apache

На следующем шаге мы запросим SSL-сертификат у Lets Encrypt, во время этого процесса сервер Lets Encrypt пытается подключиться к вашему серверу через доменное имя, которое вы предоставляете команде letsencrypt. Важно, чтобы это доменное имя уже указывало на ваш сервер в DNS, чтобы веб-сайт был доступен по его доменному имени на порту 80 (http). Если веб-сайт недоступен из Интернета, создание SSL-сертификата Lets Encrypt завершится ошибкой.

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

nano /etc/apache2/sites-available/000-default.conf

и добавьте строку:

ServerName example.com

Прямо под строкой DocumentRoot. Замените example.com на доменное имя вашего собственного веб-сайта.

Затем создайте SSL-сертификат с помощью этой команды:

letsencrypt --apache -d example.com

Снова замените example.com своим доменным именем. Команда запустит мастер, который задаст вам несколько вопросов.

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

Примите положения и условия центра SSL Lets Encrypt.

Выберите, хотите ли вы автоматически перенаправлять запросы без SSL на https://. Я выберу здесь «да», чтобы избежать проблем с дублированием содержимого, когда веб-сайт доступен в версиях http:// и https://.

SSL-сертификат успешно выпущен.

Когда вы сейчас заходите на веб-сайт через браузер, вы автоматически перенаправляетесь на SSL, а зеленый замок перед строкой URL-адреса в браузере показывает, что сейчас мы используем доверенный сертификат SSL.

8.1 Позволяет зашифровать автоматическое продление

SSL-сертификаты Lets Encrypt действительны только в течение короткого периода в 80 дней. Поэтому сейчас мы настроим cronjob для автоматического обновления SSL-сертификата при необходимости. Команда letsencrypt возобновить.

Настройте cronjob для автоматического продления LE. Бегать:

crontab -e

чтобы открыть корневой crontab в редакторе. Вставьте следующую строку в конец файла:

0 1 * * * /usr/bin/letsencrypt renew &> /dev/null

сохраните файл, это активирует cronjob. Этот cronjob будет вызывать команду обновления Lets Encrypt каждую ночь в час ночи. Команда будет обновлять SSL-сертификат только при необходимости (за 30 дней до истечения срока его действия), нет проблем запускать его каждую ночь.

9. Установите phpMyAdmin

phpMyAdmin — это веб-интерфейс, через который вы можете управлять своими базами данных MySQL. Это хорошая идея, чтобы установить его:

apt-get -y install phpmyadmin

ВАЖНО: Установщик apt задаст вам несколько вопросов, один из них — выбрать тип веб-сервера. Распространенной ошибкой является то, что тип веб-сервера просто выделен, но не выбран. Чтобы выбрать элемент в подходящем меню, вы должны нажать пробел на клавиатуре после того, как вы перешли к элементу с помощью табуляции или клавиш курсора. Просто выделить недостаточно!

Вы увидите следующие вопросы:

Web server to configure automatically: <-- Select the option: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter, apt will create a random password automatically.

9.1 Корневой доступ к PHPMyAdmin с помощью MariaDB

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

MariaDB включает плагин под названием \unix_socket\ для пользователя root по умолчанию, этот плагин предотвращает, чтобы пользователь root мог войти в PHPMyAdmin и чтобы TCP-соединения с MySQL работали для пользователя root. Чтобы получить пользователя с привилегиями для создания других пользователей и баз данных в PHPMyAdmin, я создам нового пользователя MySQL с именем «admin» с теми же привилегиями, что и у пользователя root.

Войдите в базу данных MySQL как пользователь root в оболочке:

mysql -u root

Создайте нового пользователя с именем «admin» и паролем «howtoforge». Замените пароль «howtoforge» безопасным паролем в приведенных ниже командах!

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'howtoforge';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

После этого вы можете получить доступ к phpMyAdmin по адресу http://192.168.1.100/phpmyadmin/:

10 Загрузка образа виртуальной машины из этого руководства

Это руководство доступно в виде готового к использованию образа виртуальной машины в формате ovf/ova, который совместим с VMWare и Virtualbox. Образ виртуальной машины использует следующие данные для входа:

SSH/вход в оболочку

Имя пользователя:admin
Пароль:howtoforge

У этого пользователя есть права sudo.

Вход в MySQL

Имя пользователя: root
Пароль: howtoforge

IP виртуальной машины 192.168.1.100, его можно изменить в файле /etc/network/interfaces. Пожалуйста, измените все указанные выше пароли, чтобы защитить виртуальную машину.

11 ссылок

  • Apache: http://httpd.apache.org/
  • PHP: http://www.php.net/
  • MySQL: http://www.mysql.com/
  • MariaDB: https://mariadb.com/
  • Убунту: http://www.ubuntu.com/
  • phpMyAdmin: http://www.phpmyadmin.net/