Статьи

Локальний веб-сервер: VirtualBox, Debian, Nginx, php-fpm, etc

  1. завдання
  2. Виртуалка і Debian
  3. налаштування
  4. Веб-сервер
  5. Nginx
  6. база
  7. Workbench
  8. Робочий софт
  9. Vagrant
  10. Docker

Створюючи недавно новий сайт на я досить пристойно помучився через відмінності робочого оточення, які забезпечують локальний на Windows і реальний сервер з Debian. Це змусило мене налаштувати правильний локальний сервер, використовуючи. У статті я розповім, як це зробити.

завдання

Є комп'ютер з Windows 10, де встановлено VirtualBox. Створимо віртуальну машину в VirtualBox, встановимо на неї Debian. Потім налаштуємо на цій машині веб-сервер і встановимо деякий софт, необхідний для веб-розробки.

Додатково налаштуємо загальну папку, щоб зручно працювати в ній з кодом сайтів в улюбленому редакторі під Windows. Відкриватися сайти теж будуть під Windows.

Виртуалка і Debian

Викачуємо новітній для установки Debian. Даю посилання на сторінку з образами, призначеними для мережевої установки. Вони маленькі, не мають нічого зайвого, добре підходять для веб-сервера. Я використовую 64-бітний образ. На момент написання статті актуальний Debian версії 8.5.

Створюємо віртуальну машину:

Створюємо віртуальну машину:

Об'єм пам'яті і диска на свій розсуд.

Диск особливо витрачатися не буде, тому що ми будемо працювати з сайтами в загальнодоступному місці, яка буде підключається до Debian як додатковий носій. Тип основного диска за замовчуванням, динамічний.

Машина підготовлена. Поки не включаємо. Заходимо в властивості машини, підключаємо скачав інсталяційний образ на CD / DVD:

Пройдемося по іншим налаштувань.

Число ядер процесора вибирайте самі, в залежності від можливостей і потреб. Обов'язково встановіть позначку «Включити PAE / NX».

Обов'язково встановіть позначку «Включити PAE / NX»

Можна вимкнути різні непотрібні речі, типу віддаленого доступу по RDP, звукової карти, порти USB стандарту 2.0 і т.д.

д

У мережевих адаптерах вибираємо тип підключення «NAT», нижче тут же натискаємо «Додатково» і заходимо в «Проброс портів».

У мережевих адаптерах вибираємо тип підключення «NAT», нижче тут же натискаємо «Додатково» і заходимо в «Проброс портів»

Тут для SSH вказуємо порти 3022 і 22, для веба 80 і 80. Решта заповнювати не треба. Цього достатньо.

Цього достатньо

Чому саме «NAT»? Віртуальну машину зможете використовувати тільки ви, вона не буде видна в вашій локальній мережі і ніяк на неї не вплине. Для мене це важливо.

Якщо ви хочете, щоб ваша віртуальна машина повноцінно додавалася в вашу локальну мережу, то вибирайте тип підключення «Мережевий міст». Інші комп'ютери у вашій локальній мережі теж зможуть звертатися до вашої віртуальній машині.

На завершення додаємо загальну папку:

На завершення додаємо загальну папку:

Виходимо з налаштувань.

Запускаємо машину, встановлюємо Debian.

Процедура установки Debian нічим особливо непримітна. Вибираємо спочатку звичайну установку, я вважаю за краще з графічним інтерфейсом. По ходу вибираємо всякі параметри. Запасаємося терпінням.

Ближче до кінця установки треба буде вибрати компоненти, які потрібно встановити. Робочий стіл і інше сміття нам на веб-сервері не потрібен, знімаємо всюди позначки. Ми залишаємо тільки SSH-сервер і стандартні системні утиліти.

Пропонований в списку «web server» я теж вважаю за краще не ставити, тому що там буде Apache, на який у мене алергія. Краще встановити потім самому саме те, що потрібно.

Загалом, установка завершується, машина перезапускается.

Входимо під root-ом:

Все ОК? Невелика рекомендація. Робіть «знімки» машини на різних етапах настройки і використання. Це корисно! Якщо в процесі якихось налаштувань або інших дій щось піде не так, то ви зможете відкотитися до попереднього стану.

Ось зараз машина успішно стартувала. Вимкніть її, зробіть знімок. Це займе від сили хвилину.

Це займе від сили хвилину

Щоб вимкнути машину можна написати «poweroff», щоб перезапустити - «reboot».

налаштування

Поки продовжуємо працювати з створеної машиною через вікно VirtualBox. До підключення по SSH повернемося трохи пізніше.

В процесі установки Debian, крім root, обов'язково створюється додатковий користувач. Якщо він зовсім вам не потрібен, то його можна видалити:

userdel -r имя_пользователя

Додатковий користувач іноді корисний, наприклад, коли ви будете працювати з Composer. Цей менеджер пакетів, що робота під root небезпечна і видає попередження, хоча і продовжує справно працювати.

За замовчуванням Debian не дозволяє підключитися по SSH, використовуючи користувача root. Виглядає це так:

login as: root [email protected]'s password: Access denied

Додатковим користувачем підключатися можна відразу.

Щоб по SSH можна було зайти використовуючи root-користувача редагуємо рядок в файлі / etc / ssh / sshd_config.

шукаємо:

PermitRootLogin without-password

Міняємо на:

PermitRootLogin yes

Щоб зміни вступили в силу перезавантажуємо машину.

Для підключень по SSH в Windows зручно використовувати. Адреса машини 127.0.0.1, порт 3022:

1, порт 3022:

Тепер уже можна більшу частину часу працювати з віртуальною машиною через SSH, воно зручніше, ніж через вікно VirtualBox. Вікно PuTTY можна вільно розтягувати і його вміст буде під це підлаштовуватися. У вашому розпорядженні буфер обміну і навіть миша.

Щоб працювала спільна папка потрібно встановити доповнення гостьовий ОС. Для початку підключаємо образ:

Тепер монтуємо його:

mount / dev / cdrom / media / cdrom

Попередньо встановлюємо необхідні пакети:

apt-get install build-essential module-assistant

Ще виконуємо:

ma prepare

Тепер сама установка доповнень:

sh /media/cdrom/VBoxLinuxAdditions.run

Результат успішної установки:

root @ webdev: ~ # sh /media/cdrom/VBoxLinuxAdditions.run Verifying archive integrity ... All good. Uncompressing VirtualBox 5.1.2 Guest Additions for Linux ........... VirtualBox Guest Additions installer Copying additional installer modules ... Installing additional modules ... vboxadd.sh: Building Guest Additions kernel modules. update-initramfs: Generating /boot/initrd.img-3.16.0-4-amd64 vboxadd.sh: Starting the VirtualBox Guest Additions. Could not find the X.Org or XFree86 Window System, skipping. root @ webdev: ~ #

Перезапускаємо машину і радіємо, що тепер у нас запрацювала загальна папка. У віртуальній машині в моєму випадку це:

/ Media / sf_Webdev

На основний машині вона відповідає:

c: \ VirtualDub \ Folders \ Webdev

Робота із загальною папкою в віртуальній машині здійснюється з під користувальницької групи vboxsf. Це означає, що якщо користувач (під яким ви працюєте) не входить в цю спеціальну групу, то він не зможе записувати в загальну папку. Для нього в папці за умовчанням режим «readonly».

Щоб додати користувача в цю групу виконуємо:

usermod -aG vboxsf имя_пользователя usermod -aG vboxsf root usermod -aG vboxsf www-data

Користувач www-data за замовчуванням використовується Nginx.

Веб-сервер

Переходимо до налаштування веб-сервера:

apt-get install nginx apt-get install php5-fpm php5-cgi

У загальній папці створимо папку першого сайту:

/media/sf_Webdev/site.loc

Відповідно він з'явиться і на основний машині. У цю папку помістимо тестовий файл index.php з кодом:

<? Php phpinfo (); ?>

Не має значення, як саме ви створюєте папки і файли в загальнодоступному місці, можете все це робити вже з вашої основної системи.

Створимо символічне посилання для каталогу сайту:

ln -s /media/sf_Webdev/site.loc / var / www

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

/etc/nginx/sites-available/site.loc

Його вміст:

server {listen 80; server_name site.loc; root /var/www/site.loc; index index.php; location / {try_files $ uri $ uri / = 404; } Location ~ \ .php $ {include snippets / fastcgi-php.conf; fastcgi_pass unix: /var/run/php5-fpm.sock; } Access_log /var/log/nginx/site.loc_access.log; error_log /var/log/nginx/site.loc_error.log; }

Підключимо файл настройок:

ln -s /etc/nginx/sites-available/site.loc /etc/nginx/sites-enabled/site.loc

Перезапустити Nginx:

/etc/init.d/nginx restart

Тепер в основній системі відредагуємо hosts-файл, зазвичай він розташований тут:

c: \ Windows \ System32 \ drivers \ etc \ hosts

У нього треба додати рядок:

127.0.0.1 site.loc

Усе! Настав час в веб-браузері основної системи спробувати відкрити сайт site.loc. Якщо все в порядку, то ви побачите інформацію по PHP віртуальної машини.

Якщо сайт не дався, ви отримали білу сторінку, то швидше за все у вас в основній системі вже використовується якимось додатком порт 80. Відповідно кидок цього порту з віртуальної системи в основну був замалий і нічого не працює.

Щоб з'ясувати, вимкніть поки віртуальну машину, в основній системі відкрийте консоль:

cmd

Виконуємо в ній:

netstat -an -p tcp -o | findstr 80

Отримаємо приблизно таке:

C: \ Users \ kodmg> netstat -an -p tcp -o | findstr 80 TCP 0.0.0.0:80 0.0.0.0:0 LISTENING 5684 TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING тисяча TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 580 TCP 0.0.0.0:49665 0.0.0.0 : 0 LISTENING 980 TCP 192.168.1.210:56543 77.234.45.61:80 ESTABLISHED 1736 TCP 192.168.1.210:56793 5.45.58.148:80 CLOSE_WAIT 1736 TCP 192.168.1.210:56800 52.20.134.145:443 CLOSE_WAIT 7036 TCP 192.168.1.210:57180 95.213 .255.17: 443 ESTABLISHED 8616 TCP 192.168.1.210:57288 188.43.75.80:80 TIME_WAIT 0 TCP 192.168.1.210:57309 104.27.186.197:80 ESTABLISHED 8616 TCP 192.168.1.210:57340 23.43.134.135:80 TIME_WAIT 0

Тут перший рядок з адресою 0.0.0.0:80 - це ознака, що 80 порт в даний час використовується. В кінці цього рядка цифри, в прикладі це 5684. Даний номер - це ID процесу додатки.

Щоб дізнатися, що це за додаток відкриваємо диспетчер задач:

На вкладці «Подробиці» робимо сортування по колонці «ВД процесу» і шукаємо потрібний номер. У моєму випадку це виявився Skype.

За замовчуванням Skype використовує саме 80 порт для з'єднань, але це можна змінити в його налаштуваннях. Прибираємо галочку «Для додаткових вхідних з'єднань слід використовувати порти 80 і 443». Виходимо з налаштувань, перезапускаємо Skype.

Виходимо з налаштувань, перезапускаємо Skype

Тієї ж командою в консолі ще раз робимо перевірку:

C: \ Users \ kodmg> netstat -an -p tcp -o | findstr 80 TCP 0.0.0.0:7680 0.0.0.0:0 LISTENING 1000 TCP 0.0.0.0:49664 0.0.0.0:0 LISTENING 580 TCP 0.0.0.0:49665 0.0.0.0:0 LISTENING 980 TCP 192.168.1.210:56543 77.234.45.61 : 80 ESTABLISHED 1736 TCP 192.168.1.210:56793 5.45.58.148:80 CLOSE_WAIT 1736 TCP 192.168.1.210:56800 52.20.134.145:443 CLOSE_WAIT 7036 TCP 192.168.1.210:57180 95.213.255.17:443 ESTABLISHED 8616 TCP 192.168.1.210:57309 104.27 .186.197: 80 ESTABLISHED 8616 TCP 192.168.1.210:57340 23.43.134.135:80 TIME_WAIT 0

Тепер 80 порт ніким не використовується. Запускаємо назад віртуальну машину і знову пробуємо відкривати сайт. Тепер, якщо ви все робили за інструкцією, то він точно повинен відкритися!

Nginx

При подібному використанні веб-сервера всередині VirtualBox є одна особливість з Nginx. Файли сайтів виходить лежатимуть і модифікуватися в загальнодоступному місці. Система всередині VirtualBox не знатиме, коли файли в цій папці були модифіковані, звідси проблема. Nginx думає, що файли не змінювалися і добросовісності віддає старі їхньою версією, закеширувалася.

Дуже багато хто стикається з цими граблями. Типовий випадок: ви змінили файл CSS або JS, а на сайті не видно цих змін, файл використовуються старий.

Мені допомогло вирішити проблему включення в конфіг Nginx параметра:

if_modified_since off;

Деяким допомагає ще цей додатковий параметр:

sendfile off;

Оскільки проблема може бути актуальна для всіх сайтів, що працюють на веб-сервері віртуальної машини, то правильніше включити ці параметри в загальному файлі /etc/nginx/nginx.conf.

Додаткова по темі.

база

Замість звичайного MySQL я віддаю перевагу більш просунуту реалізацію в особі. Багато його рекомендують, завдяки швидкості і додатковим фічам. Я використовую Percona Server не менше 2 років і теж можу його вже рекомендувати. Для сайту, для будь-якого сайтовий движка - це буде просто MySQL, вони не побачать різниці.

Установка Percona Server:

wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc) _all.deb dpkg -i percona-release_0.1-4. $ (lsb_release -sc) _all.deb

Оновлюємо джерела:

apt-get update

Продовжуємо установку:

apt-get install percona-server-server-5.6

Я встановлюю саме версію 5.6, хоча є на поточний момент вже реліз 5.7. Ці версії засновані, відповідно на MySQL 5.6 і 5.7. Остання має деякі суттєві відмінності, які мене поки не влаштовують. Через них зокрема у мене не працював phpMyAdmin.

Якщо вам потрібно найновіше, то просто виконуєте рядок, вказуючи останню версію:

apt-get install percona-server-server-5.7

В процесі установки буде потрібно вказати пароль для root-користувача бази. Не плутайте з root-користувачем системи.

Встановимо додатково:

apt-get install phpmyadmin

В процесі буде потрібно вказати пароль root-користувача бази. Також буде створено ще один користувач бази, спеціально для phpMyAdmin і для нього потрібно буде придумати додатковий пароль, або залишити поле порожнім і пароль буде створений автоматично.

Щоб мати доступ до phpMyAdmin через створений вже тестовий сайт просто додамо в його каталог символічне посилання:

ln -s / usr / share / phpmyadmin /var/www/site.loc

Тепер з основної системи phpMyAdmin можна відкривати:

site.loc / phpmyadmin

Workbench

Використовуючи додаток на основний машині найпростіше підключатися до бази MySQL на віртуальній машині використовуючи SSH. Створюючи підключення встановлюємо параметр «Connection Method» в стан «Standard TCP / IP over SSH» і далі вписуємо вже знайомі параметри:

Робочий софт

установка:

cd / usr / src apt-get install curl php5-cli curl -sS https://getcomposer.org/installer | php - --install-dir = / usr / local / bin --filename = composer

Для перевірки працездатності можна просто:

composer

Якщо все добре, отримаєте довідку за програмою.

Решта за бажанням.

установка:

curl -sL https://deb.nodesource.com/setup_6.x | bash - apt-get install nodejs

установка:

apt-get install npm npm i -g gulp

Якщо будуть попередження:

npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue npm WARN deprecated [email protected]: Please update to minimatch 3.0.2 or higher to avoid a RegExp DoS issue npm WARN deprecated [email protected]: graceful-fs v3.0.0 and before will fail on node releases> = v7.0. Please update to graceful-fs@^4.0.0 as soon as possible. Use 'npm ls graceful-fs' to find it in the tree.

Тоді треба встановити запропоноване:

npm install -g [email protected] npm install -g graceful-fs@^4.0.0

установка:

npm install -g less

Vagrant

Це така допоміжна програма для VirtualBox і інших систем віртуалізації. Вона дозволяє швидко створювати віртуальні машини, на зразок тієї, яку ми вже створили. Працювати з необхідно з командного рядка.

Пишу це тут просто для інформації, що таке є.

Я пробував Vagrant. Так, дійсно програма робить свою справу. Але мені здалося це зайвим і не зовсім тим, що треба:

  • Таке корисно тому, хто створює віртуальні машини пачками. Чи не мій випадок. Можливо, поки що.
  • Віртуальні машини за допомогою Vagrant створюються на основі готових образів (боксів), яких є на офіційному сайті. Вони в разі необхідності автоматично завантажуються. Чесно кажучи, я не сильно довіряю цим боксів. Вважаю, що безпечніше створити своє. Тим більше це не так вже й складно.

В принципі, бокси для Vagrant - це створені і спеціально налаштовані віртуальні машини VirtualBox. Ми ось створили свою віртуальну машину. Її, в теорії, можна трохи допив, щоб використовувати в якості боксу. Бокс може бути локальним.

Я коли почав вивчати інформацію по Vagrant, то мене налякали всі ці інструкції в інтернеті. У кожній автор починає розбирати конфігураційний файл віртуальної машини, і це спочатку виглядає дико і зовсім непросто. Поспішаю заспокоїти новачків! Цей файл створюється автоматично самим Vagrant-му. Ви (при бажанні) можна внести в нього додаткові параметри, а можете і не вносити! Машина просто отримає настройки за замовчуванням. Часто цього досить.

Далі простий приклад, як можна створити за допомогою Vagrant той же веб-сервер на базі Debian 8. Перед тим, як почати Vagrant з офіційного сайту і встановлюємо його в будь-яку папку так, щоб в дорозі до цієї папці не було російських символів.

Відкриваємо консоль в Windows:

cmd

Викачуємо потрібний бокс і переконуємося, що він потрапив в список доступних локально боксів:

vagrant box add cimmwolf / jessie64-lemp vagrant box list

Для першої команди назву боксу я знайшов в за запитом «debian 8 lemp». Ось по ньому, де автор радить перед використанням боксу виконати установку плагіна:

vagrant plugin install vagrant-vbguest

Така команда виконується один раз, якщо раніше цей плагін ще не інстальована. Плагін дозволяє автоматично встановлювати в віртуальну машину доповнення гостьовий ОС.

Створюємо каталог і переходимо в нього, наприклад:

mkdir c: \ VMs \ Deb8lemp cd c: \ VMs \ Deb8lemp

Ініціалізація віртуальної машини:

vagrant init cimmwolf / jessie64-lemp

При цьому у нас з'являється в цьому каталозі файл Vagrantfile. Він містить конфігурацію майбутньої машини. Як вже сказав, настройки можна залишити за замовчуванням.

Встановлюємо віртуальну машину:

vagrant up

Усе! Через деякий час машина буде готова.

При установці машини автоматично встановлюються всі актуальні поновлення Debian. При кожному старті монтується загальна папка.

Таким чином, всього кілька команд в консолі і у нас готова для роботи віртуальна машина. Для входу по SSH використовуємо адреса 127.0.0.1, порт 2222, користувача vagrant, пароль vagrant.

Наступний запуск машини з консолі відбувається швидко:

C: \ VMs \ Deb8lemp> vagrant up Bringing machine 'default' up with 'virtualbox' provider ... ==> default: Checking if box 'cimmwolf / jessie64-lemp' is up to date ... ==> default: Clearing any previously set forwarded ports ... ==> default: Clearing any previously set network interfaces ... ==> default: Preparing network interfaces based on configuration ... default: Adapter 1: nat ==> default: Forwarding ports ... default: 22 (guest) => 2222 (host) (adapter 1) ==> default: Booting VM ... ==> default: Waiting for machine to boot. This may take a few minutes ... default: SSH address: 127.0.0.1:2222 default: SSH username: vagrant default: SSH auth method: private key ==> default: Machine booted and ready! [Default] GuestAdditions 5.1.2 running --- OK. ==> default: Checking for guest additions in VM ... ==> default: Mounting shared folders ... default: / vagrant => C: / VMs / Deb8lemp ==> default: Machine already provisioned. Run `vagrant provision` or use the` --provision` ==> default: flag to force provisioning. Provisioners marked to run always will still run.

У VirtualBox машину теж видно:

Docker

Це ще один альтернативний варіант. За своєю суттю пропонує вже не віртуалізацію, а створення ізольованих контейнерів поверх вашої системи. Таких контейнерів на одній системі можна запускати безліч. Додатки в кожному з них працюють повністю незалежно.

Через те, що тут немає повноцінної віртуалізації, то немає і витрати зайвих ресурсів на віртуальні операційні системи. Процесор, диск, пам'ять витрачаються виключно на встановлені в контейнерах додатки.

Docker призначений для Linux і використовує для створення контейнерів специфіку ядра цієї операційної системи. У Windows використовувати Docker можна двома способами. По-перше, є, який автоматично створює, знову ж таки, в VirtualBox віртуальну машину і вже там запускає контейнери. По-друге, можна самостійно створити віртуальну машину з Linux і там розгортати контейнери.

Автоматично створена машина Boot2docker-му:

Автоматично створена машина Boot2docker-му:

Крім вже сказаного є ще одна дуже вагома фішка. Ми створюємо для розробки сайту один або кілька контейнерів Docker, залежить від складності та масштабів сайту. Потім, коли сайт буде готовий, то ми саме ці ж контейнери просто переносимо на хостинг! Виходить, що сайт «продовжує» працювати в своєму рідному оточенні вже на іншому майданчику.

На мій погляд Docker цікавий, але тільки якщо ви працюєте саме в Linux. Використання контейнерів через віртуалізацію важко назвати витонченим варіантом. Тому я, як користувач Windows, відмовився від Docker. У всякому разі, немає поки необхідності.

Чому саме «NAT»?
Php phpinfo (); ?

Новости