--- title: books-vds Gitea Actions выпилены — сборка только локально (решение vitya 2026-08-23) status: live tags: [books-vds, ci, gitea-actions, build, decision] --- # Gitea Actions на books-vds — выпилены полностью (директива vitya 2026-08-23) **Решение юзера:** никакого Gitea Actions / CI-раннера. Сборка образов — **только локально на рабочей машине**, деплой — прямыми `PUT /api/stacks/` в Portainer. ## Что выпилено - Workflow-файлы удалены и запушены: `books/.gitea/workflows/{build,deploy,build-tools,build-sched-daemon}.yml`, `vds-ops-mcp/.gitea/workflows/build.yml` (там был РЕАЛЬНЫЙ автобилд `on: push` — «автосборка», которую юзер увидел). - books-vds (`89.253.255.133`): раннер вычищен под ноль: - `systemctl stop/disable gitea-runner.service` + `rm /etc/systemd/system/gitea-runner.service` - `rm -rf /opt/gitea-runner` (бинарник, config.yaml, .runner) - `docker rm -f GITEA-ACTIONS-TASK-*` (job-контейнеры) - `userdel -r gitea-runner` - vds-kzntsv: следов не было (проверено). ## Процедура локальной сборки + публикации (проверена 2026-08-23) 1. `git archive | tar -x -C /c/tmp/build` (чистый контекст, без node_modules/.git) 2. `VERDACCIO_TOKEN= docker build --secret id=verdaccio_token,env=VERDACCIO_TOKEN -f packages//Dockerfile -t : .` 3. `docker save` → tar (OCI layout: `index.json` + `blobs/sha256/*`) 4. Заливка блобов curl'ом: HEAD-check → если нет — `POST /v2//blobs/uploads/` → `PUT &digest=sha256:` с телом (монолитный, Content-Length). Большой слой: `cat blob | curl -X PATCH -T -` (chunked) + финальный `PUT &digest` (Location брать из PATCH-ответа). Перед большим чтением файла — `sync; echo 3 > /proc/sys/vm/drop_caches` (books-vds 3.9GB RAM → OOM на 2GB файле). 5. Манифест: если `index.json` → OCI index (multi-arch, у Docker Desktop так) — **класть дочерний amd64-манифест** (`application/vnd.oci.image.manifest.v1+json`), не индекс (реестр: MANIFEST_INVALID). 6. Креды реестра: `docker login registry.kzntsv.site -u books-ci --password-stdin` (актуальный пароль books-ci — в `/opt/books/sched/docker-config.json` на books-vds; в `/root/.docker/config.json` был УСТАРЕВШИЙ → 401 на push). ## Gotcha: большие пуши через traefik умирают `docker buildx --push` 1.5-2GB слоёв через `registry.kzntsv.site` (traefik buffering middleware `maxRequestBodyBytes=4GB`) → `Client Closed Request`: traefik буферизует тело в RAM vds-kzntsv (1GB free) + чтение с buildkit-кэша медленное + OOM. curl монолитными PUT/PATCH работает (54MB/s). Связано: [[registry-traefik-buffering-gotcha]].