Установка Nginx, MySQL и PHP на Ubuntu 18.04 LTS
17.11.2019
Теги: CGI • Linux • MySQL • Nginx • PHP • Ubuntu • Web-разработка • Настройка • Сервер • Установка
Установка Nginx
Установка веб-сервера Nginx:
$ sudo apt install nginx
Открываем в браузере http://localhost/
:
Остановка сервера:
$ sudo systemctl stop nginx
Запуск сервера:
$ sudo systemctl start nginx
Перезагрузить конфигурацию:
$ sudo systemctl reload nginx
Перезагрузить сервер:
$ sudo systemctl restart nginx
Проверить состояние:
$ systemctl is-active nginx
Включить автозапуск:
$ sudo systemctl enable nginx
Отключить автозапуск:
$ sudo systemctl disable nginx
Посмотреть информацию о версии:
$ nginx -v nginx version: nginx/1.14.0 (Ubuntu)
Установка 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
Установка PHP:
$ sudo apt install php7.2-fpm php7.2-mysql
Посмотрим, какие пакеты были установлены:
$ apt list --installed | grep php php-common/bionic,bionic,now 1:60ubuntu1 all [установлен, автоматически] php7.2-fpm/bionic,bionic,now 1:7.2+60ubuntu1 all [установлен] php7.2-mysql/bionic,bionic,now 1:7.2+60ubuntu1 all [установлен] php7.2-cli/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически] php7.2-common/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически] php7.2-json/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически] php7.2-opcache/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически] php7.2-readline/bionic-updates,bionic-security,now 7.2.24-0ubuntu0.18.04.1 amd64 [установлен, автоматически]
Установлены два пакета по нашему запросу и еще несколько — как зависимости.
Проверяем работу службы FPM:
$ systemctl is-active php7.2-fpm active
Настройка виртуальных хостов
Перейдем в директорию /var/www
, которая содержит внутри себя директорию html
с файлом index.html
. Создадим еще две директории site1.loc
и site2.loc
. И внутри каждой директории создадим файл index.php
:
$ cd /var/www $ sudo -i # mkdir site1.loc # mkdir site2.loc
# cd /var/www/site1.loc # nano index.php
<h1>Сайт site1.loc</h1> <?php phpinfo(); ?>
# cd /var/www/site2.loc # nano index.php
<h1>Сайт site2.loc</h1> <?php phpinfo(); ?>
Теперь перейдем в директорию с настройками Nginx:
# cd /etc/nginx # ls -l drwxr-xr-x 2 root root 4096 авг 20 14:46 conf.d -rw-r--r-- 1 root root 1077 апр 6 2018 fastcgi.conf -rw-r--r-- 1 root root 1007 апр 6 2018 fastcgi_params -rw-r--r-- 1 root root 2837 апр 6 2018 koi-utf -rw-r--r-- 1 root root 2223 апр 6 2018 koi-win -rw-r--r-- 1 root root 3957 апр 6 2018 mime.types drwxr-xr-x 2 root root 4096 авг 20 14:46 modules-available drwxr-xr-x 2 root root 4096 ноя 13 15:22 modules-enabled -rw-r--r-- 1 root root 1482 апр 6 2018 nginx.conf -rw-r--r-- 1 root root 180 апр 6 2018 proxy_params -rw-r--r-- 1 root root 636 апр 6 2018 scgi_params drwxr-xr-x 2 root root 4096 ноя 13 15:22 sites-available drwxr-xr-x 2 root root 4096 ноя 13 15:22 sites-enabled drwxr-xr-x 2 root root 4096 ноя 13 15:22 snippets -rw-r--r-- 1 root root 664 апр 6 2018 uwsgi_params -rw-r--r-- 1 root root 3071 апр 6 2018 win-utf
nginx.conf
: главный конфигурационный файл Nginx.sites-available
: в этой директории хранятся файлы виртуальных хостов. Nginx не использует файлы из этой директории, если ссылки на них нет в директорииsites-enabled
.sites-enabled
: директория, в которой хранятся активированные виртуальные хосты. Обычно это делается путём создания ссылки на файл конфигурации хоста из директорииsites-available
.modules-available
,modules-enabled
: эти директории содержат, соответственно, доступные и активные модули.
Посмотрим, какие сайты могут быть активированы:
# cd /etc/nginx/sites-available # ls -l -rw-r--r-- 1 root root 2416 апр 6 2018 default
И какие сайты сейчас доступны, т.е. были активированы:
# cd /etc/nginx/sites-enabled # ls -l lrwxrwxrwx 1 root root 34 ноя 13 15:22 default -> /etc/nginx/sites-available/default
В директории только одна ссылка, значит доступен только один сайт по адресу http://localhost/
. Создадим два файла конфигурации виртуальных хостов:
# cd /etc/nginx/sites-available # cp default site1.loc # cp default site2.loc
И отредактируем эти файлы:
# nano site1.loc
server { # слушать порт 80 listen 80; # директория сайта root /var/www/site1.loc; # индексные файлы index index.php index.html; # домен сайта server_name site1.loc www.site1.loc; location / { try_files $uri $uri/ =404; } # PHP скрипты передаются на выполнение FastCGI серверу location ~ \.php$ { include snippets/fastcgi-php.conf; # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } }
# nano site2.loc
server { # слушать порт 80 listen 80; # директория сайта root /var/www/site2.loc; # индексные файлы index index.php index.html; # домен сайта server_name site2.loc www.site2.loc; location / { try_files $uri $uri/ =404; } # PHP скрипты передаются на выполнение FastCGI серверу location ~ \.php$ { include snippets/fastcgi-php.conf; # With php-fpm (or other unix sockets): fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; } }
Активируем два наших сайта:
# ln -s /etc/nginx/sites-available/site1.loc /etc/nginx/sites-enabled/ # ln -s /etc/nginx/sites-available/site2.loc /etc/nginx/sites-enabled/
# cd /etc/nginx/sites-enabled# ls -l lrwxrwxrwx 1 root root 34 ноя 13 15:22 default -> /etc/nginx/sites-available/default lrwxrwxrwx 1 root root 36 ноя 17 12:38 site1.loc -> /etc/nginx/sites-available/site1.loc lrwxrwxrwx 1 root root 36 ноя 17 12:38 site2.loc -> /etc/nginx/sites-available/site2.loc
Перед тем, как перезагрузить Nginx, отредактируем файл hosts
:
# nano /etc/hosts
127.0.0.1 localhost 127.0.1.1 ubuntu-lemp 127.0.0.1 site1.loc www.site1.loc 127.0.0.1 site2.loc www.site2.loc
Перезагружаем Nginx:
# systemctl reload nginx
И проверяем работу сайтов:
Поиск: Linux • MySQL • Nginx • PHP • Ubuntu • Web-разработка • Настройка • Установка • Виртуальный хост • FPM • Сервер