Все описанное тут конечно работает но уже устарело.... по этому переходите на Vagrant
Хочу описать свой опыт настройки 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
вводим следующие команды
1 |
sudo add-apt-repository universe |
1 |
sudo apt update |
1 |
sudo apt upgrade |
1 |
sudo apt install mc |
установка nginx и php-fpm
добавляем репозиторий
1 |
sudo add-apt-repository ppa:ondrej |
1 |
sudo add-apt-repository ppa:nginx |
Обновляем список пакетов, устанавливаем nginx и php
1 |
sudo apt update |
1 |
sudo apt install nginx |
1 |
sudo apt install php7.2-cli php7.2-fpm php7.2-curl php7.2-gd php7.2-mysql php7.2-mbstring zip unzip |
в целях безопасности внесем изменения в файл /etc/php/7.2/fpm/php.ini (кому интересно статья на хабре)
1 |
sudo mcedit /etc/php/7.2/fpm/php.ini |
находим строчку ;cgi.fix_pathinfo=1
и меняем 1 на 0
немного подправим конфиг nginx, удалите или переместите/переименуйте старый конфигурационный файл
1 |
sudo mv /etc/nginx/sites-available/default ~/ |
создадим новый конфигурационный файл
1 |
sudo mcedit /etc/nginx/sites-available/default |
не помню, но где-то в интернете, я нашел этот пример (кому интересно вот документация по nginx), почему я пишу root/var/www; а не root/var/www/название_сайта(папка с Вашим сайтом); я так привык, Вы в праве писать как Вам удобней, документацию я приложил
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
server { listen 80; root /var/www; index index.php index.html index.htm; server_name example.com www.example.com; location / { try_files $uri $uri/ /index.html; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/www; } location ~ .php$ { try_files $uri =404; fastcgi_pass unix:/var/run/php/php7.2-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } |
проверим на ошибки наш конфигурационный файл
1 |
sudo nginx -t |
если увидите такую информацию как на скриншоте значит все нормально и можно двигаться дальше
создадим папку для нашего сайта
1 |
sudo mkdir /var/www/test |
и в этой папке создадим файл index.php
1 |
sudo mcedit /var/www/test/index.php |
1 2 3 |
<?php phpinfo(); ?> |
установим владельца у папки /var/www, нужно для доступа по ftp (вместо www-data можете указать другое, но тогда это же имя укажите для папки phpMyAdmin и в конфигурационном файле vsftpd в строке guest_username=www-data поменяйте www-data на то что Вы указали)
1 |
sudo chown -R www-data:www-data /var/www |
перезапускаем наш сервер
1 |
sudo service nginx restart |
1 |
sudo /etc/init.d/php7.2-fpm restart |
проверим что все у нас работает, для этого в основной системе запускаем браузер и в строке адресса введем 127.0.0.1/test
Установка СУБД MySQL
Перед установкой желательно ознакомится с данной статьей по настройки безопасности MySQL, здесь я не буду описывать настройки, моя задача получить локальный рабочий WEB сервер.
Обновляем список пакетов
1 |
sudo apt update |
устанавливаем MySQL
1 |
sudo apt install mysql-server |
запускаем скрипт безопасности
1 |
sudo mysql_secure_installation |
на вопрос установки плагина валидации я ответил нет, меня на локальном сервере устраивает пароль root у пользователя root, далее вводим пароль для пользователя root? повторяем ввод пароля ну а дальше отвечаем Y на все вопросы.
Далее включаем возможность идентификации по паролю для пользователя root, нужно для работы phpMyAdmin
вводим команду
1 |
sudo mysql |
проверяем метод идентификации для пользователей
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |
пользователь root использует аутентификацию с помощью плагина auth_socket
изменим на пароль
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'; |
1 |
FLUSH PRIVILEGES; |
проверяем результат
1 |
SELECT user,authentication_string,plugin,host FROM mysql.user; |
для выхода из MySQL введем
1 |
exit |
проверим работу MySQL
1 |
sudo mysqladmin -p -u root version |
вводите пароль root пользователя и должны увидеть
MySQL запущена и работает
Установка phpMyAdmin
Скачаем архив phpMyAdmin, разархивируем его и скопируем в папку /var/www
1 |
cd /tmp |
1 |
wget https://files.phpmyadmin.net/phpMyAdmin/4.8.3/phpMyAdmin-4.8.3-all-languages.zip |
1 |
unzip phpMyAdmin-4.8.3-all-languages.zip |
1 |
sudo mkdir /var/www/phpmyadmin |
1 |
sudo mv phpMyAdmin-4.8.3-all-languages/* /var/www/phpmyadmin/ |
копируем пример конфигурационного файла phpMyAdmin и редактируем его
1 |
sudo cp /var/www/phpmyadmin/config.sample.inc.php /var/www/phpmyadmin/config.inc.php |
1 |
sudo mcedit /var/www/phpmyadmin/config.inc.php |
находим строчку $cfg['blowfish_secret'] и меняем ее, в кавычках должен быть случайный набор символов(я воспользовался онлайн генератором паролей)
зададим владельца папки(смотреть выше)
1 |
sudo chown -R www-data:www-data /var/www/phpmyadmin |
проверим работоспособность phpMyAdmin, для этого в браузере основной системы вводим http://127.0.0.1/phpmyadmin/
установка ftp
Для подключения к серверу используем виртуальных пользователей - мы будем подключаться под пользователем user, система будет считать, что работает пользователь www-data
уставим vsftp и db-util
1 |
sudo apt install vsftpd db5.3-util |
создаем папку и файл с логинами и паролями
1 |
sudo mkdir /etc/vsftpd |
создаем файл с именами пользователей для доступа по ftp, первая строчка имя пользователя, вторая пароль(по аналогии можно добавить несколько пользователей)
1 |
sudo mcedit /etc/vsftpd/vsftpdusers |
пример содержимого файла
1 2 |
user 123 |
установим права доступа для папки и файла с паролями
1 |
sudo touch /etc/vsftpd/vsftpdusers |
1 |
sudo chmod 0600 /etc/vsftpd/vsftpdusers |
генерируем из файла базу
1 |
sudo db5.3_load -T -t hash -f /etc/vsftpd/vsftpdusers /etc/vsftpd/users.db |
1 |
sudo chmod 0600 /etc/vsftpd/users.db |
переместим/переименуем конфигурационный файл vsftpd
1 |
sudo mv /etc/vsftpd.conf ~/ |
создаем новый конфигурационный файл, пример я стащил из интернета, кому интересно вот ссылка на документацию и установку под Ubuntu
1 |
sudo mcedit /etc/vsftpd.conf |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
listen=YES anonymous_enable=NO local_enable=YES xferlog_enable=YES user_sub_token=$USER local_root=/var/www/ chroot_local_user=YES hide_ids=YES guest_enable=YES guest_username=www-data virtual_use_local_privs=YES write_enable=YES pasv_enable=YES #если сервер за натом раскомментируем и указываем реальный адрес #pasv_address=192.168.10.1 pasv_max_port=20200 pasv_min_port=20400 pam_service_name=vsftpd.virtual rsa_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem rsa_private_key_file=/etc/ssl/private/ssl-cert-snakeoil.key ssl_enable=NO connect_from_port_20=YES xferlog_file=/var/log/vsftpd.log xferlog_std_format=YES idle_session_timeout=600 data_connection_timeout=120 ascii_upload_enable=YES ascii_download_enable=YES allow_writeable_chroot=YES seccomp_sandbox=NO local_umask=022 |
создадим конфигурационный файл для pam.d
1 |
sudo mcedit /etc/pam.d/vsftpd.virtual |
1 2 3 |
auth rauth required pam_userdb.so db=/etc/vsftpd/users account required pam_userdb.so db=/etc/vsftpd/users session required pam_loginuid.so |
перезапускаем vsftpd
1 |
sudo /etc/init.d/vsftpd restart |
попробуем подключится по ftp к виртуальной машине для этого в проводнике windows добовляем сетевое расположение (кому нравится мучайте FileZilla или любой ftp клиент)
вводим адрес у меня это 192.168.56.101 (отображается при входе или используйте команду ifconfig -a, по хорошему нужно настроить статический адрес как это сделать есть в интернете, если нужно напишу)

IP адрес при использовании команды ifconfig -a
при открытии вводим пароль (вторая строчка файла /etc/vsftpd/vsftpdusers)
There are no comments