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

17.11.2019

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

Установка 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

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

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

Каталог оборудования
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.