Нещодавно Mail.Ru Cloud Solutions (MCS) і сервіс Добро Mail.Ru запустили проект «
НКО після проходження валідації може отримати від 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:// і ви побачите піктограму безпеки в браузері. Якщо ви перевірите ваш сервер тестом
Сертифікати Let's Encrypt дійсні лише 90 днів, але пакет certbot, який ми щойно встановили, буде оновлювати сертифікати автоматично. Для тестування процесу оновлення ми можемо зробити "сухий" запуск (dry run) certbot:
$ sudo certbot renew --dry-run
Якщо ви не бачите жодних помилок в результаті виконання цієї команди, то все працює!
Крок 5: доступ до MySQL та phpMyAdmin
Багато веб-сайтів використовують бази даних. На сервері вже встановлено інструмент phpMyAdmin для управління БД. Для доступу до нього перейдіть у вашому браузері за посиланням:
https://<ip-адрес сервера>:9997
Пароль для root-доступу можна отримати в особистому кабінеті MCS (
Крок 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.
Підсумок
- Тепер ви знаєте, як створювати нові каталоги та налаштовувати віртуальні хости для ваших веб-сайтів у рамках одного сервера.
- Ви можете легко створювати необхідні SSL-сертифікати – це безкоштовно, а оновлюватимуться вони автоматично.
- З базою даних MySQL можна зручно працювати через звичний phpMyAdmin.
- Створення нових облікових записів SFTP та налаштування прав доступу не потребують особливих зусиль. Такі облікові записи можна надсилати стороннім веб-розробникам та адміністраторам сайтів.
- Не забувайте періодично оновлювати систему, а також рекомендуємо робити бекапи - в MCS можна одним кліком зробити знімки всієї системи, а потім, при необхідності - запускати цілі образи.
Використані ресурси, які можуть бути корисними:
До речі,
Джерело: habr.com