В этой статье я расскажу, как установить и настроить веб-сервер на 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/. Если всё хорошо, то увидим примерно такую картинку:
Если браузер выдает ошибку, то скорее всего включен файрвол, который блокирует подключение к серверу. По умолчанию в 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 и модулях:
Отлично! 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 и указанный ранее пароль.
Если удалось залогиниться и Вы видите примерно такую картину, знаит всё прошло удачно.
Настройка прав доступа к файлам
В настройках 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
Готово. Теперь можно работать с файлами в корневой директории веб-сервера под текущим пользователем.
Вы можете скачать образ виртуальной машины с уже готовым веб-сервером, настроенным по этой инструкции: