--- title: "MyPoint VPN" tagline: "Your own VPN on your own server in one message" description: "Rent a server, send the Telegram bot its IP and password, and it locks the server down, installs 3x-ui and sets up VLESS + Reality. Client keys and subscriptions come from the bot too." domain: "https://mypointvpn.sokolab.xyz/" badge: "Telegram bot ยท Debian 12 and 13" theme: mypointvpn fonts: "family=Unbounded:wght@500;700&family=Manrope:wght@400;600;800&family=JetBrains+Mono:wght@400;600" post: "/blog/mypointvpn-serverus" postLabel: "How a VPN bot learned to manage servers" build: list: never sitemap: disable: true nav: - { label: "Features", href: "#features" } - { label: "Get started", href: "#start" } - { label: "Serverus", href: "#engine" } - { label: "Community", href: "#community" } cta: - { label: "Open the bot", href: "https://t.me/barbarisiska_bot", primary: true } - { label: "Get started", href: "#start" } chat: title: "What it looks like in the bot" messages: - { from: "me", text: "`203.0.113.7:root-password`" } - { from: "bot", text: "ssh moved to a random port, key-only login. Firewall on, system updated." } - { from: "bot", text: "3x-ui installed: VLESS + XHTTP + Reality on port 443." } - { from: "me", text: "Issue a key" } - { from: "bot", text: "Done. Here is the subscription link for your client." } features: title: "What you get" items: - title: "VLESS + XHTTP + Reality" text: "A connection on port 443. The bot picks the Reality target itself." - title: "Camouflage server" text: "Optional. Clients connect to it, it forwards traffic to the panel, and the panel's address is never exposed." - title: "Certificates" text: "A domain with Let's Encrypt for the panel and the subscription. Without a domain the bot issues a short-lived IP certificate and renews it itself." - title: "Keys without limits" text: "No traffic cap, no expiry, no device limit. Subscriptions for v2rayN, Hiddify, Happ and v2rayNG. For every key you see the traffic and when the client was last online." - title: "Proxy and DNS" text: "Outbound through your own proxy or Cloudflare WARP. DNS on the server is encrypted: DNS-over-TLS, with DNS-over-HTTPS as a fallback if TLS gets blocked." - title: "Health checks" text: "Once a day the bot checks the panel, Xray and the subscription certificate and tells you if something broke or got fixed." start: title: "Get started" steps: - title: "Rent a server" text: "Any hosting provider, Debian 12 or 13. All you need is the IP and the root password." - title: "Send the bot `ip:password`" text: "The bot moves ssh to a random port with key-only login, turns on a firewall, updates the system and installs 3x-ui." - title: "Issue a key" text: "Add the subscription link to your client, and the VPN works." note: title: "The server stays yours" text: "The \"Return\" button removes the bot's access, rolls back ssh and the firewall and sends you a new root password. Your data on the server stays. And the bot deliberately doesn't work through Cloudflare: Cloudflare terminates TLS itself, and Reality can't work behind it." engine: kicker: "Under the hood" title: "Serverus" lead: "Almost all of the bot's work comes down to one thing: take a bare Debian, lock it down and manage it by key. That's the job of `serverus`, an ansible-based package inside the project. The VPN is just one task on top of it, the second one is a docker server." items: - "Docker, Caddy and automatic system updates, with Caddy issuing certificates for domains" - "An app is a folder with `docker-compose.yaml`, `.env` and `caddy.conf`, sent as an archive or file by file" - "A diff and per-file warnings before applying, including when a domain doesn't point to the server" - "Checks of the compose file, ports and Caddy config. On error the app is left untouched, and only changed services are recreated" - "Rollback to the previous version of the files, start, stop, restart and logs per service" - "Login to a private docker registry and guest access to volumes for uploading data" callout: title: "The bot hosts itself" text: "Production MyPoint VPN runs as a Serverus app on a docker server managed by this very bot. What the bot can do is set by the interface in the admin panel: \"MyPoint VPN\", \"Serverus\" or both." community: title: "Community" lead: "Questions, ideas and bugs go to Redmine. No sign-up needed: the guest login is in the [forum topic](https://redmine.sokolab.xyz/boards/2/topics/3)." links: - { title: "Bot", text: "Start using it in Telegram.", href: "https://t.me/barbarisiska_bot" } - { title: "Code", text: "Sources and wiki: deployment, data migration, Serverus apps.", href: "https://git.sokolab.xyz/s0k0l/mypointvpn" } - { title: "Issues", text: "Bugs and wishes in Redmine.", href: "https://redmine.sokolab.xyz/projects/mypointvpn" } - { title: "Forum", text: "Questions and ideas, plus the guest login.", href: "https://redmine.sokolab.xyz/boards/2/topics/3" } - { title: "Blog post", text: "How a VPN bot learned to manage servers.", href: "https://sokolab.xyz/en/blog/mypointvpn-serverus/" } footer: "Use a VPN within the laws of your country." ---