CI/CD и деплой
Система CI построена на Gitea Actions (.gitea/workflows/). Два основных сценария: ветка и тег.
Ветки → стенды
При каждом git push в любую ветку (включая master) автоматически:
- Собирается проект (
yarn build) - Публикуются Docker-образы в registry
git.jt4d.ru/1vit/more/:web:<branch>api:<branch>ingress:<branch>
- Разворачивается стенд на стейджинге по адресу
http://<branch>.<STAGING_HOST>
Каждый стенд получает изолированную базу данных. Миграции запускаются автоматически при деплое.
При удалении ветки стенд и образы удаляются автоматически.
Теги → релизные образы
При git push тега (например v1.18.0) запускается workflow release.yaml:
- Собирается проект
- Публикуются Docker-образы с двумя тегами — именем тега и
latest:git.jt4d.ru/1vit/more/web:v1.18.0git.jt4d.ru/1vit/more/web:latest- Аналогично для
apiиingress
Стенд при push тега не создаётся.
Чтобы выпустить релиз:
git tag v1.18.0
git push origin v1.18.0
Продакшн-деплой
Для деплоя на продакшн используется docker-compose.production.yml. Образы берутся из Gitea
registry.
Развернуть последнюю версию (latest):
PROD_HOST=example.com \
DB_HOST=db DB_USERNAME=user DB_PASSWORD=pass DB_DATABASE=mydb \
docker compose -f docker-compose.production.yml up -d
Развернуть конкретную версию:
TAG=v1.18.0 PROD_HOST=example.com \
DB_HOST=db DB_USERNAME=user DB_PASSWORD=pass DB_DATABASE=mydb \
docker compose -f docker-compose.production.yml up -d
После деплоя не забыть прогнать миграции:
docker exec 1vit_more_prod_api node_modules/.bin/typeorm migration:run -d data-source.js