Telegram bot · Debian 12 and 13

Your own VPN on your own server in one message

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.

What it looks like in the bot

203.0.113.7:root-password

ssh moved to a random port, key-only login. Firewall on, system updated.

3x-ui installed: VLESS + XHTTP + Reality on port 443.

Issue a key

Done. Here is the subscription link for your client.

What you get

VLESS + XHTTP + Reality

A connection on port 443. The bot picks the Reality target itself.

Camouflage server

Optional. Clients connect to it, it forwards traffic to the panel, and the panel’s address is never exposed.

Certificates

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.

Keys without limits

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.

Proxy and DNS

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.

Health checks

Once a day the bot checks the panel, Xray and the subscription certificate and tells you if something broke or got fixed.

Get started

  1. Rent a server

    Any hosting provider, Debian 12 or 13. All you need is the IP and the root password.

  2. Send the bot ip:password

    The bot moves ssh to a random port with key-only login, turns on a firewall, updates the system and installs 3x-ui.

  3. Issue a key

    Add the subscription link to your client, and the VPN works.

Under the hood

Serverus

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.

  • 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

The bot hosts itself

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.