Установка Apache, MySQL и PHP на Ubuntu 18.04 LTS

11.11.2019

Теги: ApacheCGILinuxMySQLPHPUbuntuWeb-разработкаНастройкаСерверУстановка

Установка Apache

Установка веб-сервера Apache:

$ sudo apt install apache2

Открываем в браузере http://localhost/:

Остановка сервера:

$ sudo systemctl stop apache2

Запуск сервера:

$ sudo systemctl start apache2

Перезагрузить конфигурацию:

$ sudo systemctl reload apache2

Перезагрузить сервер:

$ sudo systemctl restart apache2

Проверить состояние:

$ systemctl is-active apache2

Включить автозапуск:

$ sudo systemctl enable apache2

Отключить автозапуск:

$ sudo systemctl disable apache2

Посмотреть информацию о версии:

$ apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built:   2019-09-16T12:58:48

Установка MySQL

Установка сервера БД MySQL:

$ sudo apt install mysql-server

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

$ sudo mysql_secure_installation

Надо ответить на вопросы:

  • Установить плагин проверки надежности паролей?
  • Пароль для пользователя root?
  • Подтверждение пароля для root?
  • Удалить анонимного пользователя?
  • Запретить root подключаться удаленно?
  • Удалить тестовую базу данных?
По умолчанию пользователь root может подключаться только локально, т.е. с хоста localhost.

Начиная с версии 5.7 пользователь root подключается с помощью плагина auth_socket, а не по паролю:

$ sudo mysql
> SELECT user, authentication_string, plugin, host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| 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 | *76370DCD37985A94742AE45C0F4C890251AB21FA | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)

Изменим это:

> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'qwerty';
Query OK, 0 rows affected (0.00 sec)
> SELECT user, authentication_string, plugin, host FROM mysql.user;
+------------------+-------------------------------------------+-----------------------+-----------+
| user             | authentication_string                     | plugin                | host      |
+------------------+-------------------------------------------+-----------------------+-----------+
| root             | *AA1420F182E88B9E5F874F6FBE7459291E8F4601 | mysql_native_password | localhost |
| mysql.session    | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| mysql.sys        | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | mysql_native_password | localhost |
| debian-sys-maint | *76370DCD37985A94742AE45C0F4C890251AB21FA | mysql_native_password | localhost |
+------------------+-------------------------------------------+-----------------------+-----------+
4 rows in set (0.00 sec)
> FLUSH PRIVILEGES;
> exit

Проверим вход по паролю:

$ mysql -uroot -pqwerty
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.27-0ubuntu0.18.04.1 (Ubuntu)

Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
> exit

Остановка сервера:

$ sudo systemctl stop mysql

Запуск сервера:

$ sudo systemctl start mysql

Перезагрузить конфигурацию:

$ sudo systemctl reload mysql

Перезагрузить сервер:

$ sudo systemctl restart mysql

Проверить состояние:

$ systemctl is-active mysql

Включить автозапуск:

$ sudo systemctl enable mysql

Отключить автозапуск:

$ sudo systemctl disable mysql

Посмотреть информацию о версии:

$ mysql -V
mysql Ver 14.14 Distrib 5.7.27, for Linux (x86_64) using  EditLine wrapper

Установка PHP как модуля Apache

Установка PHP:

$ sudo apt install php7.2-mysql libapache2-mod-php7.2

Посмотреть информацию о версии:

$ php -v
PHP 7.2.24-0ubuntu0.18.04.1 (cli) (built: Oct 28 2019 12:07:07) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
    with Zend OPcache v7.2.24-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies

Настройка виртуальных хостов

Перейдем в директорию /var/www, которая содержит внутри себя директорию html с файлом index.html. И создадим еще две директории host1.loc и host2.loc. И внутри каждой директории создадим файл index.php:

$ cd /var/www
$ sudo su
# mkdir host1.loc
# mkdir host2.loc
# cd host1.loc
# nano index.php
<h1>Сайт host1.loc</h1>
<?php phpinfo(); ?>
# cd host2.loc
# nano index.php
<h1>Сайт host2.loc</h1>
<?php phpinfo(); ?>

Теперь перейдем в директорию с настройками Apache:

# cd /etc/apache2
# ls -l
-rw-r--r-- 1 root root  7224 сен 16 15:58 apache2.conf
drwxr-xr-x 2 root root  4096 ноя 11 09:32 conf-available
drwxr-xr-x 2 root root  4096 ноя 11 09:32 conf-enabled
-rw-r--r-- 1 root root  1782 июл 16 21:14 envvars
-rw-r--r-- 1 root root 31063 июл 16 21:14 magic
drwxr-xr-x 2 root root 12288 ноя 11 12:29 mods-available
drwxr-xr-x 2 root root  4096 ноя 11 12:29 mods-enabled
-rw-r--r-- 1 root root   320 июл 16 21:14 ports.conf
drwxr-xr-x 2 root root  4096 ноя 11 09:32 sites-available
drwxr-xr-x 2 root root  4096 ноя 11 09:32 sites-enabled
  • apache2.conf: главный конфигурационный файл Apache. Изменения в этом файле влияют на глобальную конфигурацию Apache. Этот файл отвечает за загрузку многих других файлов из конфигурационной директории.
  • ports.conf: этот файл определяет порты, которые Apache будет слушать. По умолчанию Apache слушает порт 80, а также порт 443 при условии, что модуль для работы с SSL включен.
  • sites-available: в этой директории хранятся файлы виртуальных хостов. Apache не использует файлы из этой директории, если ссылки на них нет в директории sites-enabled. Обычно настройка всех файлов виртуальных хостов осуществляется в этой директории, а активация хоста происходит путём создания ссылки в другой директории командой a2ensite.
  • sites-enabled: директория, в которой хранятся активированные виртуальные хосты. Обычно это делается путём создания ссылки на файл конфигурации хоста из директории sites-available с помощью команды a2ensite. Apache читает конфигурационный файлы и ссылки из этой директории при запуске или перезапуске.
  • conf-available, conf-enabled: эти директории связаны друг с другом так же, как и sites-available и sites-enabled связаны друг с другом, но используются для хранения фрагментов конфигурации, которые не принадлежат виртуальным хостам. Файлы в директории conf-available могут быть включены командой a2enconf и выключены командой a2disconf.
  • mods-available, mods-enabled: эти директории содержат, соответственно, доступные и активные модули. Файлы, оканчивающиеся на .load, содержат фрагменты для загрузки конкретных модулей, а файлы, оканчивающиеся на .conf, содержат настройки этих модулей. Модули можно активировать командой a2enmod и деактивировать командой a2dismod.

Посмотрим, какие сайты могут быть активированы командой a2ensite:

# cd /etc/apache2/sites-available
# ls -l
-rw-r--r-- 1 root root 1332 июл 16 21:14 000-default.conf
-rw-r--r-- 1 root root 6338 июл 16 21:14 default-ssl.conf

И какие сайты сейчас доступны, т.е. были активированы командой a2ensite:

# cd /etc/apache2/sites-enabled
# ls -l
lrwxrwxrwx 1 root root 35 ноя 11 09:32 000-default.conf -> ../sites-available/000-default.conf

В директории только одна ссылка, значит доступен только один сайт по адресу http://localhost/. Создадим два файла конфигурации виртуальных хостов:

# cd /etc/apache2/sites-available
# cp 000-default.conf host1.loc.conf
# cp 000-default.conf host2.loc.conf

И отредактируем эти файлы:

# nano host1.loc.conf
<VirtualHost *:80>
    ServerName host1.loc
    ServerAdmin webmaster@host1.loc
    DocumentRoot /var/www/host1.loc
    ServerAlias www.host1.loc
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
# nano host2.loc.conf
<VirtualHost *:80>
    ServerName host2.loc
    ServerAdmin webmaster@host2.loc
    DocumentRoot /var/www/host2.loc
    ServerAlias www.host2.loc
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Активируем два наших сайта:

# a2ensite host1.loc
Enabling site host1.loc.
To activate the new configuration, you need to run:
  systemctl reload apache2
# a2ensite host2.loc
Enabling site host2.loc.
To activate the new configuration, you need to run:
  systemctl reload apache2

Перед тем, как перезагрузить Apache, отредактируем файл hosts:

# nano /etc/hosts
127.0.0.1   localhost
127.0.1.1   ubuntu-lamp

127.0.0.1   host1.loc www.host1.loc
127.0.0.1   host2.loc www.host2.loc

Перезагружаем Apache:

# systemctl reload apache2

И проверяем работу сайтов:

Установка PHP как FastCGI

Устанавливаем пакет php-fpm:

$ sudo apt install php7.2-fpm
FPM расшифровывается как Fastcgi Process Manager, менеджер процессов FastCGI. PHP-FPM запускается как отдельный процесс и взаимодействует с веб-сервером через порт 9000 или сокетный файл. Является альтернативной реализацией PHP FastCGI с несколькими дополнительными возможностями, обычно используемыми для высоконагруженных сайтов.

Проверяем работу службы:

$ systemctl is-active php7.2-fpm
active

Во время установки php-fpm будет сказано следующее — чтобы включить PHP 7.2 FPM в Apache2, выполните команды:

$ sudo a2enmod proxy_fcgi setenvif
$ sudo a2enconf php7.2-fpm

Так и делаем. После этого нужно отключить модуль Apache для работы с php, потому что вместо него теперь будет php-fpm.

$ sudo a2dismod php7.2

Перезапускаем Apache:

$ sudo systemctl restart apache2

Что такое MPM и в чём разница между prefork, event, worker — можно почитать вот в этой статье. А сейчас просто отключаем модуль mpm_prefork и включаем модуль mpm_event:

$ sudo a2dismod mpm_prefork
$ sudo a2enmod mpm_event
$ sudo systemctl restart apache2

Дополнительно

Поиск: Apache • Linux • MySQL • PHP • Ubuntu • Установка • Настройка • Виртуальный хост • FPM • Сервер • Web-разработка

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.