Как развернуть сайт на VDS

c0f614ed9a5dde8d651f012749498ed8

Представим, что вы дописали свой проект или закончили первые задачи на проекте, и настала пора публиковать работу в сеть (организовать dev/test площадки или «выкатить в прод»).

Расскажем, как это делаем мы.

«Где разворачиваться?» — один из первых вопросов, который может у вас возникнуть.

Мы ответим, что самое универсальное, простое и правильное решение — это VDS (виртуальный выделенный сервер, который хостинг-провайдер предоставляет вам в аренду). Это почти как снять квартиру, в которой будут жить ваши веб-проекты, где лояльный арендатор позволяет делать все, что вам угодно, и не лезет, пока вы платите и не делаете ничего нелегального.

Затем вы спросите: окей, а почему не виртуальный (shared) хостинг? И мы ответим: такое решение лишь добавляет трудностей и лишает вас гибкости. Хотя такой метод может быть привычен тем, у кого есть свой небольшой сайт, которому не нужны особые технологии и достаточно простого PHP-бэкенда.

Shared-хостинг предоставляет доступ к ограниченным ресурсам и зачастую неудобную панель управления сайтами. Пользователь работает с ограниченным набором программ, не имеет прав на установку, в отличие от VPS или VDS, где пользователь по умолчанию получает root-полномочия.

Однако при выборе VPS/VDS важно помнить, что нужны минимальные навыки администрирования Linux.

В каких случаях предпочтителен VDS

В высоконагруженных проектах, требующих гибкого управления ресурсами, настройками и использования сложного стека технологий. А также в любом другом случае, когда возможностей shared-хостинга явно недостаточно.

VPS, VDS —, а в чем разница?

На самом деле, внешне разницы нет. Как и по опыту эксплуатации.

VPS и VDS отличаются только реализацией. Работа VPS полностью контролируется операционной системой, в то время как VDS— это виртуальный сервер на аппаратном уровне системы.

В случае VPS на сервер устанавливается операционная система на базе Linux, на которую устанавливается и настраивается OpenVZ. Процесс управления ресурсами сервера (контейнера) производится самой программой в ОС. VPS предполагает динамическое распределение доступных ресурсов между всеми машинами.

Из преимуществ можно выделить возможность изменения выделенных ресурсов без перезагрузки машины. Однако при использовании такого метода виртуализации работа контейнера будет зависеть от соседних контейнеров на хосте. Это может оказывать влияние на производительность вашего сервера, и в случае избыточной нагрузки на один сервер, другой, казалось бы, независимый, может пострадать.

Работа VDSпроисходит на аппаратном уровне (технология KVM). Каждый виртуальный выделенный сервер обладает своей собственной операционной системой и ресурсами.

KVM исключает ситуации, которые могли бы произойти при использовании VPS и гарантирует надежность и отказоустойчивость физических машин. Однако вы теряете гибкость.

Вопрос с изменением дискового пространства будет решаться монтированием дополнительного хранилища вместо расширения текущего. Расширение объема ОЗУ или количества ядер процессора также может оказаться более затруднительным.

Когда нужен VDS?

Когда нужно хранить много данных и размещать тяжелые проекты.

Как и говорилось ранее, вы можете делать с VDS все, что угодно. VPN-сервер, база данных, хост для бекенда и фронтенда, машина для удаленной сборки, машина для CI/CD, игровой сервер и так далее.

Какую конфигурацию выбрать?

RAM:

  • 2–4 Гб — один или несколько небольших сайтов. Хорошо подходит для dev площадки, на которых не предполагается настоящая, боевая, нагрузка;

  • До 16 Гб — подходит для почти любых типов проектов: Интернет-магазины, SPA или Telegram-боты, mini apps и т.п.;

  • 16–32 Гб — тяжелые проекты, или сервера, на которых планируется размещать много проектов. Например, маркетплейсы или backend для игр.

CPU:

Мы рекомендуем брать машины с процессорами частотой от 3 ГГц и количеством ядер от двух и больше.

Операционная система

Провайдеры зачастую предлагают готовые образы ОС, что значительно упрощает процесс создания нового VDS. Наиболее распространенными и рекомендуемыми являются системы Ubuntu и Debian. Мы выбираем первый вариант. 

А какой провайдер?

Какой понравится. Мы доверяем FirstVDS и Timeweb и используем их, отдавая предпочтение первому.

Что дальше?

Вы выбрали тариф, арендовали сервер. Дальше достаточно просто подключиться по SSH к машине и работать.

Для SSH-подключений мы используем Termius — современный SSH-клиент, позволяющий сохранять и синхронизировать хосты между клиентами, поддерживать несколько одновременных подключений. Также у Termius имеется встроенный клиент для SFTP, если потребуется.

После подключения первым делом нужно настроить базовую среду для вашего проекта.

По умолчанию провайдер предоставит вам чистый сервер, поэтому устанавливать nginx, docker и другие утилиты вам придется самостоятельно. Актуальную информацию о том, как настраивать те или иные приложения, можно найти на их официальных ресурсах.

Не стоит забывать о apt update или аналогичных командах для других систем перед началом работы с репозиторием пакетов вашей ОС.

Организация проектов

При работе с nginx хорошим тоном является размещение ваших проектов в директории /var/www/html сервера. Мы предпочитаем следующую структуру (приблизительно, для типового Laravel-проекта):

/var/www/html/:

project-domain.com/
-     builds/
-     -     current -> main/
-     -     main/
-     -     -    storage -> /var/www/html/project-domain.com/storage/
-     -     previous-main/
-     storage/
subdomain.project-domain.com/
another-project-domain.com/

Директории с проектами именуются по домену, по которому проект будет доступен. Директория builds предназначена для исходного кода, внутри располагается актуальный билд, предыдущий билд и ссылка на актуальный билд.

Такая структура позволяет быстро ориентироваться в проектах и откатывать билд в случае факапа.

Директория storage предназначена для хранения системных данных (кеш, логи) фреймворка и загрузок, если не используется внешнее хранилище (например, S3). Вынесение storage из директории проекта позволяет сохранять ее содержимое между обновлениями.

Также такая структура может оказаться удобной для CI/CD, однако ее вид может изменяться в зависимости от проекта и подхода к развертыванию.

У меня есть дамп базы данных и мне нужно доставить его на сервер. Как быть?

Можно воспользоваться SFTP или утилитой rsync, однако мы знаем решение удобнее — Croc.

Использовать croc очень просто:

Команда croc send на машине-отправителе открывает защищенный p2p-канал, выводит в стандартный поток вывода секретный код, который вам нужно передать в качестве аргумента croc на машине-получателе. Файл будет передан и не нужно заморачиваться со сложным форматированием команды rsync.

Передавать можно также и директории, однако это будет несколько медленнее, чем передача, например, архива этой же директории.

С помощью croc удобно организовывать межсерверную передачу файлов, однако важно помнить, что утилита должна быть установлена на обеих машинах.

Код доставлен, контейнеры подняты. Что дальше?

Сперва стоит подвязать ваш домен к адресу сервера. В панели управления вашего домен-провайдера создайте A-запись домена или поддомена, в которой укажите IP-адрес сервера.

Теперь немного по организации конфигов nginx.

Nginx предоставляет нам две директории: sites_available и sites_enabled.

В sites_available мы создаем server-конфиги для доменов, файлы именуем подобно директориям из /var/www/html — по домену. В sites_enabled вы можете размещать мягкие ссылки на конфиги из sites_available. Это позволит вам быстро включать и отключать сайты на уровне веб-сервера.

Не забывайте делать nginx -t для тестирования конфигов и nginx -s reload — для подгрузки изменений.

Сайт доступен из сети. Нужны сертификаты.

Самый простой способ выдать сертификат сайту — воспользоваться сервисом Let«s Encrypt. В этом поможет утилита certbot.

Certbot работает с веб-серверами nginx и apache и доступен из Snapcraft или Python PIP. Любой вариант установки должен работать, мы предпочитаем вариант с pip.

После установки certbot убедитесь, что ваши сайты доступны и запустите команду certbot --nginx.

Введите адрес электронной почты для получения писем о истечении срока действия сертификата и откажитесь от рассылки, если она вас не интересует. Certbot предложит вам выбрать домены, для которых выдать сертификат. Можно не выбирать — тогда сертификат будет выдан/обновлен для всех доменов, найденных в sites_enabled.

Не забывайте, что сертификат действителен в течение трех месяцев. Это значит, что его нужно будет периодически обновлять.

Можно сразу создать cron-запись на обновление раз в 2–3 месяца.

© Habrahabr.ru