Найти в Дзене
Linux | Network | DevOps

Установка Nginx, MySQL и PHP на Ubuntu

Установка веб-сервера 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: $ sudo apt install mysql-server Эта команда установит MySQL, но при этом не предложит задать пароль или
внести какие-либо правки в конфигурацию. Далее запускаем скрипт
безопасности, который изменит некоторые настройки по умолчанию на более
безопасные: $ sudo mysql_secure_installation Надо ответить на вопросы: По умолчанию пользователь root может подключаться только локально, т.е. с хоста localhost. Начиная с версии 5.7 пользователь ro
Оглавление

Установка 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 расшифровывается как Fastcgi Process Manager, менеджер процессов
FastCGI. PHP-FPM запускается как отдельный процесс и взаимодействует с
веб-сервером через порт 9000 или сокетный файл. Является альтернативной
реализацией PHP FastCGI с несколькими дополнительными возможностями,
обычно используемыми для высоконагруженных сайтов.

Проверяем работу службы 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

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

Обсудить эту статью можно в Телеграм канале: https://t.me/linautonet