Landings get per-project themes (params.theme, params.fonts) and optional chat/start/note/engine sections, so they don't look like clones. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
92 lines
5.2 KiB
Markdown
92 lines
5.2 KiB
Markdown
---
|
|
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."
|
|
---
|