Представим, что вы дописали свой проект или закончили первые задачи на проекте, и настала пора публиковать работу в сеть (организовать 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 <filename> — для отправки
croc <secret_code> — для получения
Команда 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 месяца.
Комментарии (15)
swanrnd
28.08.2024 11:04Я писал статью про настройку сервера, считал ее слабой для Хабра.
https://fitgame.ru/install-server.html
Но там есть все команды, как все настроить. Да без объяснения, но там была цель.
Здесь надо гуглить:
1) Как настроить location в nginx
2) Как прописать DNS
3) конфигурации примера нет, а не плохо бы сделать http2 и gzip
И еще я не согласен с выбором сервера, 1ГБ хватает многих, а потом если мало надо расширять.
Мы тестовые сервера берем с конфигурацией
1 ядро/1 ГБ/30 ГБ
А некоторые из коллег:
1 ядро/512 МБ/20 ГБMesDes
28.08.2024 11:04Статья очень и очень сырая и непонятно для чего написана. Это так же взял две-три доски горсть шурупов и сделал кровать. Если вас проект требует 16 гигов памяти сервера, то он явно не маленький и занимается им будет человек который знает, что он делает. А если вы пишите для новичков, то нужно ясно и подробно. Шаг за шагом. У нас помнится на 512 МБ висел сайт с посещаемостью 1000 уников. И для новичков лучше все же апач.
Denis1121
28.08.2024 11:04Это только у меня так криво отображается сайт? Просто… на всякий случай сообшаю. Так то статья годная, но читать невозможно.
viktorpov
28.08.2024 11:04Статья не для мобилок :) Вы же не собираетесь сайт заливать с мобилы? Не собираетесь же, верно?....
Denis1121
28.08.2024 11:04Не всегда в расположении есть доверенный компьютер. Я даже простые программы на смартфоне писал, когда в институте учился, потому что ноутбук в наказание забрали (играл, и лишили ноутбука, тип как хочешь).
Ди и просто изучать код порою удобнее на смартфоне (я же не сразу делать буду, а сначала тему изучу).
В любом случае, при таком количестве просмотров сайта с мобильных устройств, для них нужна адаптация.
swanrnd
28.08.2024 11:04Неожиданно, не рассчитывали на то, что с Мобайл будет. Но мы исправили, добавили прокрутку. Переносы не рискнули.
xSVPx
28.08.2024 11:04+1Нормальный сетап внутри докера был бы, наверное, полезен. Нормальный, а не то, что гуглится :).
Для тех кому нужно два камня по 3 гигагерца вряд ли нужны статьи...
frw23
28.08.2024 11:04А если не любитель ковыряться в конфигах, то есть такая штука как https://coolify.io/
Для нее нужна ещё одна самая простая VPS, но оно того стоит
UserCrypt
Слабо. Домохозяйка зайдёт и поймёт что ничего не поняла. Статья явно для тех, у кого опыт есть, потому что даже не расписано как добавлять сайты в nginx и ни слова про server_name в конфигах nginx и получения сертификата с помощью certbot. А certbot не только просто запустить, но ещё и выбрать как будет происходить подтверждение
Desert-Eagle
Поддерживаю: "Для новичка - непонятно. Для опытного - инфа бесполезна."
Нужно понять для какой категории статья пишется.
k4ir05
Очевидно, для галочки.