Найти в Дзене
ИТ-беседка

Как настроить инфраструктуру pet-проектов

Оглавление

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

Какие проблемы могут возникнуть

Раньше, как и многие сейчас, я просто брал выделенный недорогой сервер, поднимал там весь проект и он жил себе не тужил, но у этого всегда было много трудностей (по крайней мере для меня). В проектах появлялся фронт (ssr) и бек API, потом появлялись фоновые процессы запущенные отдельно, не проблемы, но за каждым из них нужен мониторинг и настройка перезапуска при падении. Проблемы могли быть, если кто-то будет выжирать всю память или процессор. Я не говорю уже о том чудном дне, когда люди начнут приходить и ты понимаешь, что серверов должно становиться больше. Следующей проблемой являются базы данных, поднять их не сложно, но ведь нужно настроить тот же мониторинг с рестартом при проблемах и как минимум начать делать бекапы. Конечно же любые раздаваемые файлы, тоже нужно бекапировать и не слечь при их раздаче. Естественно это все решаемо, можно настроить, если потратить достаточно времени. Но, как я уже сказал, проект то по большому счету хоббийный, времени на лишнюю мороку нет, а то, что есть, хочется уделить проекту.


Как сделать эффективнее

Поэтому я сменил подход. Если это проект, где хочется посмотреть на реакцию аудитории для начала, то берем тильду или готовую cms, закупаем немного трафика и смотрим переходить ли на следующий этап.

Перейдя на следующий этап, или сразу начиная с него, я беру готовые инфраструктурные компоненты. Все сервисы я запускаю в kubernetes, который беру как сервис у любого нравящегося вам крупного поставщика облачных услуг. Это сразу решает описанные мною проблемы, с Docker я думаю все умеют работать (ну либо довольно не сложно научиться это делать). Базы данных тоже берем как сервис, с настроенным мониторингом и бэкапами (если есть желание можете добавить ручной бекап в хранилище на этом же поставщике или другом). Добавляем cdn для раздачи статики (опять же предложений вагон, выбираем на свой вкус) и docker regestry для хранения и раздачи образов. Я обычно беру все это в одном месте для простоты эксплуатации. В итоге получаем масштабируемую систему, с неплохим базовым мониторингом, совсем не зависящую от используемых языков программирования.

Да, конечно возникнет вопрос деплоя проектов и изменений в базы, но собственно он возникает всегда. Тут каждый выбирает от своих потребностей и возможностей. Кто-то любит, что-то типа circleci, кто-то напишет вручную. Пока команда маленькая, это не имеет значение. Как только будет расти команда и будет вырисовываться сложный процесс перед выкаткой проекта, то конечно нужно будет брать облачные инструменты (тут тоже есть из чего выбрать).

Минусом данного подхода будет выросшая цена. На текущий момент, чтобы быть уверенным, что все заработает это обойдется в 15-20 тысяч рублей в месяц. Не дешево? но подъемно. В принципе ужаться можно будет и до 8-10 тысяч. Дополнительным плюсом будет, то что вы не ограничены одним проектом, и, настроив выкатку раз, сможете запускать и другие свои проекты схожим образом, без затрат временных усилий.

Автор: Максим Шаламов