Технологический стек NameOcean: Python, Django, Redis и Proxmox
Коротко: NameOcean — приложение на Python и Django. Данные хранятся в PostgreSQL, кешем служит Redis, фоновые задачи обрабатываются двумя системами очередей (RQ на Redis для коротких задач и Dramatiq на RabbitMQ для более тяжёлых конвейеров), клиентский хостинг работает в контейнерах Proxmox LXC на наших собственных серверах. Управлять всем этим можно из браузера, из утилиты командной строки на Go или через ИИ-ассистента по MCP. В этой статье мы пройдёмся по каждому слою и объясним, почему выбрали именно его.
Стек в двух словах
- Язык и фреймворк: Python и Django, Gunicorn за Nginx.
- База данных: PostgreSQL с резервным копированием на отдельный сервер и восстановлением на любой момент времени (point-in-time recovery).
- Кеш: Redis, подключённый через django-redis и django-cacheops.
- Очереди: RQ (django-rq) на Redis, а также Dramatiq на RabbitMQ.
- Хостинг: хосты Proxmox VE, на которых каждый клиентский сервер работает как LXC-контейнер.
- DNS: собственные серверы PowerDNS, с ns1 по ns4.
- Объектное хранилище: собственное S3-совместимое хранилище для файлов, резервных копий и изображений блога.
- Клиентские инструменты: CLI
nameocean(на Go) и наш удалённый MCP-сервер для ИИ-клиентов — оба работают поверх одного и того же публичного API. - Деплой:
git pushи одна команда Fabric. Никто не правит код прямо на сервере.
Хотите узнать, на чём построен любой другой сайт? Наш бесплатный Website Technology Checker покажет хостинг-провайдера, CMS, язык программирования и фреймворк любого домена. Попробуйте на nameocean.net.
Есть идея? Найдите для неё идеальный домен
Наш AI-генератор доменных имён предлагает свободные имена в сотнях зон. Бесплатные SSL, DNS и защита Whois включены.
Почему Python и Django
Снаружи регистратор доменов выглядит просто: нашли имя, оплатили, настроили DNS. Но внутри — огромное количество бизнес-логики: API регистраторов, трансферы со своими конечными автоматами, продления, счета в нескольких валютах, выпуск SSL-сертификатов, DNS-зоны, почтовые ящики и хостинг-серверы — и всё это на 21 языке. Нам нужен был стек, в котором эта логика остаётся читаемой, а небольшая команда может безопасно выпускать изменения. Django даёт нам именно это.
«Батарейки в комплекте» — по-настоящему
Django из коробки содержит всё, что нужно регистратору с первого дня:
- ORM и миграции. Наши модели (домены, зоны, трансферы, счета, серверы) меняются каждую неделю. Благодаря миграциям Django каждое изменение схемы — это проверенный файл в git, который одинаково выполняется локально, в тестах и в продакшене.
- Админка. Поддержка и эксплуатация работают в админке Django. Нам не пришлось строить собственный бэк-офис — мы лишь дорабатываем её там, где это важно, например для безопасного удаления и операций с биллингом.
- Аутентификация и безопасность. Сессии, защита от CSRF, хеширование паролей и собственная модель пользователя с входом по e-mail встроены. Сверху мы добавили двухфакторную аутентификацию.
- Интернационализация. Сайт переведён на 21 язык с помощью инструментов gettext в Django и URL с языковым префиксом. Английской версии префикс не нужен, остальные получают
/tr/,/de/и так далее. - Sitemap, кеширование, шаблоны. Всё стандартное и хорошо задокументированное.
Один язык — от сайта до серверов
Python — это не только веб-приложение. На нём же работают воркеры очередей, management-команды для наших cron-задач, скрипты для взаимодействия с Proxmox, DNS-инструменты (dnspython) и скрипты деплоя (Fabric). Инженер, который понимает код страницы оформления заказа, разберётся и в коде, создающем хостинг-контейнер или продлевающем сертификат. Для небольшой команды это важнее, чем чистая скорость.
Исключение — инструменты, которые работают на вашем компьютере. Требовать от каждого пользователя установить Python и набор пакетов — плохое начало знакомства, поэтому CLI написан на Go (подробнее ниже). Собственной бизнес-логики у него нет: всё проходит через тот же API на Django.
Зрелая экосистема
Почти для всего, с чем мы интегрируемся, есть надёжная библиотека на Python: Stripe для платежей, Django REST framework для нашего публичного API, S3-клиенты в стиле boto, API Proxmox, Sentry-совместимый сбор ошибок. Наш удалённый MCP-сервер, через который ИИ-ассистенты управляют доменами и DNS клиента, тоже является частью Django-приложения.
Чем мы жертвуем и как с этим справляемся
Python — не самый быстрый язык, а синхронный запрос в Django не должен ждать медленного API регистратора. Мы решаем это тремя способами: тяжёлая или медленная работа уходит в очередь, частые чтения обслуживаются из Redis, а база данных настроена и проиндексирована под наши шаблоны запросов. На практике узким местом почти всегда оказывается внешний API, а не Python.
PostgreSQL: единый источник истины
Все домены, зоны, счета и серверы хранятся в PostgreSQL. Мы выбрали его за строгие транзакции (деньги и права на домен никогда не должны записываться наполовину), богатые типы данных, такие как JSON-поля и сетевые адреса, и надёжную схему резервного копирования. Резервное копирование непрерывное: журнал предзаписи (WAL) отправляется на отдельный сервер резервных копий, поэтому мы можем восстановить базу на любой момент времени, а не только на состояние вчерашнего дампа. Резервный веб-сервер в режиме горячего ожидания работает с той же базой и может взять на себя нагрузку, если основной веб-сервер выйдет из строя.
Redis: прежде всего кеш
Redis — наш кеш. Проверки доступности и цен доменов, отрисованные фрагменты страниц и ограничения частоты запросов хранятся в Redis, поэтому повторный запрос не доходит ни до API регистратора, ни до базы данных. Каждый ключ кеша включает язык, ведь одна и та же страница отличается в / и /tr/. Кроме того, мы используем django-cacheops, чтобы кешировать querysets ORM и автоматически инвалидировать их при изменении строки.
Выбрать Redis было легко: он быстрый, прост в эксплуатации и отлично поддерживается в Django. А раз он уже есть, на нём же работает и наша лёгкая очередь задач.
Очереди: RQ на Redis и Dramatiq на RabbitMQ
Многие действия, которые запускает клиент, не должны блокировать открытую страницу. Регистрация домена в реестре, выпуск SSL-сертификата, создание почтового адреса или запуск хостинг-контейнера занимают секунды или минуты. Такие задачи попадают в очередь, откуда их забирают воркеры. Мы используем две системы очередей — каждую для той работы, с которой она справляется лучше всего.
RQ (django-rq) на Redis
RQ — самая простая очередь в мире Python: задача — это функция Python и её аргументы, хранящиеся в Redis. Мы используем её для повседневных задач сайта:
- создание аккаунта клиента у регистратора после регистрации,
- выпуск и продление SSL-сертификатов,
- синхронизация статуса доменов и DNS-зон,
- добавление почтовых адресов и правил переадресации,
- запуск и остановка хостинг-контейнеров, открытие портов и настройка Nginx для клиентского сервера,
- создание счетов и отправка напоминаний о продлении.
Процесс-планировщик запускает периодические задачи, а панель django-rq показывает задачи в очереди, выполняющиеся и завершившиеся ошибкой прямо в админке. В режиме разработки очередь работает синхронно: задача выполняется сразу, и её ошибки видны немедленно.
Dramatiq на RabbitMQ
Для более тяжёлых и длинных конвейеров мы используем Dramatiq с RabbitMQ в качестве брокера. RabbitMQ — специализированный брокер сообщений: сообщение подтверждается только после того, как воркер его обработал, поэтому задача не теряется, если воркер упадёт на полпути. Dramatiq добавляет поверх этого автоматические повторы с экспоненциальной задержкой, ограничения по времени, приоритеты и middleware. Это подходит для задач из множества шагов, с большим объёмом или с внешними сервисами, которые время от времени дают сбой.
Зачем две очереди?
RQ позволяет простым задачам оставаться простыми: никаких дополнительных сервисов, лёгкая отладка, а Redis и так уже работает. RabbitMQ и Dramatiq дают более строгие гарантии доставки и лучшую пропускную способность, когда задаче это действительно нужно. Выбирая инструмент под конкретную нагрузку, мы не платим эксплуатационную цену полноценного брокера сообщений за пятисекундную задачу и не доверяем критически важный конвейер самому простому инструменту.
Хостинг: Proxmox и LXC-контейнеры
Наши тарифы хостинга и vibe-хостинга работают на наших собственных серверах Proxmox VE. Каждый клиентский сервер — это LXC-контейнер, а не полноценная виртуальная машина.
- Контейнеры используют общее ядро хоста, поэтому запускаются за секунды и потребляют гораздо меньше памяти, чем виртуальные машины. Больше ресурсов оборудования достаётся приложению клиента, а не второй операционной системе.
- Каждый контейнер изолирован: у него своя файловая система, процессы, сеть и лимиты на процессор, память и диск.
- Всё автоматизировано через API Proxmox. Когда вы заказываете сервер, Django отправляет задачу в очередь, а воркер создаёт контейнер из шаблона, задаёт лимиты, подключает сеть, открывает порты и настраивает обратный прокси и SSL для вашего домена.
- Изменение размера, резервное копирование и восстановление — это кнопки в панели управления, вызывающие тот же API. При перераспределении нагрузки контейнеры можно переносить между хостами Proxmox.
Собственное оборудование — это предсказуемые цены и полный контроль над сетью, резервными копиями и местом хранения данных.
DNS, почта и хранилище
- DNS: зоны обслуживаются нашими собственными серверами PowerDNS (с ns1 по ns4). Изменения, внесённые в панели DNS, записываются на первичный сервер и автоматически передаются на вторичные. Первичный сервер ежедневно резервируется.
- Почта: почтовый хостинг и бесплатная переадресация почты работают на наших собственных почтовых серверах с настроенными для вашего домена SPF, DKIM и DMARC.
- Объектное хранилище: собственное S3-совместимое хранилище для загруженных файлов, резервных копий и изображений.
CLI nameocean и MCP-сервер
Веб-панель — не единственный способ работы с сервисом. Всё, что она делает, проходит через наш публичный REST API и удалённый MCP-сервер по адресу https://nameocean.net/mcp, а CLI nameocean построен поверх них.
CLI nameocean
nameocean — единый статический бинарный файл на Go, собранный для macOS, Linux и Windows на amd64 и arm64. Go мы выбрали здесь по причине, противоположной той, по которой выбрали Python для сервера: CLI должен устанавливаться за секунды и работать где угодно без среды выполнения, а Go компилируется в один файл, который именно это и делает.
- Один вход.
nameocean loginоткрывает браузер и выполняет вход по OAuth 2.1 с PKCE. Токены хранятся в системном хранилище ключей (macOS Keychain, Windows Credential Manager или libsecret в Linux) и обновляются автоматически. На серверах и в CI вместо этого можно использовать API-ключ из панели управления. - Серверы и порты.
nameocean servers ls,servers infoдля данных SSH и git, а также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 никогда не тратит деньги: регистрация и продление остаются в панели управления. - Создан для скриптов и ИИ-агентов. Каждая команда принимает
--jsonи выводит JSON из API без изменений, поэтому его можно сразу передать вjq, shell-скрипты или агенту. - Одна команда для ИИ-клиентов.
nameocean mcp installнаходит на вашем компьютере Claude Code, Cursor и OpenCode и добавляет в каждый из них MCP-сервер NameOcean.
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-хостинге ваш ИИ-ассистент общается с NameOcean напрямую. Claude Code подключается одной командой: claude mcp add --transport http nameocean https://nameocean.net/mcp. Вы один раз входите в браузере, и с этого момента можете просить ассистента выполнить деплой, открыть порт или направить домен на ваш сервер, не трогая ни одного конфигурационного файла. Cursor, Claude Desktop, claude.ai и другие MCP-клиенты подключаются к тому же URL — как это сделать, описано в документации по MCP. На вашем компьютере ничего не запускается, поэтому и устанавливать или обновлять нечего.
Раньше для этого у нас было настольное приложение. Оно запускало локальный MCP-сервер и входило в систему по паролю, что несовместимо с двухэтапным входом. Удалённый сервер делает то же самое без установки, поэтому в ноябре 2026 года мы отказались от приложения.
Зачем и то, и другое?
Люди работают по-разному. CLI — для разработчиков, которые живут в терминале и хотят воспроизводимых команд, пригодных для скриптов. MCP-сервер — для тех, кто предпочитает описать, что нужно, и поручить остальное ИИ-ассистенту. Поскольку оба — тонкие слои поверх одного API, новая функция в Django-приложении сразу становится доступна в веб-панели, CLI и любом MCP-клиенте.
Мониторинг и деплой
Каждая ошибка в продакшене отправляется в собственный Sentry-совместимый трекер ошибок. Проверки доступности следят за каждым веб-сервером, а метрики записываются в базу данных временных рядов. Деплой у нас намеренно скучный: мы делаем push в git и запускаем одну команду Fabric, которая обновляет все веб-серверы, устанавливает зависимости, выполняет миграции, собирает статические файлы, компилирует переводы и перезапускает приложение. Если на сервере оказался устаревший код, решение — ещё один деплой, а не ручная правка.
Итоги
- Python и Django — для читаемой бизнес-логики, админки, i18n и единого языка во всём проекте.
- PostgreSQL — единый источник истины с восстановлением на любой момент времени.
- Redis — кеш и бэкенд очереди задач RQ.
- RQ — для простых фоновых задач, Dramatiq на RabbitMQ — для тяжёлых конвейеров, где ничего нельзя потерять.
- LXC-контейнеры Proxmox — для быстрого, изолированного и доступного хостинга.
- CLI nameocean (Go) и удалённый MCP-сервер — тонкие слои поверх одного и того же API.
Интересно, на чём работает другой сайт? Проверьте его в нашем Website Technology Checker. Готовы создать свой? Найдите домен и разместите его на хостинге NameOcean.
Есть идея? Найдите для неё идеальный домен
Наш AI-генератор доменных имён предлагает свободные имена в сотнях зон. Бесплатные SSL, DNS и защита Whois включены.