Files
admin/.wiki/entities/vds-kzntsv.md
vitya 74cf219533 wiki(concepts): ingest ocis-on-vds-deploy-recipe + entity refresh
New concept page documents the oCIS-on-VDS deploy pattern with the 4
non-obvious gotchas surfaced during owncloud-vds-deploy:

  1. UID mismatch — image ocis-user is 1000, host vitya is 1001 →
     compose `user: "1001:1001"` override (alt chown rejected as orphan-UID)
  2. PROXY_TLS=false — explicit per docs when reverse proxy terminates HTTPS
  3. PROXY_ENABLE_BASIC_AUTH=true — required for WebDAV/LibreGraph API
  4. LibreGraph POST /graph/v1.0/users — only way to create users (no CLI)

Plus decomposedfs storage layout, atomic-revert recipe, backup integration
note. Source: .tasks/owncloud-vds-deploy.md.

entities/vds-kzntsv.md updated: stack table + hostnames + file layout
include owncloud row.

index.md catalog + log.md ingest entry refreshed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-21 19:29:43 +03:00

8.7 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
owncloud
ocis
../sources/vds-kzntsv-bootstrap-2026-05-20.md
2026-05-21

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/
Personal cloud ownCloud Infinite Scale (oCIS) 7.1.0 /opt/stacks/owncloud/

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
owncloud.kzntsv.site oCIS (ownCloud Infinite Scale) admin + vitya (pass owncloud/*); basic auth enabled для WebDAV/LibreGraph Personal cloud, replace мёртвой Synology ownCloud (см. ocis-on-vds-deploy-recipe)
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)
└── owncloud/
    ├── data/                   (decomposedfs: idm/, idp/, nats/, search/, storage/{metadata,users}/spaces/...)
    ├── config/                 (ocis.yaml generated by `ocis init`)
    ├── .env                    (chmod 600 — OCIS_ADMIN_PASSWORD)
    └── docker-compose.yml      (oCIS 7.1.0 + traefik labels — recipe: [`ocis-on-vds-deploy-recipe`](../concepts/ocis-on-vds-deploy-recipe.md))

Что входит в 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