Files
admin/.wiki/entities/books-vds.md
vitya 3246dabbb5 tasks(migrate-elasticsearch-to-books-vds): 🟢 closed — 3 indices Windows→books VDS
928616 docs (artmone 2621 / epz 820604 / products 105922) migrated via
reindex-from-remote. Pre-migration snapshot к kreknin repo, target stack 33
получил `reindex.remote.whitelist=elasticold.kzntsv.site:443` через Portainer
API. Consumer configs (books-api + books-task-runner + books-job-scheduler)
sed'd elasticold→elasticsearch.kzntsv.site, 3 containers restarted.
Per-doc byte-match verified, internal smoke от books-api → новый ES 200 OK.
Source ES оставлен running per user (rollback ready).
2026-05-25 11:33:17 +03:00

115 lines
6.7 KiB
Markdown
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.
---
title: Books VDS (client server — 89.253.255.133)
type: entity
tags: [hardware, vds, books, host4g, backup, portainer, elasticsearch]
related: [[kreknin-synology]], [[vds-kzntsv]], [[../concepts/portainer-stack-management-books-vds]]
updated: 2026-05-25 (ES migration from Windows host)
---
# Books VDS
Клиентский VDS (отдельный от инфра-VDS [[vds-kzntsv]]). Хостит production books app stack (api/web/scheduler/task-runner) + shared infra (mongo, minio, elasticsearch, traefik, portainer).
**Это НЕ vds-kzntsv.** Books-стек живёт здесь, не на vds.kzntsv.site. Domain `books.kzntsv.site``bookva.kzntsv.site`) разрешаются в этот IP.
## Доступ
- **Public IP:** 89.253.255.133
- **Provider:** host4g.ru (DNS вендорский `vps-21075162-277731.host4g.ru`)
- **OS:** CentOS 7, kernel 3.10.0-1160.36.2.el7.x86_64 (древний, EOL)
- **SSH:** `root@89.253.255.133:22` — only via ed25519 key (`~/.ssh/id_ed25519_books_ops` на workstation)
- **Sudo:** root, passwordless (мы под root напрямую)
- **Portainer:** `https://portainer.kzntsv.site` (отдельный Portainer, не путать с `portainer.vds.kzntsv.site` для [[vds-kzntsv]])
Все creds — в `pass show books-vds/full-env`.
## Disk
```
/dev/vda1 122G 59G used (49%) 63G free
```
Single root partition, нет отдельной `/data`. Docker hub data под `/var/lib/docker/`.
## Стек (2026-05-25 inventory)
### Portainer-managed stacks (endpoint 1)
Post-migration 2026-05-25 (см. [[../concepts/portainer-stack-management-books-vds]]).
| Id | Stack | Container(s) | Bind data path | Purpose |
|---|---|---|---|---|
| 22 | `books-job-scheduler` | books-job-scheduler + books-job-scheduler-mongo | `/opt/books/job-scheduler/{config,mongo/{db,configdb}}` | agenda jobs (cron + on-demand) |
| 23 | `books-api` | books-api | `/opt/books/api/{config,data,upload}` | books API server (Nitro, port 3021) |
| 24 | `books-web` | books-web | — | books-Nuxt front-end |
| 25 | `books-ntfy` | books-ntfy | `/opt/books/ntfy/` | local ntfy (separate from shared `ntfy.vds.kzntsv.site`) |
| 26 | `books-ops-mcp` | books-ops-mcp + books-ops-mcp-bootstrap-1 + books-docker-proxy + books-docker-proxy-ro | `/opt/books/books-ops-mcp/` | books ops-mcp endpoint |
| 27 | `chrome` | chrome | — | Puppeteer browser for PDFs / scraping |
| 28 | `proxy-chain` | proxy-chain | `/usr/docker/proxy-chain/config` | upstream HTTP-proxy chain, internal-only |
| 29 | `imgproxy` | imgproxy + imgproxy-nginx | `/usr/docker/imgproxy/nginx/{cache,nginx.conf}` | serves `imgproxy.kzntsv.site`, S3→minio |
| 30 | `minio` | minio | `/usr/docker/minio/data` | S3 blob store, `minio.kzntsv.site` |
| 31 | `mongo` | mongo | `/usr/docker/mongo/data/{db,configdb}` | shared MongoDB 4.2 |
| 32 | `books-db` | books-db | `/usr/docker/books-db/data` | MariaDB latest, books application DB |
| 33 | `elasticsearch` | elasticsearch | `/usr/docker/elasticsearch/{data,snapshots}` | ES 7.10.0 + `path.repo=/snapshots` для backup + `reindex.remote.whitelist=elasticold.kzntsv.site:443` (added 2026-05-25 для migration) |
### SSH-managed (management plane — Portainer migration skipped)
Recreate ломает access всему остальному (traefik) или себя (portainer). Оставлены ad-hoc compose в `/usr/docker/<svc>/`.
| Compose dir | Containers | Bind data path |
|---|---|---|
| `/usr/docker/traefik/` | traefik | `./letsencrypt` (acme.json) + `./data/traefik.yml` |
| `/usr/docker/portainer/` | portainer | named volume `portainer_data` |
### Build helpers (transient)
- `buildx_buildkit_builder-*` × 7 — buildkit builders, oneshot за `docker buildx`. Не data.
## App-config paths
```
/opt/books/api/{config,data,upload}
/opt/books/job-scheduler/{config,mongo/{db,configdb}}
/opt/books/task-runner/
/opt/books/ntfy/ # local ntfy data
/opt/books/books-ops-mcp/
```
`config/default.json` overrides image-baked config (MySQL/ES/S3 endpoints).
## Backup
Daily 06:00 MSK → kreknin. См. [[../sources/books-vds-backup-daily-kreknin-2026-05-25]]. Pipeline:
- DB dumps: books-db (mariadb), mongo (shared), books-job-scheduler-mongo
- ES snapshot via REST API (file repo `kreknin`)
- rsync bind paths + dumps + `/opt/books/` + `/etc/{ssh,hosts,cron.d}` + `/root/.ssh``vitya@kreknin:/volume1/NetBackup/books-vds/<date>/`
- ntfy `BOOKS-VDS backup OK <date>` + email
- Retention 7 daily snapshots
Live since 2026-05-25.
## DNS
- `books.kzntsv.site` → 89.253.255.133 (`books-api` host route via local traefik)
- `bookva.kzntsv.site` → 89.253.255.133 (`books-web` host route)
- `elasticsearch.kzntsv.site` → 89.253.255.133 (ES via traefik basicAuth)
- `portainer.kzntsv.site` → 89.253.255.133 (Portainer UI)
- `edge.kzntsv.site` → 89.253.255.133 (Portainer edge agent)
Auth-зоны DNS — в reg.ru под `kzntsv.site`.
## Cross-refs
- [[kreknin-synology]] — backup target.
- [[vds-kzntsv]] — наш инфра-VDS (отдельный, gitea/registry/etc.) — НЕ хост books'а.
- [[../concepts/vds-kzntsv-ssh-access]] — SSH-аудит инфра-VDS (был misnamed как `books-ssh-access` до 2026-05-25; ошибочно claimed vds-kzntsv hosts books).
- [[../sources/books-vds-backup-daily-kreknin-2026-05-25]] — backup standup chronology.
## Making-of-history notes
- Discovered 2026-05-25 во время backup-таски. Wiki [[../concepts/books-ssh-access]] до этого ошибочно говорила что books на vds-kzntsv (89.253.255.94). User: «books VDS - это совсем другой сервер, клиентский». Inventory + IP probe confirmed.
- Workstation SSH key `id_ed25519_books_ops` уже был задеплоен под root до этой сессии (видимо, прошлый bootstrap забыт-без-документации).
- Hybrid stack-management (Portainer + SSH-compose) — pre-existing, не наш design. Migrated 6 SSH-compose стеков → Portainer 2026-05-25 (`books-vds-stacks-to-portainer` 🟢). `traefik` + `portainer` остаются SSH-managed (management plane).
- `imgproxy` (2 containers, `imgproxy.kzntsv.site`) был missing из этого entity wiki до Phase 0 probe 2026-05-25 — fixed in flight.
- ES indices populated 2026-05-25 — migration с Windows host (`elasticold.kzntsv.site`, ES 7.10.1) → books VDS via reindex-from-remote. 3 indices: `artmone` (2621), `epz` (820604), `products` (105922). Consumers (books-api + books-task-runner + books-job-scheduler) switched `default.json:elasticsearch.node` с elasticold на elasticsearch.kzntsv.site. Source ES остаётся running (rollback). См. [[../../tasks/migrate-elasticsearch-to-books-vds]] § Closure note.