月费三十元之多元租户SaaS:其实架构
每“构建SaaS”之教程,未及首用户注册,已揽Kubernetes、托管Postgres及三云服务。尔无须此。此乃多元租户之设,于月费三十元之VPS,可运五十余租户于子域。
所求之要
白标合作之程。每伴得市肆于partner-{slug}.guardlabs.online與我等目錄相關,其推薦ID已嵌入其中。新夥伴→付費webhook觸發後自動配置。
第一階段(0-50租戶):通配符SSL+nginx+Flask
通配符SSL通過Let's Encrypt—一個證書覆蓋*.guardlabs.online:
certbot certonly --manual --preferred-challenges dns \
-d "*.guardlabs.online" -d "guardlabs.online"
DNS-01之挑战——添 TXT 记录于汝DNS提供者,certbot验之。
Nginx 服务器区块由路$host:
server {
listen 443 ssl;
server_name ~^partner-(?<partner_slug>.+)\.guardlabs\.online$;
ssl_certificate /etc/letsencrypt/live/guardlabs.online/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/guardlabs.online/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8090;
proxy_set_header Host $host;
proxy_set_header X-Partner-Slug $partner_slug;
}
}
Flask读其首部,一切皆归于此伴。
@app.before_request
def load_partner():
slug = request.headers.get("X-Partner-Slug")
if slug:
g.partner = db.execute(
"SELECT * FROM partners WHERE slug=?", (slug,)
).fetchone()
if not g.partner:
abort(404)
@app.route("/")
def storefront():
products = get_catalog() # global catalog
return render_template("store.html",
products=products,
ref_id=g.partner["ref_id"], # injected into every buy link
partner_brand=g.partner["brand_name"])
通过webhook进行配置 — 当Whop发送"新订阅"时:
@app.route("/webhook/whop", methods=["POST"])
def whop_webhook():
event = verify_and_parse(request)
if event["type"] == "subscription.created":
slug = slugify(event["user"]["username"])
# 1. DB row
db.execute("INSERT INTO partners (slug, ref_id, ...) VALUES (...)")
# 2. nginx — no per-partner config needed! Regex server_name catches it.
# 3. Done. partner-{slug}.guardlabs.online works immediately.
return "", 200
此乃要诀:正则表达式server_name意味着每家伙伴无需新增nginx配置。通配符SSL意味着无需新增证书。数据库行记录乃唯一写入操作。
容量:一VPS,单体Flask,SQLite。~50伙伴,每十人同用,则五百同用。三十美元一月之Hetzner CCX,不费吹灰之力可担此任。
第二阶段(五十至二百租户):每租户一SQLite
自共用DB迁至/data/partners/{partner_id}/store.db。Flask由X-Partner-Slug切换连接。约十六时重构。SQLite每文件容十万行无碍;二百伙伴×十万,计二百万行,亦无难事。
第三阶段(二百至五百以上):每租户一 PostgreSQL 模式
于此迁移。一 PostgreSQL,每伙伴一模式。四十时辰。 于此 或许欲 Kubernetes。未之前。
其旨
吾为此事,约八时辰而成。十二个月之总基建预算,未及五千美元。所谓"汝需微服务且管理一切"之建议,乃针对有财资与平台团队之公司。独行创业者:nginx正则+通配符SSL+Flask。before_request钩引君至五十租户。
试之
其助成之盟也:七日试用以无,不索卡,月贰拾玖。guardlabs.online/partner。而此机器人之始,乃幻影纸交易者(三百八十四交易,五十七胜率,公开)。
问
尔之“过度设计”之说何在?何时始用 Kubernetes 而非所需?
代码与全启日志公开。吾将随其后.
📥 免费章节——二十无预算增长之术
此启动日志运行于攻略之上。若欲得实策——谷歌生态之巧术、借势趋时、HARO权威之弈——取蓝图之两无价篇无PDF之障,无需登录:浏览器即开。真数真码,无浮华。












