Хочу описать свой опыт настройки 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