неділя, 17 липня 2016 р.

Налаштування сервера Debian в VirtualBox для web-розробки на PHP

Debian був в якості основної ОС на моєму комп’ютері 3 роки. За цей час я досить чудово його вивчив.
Але наразі я ставлю такі вимоги до мого домашнього ПК:
1) Можливість використання останніх версій програм, які не відносяться до веб-сервера (FileZilla, Inkscape, Gimp, DeaDBeeF, Firefox, LibreOffice) та встановлювати їх з репозиторія, а не збирати самостійно, чи запускати як portable-варіанти.
2) Можливість залишити на сервері стабільні версії програмного забезпечення, яке чудово працює.  Адже я вирішив, що переводити свої проекти на PHP7 ще рано.
3) Можливість бекапу сервера (як колишній системний адміністратор - я не довіряю вінчестерам, якщо вони не працюють в RAID-масиві)
4) Можливість плавного переїзду (спочатку налаштую та перевірити, а потім міняти ОС на домашньому ПК)

Я встановлював різні більш-менш солідні безкоштовні дистрибутиви на віртуальній машині та на ноутбуці дружини для вивчення та тестування. Спочатку це були OpenSUSE, Linux Mint, Manjaro та Fedora. Колись давно я ставив в віртуальній машині Arch Linux. Тоді встановлення цього представника світу Linux виявилось мені тяжким. Не то що б це було складно, але я не розумів чому він немає графічного чи псевдо-графічного інтерфейсу встановлення. І звісно ж віддав перевагу спочатку Ubuntu, а потім Debian, які ставляться в декілька кліків. Але щоб мати право про щось говорити - це потрібно спробувати. Тому я вирішив встановити і Gentoo щоб відчути ту всю "міць", про яку стільки написано в Інтернет.
І коли я скомпілював декілька разів Gentoo на слабенькому ноутбуці, а він в кінцевому результаті і не запрацював так як слід -  я зрозумів що встановлення Arch Linux - це квіточки.
Ця система насправді дуже проста і зрозуміла. А близько 40% команд, які я використовував при встановленні Gentoo - використовуються і при встановленні Arch Linux.
Склалося такі відчуття, що під час встановлення і налаштування протягом 2 тижнів цього дистрибутиву я дізнався про Linux більше, ніж за 7 років користування linux-ом до цього. Я зрозумів що це той дистрибутив, з яким я хочу пов’язати життя мого ПК :)

Що мені сподобалось:
- Rolling release
- Легкість процесу збирання пакетів з AUR (в порівнянні зі збиранням пакетів .deb - це небо і земля)
- Можливість видаляти пакети KDE, якими не користуюсь
- Швидкість роботи менеджера пакетів pacman
- Розуміння що я роблю і для чого

Тому логічно, що в мене з'явилося бажання відділити на логічному рівні сервер від місця розробки. Необхідно було щось знайти таке, щоб можливо було сервер встановити в віртуальній машині, а своє середовище розробки запускати на основному комп’ютері. Тоді я б зміг в якості ОС для сервера використовувати Debian 8, а в якості ОС для основного ПК - Arch Linux. Причому сервер має працювати без графічного оточення в цілях економії оперативної пам’яті.
Оскільки вже звик, що в світі linux - можливо все, то почав свій пошук в Інтернет із FTP, SFTP, Samba, спільні папки VirtualBox...

І тут мені трапилась стаття Виртуальная машина, как сервер для web-разработки.

Це саме те що я шукав. Використання NFS дозволить налаштувати все саме так, як мені потрібно. Я отримаю можливість бекапу всього сервера (файл *.vdi). Також я зможу забезпечити плавний переїзд (спочатку налаштую та перевірю все в VirtualBox, а потім зможу змінити Debian на основному ПК на Arch Linux).

Далі про те, як я це робив...



1. Встановлення Debian у VirtualBox
Описувати цей процес не буду, так як інструкцій в Інтернет вистачає і так. Єдине що я звик встановлювати Debian в режимі Expert install. Так в мене більше контролю над процесом встановлення. Диск для віртуальної ОС створював динамічний. Забігаючи на перед скажу, що після встановлення та налаштування Debian, відповідно до цієї статті, розмір vdi-диска склав 2,2 Гб. Я створював диск розміром 30Гб на перспективу.

2. Налаштування 3 мережевих адаптерів VirtualBox
Ось стаття, де це описано.

3. Встановлення SSH в гостьовій ОС.
aptitude install openssh-server

Перевірка статусу сервіса
# /etc/init.d/ssh status
або
# service ssh status

4. Підключення до сервера через SSH
$ ssh –l oleg 192.168.31.31
Адресу 192.168.31.31 використовую я. Ви ж можете змінити на свою.
Налаштування підмережі пулу адрес відбувається в налаштуваннях VirtualBox (Файл - Налаштування - Мережа - Host Only Networks - vboxnet0
 - Адаптер, Сервер DHCP),
а налаштування ІР-адреси в файлі /etc/networks/interfaces Debian.

oleg - це ім’я користувача на сервері

Підключатися через SSH зручніше ще в тому плані, що можна керувати шириною вікна консолі і прокручувати у вікні довгий вивід якоїсь команди.

5. Тепер можна встановити додаткові пакети для більш зручної роботи (не обов’язково)

# aptitude install htop vim mc
Надалі для редагування файлів я буду використовувати консольний текстовий редактор vim. Те ж саме можна робити з допомогою вбудованого текстового редактора nano, що і бажано робити, якщо раніше цим редактором ви не користувалися.
Більше детальніше з ним можна ознайомитись в моїй статті Основні команди VIM


6. Встановлення Apache2
# aptitude install apache2

7. Перевірка статусу apache2 на сервері
#service status apache2
8. Перевірка працездатності в браузері основної ОС
http://192.168.31.31
Якщо бачимо сторінку з надписом "Apache2 Debian Default Page", значить служба працює.

9. Налаштування apache2
Додаю користувача oleg в групу www-data
#usermod -a -G www-data oleg
Для того щоб користувач дійсно додався в групу (перевіряється командою groups) необхідно перелогінитись.

Додаю в файл /etc/apache2/apache2.conf рядок
ServerName      localhost

для того щоб Apache2 при перевірці статусу не писав зайвий рядок "Could not reliably determine the server's fully qualified domain name"

11. Встановлення та налаштування MySQL
# aptitude install mysql-server
В момент встановлення необхідно буде двічі вказати бажаний пароль користувача root для MySQL.

Після цього можна виконати команду
mysql_secure_installation


Спочатку задасть декілька запитань
1) "Enter current password for root (enter for none):"
Ввожу пароль root, який був заданий на попередньому кроці)
2) "Change the root password?".
Я не бажаю змінювати пароль тому не погоджуюсь ("n").
3) "Remove anonymous users?" ("Чи потрібно видалити анонімних користувачів mysql?)"
Я погоджуюсь ("y")
4) "Disallow root login remotely?" ("Чи заборонити користувачу root підключатися віддалено")
Для налаштування сервера, який буде видно ззовні слід натискати "y". Мій же сервер буде видно тільки з моєї локальної мережі, тому я натискаю "n"
5) "Remove test database and access to it?" ("Видалити тестову базу даних та доступ до неї?")
Я погоджуюсь ("y")
6) "Reload privilege tables now?" ("Перезавантажити таблицю привілеїв зараз?")
Я погоджуюсь ("y")

12. Перевірка працездатності Mysql
 Перевіряю статус

# service mysql status

Підключаюсь та переглядаю список таблиць
$mysql -u root -p
mysql> SHOW DATABASES;

Список таблиць показано
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.00 sec)

Розриваю з'єднання з базою даних (Ctrl + D)

13. Створення папок та файлів для тестового віртуального хосту
Створюю папку

# mkdir /var/www/testsite.local

Створюю тестовий файл /var/www/testsite.local/info.php
З таким вмістом

<html>
<head>
<title>PHP</title>
</head>
<body>
<?php
phpinfo();
?>
</body>
</html>




# vim /var/www/testsite.local/info.php

Змінюю власника для папки /var/www та встановлюю необхідні права

sudo chown -R www-data:www-data /var/www;

sudo find /var/www -type d -exec chmod 775 {} +;

sudo find /var/www -type f -exec chmod 664 {} +;

Це універсальні команди які змінюють власника та права рекурсивно для всіх директорій та файлів, які знаходяться в /var/www. В мною написаний bash-скрипт, який я запускаю щоб не вводити ці команди вручну.

14. Створюю конфігураційний файл Apache для віртуального хоста (/etc/apache2/sites-available/testsite.local.conf) з таким вмістом

<VirtualHost *:80>

        ServerAdmin root@localhost

        ServerName testsite.local

        ServerAlias www.testsite.local

        DocumentRoot /var/www/testsite.local

        ErrorLog ${APACHE_LOG_DIR}/error.allsites.log

        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.allsites.log combined

</VirtualHost>



# vim /etc/apache2/sites-available/testsite.local.conf

Цей конфігураційний сайт відноситься тільки до одного віртуального хоста. Всі помилки та інші повідомлення своїх сайтів я пишу в один файл. Якщо необхідно помилки писати в окремі файли - це саме той файл, де це необхідно налаштувати.

15. Додаю в файл /etc/hosts рядок

127.0.1.1       testsite.local
для співставлення доменного імені та хоста.

# vim /etc/hosts


16. Вмикаю сайт та перезавантажую службу apache2


# a2ensite testsite.local.conf

# service apache2 reload

17. Встановлення PHP

# aptitude install php5 php5-mysql

18. Перевірка працездатності PHP  та віртуального хоста
Додаю в файл /etc/host основної ОС рядок

192.168.31.31 testsite.local
для співставлення доменного імені та хоста у Virtualbox

Перезавантажую службу apache2 в основній ОС


# service apache2 reload

В браузері основної ОС переходжу за адресою
http:\\testsite.local

Бачу сторінку з виводом функції phpinfo(), отже все працює.

20. Встановлення phpmyadmin

# aptitude install phpmyadmin
В процесі встановлення скрипт запитає: 
1) Який веб-сервер встановлено? (apache2)
2) Дозвіл на створення бази phpmyadmin, в якій будуть збережені налаштування (погоджуємось)
3) Пароль root доступу до бази даних
4) Який пароль встановити для бази phpmyadmin

Налаштовувати інший alias для phpmyadmin в цілях безпеки в даному випадку не збираюсь, так як підключення до даного сервера ззовні не планується (принаймні поки-що).

21. Встановлення NFS-server

# aptitude install nfs-kernel-server nfs-common portmap


22. Конфігурація NFS-сервера
В файл /etc/exports додаю рядок

/var/www/ 192.168.31.1(rw,async,no_subtree_check,all_squash,anonuid=33,anongid=33)


# vim /etc/exports

Тут
rw - доступ на читання та запис
async - асинхронний режим роботи
no_subtree_check - відключення перевірки на знаходження файлів в каталозі, який відкритий
all_squash - всі клієнти на NFS-сервері будуть вважатися анонімними, або тими, ID яких вказані в anonuid та anongid
anonuid, anongid - ID користувача та ID групи користувача на сервері Переглянути можна так:
#cat /etc/passwd

Я вказав 33:33, тому що хочу щоб створені файли та директорії належали власнику www-data:www-data

23. Перезапуск служби
# service nfs-kernel-server restart

24. Встановлення та налаштування NFS-клієнта (в основній ОС)
#aptitude install portmap nfs-common

25. Створюю скрипт підключення NFS-папки /home/oleg/my_scripts/nfs-connect.sh
з таким вмістом

#!/bin/bash
sudo mount -t nfs -o rw,soft,intr 192.168.31.31:/var/www /home/oleg/debsrv_data

# vim /home/oleg/my_scripts/nfs-connect.sh

26. Створюю скрипт відключення NFS-папки ~/my_scripts/nfs-disconnect.sh
з таким вмістом

#!/bin/bash
sudo umount /home/oleg/debsrv_data

# vim /home/oleg/my_scripts/nfs-connect.sh

27. Роблю скрипти виконуваними

# chmod ug+x /home/oleg/my_scripts/nfs-connect.sh /home/oleg/my_scripts/nfs-disconnect.sh 
28. Тестування підключення в консолі основної ОС
sudo /home/oleg/my_scripts/nfs-connect.sh

29. Тестування можливості редагувати файл
vim /home/oleg/debsrv_data/testsite.local/index.php

30. Тестування відключення в консолі основної ОС
sudo /home/oleg/my_scripts/nfs-disconnect.sh

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

На цьому все ;)

Немає коментарів:

Дописати коментар