#devops
👁 616↗ 23
Инфраструктура МВП проекта, а может и дольше
Салют! Сегодня расскажу про инфраструктуру для МВП, которую я обычно настраиваю в самом начале разработки нового проекта.
Хостинг
Из всех хостингов я придерживаюсь 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