Хмара для благодійних фондів: посібник з міграції

Хмара для благодійних фондів: посібник з міграції

Нещодавно Mail.Ru Cloud Solutions (MCS) і сервіс Добро Mail.Ru запустили проект «Хмара для благодійних фондів», завдяки якому некомерційні організації можуть безкоштовно отримати ресурси хмарної платформи MCS. Благодійний фонд "Арифметика добра» взяв участь у проекті та успішно розгорнув частину своєї інфраструктури на базі MCS.

НКО після проходження валідації може отримати від MCS віртуальні потужності, але подальше налаштування потребує певної кваліфікації. У цьому матеріалі ми хочемо поділитися конкретними інструкціями щодо налаштування сервера на базі Ubuntu Linux для роботи основного сайту фонду та низки піддоменів з використанням безкоштовних SSL-сертифікатів. Для багатьох це буде просте керівництво, але сподіваємось, що наш досвід буде корисним для інших некомерційних організацій, і не тільки.

FYI: Що можна отримати від MCS? 4 CPU, 32 GB RAM, 1 TB HDD, ОС Ubuntu Linux, об'єктне сховище на 500 ГБ.

Крок 1: запускаємо віртуальний сервер

Перейдемо відразу до справи і створимо наш віртуальний сервер (він же інстанс) в особистому кабінеті MCS. У магазині додатків потрібно вибрати і встановити готовий стек LAMP, який є комплексом серверного програмного забезпечення (LAMP = Linux, Apache, MySQL, PHP), необхідний для запуску більшості веб-сайтів.

Хмара для благодійних фондів: посібник з міграції
Хмара для благодійних фондів: посібник з міграції
Хмара для благодійних фондів: посібник з міграції
Виберіть конфігурацію, яка підходить для сервера, і створіть новий SSH-ключ. Після натискання на кнопку «Встановити» почнеться інталяція сервера та стека LAMP, це займе якийсь час. Система також запропонує завантажити на комп'ютер приватний ключ для керування віртуальною машиною через консоль, збережіть його.

Після встановлення програми давайте відразу налаштуємо firewall, це робиться теж в особистому кабінеті: зайдіть у розділ "Хмарні обчислення -> Віртуальні машини" і виберіть пункт "Налаштування firewall":

Хмара для благодійних фондів: посібник з міграції
Вам необхідно додати дозвіл на вхідний трафік через 80 та 9997 порт. Це необхідно надалі для встановлення сертифікатів SSL і для роботи з phpMyAdmin. У результаті набір правил має виглядати так:

Хмара для благодійних фондів: посібник з міграції
Тепер можна підключитися до сервера через командний рядок по SSH-протоколу. Для цього наберіть наступну команду, вказавши нехай до SSH-ключа на вашому комп'ютері та зовнішню IP-адресу вашого сервера (його можна дізнатися у розділі «Віртуальні машини»):

$ ssh -i /путь/к/ключу/key.pem ubuntu@<ip_сервера>

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

$ sudo apt-get update

Система отримає список оновлень, встановіть їх за допомогою цієї команди та дотримуйтесь інструкцій:

$ sudo apt-get upgrade

Після інсталяції оновлень перезавантажте сервер:

$ sudo reboot

Крок 2: налаштовуємо віртуальні хости

Багатьом НКО потрібно містити кілька доменів або піддоменів одночасно (наприклад, основний сайт та кілька лендингів для промо-кампаній тощо). Все це можна зручно розмістити на одному сервері за допомогою створення кількох віртуальних хостів.

Спершу нам необхідно створити структуру директорій для сайтів, які відображатимуться відвідувачам. Давайте створимо кілька каталогів:

$ sudo mkdir -p /var/www/a-dobra.ru/public_html

$ sudo mkdir -p /var/www/promo.a-dobra.ru/public_html

І вкажемо власником поточного користувача:

$ sudo chown -R $USER:$USER /var/www/a-dobra.ru/public_html

$ sudo chown -R $USER:$USER /var/www/promo.a-dobra.ru/public_html

Мінлива $USER містить ім'я користувача, під яким ви залогінені в даний момент (за замовчуванням – це користувач ubuntu). Тепер поточний користувач володіє директоріями public_html, у яких зберігатимемо контент.

Нам також необхідно трохи відредагувати права доступу, щоб переконатися, що доступ на читання дозволено до спільної веб-директорії, всіх файлів та папок, що містяться в ній. Це необхідно, щоб сторінки сайту відображалися коректно:

$ sudo chmod -R 755 /var/www

Тепер ваш веб-сервер повинен мати дозволи, необхідні для відображення контенту. Крім того, тепер ваш користувач має можливість створювати контент у необхідних директоріях.

У директорії /var/www/html вже є файл index.php, давайте скопіюємо його в наші нові каталоги – це і буде поки що наш контент:

$ cp /var/www/html/index.php /var/www/a-dobra.ru/public_html/index.php

$ cp /var/www/html/index.php /var/www/promo.a-dobra.ru/public_html/index.php

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

За умовчанням, Apache має файл віртуального хоста 000-default.conf, який ми можемо використовувати як відправну точку. Ми збираємось скопіювати його, щоб створити файли віртуального хоста для кожного з наших доменів. Ми почнемо з одного домену, налаштуємо його, скопіюємо для іншого домену, а потім знову зробимо необхідні правки.

Конфігурація Ubuntu за промовчанням вимагає, щоб кожен файл віртуального хоста мав розширення *.conf.

Почнемо з копіювання файлу для першого домену:

$ sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/a-dobra.ru.conf

Відкрийте новий файл у редакторі з root-правами:

$ sudo nano /etc/apache2/sites-available/a-dobra.ru.conf

Відредагуйте дані таким чином, вказавши 80 порт, ваші дані для ServerAdmin, ServerName, ServerAlias, а також шлях до кореневого каталогу вашого сайту, збережіть файл (Ctrl+X, далі Y):

<VirtualHost *:80>
 
    ServerAdmin [email protected]
    ServerName a-dobra.ru
    ServerAlias www.a-dobra.ru
 
    DocumentRoot /var/www/a-dobra.ru/public_html
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
 
    <Directory /var/www/a-dobra.ru/public_html>
        Options -Indexes +FollowSymLinks +MultiViews
        AllowOverride All
        Require all granted
    </Directory>
 
    <FilesMatch .php$>
        SetHandler "proxy:unix:/var/run/php/php7.2-fpm.sock|fcgi://localhost/"
    </FilesMatch>
 
</VirtualHost>

ServerName встановлює основний домен, який має відповідати назві віртуального хоста. Це має бути ваше доменне ім'я. Друга, ServerAlias, Визначає інші імена, які повинні інтерпретуватися так, ніби це основний домен. Це зручно для використання додаткових імен, наприклад, з використанням www.

Скопіюємо цей конфіг для іншого хоста і теж відредагуємо його за аналогією:

$ sudo cp /etc/apache2/sites-available/a-dobra.ru.conf /etc/apache2/sites-available/promo.a-dobra.ru.conf

Ви можете створити скільки завгодно каталогів та віртуальних хостів для ваших веб-сайтів! Тепер, коли ми створили файли наших віртуальних хостів, ми маємо їх увімкнути. Ми можемо використовувати утиліту a2ensite для включення кожного з наших сайтів таким чином:

$ sudo a2ensite a-dobra.ru.conf

$ sudo a2ensite promo.a-dobra.ru.conf 

За замовчуванням у LAMP закрито 80 портів, а нам він знадобиться надалі для встановлення SSL-сертифіката. Тому відразу відредагуємо файл ports.conf і далі перезавантажимо Apache:

$ sudo nano /etc/apache2/ports.conf

Додайте новий рядок і збережіть файл, щоб він виглядав так:

Listen 80
Listen 443
Listen 9997

Після завершення налаштувань необхідно перезапустити Apache, щоб усі зміни набули чинності:

$ sudo systemctl reload apache2

Крок 3: налаштовуємо доменні імена

Далі вам необхідно додати DNS-записи, які будуть вказувати на новий сервер. Для керування доменами наш фонд "Арифметика добра" використовує сервіс dns-master.ru, покажемо на його прикладі.

Налаштування A-запису для основного домену зазвичай вказується так (знак @):

Хмара для благодійних фондів: посібник з міграції
A-запис для піддоменів зазвичай вказується так:

Хмара для благодійних фондів: посібник з міграції
IP-адреса – це адреса щойно створеного нами Linux-сервера. TTL можете вказати = 3600.

Через деякий час на ваш сайт вже можна буде зайти, але поки що тільки через http://. Наступного кроку ми додамо підтримку https://.

Крок 4: налаштовуємо безкоштовні SSL-сертифікати

Для вашого основного сайту та всіх піддоменів можна отримати безкоштовні SSL-сертифікати Let's Encrypt. Також можна налаштувати їхнє автоматичне продовження, що дуже зручно. Для отримання SSL-сертифікатів встановимо Certbot на ваш сервер:

$ sudo add-apt-repository ppa:certbot/certbot

Встановимо пакет Certbot для Apache за допомогою apt:

$ sudo apt install python-certbot-apache 

Тепер Certbot готовий до використання, виконуємо команду:

$ sudo certbot --apache -d a-dobra.ru -d www.a-dobra.ru -d promo.a-dobra.ru

Ця команда запускає certbot, ключі -d визначають імена доменів, для яких має бути випущений сертифікат.

Якщо це вперше, коли ви запускаєте certbot, вам буде запропоновано ввести адресу електронної пошти та погодитися з умовами використання сервісу. Після цього certbot зв'яжеться із сервером Let's Encrypt, а потім перевірить, що ви дійсно контролюєте домен, для якого ви запросили сертифікат.

Якщо все пройшло успішно, certbot запитає, як ви хочете настроїти конфігурацію HTTPS:

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

Рекомендуємо вибрати варіант 2 та натиснути ENTER. Конфігурацію буде оновлено, а Apache перезапущено для застосування змін.

Тепер ваші сертифікати завантажені, встановлені та працюють. Спробуйте перезавантажити ваш сайт за допомогою https:// і ви побачите піктограму безпеки в браузері. Якщо ви перевірите ваш сервер тестом SSL Labs Server Test, він отримає оцінку A.

Сертифікати Let's Encrypt дійсні лише 90 днів, але пакет certbot, який ми щойно встановили, буде оновлювати сертифікати автоматично. Для тестування процесу оновлення ми можемо зробити "сухий" запуск (dry run) certbot:

$ sudo certbot renew --dry-run 

Якщо ви не бачите жодних помилок в результаті виконання цієї команди, то все працює!

Крок 5: доступ до MySQL та phpMyAdmin

Багато веб-сайтів використовують бази даних. На сервері вже встановлено інструмент phpMyAdmin для управління БД. Для доступу до нього перейдіть у вашому браузері за посиланням:

https://<ip-адрес сервера>:9997

Пароль для root-доступу можна отримати в особистому кабінеті MCS (https://mcs.mail.ru/app/services/marketplace/apps/). Не забудьте змінити root-пароль у першому вході!

Крок 6: налаштовуємо завантаження файлів через SFTP

Розробникам буде зручно завантажувати файли для вашого веб-сайту через SFTP. Для цього ми створимо нового користувача, назвемо його webmaster:

$ sudo adduser webmaster

Система попросить задати пароль та внести деякі інші дані.

Змінюємо власника директорії з вашим веб-сайтом:

$ sudo chown -R webmaster:webmaster /var/www/a-dobra.ru/public_html

Тепер давайте змінимо конфіг SSH, щоб новий користувач мав доступ тільки до SFTP, а не терміналу SSH:

$ sudo nano /etc/ssh/sshd_config

Перейдіть до конфігурації до кінця і додайте наступний блок:

Match User webmaster
ForceCommand internal-sftp
PasswordAuthentication yes
ChrootDirectory /var/www/a-dobra.ru
PermitTunnel no
AllowAgentForwarding no
AllowTcpForwarding no
X11Forwarding no

Збережіть файл та перезавантажте сервіс:

$ sudo systemctl restart sshd

Тепер до сервера можна підключатися через будь-який клієнт для SFTP, наприклад через FileZilla.

Підсумок

  1. Тепер ви знаєте, як створювати нові каталоги та налаштовувати віртуальні хости для ваших веб-сайтів у рамках одного сервера.
  2. Ви можете легко створювати необхідні SSL-сертифікати – це безкоштовно, а оновлюватимуться вони автоматично.
  3. З базою даних MySQL можна зручно працювати через звичний phpMyAdmin.
  4. Створення нових облікових записів SFTP та налаштування прав доступу не потребують особливих зусиль. Такі облікові записи можна надсилати стороннім веб-розробникам та адміністраторам сайтів.
  5. Не забувайте періодично оновлювати систему, а також рекомендуємо робити бекапи - в MCS можна одним кліком зробити знімки всієї системи, а потім, при необхідності - запускати цілі образи.

Використані ресурси, які можуть бути корисними:

https://www.digitalocean.com/community/tutorials/apache-ubuntu-14-04-lts-ru
https://www.digitalocean.com/community/tutorials/apache-let-s-encrypt-ubuntu-18-04-ru
https://www.digitalocean.com/community/tutorials/how-to-enable-sftp-without-shell-access-on-ubuntu-18-04

До речі, тут можна почитати на VC, як наш фонд розгорнув платформу для онлайн освіти дітей-сиріт на базі хмари MCS.

Джерело: habr.com

Додати коментар або відгук