Files
mono/components/boot/Dockerfile
T
coopops b0bbe05c56 [@ant] feat(boot): dicoop/bootcoop образ для sideboot в соседних репо
Цель: в соседних репозиториях (parser2, blockchain-protocol и т.д.)
для тестов и отладки нужно поднимать только цепь + контракты, без
mono-инфры (mongo/postgres/desktop). Решение — два контейнера в их
compose: dicoop/blockchain (нода) + dicoop/bootcoop (one-shot bootstrap).

Что добавлено:
- components/boot/Dockerfile — multi-stage от dicoop/contracts:<tag>
  (контракты flat-layout в /contracts) + dicoop/mono-base:<tag>
  (runtime с pnpm/node + workspace). ENTRYPOINT = pnpm run boot:remote.
  CONTRACTS_DIR=/contracts выставлен по умолчанию.
- .github/workflows/build-bootstrap.yaml — push в dev/testnet/main
  билдит и пушит dicoop/bootcoop:<branch> + :latest для main +
  :<branch>-<short-sha> для пинов. Telegram нотификации.
- components/boot/README.md — раздел про sideboot с готовым compose
  snippet'ом, переменными окружения и опциональными INSTALL_*_DATA.

Версионирование dicoop/bootcoop:<tag> совпадает с dicoop/contracts:<tag>
(multi-stage из того же тега) — контракты и bootstrap синхронны.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 09:02:21 +00:00

55 lines
2.5 KiB
Docker
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Образ-bootstrap для удалённой ноды.
#
# Назначение: one-shot job в чужом docker-compose рядом с уже
# запущенным `node`-сервисом (dicoop/blockchain). Bootstrap
# дожидается готовности RPC, после чего вкатывает на ноду все
# системные и кооперативные контракты, активирует протокол-фичи,
# создаёт системный токен и инициализирует system/emission/powerup.
#
# Контракты НЕ собираются здесь — они тянутся multi-stage из
# готового артефакта `dicoop/contracts:<tag>` (см. workflow
# build-contracts.yaml) и кладутся в /contracts. CLI находит их
# через CONTRACTS_DIR.
#
# Окружение:
# CHAIN_URL — endpoint удалённой ноды (например http://node:8888)
# CONTRACTS_DIR=/contracts (выставлено по умолчанию)
# RPC_WAIT_TIMEOUT_MS — сколько ждать RPC (default 120000)
# EOSIO_PUB_KEY / EOSIO_PRV_KEY — ключи системного аккаунта eosio
# INSTALL_INITIAL_DATA=1 — опционально доставить mono-данные (нужны MONGO_URI/POSTGRES_*)
# INSTALL_EXTRA_DATA=1 — то же + расширенный совет
#
# Применение в стороннем compose:
# services:
# node:
# image: dicoop/blockchain:latest
# ports: ["8888:8888"]
# bootcoop:
# image: dicoop/bootcoop:dev
# depends_on: [node]
# environment:
# CHAIN_URL: http://node:8888
# EOSIO_PUB_KEY: EOS6MRyAjQq8ud7hVNYcfnVPJqcVpscN5So8BhtHuGYqET5GDW5CV
# EOSIO_PRV_KEY: 5KQwrPbwdL6PhXujxW37FSSQZ1JiwsST4cqQzDeyXtP79zkvFD3
# restart: "no"
ARG CONTRACTS_TAG=latest
ARG MONO_BASE_TAG=latest
FROM dicoop/contracts:${CONTRACTS_TAG} AS contracts
FROM dicoop/mono-base:${MONO_BASE_TAG} AS runtime
# Контракты из готового артефакта в flat-layout
# (configs/contracts.ts читает из CONTRACTS_DIR).
COPY --from=contracts /contracts /contracts
ENV CONTRACTS_DIR=/contracts
WORKDIR /app/components/boot
# По умолчанию sideboot режим — против внешней ноды, без docker-управления.
# Переопределить можно: docker run dicoop/bootcoop:dev pnpm run boot:remote
# или подменив CMD/entrypoint в compose.
ENTRYPOINT ["pnpm", "run"]
CMD ["boot:remote"]