From d75f0ab0320456e447334d642bd0aff07001ab39 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 25 Jul 2026 14:36:03 +0300 Subject: [PATCH] =?UTF-8?q?=D0=BE=D0=B1=D1=80=D0=B0=D0=B7=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20=D0=BF=D0=BE?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=B0=D0=BA=D1=82=D1=83=20?= =?UTF-8?q?=D1=80=D0=BE=D0=BB=D0=B8=20app=5Fimage=20=D0=B2=D0=BC=D0=B5?= =?UTF-8?q?=D1=81=D1=82=D0=BE=20=D0=BF=D1=83=D1=88=D0=B0=20=D0=B2=20=D1=80?= =?UTF-8?q?=D0=B5=D0=B5=D1=81=D1=82=D1=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - таск `deploy` (сборка + пуш в cr.yandex + вызов ansible) заменён на `image`: собирает node-образ, сайт и nginx-образ, тег из $BUILD_ID - деплой целиком переехал в `inv pl -- homepage` на стороне pet-project-server --- CLAUDE.md | 2 +- README.md | 9 +++++++-- Taskfile.yml | 18 +++++++++--------- 3 files changed, 17 insertions(+), 12 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index f83cabd..10670ae 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,7 +14,7 @@ All commands use [Taskfile](https://taskfile.dev/) and run through Docker: - `task install` — install npm dependencies (inside Docker) - `task dev` — start dev server at `http://localhost:4321` - `task build-prod` — production build (outputs to `dist/`) -- `task deploy` — full deploy pipeline: build → Docker nginx image → Ansible to server +- `task image` — build the production nginx image, tagged from `$BUILD_ID` (`dev` by default). This is the build contract for the `app_image` Ansible role; the full deploy is `inv pl -- homepage` in `pet-project-server`, which calls this task and ships the image via `docker save`/`load` - `task npm -- ` — run arbitrary npm commands inside Docker ## Architecture diff --git a/README.md b/README.md index 39fad63..bf11661 100644 --- a/README.md +++ b/README.md @@ -13,5 +13,10 @@ Built with [Astro](https://astro.build/), Tailwind CSS, Vue 3. ## Deploy - task build-prod - task deploy +Деплой запускается из `pet-project-server`: + + inv pl -- homepage + +Плейбук сам зовёт `task image` (контракт роли `app_image`): образ собирается +локально и едет на сервер через `docker save`/`load`, реестр не участвует. +Локально образ можно собрать и руками — `task image` даст `homepage-nginx:dev`. diff --git a/Taskfile.yml b/Taskfile.yml index 64c00b7..22ae32f 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -10,6 +10,7 @@ vars: PROJECT: "homepage" NODE_IMAGE: "{{.PROJECT}}-node" + NGINX_IMAGE: "{{.PROJECT}}-nginx" DOCKER_COMMON_OPTS: >- --rm @@ -43,14 +44,13 @@ tasks: cmds: - docker run {{.DOCKER_COMMON_OPTS}} "{{.NODE_IMAGE}}" npm run build - deploy: + # Контракт роли app_image (pet-project-server): собрать полный образ и затегать + # его $BUILD_ID. Задача самодостаточна — собирает и node-образ, и сам сайт, + # поэтому деплой с чистого клона работает без предварительных команд. + # Деплой целиком: `inv pl -- homepage` в pet-project-server. + image: + desc: 'Docker-образ nginx с собранным сайтом. Тег из $BUILD_ID (по умолчанию dev)' cmds: + - task: build-docker - task: build-prod - - docker build --pull --file docker/Dockerfile.nginx.prod --tag homepage-nginx:latest . - - task: deploy-with-ansible - - deploy-with-ansible: - internal: true - dir: '/home/av/projects/private/pet-project-server' - cmds: - - uv run ansible-playbook -i production.yml playbook-homepage-registry.yml playbook-homepage.yml + - docker build --pull --file docker/Dockerfile.nginx.prod --tag "{{.NGINX_IMAGE}}:${BUILD_ID:-dev}" .