net.slot_range required operators to reason about IPv4 last-octet slots to control the host's reserved port span. Replace it with net.user_ports, a direct comma-separated set of user-port ranges (default 10000-29999) that a new container's whole-hundred block is drawn from, auto-aligned to whole hundreds and merged. Only-new-users effect; existing containers keep their ports. - cfg: ParseUserPorts/CanonicalUserPorts/UserPortRanges/UserPortCount/ UserPortBlockStarts; legacy slot_range is migrated once on Load and the old key stays in the file, ignored, no longer editable. - db: migration v13 adds a UNIQUE index on users.start_port (port blocks are no longer derived from idx, so uniqueness must be enforced directly); UsedStartPorts() feeds the allocator. - mgr: port blocks are allocated independently of the IPv4 idx via allocUserPortBlock; admin capacity readout follows UserPortCount. - installer: 00-ip-ask.sh asks for port ranges (default = no confirm, a changed value echoes capacity and asks Y/n) and converts legacy slot_range; 00-check.sh scans only the effective user-port ranges. - ssh: allocSSHPort now probes the host (bind test) before picking a port, reassigning on conflict; the install no longer hard-fails on an occupied 30000-31999 port.
Documentation
Technical documentation for vpsmgr. All docs are in English.
| Doc | What it covers |
|---|---|
| architecture.md | System design: components, storage, network, security, traffic, image, install/uninstall lifecycle |
| configuration.md | Full reference for /etc/vpsmgr/config.yaml |
| ipv6.md | IPv6 pass-through design: deterministic addresses, prefix support, routing, installer flow |
| development.md | Building, testing, releasing, conventions |
See also AGENTS.md at the repo root — short version aimed at AI coding agents.