В данном руководстве рассматривается установка веб-сервера Apache, MySQL и PHP на сервере под управлением Ubuntu Linux.
Связку Linux, Apache, MySQL и PHP кратко называют LAMP. Иногда используют понятие LAMP-стек или набор LAMP.
Набор LAMP один из первых компонентов, который обычно устанавливается на сервере для развертывания Web-проектов.
Мы предполагаем, что операционная система уже установлена на вашем сервере и вы имеете к ней удаленный доступ по SSH. Если вы используете VPS-сервер, то выбор используемой операционной системы вы, скорее всего, выполняли при оформлении заказа у вашего хостинг-провайдера.
В руководстве рассматривается установка LAMP в Ubuntu 18.04. Данное руководство затрагивает только базовую установку LAMP. Вопросы более глубокого конфигурирования (настройки) выходят за рамки данной статьи.
Все действия протестированы на настоящем VPS-сервере, предоставленным Veesp.com. Мы производили настройку на сервере в конфигурации SSD2 — это максимально сбалансированный тариф, который к тому же обладает безлимитным трафиком.
Откройте терминал (командную строку)
Все действия, описанные ниже, мы будем выполнять из командной строки, подключившись к серверу по SSH.
- Если вы работаете в Linux (например, в Ubuntu или любом другой дистрибутиве), то вам нужно открыть терминал. Иногда это можно сделать, нажав сочетание клавиш Ctrl+Alt+T или найти в меню запуска приложений программу Терминал (Эмулятор терминала).
- Если вы работаете в MacOS, то запустите программу Терминал из Лаунчера (из Launchpad).
- Если вы работаете в Windows, то можно использовать штатную программу cmd.exe. Нажмите Win+r, в отрывшемся окне впишите «cmd» (без кавычек) и нажмите ОК. Вы также можете воспользоваться бесплатной программой PuTTY, которая позволяет выполнять подключение по SSH.
Доступ по SSH
Чтобы подключиться по SSH, вам нужно знать IP-адрес вашего сервера и пароль root-пользователя. Если вы пользуетесь услугами хостинг-провайдера и используете VPS-сервер, то обычно эти данные высылаются вам по электронной почте при регистрации.
Для подключения по SSH нужно выполнить команду вида: ssh имяпользователя@ip.адрес.сервера
ssh root@192.168.123.123
При подключении может появиться сообщение: «The authenticity of host ’...’ can’t be established. ... Are you sure you want to continue connecting (yes/no)?» Соглашаемся: вводим y и нажимаем Enter.
Если на каком-то этапе вам нужно будет завершить работу по SSH, то используйте команду: exit
Обновляем пакеты
Перед началом работы рекомендуется обновить систему. Для этого выполняем команды:
sudo apt update
sudo apt upgrade
После обновления перезагрузите систему, выполнив команду.
reboot
Перезагрузка обычно занимает несколько секунд, поэтому нужно подождать прежде чем вы сможете снова подключиться по SSH.
Создание пользователя
Сейчас мы подключились к серверу от имени root-пользователя. Так как root-пользователь обладает максимальными привилегиями в системе, работать от его имени небезопасно. Рекомендуется создать обычного пользователя, от имени которого выполнять все действия (используя sudo).
Создадим пользователя с именем pingvinus (вместо pingvinus укажите любое желаемое имя):
adduser pingvinus
Вводим пароль для пользователя. Рекомендуется использовать сложный пароль.
Затем появится запрос на ввод дополнительной информации о пользователе. Вы можете ничего не вводить, а просто нажимать Enter на каждый запрос.
Changing the user information for username
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n]
Теперь необходимо разрешить пользователю использовать sudo, чтобы позволить ему выполнять команды с root-привилегиями. Для этого нужно добавить пользователя в группу sudo. Выполняем команду:
usermod -aG sudo pingvinus
Далее мы настроим файрволл UFW. Настройку файрвола можно производить от пользователя root. После настройки можно будет войти уже под пользователем, которого вы только что создали.
Настройка файрвола UFW
Файрвол UFW (брэндмауэр) это функциональный и в то же время очень простой в настройке файрвол, который позволяет разрешать или ограничивать доступ к вашему серверу.
Если UFW не установлен, то вы можете установить его из штатных репозиториев Ubuntu, выполнив команду:
sudo apt install ufw
Некоторые приложения создают для UFW готовые профили с настройками. Это очень удобно, так как пользователю достаточно всего лишь включить нужный профиль.
Прежде, чем включить файрвол UFW, необходимо настроить его так, чтобы он разрешал использование SSH, иначе после включения мы не сможем подключиться по SSH.
Выведем список доступных профилей:
$ ufw app list
Available applications:
OpenSSH
Нам нужно включить профиль OpenSSH. Для этого выполняем команду:
$ ufw allow OpenSSH
Rules updated
Rules updated (v6)
Включаем файрвол:
ufw enable
Скорее всего, появится следующее предупреждение, информирующее о том, что SSH-соединение может прерваться. Но так как мы разрешили использование SSH, то вводим y и нажимаем Enter.
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Если все прошло успешно, то вы по прежнему должны будете иметь SSH доступ. Выведем текущий статус UFW:
$ ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Переключение на пользователя
Мы выполнили необходимый минимум подготовительных работ и можно перейти к установке компонентов LAMP.
Рекомендуем на данном шаге переключиться на пользователя, чтобы не работать от имени пользователя root.
Чтобы переключиться на пользователя, которого вы создали, выполняем команду:
su --login pingvinus
Дальнейшую работу будем выполнять уже от имени этого пользователя, поэтому команды ниже запускаются под sudo.
Установка Apache
Чтобы установить веб-сервер Apache достаточно установить один пакет — apache2. Для установки выполняем команду:
sudo apt install apache2
После установки веб-сервер Apache автоматически запускается.
Разрешение HTTP(S) трафика в UFW
Если сейчас вы попробуете получить доступ к вашему серверу, введя IP-адрес сервера в браузере, то получите ошибку, так как UFW блокирует HTTP(S) трафик. Необходимо разрешить HTTP (порт 80) и HTTPS (порт 443) трафик в настройках UFW.
Apache во время установки создал для UFW необходимые профили. Выведем список доступных профилей:
$ sudo ufw app list
Available applications:
Apache
Apache Full
Apache Secure
OpenSSH
Как вы можете видеть, для Apache доступно 3 профиля. Мы будем использовать профиль Apache Full, так как он разрешает HTTP и HTTPS трафик. Профиль с именем Apache разрешает только HTTP трафик, а Apache Secure только HTTPS трафик.
Можно просмотреть настройки профиля, выполнив команду:
$ sudo ufw app info "Apache Full"
Profile: Apache Full
Title: Web Server (HTTP,HTTPS)
Description: Apache v2 is the next generation of the omnipresent Apache web
server.
Ports:
80,443/tcp
Включаем профиль Apache Full в UFW для входящего трафика:
sudo ufw allow in "Apache Full"
Посмотрим статус:
sudo ufw status
Проверяем работу Apache
Мы установили Apache и разрешили использование входящего HTTP(S) трафика. Теперь можно открыть веб-браузер и набрать в адресной строке публичный IP адрес вашего сервера. То есть в строке ввода адреса перейти на: http://ip.адрес.вашего.сервера (например, http://77.555.123.123).
Должна открыться тестовая страница Apache с некоторой полезной информацией. Если страница открылась, значит Apache работает успешно.
Можно проверить текущий статус веб-сервера Apache. Для этого выполняем команду:
$ systemctl status apache2
● apache2.service - The Apache HTTP Server
Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: ...
Drop-In: /lib/systemd/system/apache2.service.d
└─apache2-systemd.conf
Active: active (running) since Thu 2019-05-16 14:24:26 MSK; 46min ago
Main PID: 2281 (apache2)
Tasks: 55 (limit: 1109)
CGroup: /system.slice/apache2.service
├─2281 /usr/sbin/apache2 -k start
├─2283 /usr/sbin/apache2 -k start
└─2284 /usr/sbin/apache2 -k start
May 16 14:24:26 pingvinusru systemd[1]: Starting The Apache HTTP Server...
May 16 14:24:26 pingvinusru apachectl[2268]: AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using ...
May 16 14:24:26 pingvinusru systemd[1]: Started The Apache HTTP Server.
Нажмите клавишу q, чтобы закрыть просмотр статуса.
Установка MySQL
Выполним установку MySQL. Выполняем команду:
sudo apt install mysql-server
Проверим статус MySQL сервера:
$ service mysql status
status
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: en...
Active: active (running) since Thu 2019-05-16 15:36:30 MSK; 9min ago
Main PID: 3734 (mysqld)
Tasks: 27 (limit: 1109)
CGroup: /system.slice/mysql.service
└─3734 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid
May 16 15:36:30 pingvinusru systemd[1]: Starting MySQL Community Server...
May 16 15:36:30 pingvinusru systemd[1]: Started MySQL Community Server.
Безопасность MySQL
Воспользуемся скриптом mysql_secure_installation, который позволяет быстро выполнить некоторые важные настройки MySQL, касающиеся безопасности. Вам будет предложено ответить на несколько вопросов или ввести определенные данные.
Запуск скрипта mysql_secure_installation
Рассмотрим, процесс работы скрипта mysql_secure_installation.
Запускаем скрипт:
sudo mysql_secure_installation
Плагин VALIDATE 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?
В первую очередь предлагается включить плагин «VALIDATE PASSWORD». Данный плагин используется для того, чтобы не позволять создавать простые пароли для пользователей MySQL. Если вам важна безопасность, то рекомендуется включить этот плагин. Вводим y и нажимаем Enter.
Уровень сложности для паролей MySQL
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: 2
Если вы включили плагин «VALIDATE PASSWORD», то далее необходимо установить уровень сложности паролей, который будет использоваться для MySQL:
- 0 — позволить использование простых паролей,
- 1 — позволить только пароли средней сложности (разный регистр символов, наличие цифр и специальных символов),
- 2 — позволить только сложные пароли (то же, что и предыдущий вариант, но с использованием словаря).
Вводим желаемую цифру (в нашем примере вводим 1) и нажимаем Enter.
Пароль root
Please set the password for root here.
Появится запрос на ввод пароля для root-пользователя MySQL. Данный пароль используется для учетной записи root в MySQL. Не путайте его с пользователем root вашей системы Ubuntu. Введите желаемый пароль.
После ввода пароля появится сообщение с указанием сложности вашего пароля по стобалльной шкале.
Estimated strength of the password: 50
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : Y
Если вас все устраивает, вводим y и нажимаем Enter. Если нет, то вводим n, нажимаем Enter, и задаем другой пароль.
Запрет анонимного доступа
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) :
Появится предложение удалить анонимный доступ к MySQL. Он используется только в тестовых целях, поэтому на работающем сервере его нужно удалить. Вводим y и нажимаем Enter.
Запрет удаленного входа учетной записью root в MySQL
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) :
По умолчанию root-пользователь может получить удаленный доступ к MySQL. Для увеличения безопасности рекомендуется запретить удаленный доступ root-пользователя к MySQL. Вводим y и нажимаем Enter.
Удаление тестовой базы данных
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) :
MySQL устанавливается с тестовой базой данных «test», которая используется только в целях тестирования. Рекомендуется удалить ее. Вводим y и нажимаем Enter.
Применение настроек
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 и нажимаем Enter.
В результате получим сообщение:
Success.
All done!
Установка PHP
Выполним установку PHP. Чтобы установить поддержку PHP достаточно установить пакет php. Помимо этого мы установим пакеты libapache2-mod-php и php-mysql. Это модули PHP для веб-сервера Apache и MySQL, соответственно. Выполняем установку:
sudo apt install php libapache2-mod-php php-mysql
После установки можно проверить версию PHP, выполнив команду:
php -v
Установка дополнительных модулей PHP
Дополнительные модули (расширения) для PHP можно устанавливать по мере надобности. Модули устанавливаются путем установки пакетов с именами php-имямодуля
Например, установим PHP-модули GD, CURL, mbstring и JSON:
sudo apt install php-gd php-curl php-mbstring php-json
Чтобы просмотреть список установленных модулей выполните команду:
php -m
Проверка работы PHP
Теперь проверим, что PHP успешно работает с веб-сервером Apache. Для этого мы создадим файл test.php, в котором выполним некоторый PHP код. Файл мы разместим в директории /var/www/html
Директория /var/www/html используется веб-сервером Apache по умолчанию для сайта (хоста), который доступен по IP-адресу вашего сервера. То есть, когда вы набираете в браузере адрес http://ip.адрес.вашего.сервера, то Apache обращается к каталогу /var/www/html
Воспользуемся консольным редактором nano. Скорее всего он уже установлен на вашем сервере. Если нет, то для установки выполните команду:
sudo apt install nano
Создадим файл и откроем его в редакторе nano, выполнив команду:
sudo nano /var/www/html/test.php
Введите следующий текст файла.
?&rt;
Сохраните изменения и закройте редактор. Для этого нажмите сочетание клавиш Ctrl+X, далее нажмите клавишу y и Enter.
Мы создали PHP-файл test.php, который внутри себя вызывает PHP-функцию phpinfo(). Данная функция выводит подробную информацию о текущей конфигурации PHP.
Обратимся к файлу test.php из браузера. Переходим в браузере по адресу http://ip.адрес.вашего.сервера/test.php В результате в браузере должна отобразится страница следующего вида:
Чтобы злоумышленник не смог получить информацию о конфигурации вашего сервера, крайне рекомендуется удалить данный файл. Для этого выполните команду:
sudo rm /var/www/html/test.php
Некоторые полезные команды
Ниже приведено несколько команд, которые могут быть вам полезны.
Статус Apache
systemctl status apache2
Перезапуск Apache
sudo systemctl restart apache2
Статус MySQL-сервера
service mysql status
Останов MySQL-сервера
service mysql stop
Запуск MySQL-сервера
service mysql start
Заключение
Мы рассмотрели установку базовых компонентов LAMP-стека на сервере. Тема конфигурации веб-сервера довольно обширна. При дальнейшей настройке необходимо уделить особое внимание конфигурации безопасности вашего сервера.
Аренда виртуальных и выделенных серверов.
Комментарии