remembos: деплой через локальную сборку образа вместо Yandex Registry

- плейбук зовёт роль app_image, docker_login в cr.yandex удалён
- compose тянет `{{ app_name }}:{{ app_image_tag }}` с pull_policy: never
  вместо зашитого тега из реестра
This commit is contained in:
av
2026-07-25 14:06:30 +03:00
parent 156df94f00
commit 5dc199f3ce
3 changed files with 23 additions and 14 deletions
+7 -4
View File
@@ -23,13 +23,16 @@ remembos. Схема одинаковая — образ собирается л
Шаги:
- завендорить роль `app_image`в `roles/` сейчас только `owner`, `eget`,
`secrets`; механика переноса — [shared-roles-sync](shared-roles-sync.md)
- ~~завендорить роль `app_image`~~**сделано**: подписка в `SYNCED_ROLES`,
копия в `roles/app_image`; механика переноса — [shared-roles-sync](shared-roles-sync.md)
- homepage: завести в Taskfile таск `image` с тегом из `$BUILD_ID`, перевести
плейбук на роль, удалить `playbook-homepage-registry.yml` и registry-переменные
из `vars/homepage.yml`
- remembos: контракта сборки нет (есть Dockerfile, нет Taskfile) — завести таск
`image`, убрать зашитый тег из compose
- ~~remembos: контракта сборки нет (есть Dockerfile, нет Taskfile) — завести таск
`image`, убрать зашитый тег из compose~~ — **сделано**: в репозитории remembos
появился `Taskfile.yml` с таском `image`, плейбук зовёт роль, compose тянет
`remembos:{{ app_image_tag }}` с `pull_policy: never`; `docker_login` из
плейбука убран
- transcriber: исходников на этой машине нет — до начала решить, живой ли сервис
и откуда его собирать; иначе он останется единственным держателем registry и
токен из оборота не выйдет
+6 -1
View File
@@ -1,9 +1,14 @@
# Образ собирается локально и доставляется на сервер ролью app_image
# (см. playbook-remembos.yml): тег — случайный BUILD_ID каждого прогона,
# в реестре образа нет, поэтому pull_policy: never.
services:
remembos_app:
image: "{{ yc_container_registry_repository }}/remembos:v0.2.0"
image: "{{ app_name }}:{{ app_image_tag }}"
container_name: remembos_app
restart: unless-stopped
pull_policy: never
user: "{{ owner_create_result.uid }}:{{ owner_create_result.group }}"
environment:
- PUID={{ owner_create_result.uid }}
+10 -9
View File
@@ -13,6 +13,16 @@
config_file: "{{ (config_dir, 'config.toml') | path_join }}"
tasks:
# Образ собирается на control-хосте самим репозиторием remembos (контракт —
# `task image`) и едет на сервер через docker save/load, без реестра.
# Роль выставляет факт app_image_tag — его подхватывает docker-compose.
- name: "Build and deliver application image"
ansible.builtin.import_role:
name: "app_image"
vars:
app_image_name: "{{ app_name }}"
app_image_src_dir: '{{ (playbook_dir, "..", "remembos") | path_join }}'
- name: "Create user and environment"
ansible.builtin.import_role:
name: owner
@@ -53,15 +63,6 @@
group: "{{ app_user }}"
mode: "0640"
- name: 'Login to Yandex Container Registry'
community.docker.docker_login:
registry_url: '{{ yc_container_registry }}'
username: 'oauth'
password: '{{ yc_oauth_token }}'
# Токен — аргумент модуля: по умолчанию не печатается, но всплывает
# при -v и в отчёте о падении задачи.
no_log: true
- name: "Run application with docker compose"
community.docker.docker_compose_v2:
project_src: "{{ base_dir }}"