Настройка локального WEB Server на VirtualBox. Гостивая ОС Ubuntu Server 18.04LTS

Хочу описать свой опыт настройки WEB сервера, конечно можно было бы все сделать гораздо проще используя сетевой адаптер на виртуальной машине в режиме моста, можно вообще использовать Vagrant или Docker или вообще перейти на Linux или....
С Denwer или Open Server мне не получилось использовать ReactPHP поэтому и решил поднять WEB сервер на виртуальной машине используя в качестве гостевой ОС Linux.

Задача
Настроить локальный WEB сервер Nginx + PHP + MySQL (phpMyAdmin чтобы облегчить работу с БД) + доступ по FTP

Реализация(знаю что через ж*пу но зато работает)
Скачиваем VirtualBox и устанавливаем, скачиваем дистрибутив Linux ссылка на Ubuntu Server 18.04 LTS запускаем VirtualBox, создаем новую виртуальную машину

теперь немного настроим нашу виртуальную машину

объем памяти я выделил 2048Мб, основные настройки касаются сети

Для сетевого адаптера 1 выбираем тип подключения NAT и настроим проброс портов, для этого нажимаем дополнительно и нажимаем кнопку проброс портов, создаем два правила первое для WEB сервера, второе для удаленного доступа(просто с winSCP немного удобней).

Далее включаем второй адаптер на виртуальной машине и выбираем тип подключения виртуальный адаптер хоста(через него и будет работать FTP) (можно и не городить этот лес с 2 адаптерами а использовать 1 адаптер выбрав тип подключения мост)

описания типов подключения сетевых адаптеров:
  • NAT - этот способ используется по умолчанию. Для каждой машины создается отдельная внутренняя локальная сеть, в которой машина получает ip 10.10.0.1. Машина может связаться с интернетом, используя технологию NAT, и вы можете обратиться к машине, используя проброс портов VirtualBox, но если у вас будет две виртуальные машины, то вы уже не сможете между ними так взаимодействовать. И если из основной системы к гостевой можно обратиться, то к основной ни гостевой уже никак не получится;
  • Виртуальный адаптер хоста - создается виртуальный сетевой адаптер, к которому можно подключить несколько виртуальных машин, тем самым объединив их в локальную сеть. Доступа к интернету нет, но зато машины находятся в одной сети и каждая имеет свой ip адрес, теперь они могут взаимодействовать между собой. Основная система тоже доступна по ip 192.168.56.1. Машины доступны не только между собой, но и из основной системы;
  • Сетевой мост - при таком подключении виртуальная машина становится полноценным членом локальной сети, к которой подключена основная система. Машина использует сетевой интерфейс чтобы получить адрес у роутера и становится доступна для других устройств, как и основной компьютер по своему ip адресу.
  • Внутренняя сеть - почти то же самое, что и виртуальный адаптер хоста, только без возможности доступа к виртуальной сети из основной системы, доступа к интернету нет.
  • Универсальный драйвер - позволяет использовать драйвер из расширений VirtualBox для связи между машинами, расположенными на разных физических хостах.

Имя выбираем VirtualBox Host-Only Ethernet Adapter у него IP  192.168.56.1, для других адаптеров адреса можно посмотреть в сетевых настройках

Теперь скачиваем дистрибутив Linux и устанавливаем его на виртуальную машину. Для удобства управления виртуальной машиной можно скачать и установить WinSCP и PuTTY, запускаем WinSCP и создаем новое подключение

имя хоста 127.0.0.1, порт 2222, имя пользователя и пароль что указали при установки Ubuntu, сохраняем новое подключение и нажимаем "Войти" если все правильно сделали появится окошко

нажимаем обновить, все мы подключились к виртуальной машине, откроется окно файлового менеджера, теперь запускаем PuTTY

подключаемся по протоколу удаленного доступа к виртуальной машине

Далее установим на виртуальную машину Nginx, PHP-FPM, phpMyAdmin, vsftpd
Не знаю как другим но я привык использовать Midnight Commander, нравится использовать vi или nano, Ваше право, в командах замените mcedit на vi или nano.

установка  Midnight Commander

вводим следующие команды

установка nginx и php-fpm

добавляем репозиторий

Обновляем список пакетов, устанавливаем nginx и php

в целях безопасности внесем изменения в файл /etc/php/7.2/fpm/php.ini (кому интересно статья на хабре)

находим строчку ;cgi.fix_pathinfo=1
и меняем 1 на 0

немного подправим конфиг nginx, удалите или переместите/переименуйте старый конфигурационный файл

создадим новый конфигурационный файл

не помню, но где-то в интернете, я нашел этот пример (кому интересно вот документация по nginx), почему я пишу root/var/www; а не root/var/www/название_сайта(папка с Вашим сайтом); я так привык, Вы в праве писать как Вам удобней, документацию я приложил

проверим на ошибки наш конфигурационный файл

если увидите такую информацию как на скриншоте значит все нормально и можно двигаться дальше

создадим папку для нашего сайта

и в этой папке создадим файл index.php

следующего содержания

установим владельца у папки /var/www, нужно для доступа по ftp (вместо www-data можете указать другое, но тогда это же имя укажите для папки phpMyAdmin и в конфигурационном файле vsftpd в строке guest_username=www-data поменяйте www-data на то что Вы указали)

перезапускаем наш сервер

проверим что все у нас работает, для этого в основной системе запускаем браузер и в строке адресса введем 127.0.0.1/test

Установка СУБД MySQL

Перед установкой желательно ознакомится с данной статьей по настройки безопасности MySQL, здесь я не буду описывать настройки, моя задача получить локальный рабочий WEB сервер.
Обновляем список пакетов

устанавливаем MySQL

запускаем скрипт безопасности

на вопрос установки плагина валидации я ответил нет, меня на локальном сервере устраивает пароль root у пользователя root, далее вводим пароль для пользователя root? повторяем ввод пароля ну а дальше отвечаем Y на все вопросы.
Далее включаем возможность идентификации по паролю для пользователя root, нужно для работы phpMyAdmin
вводим команду

проверяем метод идентификации для пользователей


пользователь root использует аутентификацию с помощью плагина auth_socket
изменим на пароль

проверяем результат


для выхода из MySQL введем

проверим работу MySQL

вводите пароль root пользователя и должны увидеть

MySQL запущена и работает

Установка phpMyAdmin

Скачаем архив phpMyAdmin, разархивируем его и скопируем в папку /var/www

копируем пример конфигурационного файла phpMyAdmin и редактируем его

находим строчку $cfg['blowfish_secret'] и меняем ее, в кавычках должен быть случайный набор символов(я воспользовался онлайн генератором паролей)

зададим владельца папки(смотреть выше)

проверим работоспособность phpMyAdmin, для этого в браузере основной системы вводим http://127.0.0.1/phpmyadmin/

установка ftp
Для подключения к серверу используем виртуальных пользователей - мы будем подключаться под пользователем user, система будет считать, что работает пользователь www-data
уставим vsftp и db-util

создаем папку и файл с логинами и паролями

создаем файл с именами пользователей для доступа по ftp, первая строчка имя пользователя, вторая пароль(по аналогии можно добавить несколько пользователей)

пример содержимого файла

установим права доступа для папки и файла с паролями

генерируем из файла базу

переместим/переименуем конфигурационный файл vsftpd

создаем новый конфигурационный файл, пример я стащил из интернета, кому интересно вот ссылка на документацию и установку под Ubuntu

создадим конфигурационный файл для pam.d

перезапускаем vsftpd

попробуем подключится по ftp к виртуальной машине для этого в проводнике windows добовляем сетевое расположение (кому нравится мучайте FileZilla или любой ftp клиент)

вводим адрес у меня это 192.168.56.101 (отображается при входе или используйте команду ifconfig -a, по хорошему нужно настроить статический адрес как это сделать есть в интернете, если нужно напишу)


как узнать IP адрес
IP адрес при входе

IP адрес при использовании команды ifconfig -a

вводим имя пользователя user (то что Вы написали в файле /etc/vsftpd/vsftpdusers в первой строчке)

при открытии вводим пароль (вторая строчка файла /etc/vsftpd/vsftpdusers)

There are no comments