Установка веб-сервера на Ubuntu 18.04 (Nginx, PHP, MySQL, phpMyAdmin)

    В этой статье я расскажу, как установить и настроить веб-сервер на Ubuntu 18.04. Сервер будет на основе связки Nginx+php-fpm+MySQL.

    Предполагается, что Ubuntu 18.04 уже установлена и Вы имеете доступ к системе по SSH.

    Обновим систему.

    sudo apt update
    sudo apt upgrade

    Установим утилиты mc (Midnight Commander) - файловый менеджер и software-properties-common - средство для управления APT-репозиториями.

    sudo apt install mc software-properties-common

    Установка Nginx

    sudo apt install nginx

    По завершении установки Nginx необходимо перейти в браузере по адресу Вашего сервера http://my_server/. Если всё хорошо, то увидим примерно такую картинку:

    Welcome to nginx!

    Если браузер выдает ошибку, то скорее всего включен файрвол, который блокирует подключение к серверу. По умолчанию в Ubuntu 18.04 средством для управления файрволом является UFW (Uncomplicated Firewall - несложный фаервол). Узнать его статус можно следующей командой:

    sudo ufw status

    Если файрвол выключен, то увидим: Status: inactive

    Если включен, то добавим разрешающее правило:

    sudo ufw allow 'Nginx HTTP'

    Этим правилом мы разрешим подключение к серверу по TCP-порту 80.

    Установка PHP

    На момент написания статьи самой новой версией PHP, доступной в Ubuntu 18.04, является версия 7.2, а наиболее актуальна версия 7.3. Для установки более свежих версия PHP подключим сторонний репозиторий:

    sudo add-apt-repository ppa:ondrej/php

    sudo apt update

    Проверим, доступна ли версия 7.3. для установки:

    sudo apt search php7.3

    Установим необходимые пакеты:

    sudo apt install php7.3-fpm php7.3-common php7.3-mysql php7.3-xml php7.3-curl php7.3-gd php7.3-cli php7.3-zip php7.3-mbstring

    После установки проверим установившуюся версию PHP командой:

    php -v

    Настройка PHP

    Первым делом закроем важную уязвимость, отредактировав конфигурационный файл:

    sudo nano /etc/php/7.3/fpm/php.ini

    Можно использовать любой редактор, не обязательно Nano.

    Необходимо заменить строку

    ;cgi.fix_pathinfo=1

    на

    cgi.fix_pathinfo=0

    Теперь нужно перезапустить php-fpm

    sudo service php7.3-fpm restart

    Настройка Nginx

    Теперь нужно настроить Nginx для работы с php-fpm. Отредактируем дефолтный конфигурационный файл Nginx.

    sudo nano /etc/nginx/sites-available/default

    Файл нужно привести к следующему виду:

    server {
    listen 80;
    #server_name sitename.ru;
    #server_name_in_redirect off;
    access_log /var/log/nginx/sitename.access_log;
    error_log /var/log/nginx/sitename.error_log;
    root /var/www/html;
    index index.php index.html index.htm default.html default.htm;

    location / {
    try_files $uri $uri/ /index.php?$args;
    }
    error_page 404 /404.html;
    error_page 500 502 503 504 /50x.html;

    location = /50x.html {
    root /usr/share/nginx/html;
    }

    location ~ \.php$ {
    try_files $uri =404;
    fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
    }
    }

    Перезапустим nginx

    sudo service nginx restart

    Корневая директория нашего веб-сервера /var/www/html. Создадим в ней файл index.php

    sudo nano /var/www/html/index.php

    со следующим содержимым:

    <?php

    // Показывать всю информацию, по умолчанию INFO_ALL
    phpinfo();

    // Показывать информацию только о загруженных модулях.
    // phpinfo(8) выдает тот же результат.
    phpinfo(INFO_MODULES);

    ?>

    Снова переходим по адресу нашего сервера в браузере, должна отобразиться информация о версии php и модулях:

    phpinfo

    Отлично! PHP работает, двигаемся дальше.

    Установка MySQL

    sudo apt install mysql-server mysql-client

    Произведем первоначальную настройку

    sudo mysql_secure_installation

    Утилита задаст несколько вопросов, ответы на них зависят от конкретной ситуации, я отвечаю так:

    Would you like to setup VALIDATE PASSWORD plugin?

    Press y|Y for Yes, any other key for No:

    Предлагается задействовать плагин для использования "сложных" паролей, я ответил No

    Please set the password for root here.

    New password:

    Введите новый пароль для пользователя root для MySQL (!не пользователя Linux!), затем введите его ещё раз для подтверждения

    Remove anonymous users? (Press y|Y for Yes, any other key for No) :

    Удалить анонимных пользователей? Yes

    Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

    Запретить удаленное подключение пользователя root? Yes

    Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

    Удалить тестовые базы данных? Yes

    Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

    Переустановить привилегии сейчас? Yes

    Success.

    All done!

    Настройка MySQL завершена.

    Для удобства работы с базами данных можно также установить phpMyAdmin, но это не обязательно.

    Установка phpMyAdmin

    sudo apt install phpmyadmin

    Во время установки не выбирайте веб-сервер, который нужно настроить автоматически, т.к. среди них нет Nginx, нажмите Tab и Ok, чтобы продолжить. Затем подтвердите настройку базы данных для phpMyAdmin средствами dbconfig-common - выберите Yes. Далее введите пароль для пользователя MySQL phpmyadmin. Если Вы оставите это поле пустым, то будет сгенерировн случайный пароль.

    Мы установили MySQL версии 5.7, в ней для логина под пользователем root требуется sudo, т.о. мы не сможем подключиться под пользователем root в phpMyAdmin, но можем делегировать необходимые права созданному во время установки пользователю phpmyadmin. Логинимся в MySQL под root`ом:

    sudo mysql -uroot -p

    Далее, в консоли MySQL выполните команды:

    GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'localhost' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
    quit

    Чтобы phpMyAdmin был доступен по адресу http://my_server/phpmyadmin необходимо создать символьную ссылку:

    sudo ln -s /usr/share/phpmyadmin /var/www/html

    Переходим в браузере по адресу: http://my_server/phpmyadmin

    Вводим логин phpmyadmin и указанный ранее пароль.

    Если удалось залогиниться и Вы видите примерно такую картину, знаит всё прошло удачно.

    phpMyAdmin

    Настройка прав доступа к файлам

    В настройках nginx мы указали корневую директорию /var/www/html. В Ubuntu и Debian веб-серверы работают под пользователем и группой www-data. Чтобы дать нашему текущему пользователю (в моем случае это пользователь demo) права на работу с файлами в этой директории, произведем следующие настройки:

    Добавим пользователя в группу www-data:

    sudo usermod -a -G www-data demo

    Сделаем пользователя и группу www-data владельцем директории /var/www/html

    sudo chown -R www-data:www-data /var/www/html

    Дадим группе владельца права на чтение и запись файлов:

    sudo chmod -R g+rw /var/www/html

    Готово. Теперь можно работать с файлами в корневой директории веб-сервера под текущим пользователем.

    Вы можете скачать образ виртуальной машины с уже готовым веб-сервером, настроенным по этой инструкции: