Установка Apache, MySQL и PHP на Ubuntu 18.04 LTS
11.11.2019
Теги: Apache • CGI • Linux • MySQL • PHP • Ubuntu • Web-разработка • Настройка • Сервер • Установка
Установка 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
Проверяем работу службы:
$ 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-разработка