Чек-лист запуска
Используйте этот чек-лист для отслеживания прогресса при выводе нового сервиса от нуля до продакшена. Каждый пункт ссылается на соответствующую документацию, где это применимо.
Развёрнутая версия с готовыми файлами — Новый сервис: от репозитория до прода.
Репозиторий и структура проекта
[ ] 1. Создайте репозиторий в группе
integrations. Используйте соглашение об именованииmy-tool. Путь проекта в GitLab становится путём образа в registry, поэтому группа важна.[ ] 2. Заведите три ветки —
dev,stage,main. Пуши в остальные ветки пайплайн не запускают.[ ] 3. Настройте структуру проекта в соответствии со стандартным расположением файлов для вашего стека.
Структура для фронтенда
my-tool/ ├── src/ ├── public/ ├── index.html ├── package.json ├── nginx.conf ├── Dockerfile ├── .gitlab-ci.yml └── nomad/ ├── my-tool.nomad.hcl ├── vars-dev.hcl ├── vars-stage.hcl └── vars-prod.hclСтруктура для full-stack
my-tool/ ├── frontend/ │ ├── src/ │ ├── nginx.conf │ └── package.json ├── backend/ │ ├── src/ │ ├── migrations/ │ └── package.json ├── Dockerfile ├── .gitlab-ci.yml └── nomad/ ├── my-tool.nomad.hcl ├── vars-dev.hcl ├── vars-stage.hcl └── vars-prod.hcl[ ] 4. Инициализируйте приложение — установите зависимости, создайте точку входа и убедитесь, что приложение запускается локально.
Артефакты деплоя
Полные примеры каждого файла смотрите на странице Файлы деплоя.
[ ] 5. Создайте Dockerfile — multi-stage сборка с правильными базовыми образами.
- Фронтенд:
node:20-alpine(сборка) →nginx:1.27-alpine(раздача) - Бэкенд:
node:22-alpine(зависимости) →node:22-alpine+ tini (продакшен)
- Фронтенд:
[ ] 6. Создайте
nginx.conf(если есть фронтенд) — SPA fallback, gzip, кэш/assets/на 1 год,/index.htmlбез кэша,/healthвозвращает 200.[ ] 7. Создайте
.gitlab-ci.yml— подключите.docker_buildизmeduza/infra, задайтеREGISTRY_HOST: registry.amztop.ioиDUAL_PUSH: "false", опишите три задачи деплоя через Nomad API. Каждой задаче — тег раннераnew-server.[ ] 8. Создайте Nomad job-файл (
nomad/my-tool.nomad.hcl) — группы,constraintпоmeta.env, теги Traefik сenv=${var.env}первым, health-проверки, блокupdateс канарейкой,consul {}для групп с шаблонами.[ ] 9. Создайте Nomad vars-файлы — по одному на каждое окружение:
nomad/vars-dev.hclnomad/vars-stage.hclnomad/vars-prod.hcl
[ ] 10. Проверьте HCL до пуша —
nomad job validateдля каждой среды.
Конфигурация бэкенда (если применимо)
[ ] 11. Добавьте записи в Consul KV — один JSON-документ на среду по ключу
my-tool/<env>/config. Как минимум:portdatabase_urlnode_envlog_level
[ ] 12. Выполните миграции базы данных, если бэкенд использует БД.
[ ] 13. Проверьте, что эндпоинт
/healthвозвращает200 OK— и только тогда, когда сервис действительно готов принимать запросы.
Dev-окружение
[ ] 14. Запушьте в ветку
devи убедитесь, что GitLab CI отработал успешно.[ ] 15. Проверьте, что Docker-образ запушен в registry:
bashcurl -su <логин>:<токен> https://registry.amztop.io/v2/integrations/my-tool/backend/tags/list[ ] 16. Проверьте, что Nomad job задеплоен — откройте Nomad UI (не забудьте переключить namespace) или выполните:
bashnomad job status -namespace=dev my-toolНужный результат:
Deployment completed successfully, аллокацииrunningиhealthy.[ ] 17. Проверьте, что health-проверки проходят в Consul UI или через:
bashconsul catalog services | grep my-tool[ ] 18. Передайте домены на подключение — маршрутизация внешних имён настраивается централизованно. Пришлите строку вида
my-tool — dev, stage, prod — dev-my-tool.amzhub.ai, stage-my-tool.amzhub.ai, my-tool.amzhub.ai.[ ] 19. Проверьте доступность сервиса по адресу
https://dev-my-tool.amzhub.ai— после того как домен подключён.
Stage-окружение
[ ] 20. Смержите в ветку
stageи убедитесь, что CI задеплоил сервис.[ ] 21. Проверьте доступность сервиса по адресу
https://stage-my-tool.amzhub.ai.[ ] 22. Проведите базовое smoke-тестирование — пройдите основные пользовательские сценарии и проверьте API-эндпоинты.
Продакшен
[ ] 23. Смержите в
mainи запустите ручной deploy job в GitLab CI — прод выкатывается только по кнопке.[ ] 24. Проверьте доступность сервиса по адресу
https://my-tool.amzhub.ai.[ ] 25. Проверьте TLS — убедитесь, что сертификат валиден и выдан Let's Encrypt:
bashcurl -vI https://my-tool.amzhub.ai 2>&1 | grep "subject:"[ ] 26. Проверьте health-проверки в Consul.
[ ] 27. Проверьте маршрутизацию Traefik — убедитесь, что фронтенд и бэкенд (если применимо) отвечают по правильным путям.
[ ] 28. Мониторьте логи первые несколько минут после деплоя:
bashnomad alloc logs -namespace=prod -f <alloc-id>
После запуска
[ ] 29. Добавьте сервис во внутренний каталог инструментов / лендинг, если применимо.
[ ] 30. Оповестите команду о том, что новый сервис запущен.
WARNING
Не пропускайте stage-окружение. Проблемы, обнаруженные на stage, обходятся значительно дешевле, чем проблемы в продакшене.