образ собирается по контракту роли app_image вместо пуша в реестр
- таск `deploy` (сборка + пуш в cr.yandex + вызов ansible) заменён на `image`: собирает node-образ, сайт и nginx-образ, тег из $BUILD_ID - деплой целиком переехал в `inv pl -- homepage` на стороне pet-project-server
This commit is contained in:
@@ -14,7 +14,7 @@ All commands use [Taskfile](https://taskfile.dev/) and run through Docker:
|
|||||||
- `task install` — install npm dependencies (inside Docker)
|
- `task install` — install npm dependencies (inside Docker)
|
||||||
- `task dev` — start dev server at `http://localhost:4321`
|
- `task dev` — start dev server at `http://localhost:4321`
|
||||||
- `task build-prod` — production build (outputs to `dist/`)
|
- `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 -- <args>` — run arbitrary npm commands inside Docker
|
- `task npm -- <args>` — run arbitrary npm commands inside Docker
|
||||||
|
|
||||||
## Architecture
|
## Architecture
|
||||||
|
|||||||
@@ -13,5 +13,10 @@ Built with [Astro](https://astro.build/), Tailwind CSS, Vue 3.
|
|||||||
|
|
||||||
## Deploy
|
## Deploy
|
||||||
|
|
||||||
task build-prod
|
Деплой запускается из `pet-project-server`:
|
||||||
task deploy
|
|
||||||
|
inv pl -- homepage
|
||||||
|
|
||||||
|
Плейбук сам зовёт `task image` (контракт роли `app_image`): образ собирается
|
||||||
|
локально и едет на сервер через `docker save`/`load`, реестр не участвует.
|
||||||
|
Локально образ можно собрать и руками — `task image` даст `homepage-nginx:dev`.
|
||||||
|
|||||||
+9
-9
@@ -10,6 +10,7 @@ vars:
|
|||||||
|
|
||||||
PROJECT: "homepage"
|
PROJECT: "homepage"
|
||||||
NODE_IMAGE: "{{.PROJECT}}-node"
|
NODE_IMAGE: "{{.PROJECT}}-node"
|
||||||
|
NGINX_IMAGE: "{{.PROJECT}}-nginx"
|
||||||
|
|
||||||
DOCKER_COMMON_OPTS: >-
|
DOCKER_COMMON_OPTS: >-
|
||||||
--rm
|
--rm
|
||||||
@@ -43,14 +44,13 @@ tasks:
|
|||||||
cmds:
|
cmds:
|
||||||
- docker run {{.DOCKER_COMMON_OPTS}} "{{.NODE_IMAGE}}" npm run build
|
- 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:
|
cmds:
|
||||||
|
- task: build-docker
|
||||||
- task: build-prod
|
- task: build-prod
|
||||||
- docker build --pull --file docker/Dockerfile.nginx.prod --tag homepage-nginx:latest .
|
- docker build --pull --file docker/Dockerfile.nginx.prod --tag "{{.NGINX_IMAGE}}:${BUILD_ID:-dev}" .
|
||||||
- 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
|
|
||||||
|
|||||||
Reference in New Issue
Block a user