// личный канал‑лог
gavrilovlog
← все записи

#devops

👁 61623
Инфраструктура МВП проекта, а может и дольше Салют! Сегодня расскажу про инфраструктуру для МВП, которую я обычно настраиваю в самом начале разработки нового проекта. Хостинг Из всех хостингов я придерживаюсь Hetzner, Scaleway или DigitalOcean, а если требуется развернуть в РФ, то Selectel. Именно в таком приоритете. И чаще всего мне хватает Hetzner Cloud. Особенно для МВП. О том как создать сервер на hetzner cloud, есть видео на моем Youtube канале. https://youtu.be/t01IKGgtv6w?t=106 VSC В качестве хранилища кода, я больше склоняюсь к GitLab, только из-за удобного CI-менеджера “gitlab-ci”. Все процессы сборки и деплоя я настраиваю через систему тегирования по семверу. То есть, любая сборка начинается с присвоения тега последнему коммиту. Теги могут быть 2 вариантов: 1. release candidate - если тег начинается с rc* 2. version - если тег начинается с v* Например: rc0.0.1 - указывает на то что выполнится автоматическая сборка и будет доступен деплой, НО только на dev-сервер. Если мы указываем v0.0.1 - то также выполнится сборка, но деплой будет доступен и на dev-сервер и на prod-сервер. Docker Все приложения и фронт и бэк я запускаю в Docker контейнерах. Важно отметить, что я не использую проброс портов, а указываю параметр network_mode со значением host, чтобы использовать тот порт, на котором запускается приложение. Поэтому важно, чтобы приложение запускалось именно на хосте 127.0.0.1, а не на 0.0.0.0 из соображений безопасности. DockerHub Пока что GoHarbor для меня самое удобное решение. Позволяет развернуть собственный registry на своем сервере с понятным ui-интерфейсом. Веб-сервер Тут все просто, NGINX это легкий и удобный веб сервер, который можно настроить очень гибко под 99% задач. DNS и proxy Тут тоже мой выбор падает на самое популярное решение, это CloudFlare. Так как уровень безопасности, который они предоставляют, на данный момент выше большинства других подобных сервисов. А также на этапе МВП, бесплатного тарифа более чем достаточно. Хранилище секретов Vault от компании hashicorp. Это наверное пока самое безопасное решение на рынке для хранения как переменных окружения так и других секретов. Однако он достаточно сложный в установке и настройке, мне когда-то потребовалось более недели, чтобы разобраться. А так как настройка этого сервиса очень редко встречается в моей практике, то каждый раз когда требуется снова настроить, я опять открываю 1000 вкладок браузера, чтобы найти нужные мне команды 🙂 VPN Я достаточно много думаю о безопасности, но все равно хотелось бы больше, поэтому я все сервисы, все доступы к ресурсам всегда закрываю под VPN. И последнее время мой выбор падает на WireGuard. Ранее я использовал OpenVPN, тоже хороший вариант. Но я заметил, что при большом количестве одновременных подключений, WireGuard справляется лучше, чем OVPN. Сервера Обычно я использую 5 серверов для МВП проекта: 1. cicd - этот сервер, на котором я устанавливаю gitlab-runner. На этом сервере происходит сборка образов и пуш в docker hub. + На этом сервере установлен Vault, чтобы обеспечить доступ к переменным окружения во внутренней сети, и меньше передавать их по внешней. 2. hub - название говорит само за себя, это сервер с запущенным GoHarbor. 3. vpn - сервер с установленным WireGuard VPN. 4. dev - дев сервер с Docker для разработки и тестирования. 5. prod - production сервер также с Docker. Алгоритм работы такой инфраструктуры 1. Присвоение тега на последний коммит. 2. Происходит автоматическая сборка и пуш в GoHarbor. 3. Если требуются дополнительные переменные окружения в текущем релизе, то добавляем их в UI Vault. 4. Нажимаем деплой, либо dev либо prod и тогда gitlab-runner, берет из GoHarbor образ по указанному в названии тегу и деплоит его на тот сервер, какой деплой мы выбрали. 5. Наше приложение запускается на на том порту, который был указан в самом приложении, либо в переменных окружения.
142