Настройка VPS до сих пор вызывает слезы…
Ты - разработчик. Ты только что завершил свой проект. Код отполирован, функциональность протестирована, всё работает идеально. Осталась сущая мелочь - выкатить это на сервер. И вот здесь начинается чистое мучение.
Знакомая история? Голова идет кругом от одних только вопросов. Где взять этот чертов VPS и какой тариф выбрать? Почему SSH-ключи, которые вчера работали, сегодня внезапно «недействительны»? Какой именно порт нужно открыть в firewall, чтобы всё заработало, но при этом не превратить сервер в подарок для хакеров? Почему nginx снова отдает 502 Bad Gateway, хотя вчера на локали всё летало? Зачем Let's Encrypt снова требует какую-то дикую проверку и упорно не хочет выдавать сертификат? И почему, встав утром с постели, ты понимаешь, что половина скриптов деплоя безнадежно устарела и всё нужно переделывать?
Это тот самый момент, когда эйфория от созданного продукта разбивается о суровую реальность серверного администрирования. Ты осознаешь горькую правду: развёртывание - это уже не про технологии и инновации. Это про бесконечную, монотонную, высасывающую всю радость боль.
От боли к озарению: рождение VPSSetup
Меня зовут Владимир, я Go-разработчик. Последние пару лет я точно так же выкатывал свои проекты на обычные VPS, и в какой-то момент меня осенило. Самая рутинная и утомительная часть разработки - это вовсе не написание кода или продумывание архитектуры. Ад начинается там, где ты сталкиваешься с настройкой сервера, окружения и бесконечной инфраструктуры.
Каждый новый VPS настраивался вручную, с нуля. Создание пользователей, тонкая настройка SSH и UFW, установка пакетов, Docker, Docker Compose, разбор прав и структуры каталогов... У каждого сервиса - свой набор переменных окружения, папок и портов. В этой каше что-то постоянно забывалось, а что-то неожиданно конфликтовало. Даже после успешного деплоя обновление проекта превращалось в отдельный квест. Всё это воровало драгоценное время, которое можно было бы потратить на развитие продукта, а не на борьбу с конфигами.
Стало ясно: делать всё руками - невыносимо, а тащить в проекты тяжеловесные Enterprise-инструменты - бессмысленно и избыточно. Так родилась идея VPSSetup - лёгкого, но полноценного инструмента, который должен был положить конец этой боли.
Почему существующие инструменты - не панацея
Конечно, я не сразу изобрёл велосипед. Сначала был взгляд в сторону «серьёзных» решений: Terraform, Ansible, Kubernetes, Portainer. Мощные, проверенные, но для задач одиночки или маленькой команды они подобны атомному реактору для кипячения чайника.
Terraform оказался избыточным для управления одним-двумя серверами. Kubernetes требовал глубоких знаний и постоянного внимания, превращая разработчика в полноценного DevOps. Ansible делал слишком много, а для простых задач его изучение не окупалось. Portainer упрощал работу с Docker, но молчал на вопросы начальной настройки инфраструктуры. Облачные платформы были удобны, но часто дороги и навязывали свою экосистему.
Итог был неутешительным: между «делать всё вручную» и «поднять целый Enterprise-стейк» зияла огромная пустота.
Попытка №1: Спасительные и коварные bash-скрипты
Как и многие, я пошёл по пути наименьшего сопротивления - начал писать bash-скрипты для автоматизации. И поначалу это казалось гениальным решением. Но чем больше проектов я вёл, тем очевиднее становилась вся шаткость этой конструкции.
Скрипты оказались невероятно хрупкими: любое, даже самое незначительное изменение в окружении или зависимостях, могло развалить всю хрупкую цепочку. Они категорически не хотели масштабироваться - когда проектов стало больше пяти, воцарился настоящий хаос из похожих, но несовместимых файлов. Они практически не переиспользовались, ведь у каждого проекта находилась своя уникальная специфика. Самое главное - их оказалось невозможно элегантно расширить. Попытка добавить, например, Web API или централизованное управление упиралась в саму природу «набора файлов». Стало ясно: скрипты - это костыль, который больно бьет по голове, а не решение.
Продолжение в следующем посте, лимит на символы в 21-ом веке…