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}" .