Files
admin/vds-kzntsv.md
vitya 13c23b9bc5 docs(.wiki,.tasks): vds-kzntsv-bootstrap done — 3 phases shipped
VDS Rusonyx 160 NVMe (89.253.255.94 / vds.kzntsv.site) активирован
2026-05-20. 3 фазы за ~6 часов:

- Phase 1: harden + docker 29.5.1 + traefik v2.11 + portainer 2.21.5
- Phase 2: shared DB park (postgres 16 / mariadb 11.4 / mongo 7 /
  redis 7) via traefik raw TCP forward + self-signed TLS
- Phase 3: миграция gitea (132 repos), verdaccio (2063 pkgs), registry
  fresh install (user accepted loss old images) + Joxit GUI

Ingest 1 source + 1 entity (vds-kzntsv) + 6 concepts (traefik-tcp-
passthrough-vs-starttls / portainer-2.21-admin-password-regression /
db-tls-self-signed-via-traefik-raw-tcp / rusonyx-vps-onboarding-quirks
/ registry-gc-mount-and-modify-flag / compose-bcrypt-escape-trap).

3 follow-up  tasks: vds-gc-cron, vds-backup-rsync-kreknin, vds-ntfy-push.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-20 22:39:31 +03:00

7.9 KiB
Raw Blame History

title, type, tags, sources, updated
title type tags sources updated
VDS kzntsv — Rusonyx 160 NVMe cloud server entity
hardware
vds
cloud
rusonyx
infrastructure
gitea
verdaccio
registry
postgres
mariadb
mongo
redis
../sources/vds-kzntsv-bootstrap-2026-05-20.md
2026-05-20

VDS kzntsv

Облачный VDS у Rusonyx, активирован 2026-05-20. Цель — вынести инфраструктурные сервисы (gitea / verdaccio / docker-registry / shared DBs / в будущем seafile, hermes, ntfy) с одной железной коробки на отдельный host. Это первый шаг по closing SPOF gap из future-resilient-architecture-goals.

Production CMS (MoreThenCms) остаётся на windows-recovery-host и обсуждается отдельно.

Hardware / tariff

  • Vendor: Rusonyx (Astra Облако), https://myvm.rusonyx.ru
  • Tariff: 160 NVMe (заказан 2026-05-19, активирован 2026-05-20)
  • vCPU: 6 × 2.6 GHz
  • RAM: 8 GiB
  • Disk: 160 GiB NVMe
  • OS: Ubuntu 24.04 LTS (Noble)
  • IPv4: 1 шт (free)
  • Backup от Rusonyx: 0 (свой backup pipeline через [[vds-backup-rsync-kreknin]])

Доступ

  • Public IP: 89.253.255.94
  • Vendor hostname: vps-21075162-534388.host4g.ru
  • DNS: vds.kzntsv.site (A → 89.253.255.94) + wildcard *.vds.kzntsv.site + service hostnames git/registry/verdaccio.kzntsv.site (REGRU)
  • VNC console: через Rusonyx панель (кнопка «Остановить VNC» в Управление сервером → Консоль может потребоваться при stale attachment — см. rusonyx-vps-onboarding-quirks)
  • SSH: ssh -i ~/.ssh/id_ed25519 vitya@89.253.255.94 (root login + password auth disabled пост-bootstrap; sudo NOPASSWD для vitya)
  • Креды: ~/projects/.common/secrets/vds-kzntsv.env (root initial pass, sudo pass, portainer admin, DB passwords, registry, portainer API key, traefik dashboard basicauth)

Software stack

Слой Компонент Версия Где
OS Ubuntu 24.04.4 LTS host
Kernel Linux 6.8.0-117-generic host
Firewall ufw active host (allow 22, 80, 443, 5432, 3306, 27017, 6379)
Brute-protect fail2ban active (sshd jail) host
Engine Docker CE 29.5.1 host (official APT repo)
Compose docker-compose-plugin v5.1.3 host
Reverse proxy Traefik v2.11 LTS /opt/stacks/traefik/
Container mgmt Portainer CE 2.21.5 /opt/stacks/portainer/
Postgres postgres 16 (Debian) /opt/stacks/databases/postgres/
MariaDB mariadb 11.4 /opt/stacks/databases/mariadb/
MongoDB mongo 7.0 /opt/stacks/databases/mongo/
Redis redis 7.4-alpine /opt/stacks/databases/redis/
Git gitea 1.25.5 /opt/stacks/gitea/
NPM verdaccio 6 /opt/stacks/verdaccio/
Docker registry registry 2.8.3 + joxit UI /opt/stacks/registry/

Docker networks (external)

  • proxy — traefik + всё что выставляется наружу через HTTPS
  • shared-dbs — DB-park + любой контейнер, который к DBs ходит по DNS-имени postgres / mariadb / mongo / redis

Hostnames (live, 2026-05-20)

Hostname Service Auth Назначение
portainer.vds.kzntsv.site Portainer vitya / Pryakhin9-VDS-2026 (18 chars, см. portainer-2.21-admin-password-regression) Container management
traefik.vds.kzntsv.site Traefik dashboard basicAuth vitya / Pryakhin9 Traefik runtime view
git.kzntsv.site Gitea kreknin users restored Git hosting
verdaccio.kzntsv.site Verdaccio kreknin htpasswd (vitya) Private npm
registry.kzntsv.site Docker Registry vitya / Pryakhin9 (htpasswd) Docker images
registry-ui.vds.kzntsv.site Joxit Registry UI (proxied к registry, та же auth) GUI cleanup
postgres.vds.kzntsv.site:5432 Postgres TLS postgres / hex32 Shared DB
mariadb.vds.kzntsv.site:3306 MariaDB TLS root / hex32 Shared DB
mongo.vds.kzntsv.site:27017 MongoDB TLS root / hex32 Shared DB
redis.vds.kzntsv.site:6379 Redis TLS hex32 (requirepass) Shared cache

DB TLS: self-signed certs (CN matches hostname), клиент с verify-none / tlsAllowInvalidCertificates. Pattern см. db-tls-self-signed-via-traefik-raw-tcp.

File layout

/opt/stacks/
├── traefik/
│   ├── data/
│   │   ├── traefik.yml         (static config)
│   │   └── dynamic/
│   │       └── middlewares.yml (basicAuth для dashboard)
│   ├── letsencrypt/
│   │   └── acme.json           (LE certs, 0600)
│   └── docker-compose.yml
├── portainer/
│   ├── data/                   (portainer.db, chisel keys)
│   └── docker-compose.yml      (note: run via `docker run`, не compose, чтобы bypass'нуть env-interp на --admin-password)
├── databases/
│   ├── postgres/{data,certs,docker-compose.yml}
│   ├── mariadb/{data,certs,docker-compose.yml}
│   ├── mongo/{data,certs,docker-compose.yml}
│   └── redis/{data,certs,docker-compose.yml}
├── gitea/
│   ├── data/{git,gitea,ssh}    (mount → /data в контейнере)
│   └── docker-compose.yml
├── verdaccio/
│   ├── storage/                (npm packages, 8.6 GB, 2063 packages)
│   ├── config/{config.yaml,htpasswd}
│   ├── plugins/
│   └── docker-compose.yml
└── registry/
    ├── docker/                 (registry blobs storage)
    ├── auth/htpasswd
    └── docker-compose.yml      (registry + registry-ui в одном compose)

Что входит в backup pipeline (planned)

См. vds-backup-rsync-kreknin: daily 05:00 MSK rsync → kreknin.site:/volume1/NetBackup/vds-kzntsv/ с --link-dest incremental. DB dumps первым шагом (pg_dumpall / mariadb-dump / mongodump / redis-cli --rdb), потом rsync /opt/stacks/. Email-нотификация на vitya.kuznetsov@gmail.com через SMTP smtp.yandex.ru:465 (noreply@snolla.com / pass в noreply-snolla-smtp.env), плюс vds-ntfy-push на Android.

Связь с другими сущностями

  • Источник данных для миграции gitea/verdaccio — restored backup на kreknin-synology (через tar+ssh-pipe и rsync). Registry — fresh install без миграции старых images (user accepted loss).
  • Заменяет старый CMS-инфра-host windows-recovery-host только для инфраструктурных сервисов (gitea/verdaccio/registry/DBs); production CMS остаётся на recovery-host.
  • Не зависит от dead-synology-diskstation (тот мёртв).

Open issues / TODO