NameOcean 技术栈揭秘:Python、Django、Redis 与 Proxmox

NameOcean 技术栈揭秘:Python、Django、Redis 与 Proxmox

十一月 08, 2026 infrastructure python django redis rabbitmq proxmox web hosting devops

简而言之:NameOcean 是一个基于 Python 和 Django 的应用。数据存放在 PostgreSQL 中,Redis 负责缓存。后台任务运行在两套队列系统上:短任务使用基于 Redis 的 RQ,较重的流水线使用基于 RabbitMQ 的 Dramatiq。客户的主机托管运行在我们自有服务器上的 Proxmox LXC 容器中。您可以通过浏览器、用 Go 编写的命令行工具,或者借助 MCP 通过您的 AI 助手来管理这一切。本文将逐层介绍这套架构,并说明我们做出每项选择的原因。

技术栈一览

  • 语言与框架:Python + Django,由 Gunicorn 提供服务,前置 Nginx。
  • 数据库:PostgreSQL,支持时间点恢复(PITR),备份存放在独立的备份服务器上。
  • 缓存:Redis,通过 django-redis 和 django-cacheops 使用。
  • 队列:基于 Redis 的 RQ(django-rq),以及基于 RabbitMQ 的 Dramatiq。
  • 主机托管:Proxmox VE 宿主机,每台客户服务器都以 LXC 容器形式运行。
  • DNS:我们自建的 PowerDNS 服务器,ns1 至 ns4。
  • 对象存储:自托管的 S3 兼容存储,用于存放文件、备份和博客图片。
  • 客户端工具:用 Go 编写的 nameocean CLI,以及面向 AI 客户端的远程 MCP 服务器,二者都构建在同一套公开 API 之上。
  • 部署:git push 加一条 Fabric 命令。任何人都不会直接在服务器上修改代码。

想知道其他网站是用什么技术搭建的吗?我们免费的网站技术检测工具可以显示任意域名所用的主机服务商、CMS、编程语言和框架。不妨拿 nameocean.net 试一试。

有好点子吗?为它找到完美的域名

我们的 AI 域名生成器会在数百种后缀中推荐可注册的域名。包含免费的 SSL、DNS 和 Whois 隐私保护。

为什么选择 Python 和 Django

域名注册商从外面看似乎很简单:搜索域名、付款、管理 DNS。但在底层,它包含大量业务逻辑:注册局 API、各自带有状态机的域名转移流程、续费、多币种发票、SSL 证书签发、DNS 区域、邮箱和主机服务器,而且全部要支持 21 种语言。我们需要一套能让这些逻辑保持清晰易读、又能让小团队安全交付的技术栈,Django 正好满足这一点。

名副其实的"开箱即用"

每个域名注册商从第一天起就需要的组件,Django 都已内置:

  • ORM 与数据库迁移。我们的模型(域名、区域、转移、账单、服务器)每周都在变化。借助 Django 迁移,每一次表结构变更都是 git 中一个经过审查的文件,在本地、测试和生产环境中的执行方式完全一致。
  • 后台管理(Admin)。客服和运维工作都在 Django Admin 中完成,我们无需另建一套内部后台系统,只在关键之处做了定制,例如安全删除和账单操作。
  • 认证与安全。会话、CSRF 防护、密码哈希以及基于电子邮件的自定义用户模型都是内置的,我们在此基础上又增加了双因素认证。
  • 国际化。网站借助 Django 的 gettext 工具链和带语言前缀的 URL 翻译成了 21 种语言。英文无需前缀,其他语言则使用 /tr/、/de/ 等前缀。
  • 站点地图、缓存、模板。全部是标准功能,文档也十分完善。

从网站到服务器,统一使用一种语言

Python 不仅用于 Web 应用。队列 worker、cron 任务背后的管理命令、与 Proxmox 通信的脚本、DNS 工具(dnspython)以及部署脚本(Fabric)都使用同一种语言。能看懂结账视图的工程师,同样能看懂创建主机容器或续签证书的代码。对小团队而言,这一点比单纯的运行速度更重要。

例外是那些运行在您本机上的工具。要求每位用户先安装 Python 和一堆依赖包,会是很糟糕的初次体验,所以 CLI 用 Go 编写(详见下文)。这些工具本身不包含任何业务逻辑,所有操作都经由同一套 Django API 完成。

成熟的生态系统

我们对接的几乎所有服务都有可靠的 Python 库:支付用 Stripe,公开 API 用 Django REST framework,还有 boto 风格的 S3 客户端、Proxmox API 以及兼容 Sentry 的错误上报。我们的远程 MCP 服务器能让 AI 助手代客户管理域名和 DNS,它同样是 Django 应用的一部分。

我们的取舍与应对

Python 并不是最快的语言,而同步的 Django 请求也不应该等待缓慢的注册局 API。我们从三个方面解决这个问题:繁重或耗时的工作交给队列,高频读取走 Redis,数据库则针对我们的查询模式做了调优和索引。实际上,瓶颈几乎总是外部 API,而不是 Python。

PostgreSQL:唯一可信数据源

所有域名、区域、发票和服务器数据都存放在 PostgreSQL 中。我们选择它,是因为它的事务足够严格(资金和域名所有权绝不能只写入一半),支持 JSON 字段和网络地址等丰富的数据类型,备份方案也很可靠。备份是持续进行的:预写日志(WAL)会实时传送到独立的备份服务器,因此我们可以把数据库恢复到任意时间点,而不仅仅是昨晚的转储。另有一台热备 Web 服务器使用同一个数据库,主 Web 服务器出现故障时可随时接管。

Redis:缓存优先

Redis 是我们的缓存。域名可用性和价格查询、渲染好的页面片段以及速率限制都存放在 Redis 中,因此重复的请求根本不会触及注册局 API 或数据库。每个缓存键都包含语言信息,因为同一个页面在 / 和 /tr/ 下的内容并不相同。我们还使用 django-cacheops 来缓存 ORM 查询集,并在数据行变更时自动使其失效。

选择 Redis 毫无悬念:它速度快、易于运维,对 Django 的支持也非常出色。既然已经部署了 Redis,它也顺理成章地成为我们轻量级任务队列的后端。

队列:基于 Redis 的 RQ 与基于 RabbitMQ 的 Dramatiq

客户发起的许多操作不应该阻塞他们正在浏览的页面。在注册局注册域名、签发 SSL 证书、创建邮箱地址或启动主机容器,都需要几秒甚至几分钟。这些任务会被放入队列,由 worker 取出处理。我们运行两套队列系统,各自承担最擅长的工作。

基于 Redis 的 RQ(django-rq)

RQ 是 Python 世界中最简单的队列:一个任务就是一个 Python 函数加上它的参数,存放在 Redis 中。我们用它来处理网站的日常任务:

  • 用户注册后在注册商处创建客户账户,
  • 签发和续签 SSL 证书,
  • 同步域名状态和 DNS 区域,
  • 添加邮箱地址和转发规则,
  • 为客户服务器启动和停止主机容器、开放端口并配置 Nginx,
  • 生成账单并发送续费提醒。

一个调度进程负责执行周期性任务,django-rq 仪表盘则直接在 Admin 中展示排队中、运行中和失败的任务。在开发环境中,队列以同步方式运行,任务会内联执行,出错时能立即看到。

基于 RabbitMQ 的 Dramatiq

对于更繁重、耗时更长的流水线,我们使用 Dramatiq,并以 RabbitMQ 作为消息代理。RabbitMQ 是专门的消息代理:只有在 worker 处理完成后消息才会被确认,因此即使 worker 中途崩溃,任务也不会丢失。Dramatiq 在此之上提供了指数退避的自动重试、时间限制、优先级和中间件。这非常适合步骤繁多、吞吐量大,或依赖时不时会出故障的外部服务的工作负载。

为什么要用两套队列?

RQ 让简单任务保持简单:无需额外服务、调试方便,而且 Redis 本来就在运行。RabbitMQ 和 Dramatiq 则在任务确有需要时提供更强的投递保证和更高的吞吐量。按工作负载分别选择,意味着我们不必为一个五秒钟的任务承担完整消息代理的运维成本,也不会把关键流水线托付给最简单的工具。

主机托管:Proxmox 与 LXC 容器

我们的主机托管和 vibe hosting 套餐运行在我们自有的 Proxmox VE 服务器上。每台客户服务器都是一个 LXC 容器,而不是完整的虚拟机。

  • 容器共享宿主机内核,因此几秒钟即可启动,内存占用也远低于虚拟机。更多硬件资源用于运行客户的应用,而不是第二套操作系统。
  • 每个容器相互隔离,拥有独立的文件系统、进程、网络,以及 CPU、内存和磁盘的资源限制。
  • 一切通过 Proxmox API 自动完成。当您订购服务器时,Django 会向队列发送一个任务,由 worker 基于模板创建容器、设置资源限制、接入网络、开放端口,并为您的域名配置反向代理和 SSL。
  • 扩缩容、备份和恢复都是控制面板中的按钮,调用的也是同一套 API。在需要重新平衡负载时,容器还可以在 Proxmox 宿主机之间迁移。

使用自有硬件意味着价格可预期,并且我们能完全掌控网络、备份以及数据的存放位置。

DNS、电子邮件与存储

  • DNS:区域由我们自建的 PowerDNS 服务器(ns1 至 ns4)提供解析。您在 DNS 面板中所做的更改会写入主服务器,并自动同步到各从服务器。主服务器每晚备份。
  • 电子邮件:邮箱托管和免费的邮件转发运行在我们自己的邮件服务器上,并会为您的域名配置好 SPF、DKIM 和 DMARC。
  • 对象存储:自托管的 S3 兼容存储,用于保存上传的文件、备份和图片。

nameocean CLI 与 MCP 服务器

Web 控制面板并不是唯一的入口。它的所有功能都经由我们的公开 REST API 和位于 https://nameocean.net/mcp 的远程 MCP 服务器实现,而 nameocean CLI 正是构建在它们之上。

nameocean CLI

nameocean 是一个用 Go 编写的单一静态二进制文件,提供 macOS、Linux 和 Windows 版本,支持 amd64 和 arm64 架构。我们在这里选择 Go,理由恰好与服务端选择 Python 相反:CLI 必须几秒内装好、无需任何运行时就能在任何地方运行,而 Go 编译出的单个文件正好做到这一点。

  • 一次登录。nameocean login 会打开浏览器,通过 OAuth 2.1 和 PKCE 完成登录。令牌保存在操作系统的钥匙串中(macOS Keychain、Windows 凭据管理器或 Linux 上的 libsecret),并会自动刷新。在服务器和 CI 环境中,也可以改用控制面板中生成的 API 密钥。
  • 服务器与端口。nameocean servers ls、用于查看 SSH 和 git 信息的 servers info,以及用于在容器上开放或关闭端口的 ports open / ports close。
  • 将域名绑定到服务器。nameocean bind example.com <server> 一条命令即可配置好 DNS、SSL 和负载均衡。
  • DNS 与 SSL。dns ls、dns add 和 dns rm 用于管理 A、CNAME、MX、TXT 等记录,另有 ssl status 和 ssl issue --wait。
  • 域名。domains ls 和 domains check 用于查询可用性和价格。CLI 永远不会产生扣费:注册和续费仍需在控制面板中完成。
  • 专为脚本和 AI 智能体设计。每条命令都支持 --json,并原样输出 API 返回的 JSON,可直接通过管道传给 jq、shell 脚本或智能体。
  • 一条命令接入 AI 客户端。nameocean mcp install 会自动找到您机器上的 Claude Code、Cursor 和 OpenCode,并为它们逐一添加 NameOcean MCP 服务器。
nameocean login
nameocean dns add example.com A @ 203.0.113.10 --ttl 5m
nameocean bind example.com 3f9a1c2e
nameocean servers ls --json | jq '.servers[].default_domain'

您可以通过 Homebrew 安装(brew install nameocean/tap/nameocean),也可以下载适用于您平台的压缩包。

远程 MCP 服务器

在 vibe hosting 中,您的 AI 助手可以直接与 NameOcean 对话。只需一条命令即可接入 Claude Code:claude mcp add --transport http nameocean https://nameocean.net/mcp。在浏览器中登录一次之后,您就可以让它部署应用、开放端口或将域名指向您的服务器,完全不用碰配置文件。Cursor、Claude Desktop、claude.ai 以及其他 MCP 客户端都连接同一个 URL,具体方法请参阅 MCP 文档。您的机器上无需运行任何东西,因此也就无需安装或更新。

我们以前为此提供过一款桌面应用。它会在本地启动 MCP 服务器并使用密码登录,而这与两步验证登录规则不兼容;远程服务器无需安装就能完成同样的工作,因此我们已于 2026 年 11 月将其停用。

为什么两者都要提供?

不同的人习惯在不同的地方工作。CLI 面向常驻终端、需要可脚本化且可重复执行命令的开发者;MCP 服务器则面向更愿意描述需求、让 AI 助手代劳的用户。由于二者都只是同一套 API 之上的薄层,Django 应用中新增的功能会同时出现在 Web 控制面板、CLI 和所有 MCP 客户端中。

监控与部署

生产环境中的每个错误都会上报到一个自托管、兼容 Sentry 的错误追踪系统。可用性检测持续监控每台 Web 服务器,各项指标则写入时序数据库。部署流程刻意保持"无聊":我们推送到 git,运行一条 Fabric 命令,它就会更新所有 Web 服务器、安装依赖、执行数据库迁移、收集静态文件、编译翻译并重启应用。如果某台服务器上的代码过时了,解决办法就是再部署一次,绝不手动修改。

总结

  • Python 和 Django:业务逻辑清晰易读,自带 Admin 和国际化,全栈统一使用一种语言。
  • PostgreSQL:唯一可信数据源,支持时间点恢复。
  • Redis:既是缓存,也是 RQ 任务队列的后端。
  • RQ 处理简单的后台任务,基于 RabbitMQ 的 Dramatiq 处理繁重且不容丢失的流水线。
  • Proxmox LXC 容器:快速、隔离且价格实惠的主机托管。
  • nameocean CLI(Go)和远程 MCP 服务器:同一套 API 之上的薄层。

好奇其他网站背后用的是什么技术?用我们的网站技术检测工具查一查吧。准备好打造属于您自己的网站了吗?挑选一个域名,然后将它部署到 NameOcean 主机托管上。

有好点子吗?为它找到完美的域名

我们的 AI 域名生成器会在数百种后缀中推荐可注册的域名。包含免费的 SSL、DNS 和 Whois 隐私保护。

以其他语言阅读:

BG CS DA DE EL EN ES FI FR HU IT NB NL PL PT RO RU SV TR UZ