Первый проект где ты фулстак часть вторая
Следующим этапом я столкнулся с проблемой которая звучит так - А что собственно делать на железке чтобы по адресу появился сайт и бекенд? Посидел расписал свои хотелки 1. Красивый адрес 2. CICD процесс для бека и фронта 3. Понять как деплоить на свою железку проект
Пункт первый и самый простой купить домен С одной стороны задача тривиальная, однако для меня который на момент начала проекта знал что они просто бывают это было непонятно) Помним, да, что я мобильщик и я рисую красивые кнопочки. После недолгого гугления я выяснил, что доменные имена покупаются и вышел на сайт Рег.ру, там я купил доменное имя и привязал его к нужному IP адресу, а также позже в процессе настройки деплоя я завел еще и поддомен для бекенд части
Пункт второй и сразу третий Решил начать с фронта Для теста загрузил и поднял проект (болванку) через SSH В целом для сборки приложений я уже писал CICD, однако тут полезли отличия, так как у меня небыло раннера пришлось разобраться с его конфигурацией, все написал и внезапно не завелось Начал разбираться с этой проблемой Пришлось перебрать докер композ, пришлось изрядно повозиться прежде чем все получилось. Поитогу потратил две недели вечерами и 230+ попыток прежде чем все срослось. И тут началось самое забавное бекенд, по совету своего товарища начал ковырять nest в целом достаточно понятная и приятная штука, для тестов деплоя создал болванку с одним эндпоинтом и генерацией сваггера, тут дело с деплоем уже пошло веселее, ибо я уже чуток подразобрался с этими конфигурационными файлами. НО! Вылезла другая проблема, в моменте когда один из двух раннеров успешно деплоил проект, другой сервис отваливался, и я не мог понять почему, однако после суток проведенных за монитором и литра виски я выяснил что при деплое останавливался весь композ, таким образом я пришел к использованию профилей для сервисов докер композа.
Был кстати интересный момент который я не смог победить и пока решил оставить. Может кто подскажет что к чему и где я опростоволосился
В несте у меня есть такая запись дающая префикс перед всеми эндпоинтами
app.setGlobalPrefix('api')
А в докер композе в лейблах сервиса бекенд указано следующее
- "traefik.http.routers.backend.rule=Host(_._.ru) && PathPrefix(/api)" - "traefik.http.middlewares.backend-stripprefix.stripprefix.prefixes=/api"
Что поитогу дает следующий адрес при запросах
https://..ru/api/docs - для просмотра спецификации
https://*.__.ru/api/api/health - где health это эндпоинт
Однако, я подумал может что-то одно убрать и будет все красиво, но тут я просчитался, ведь если я убираю или меняю значение из неста - неработает Если я как-либо меняю записи в лейблах или убираю строку - "traefik.http.middlewares.backend-stripprefix.stripprefix.prefixes=/api" или убираю PathPrefix(/api) внезапно тоже не едет. Ну и естественно если эти способы комбинирую итог тотже. Вобщем если есть желание или интерес подсказать то буду рад совету.
Ну и из интересных фич которые я добавил в CI/CD это отправка сообщений через бота мне о состоянии деплоя обоих проектов, картиночки приложу.
А что поитогу? Автоматизированный деплой проекта с нотификациями прямо в телефон, независимость деплоя бека от деплоя фронта, куча седых волос и потраченного времени…
Но черт возьми - ОНО ЖИВОЕ)
Итогом трех недель я крайне доволен, ну а что осталось? Спроектировать спецификацию, продумать юзкейсы, написать фронт, написать бек, простестировать, выкатить в альфу примерно через 2 недели, а 16 августа будет большой стресстест для меня в первую очередь ибо проектом одновременно будут пользоваться 100+ человек, кроме того от него будет зависеть проведение всероссийского турнира по варгейму Warhammer 40000.
Я не теряюсь я фигачу проект) Следующие части будут
Постскриптум - здоровую критику приветствую)