Команда инженеров · свой ЦОД в РФ · своё железо · своя панель · CloudStack + Linstor · MCP · база знаний по self-hosted
Дизайн и прототипирование

Penpot

Редактор интерфейсов, который ставится на свой сервер: макеты, компоненты, дизайн-токены и передача в разработку. Развернули 2.18.0 на Fatmetal Cloud Server, замерили потребление и проверили, что реально переезжает из Figma.

Проверено на версии v2.18.0, 28 сентября 2026 ~9 минут чтения Fatmetal Team
Дизайн и прототипирование Лицензия: MPL-2.0 9 контейнеров Статус: запущен у нас, v2.18.0

Вердикт

Подходит
  • командам, которым Figma больше не продается официально
  • тем, кому макеты нужно держать внутри периметра
  • под дизайн-систему: токены по стандарту W3C, без плагинов
  • для передачи в разработку без платного Dev-места
Не подходит
  • дизайнеру-одиночке: хватит бесплатного облака Penpot
  • команде со слабыми ноутбуками - рендер идет в браузере
  • если нужны прототипы прямо из Figma: они не переносятся
  • под иллюстрацию и печать - это инструмент интерфейсов
Рекомендуем: CPU4-RAM8-DISK100 Сложность: medium Время запуска: ~135 с с чистой машины RAM в простое: 2.26 ГБ Главный риск: Traefik из примера апстрима не видит Docker 29 Прод-готовность: да, с TLS и своим SMTP
Что это

Что это и какую задачу решает

Penpot - браузерный редактор интерфейсов и прототипов, который разворачивается на своем сервере. По набору задач это Figma: макеты, библиотеки компонентов, автолэйаут, комментарии, совместная работа в реальном времени.

Отличий два, и оба технические. Файлы живут в открытых веб-форматах, а автолэйаут - это буквально flexbox и CSS Grid, а не собственная модель раскладки. Разработчик видит в инспекторе то, что потом пишет в код.

Второе - дизайн-токены по стандарту W3C нативно, без плагинов. Для команды с дизайн-системой это значит, что токены выгружаются в CSS, SCSS или JSON без прослойки.

Интерфейс переведен на русский полностью: в файле локализации 2.18.0 - 1666 строк и ни одного пустого перевода. Все скриншоты в этом разборе сняты с русской версии.

Clojure/JVMClojureScriptRust + Skia (WASM)PostgreSQL 15Valkey 8.1Docker Compose
Дизайн-токены в Penpot: темы, наборы токенов, применение к слою
Дизайн-токены - отдельная вкладка рядом со слоями, не плагин
Дашборд Penpot 2.18 на русском: проекты, черновики, превью файлов
Дашборд Penpot 2.18.0 на нашем стенде, тариф CPU4-RAM8-DISK100
Сравнение

Чем отличается от платных аналогов

Для российской команды разговор идет не про экономию, а про доступность.

Figma в справочном центре пишет прямо: платные услуги новым клиентам в России не предоставляются, включая переход с бесплатного Starter на платный тариф. Платежные схемы для таких клиентов не выстраиваются (проверено 27 сентября 2026).

То есть подписку нельзя не «дорого», а нельзя оформить в принципе. Поэтому таблица ниже - не про то, где дешевле.

ПараметрPenpot self-hostFigmaSketch
Цена за местонет, платите за серверFull 16 $, Dev 12 $, Collab 3 $ в мес12 $ за редактора в мес
Доступность из РФполнаяплатные тарифы не продаютсяоплата из РФ недоступна
Где данныеваш сервероблако вендораоблако вендора
Платформабраузербраузер и десктоптолько macOS
Инспектор для разработчикавходитотдельное Dev-местовходит
ЛицензияMPL-2.0проприетарнаяпроприетарная

Облако самого Penpot тоже есть и бесплатное на тарифе Professional - оно тут скорее конкурент self-host, чем Figma. Ставить на свой сервер имеет смысл, когда данные должны остаться внутри.

Под капотом

Тех-стек и архитектура

Бэкенд - Clojure на JVM, фронтенд - ClojureScript. Рендер холста в 2.x переписан на Rust со Skia и собирается в WASM, работает через WebGL в браузере пользователя.

Официальный compose 2.18.0 поднимает девять контейнеров: frontend (nginx), backend, exporter, admin-console, mcp, PostgreSQL 15, Valkey 8.1, перехватчик почты и ваш reverse-proxy.

Два контейнера новые и о них стоит знать. penpot-mcp - это MCP-сервер, к которому подключается внешний AI-агент, чтобы читать и править файлы. Ключи моделей в самом Penpot нигде не хранятся: наружу к моделям он не ходит.

Админ-консоль появилась ровно в 2.18.0 - в compose предыдущей версии этого сервиса нет. Она отвечает за организации и подписки и включается флагом enable-admin-console.

Самый тяжелый образ - экспортер, 2.96 ГБ. Внутри полный Chromium: PNG и PDF Penpot рендерит настоящим браузером на сервере.

Конфигурация

Минимальная конфигурация

Вендор минимума не называет вовсе - только рекомендацию под тысячи пользователей.

Официальный минимумне заявлен
Рекомендация вендора4 CPU / 16 GB под тысячи пользователей
Реально в простое2.26 ГБ на машине, 2.02 ГиБ контейнеры
Из них бэкенд на JVM1.203 GiB
Диск после установки9.0 ГБ, из них 6.95 ГБ образы
Рекомендуем тарифCPU4-RAM8-DISK100
i

Почему не CPU2-RAM4-DISK50. Простой укладывается и в 4 ГБ, но бэкенд на JVM растет вместе с весом открытых файлов, а каждый параллельный экспорт добавляет около 200 МБ. Мы это замерили - цифры ниже.

В маркетплейсе Fatmetal

Не хотите ставить руками?

Этот стек есть в маркетплейсе Fatmetal - можно не повторять установку из этого разбора вручную. Заказываете сервер, за пару минут получаете рабочий домен, валидный TLS и файл с доступами.

Рекомендуемая конфигурация: CPU4-RAM8-DISK100

Развернуть в 1 клик →
Развертывание

Развертывание на Fatmetal

Cloud Server, Ubuntu 24.04, Docker ставится руками - образ идет чистым.

  1. Взять compose нужного тега

    Именно тега, а не ветки main: в файле зашиты подстановки версий.

    mkdir -p /opt/penpot && cd /opt/penpot
    curl -fsSL -o docker-compose.yaml \
      https://raw.githubusercontent.com/penpot/penpot/2.18.0/docker/images/docker-compose.yaml
  2. Запинить версию и ключ

    Без явной переменной поднимется 2.17, а админ-консоль - 2.16.

    printf 'PENPOT_VERSION=2.18.0\nPENPOT_SECRET_KEY=%s\n' \
      "$(openssl rand -base64 64 | tr -d '\n')" > .env
    chmod 600 .env
  3. Закрыть порт и снять небезопасные флаги

    Порт 9001 вешаем на 127.0.0.1, наружу смотрит только reverse-proxy с TLS. Из PENPOT_FLAGS убираем disable-email-verification и disable-secure-session-cookies, телеметрию выключаем.

  4. Поднять стек

    docker compose pull
    docker compose up -d

    Проверка готовности: curl -s -o /dev/null -w "%{http_code}" https://ваш-домен/readyz.

  5. Завести первого пользователя

    Штатный CLI внутри контейнера бэкенда, профиль сразу активен.

    docker exec penpot-penpot-backend-1 python3 /opt/penpot/backend/manage.py \
      create-profile -n "Имя" -e you@example.com -p 'пароль'
Рабочая область Penpot: слои, линейки, панель дизайна, макет мобильного приложения
Рабочая область: слои, ресурсы, токены, панель дизайна. Penpot 2.18.0
Замеры

Что измерили после запуска

Цифры со стенда CPU4-RAM8-DISK100, Ubuntu 24.04.4, Docker 29.8.1.

Установка Docker17 с
Скачивание образов90 с (9 образов, 6.95 ГБ)
Старт контейнеров6 с
Миграции до готовности27 с
Итого с чистой машины135 с
RAM в простое2.26 ГБ на машине
Отклик главной50 мс
Вход через API190 мс
После перезагрузки ВМ35 с до ответа, 58 с до всех контейнеров

Отдельно проверили, что растет и почему. Импортировали встроенную дизайн-систему вендора: база выросла с 12 до 16 МБ, том ассетов - с 8 КБ до 20 МБ, 743 объекта хранилища.

Экспорт борда в PNG занял 3.2 секунды. Экспортер на пике поднялся со 127.7 до 336.6 MiB - столько стоит один параллельный Chromium.

i

Главное по ресурсам. Сервер держит данные и синхронизацию, а рисует браузер. Открытие одного файла с дизайн-системой - это 39.9 МБ JSON, которые уезжают клиенту за 7 секунд. Слабый ноутбук дизайнера сервером не лечится.

Панель ресурсов Penpot: компоненты 201, цвета 7, типографика 4
Локальная библиотека импортированного файла: 201 компонент, 7 цветов, 4 стиля текста

Проверено на версии v2.18.0, сентябрь 2026. На новых версиях результаты могут отличаться.

Переезд

Что реально переносится из Figma

У Penpot есть официальный плагин экспорта, и у него есть границы.

Плагин ставится в Figma, выгружает файл в архив, архив импортируется в Penpot. Репозиторий живой, правки - от 10 сентября 2026.

По собственному списку плагина переносятся фигуры и тексты, компоненты и наборы компонентов, варианты, автолэйауты, маски и булевы группы, библиотеки цветов и типографики, связи с внешними библиотеками.

Прототипы не переносятся вовсе - это написано в документации плагина прямым текстом. Связи между экранами, оверлеи и триггеры придется собрать заново.

Второе ограничение - производительность на больших файлах: мейнтейнеры называют ее главной проблемой экспорта. Планируйте переезд по файлам, а не одним архивом на всю библиотеку.

i

Оговорка. Сами мы миграцию не прогоняли: для этого нужен живой аккаунт Figma с реальной библиотекой. Список выше - документация апстрима, а не наш замер.

Режим инспектирования Penpot: дерево слоев, размеры, заливка, экспорт
Режим инспектирования - то, за что в Figma платят отдельным Dev-местом
Подводные камни

Где может сломаться

Три грабли, на которые наступили при запуске.

client version 1.24 is too old. Minimum supported API version is 1.40

Симптом. Стек работает, но снаружи отдается самоподписанный сертификат TRAEFIK DEFAULT CERT. Выглядит как проблема Let's Encrypt.

Причина. В закомментированном примере официального compose зафиксирован traefik:v3.3. Его docker-провайдер ходит к демону с API 1.24, а Docker Engine 29 принимает минимум 1.40. Провайдер не видит меток контейнеров вовсе, роутер не создается, ACME не запускается.

Решение. Поднять версию прокси: traefik:v3.7.13. Переменная DOCKER_API_VERSION не помогает. После замены сертификат выпустился с первой попытки.

!

Версия в compose отстает от файла. В compose тега 2.18.0 подстановка по умолчанию дает 2.17, а админ-консоли - 2.16. Без явного PENPOT_VERSION вы поднимете не то, что скачали.

!

Нерабочий SMTP не виден снаружи. Регистрация отвечает успехом за 0.31 секунды даже при недостижимом почтовом сервере: письмо уходит в очередь. Пользователь видит «проверьте почту», письма нет, а правда лежит в таблице task со статусом retry.

Диагностика последнего случая - один запрос к базе:

docker exec penpot-penpot-postgres-1 psql -U penpot -d penpot \
  -c "select name, status, retry_num, left(error,60) from task order by created_at desc limit 5;"
Безопасность

Безопасность и обновления

Перед выходом в интернет меняем то, о чем вендор предупреждает сам: секретный ключ вместо change-this-insecure-key, снимаем флаги отключенной проверки почты и небезопасных cookies, выключаем телеметрию, ставим реальный SMTP вместо перехватчика.

Вход в команду через OIDC и LDAP есть в открытом коде и включается флагами. SAML и журнал аудита - платный уровень: в открытом репозитории их реализации нет.

Настройки аккаунта Penpot на русском, раздел Subscription в открытой сборке
Настройки аккаунта: раздел подписки есть и в открытой сборке

Обновление - обычное, но у перехода на 2.18 есть ручной шаг: в compose нужно добавить сервис админ-консоли и переменную PENPOT_ADMIN_CONSOLE_URI, иначе стек окажется несогласованным.

docker compose pull && docker compose up -d

Бэкап - база плюс том ассетов, порознь их восстанавливать бессмысленно:

docker exec penpot-penpot-postgres-1 pg_dump -U penpot penpot > penpot.sql
docker run --rm -v penpot_penpot_assets:/d -v "$PWD":/b alpine \
  tar czf /b/assets.tgz -C /d .
Рядом

Связь с другими стеками

  • Reverse-proxy - Traefik или Caddy для TLS, порт 9001 наружу не публикуем.
  • S3-хранилище - ассеты уносятся одной переменной PENPOT_OBJECTS_STORAGE_BACKEND=s3. База - нет, ей нужен диск.
  • SMTP - обязателен для подтверждения адреса и приглашений в команду.
  • MCP-клиент - Claude, Cursor и другие агенты подключаются к /mcp/sse и работают с файлами.
Ограничения

Когда это НЕ ваш выбор

У команды слабые машины

Рендер вынесен в браузер через WASM и WebGL. Сервер можно взять скромный, а ноутбуки дизайнеров - нет. Вендор прямо просит свежий Chrome и мощные клиентские машины.

Нужны прототипы из Figma прямо сейчас

Официальный плагин их не переносит. Если интерактив - основа вашей библиотеки, переезд означает сборку прототипов заново.

Нужны SAML и журнал аудита

В self-host есть OIDC и LDAP, а SAML с audit trail вендор относит к платному уровню. У контейнера админ-консоли публичного исходника нет, хотя в следующем релизе он станет включенным по умолчанию.

Это госзаказ с требованием реестра

Свой сервер снимает вопрос передачи данных за границу, но Penpot не в реестре отечественного ПО, и self-host этого не меняет.

FAQ

Частые вопросы

Хватит ли 4 ГБ памяти?

Простой укладывается: мы намеряли 2.26 ГБ. Но бэкенд на JVM растет с весом открытых файлов - на одном файле в 40 МБ он поднялся с 1.09 до 1.36 GiB. На 4 ГБ мы стек не проверяли и обещать не будем.

Можно поставить без Docker?

Официальный путь - compose или Helm-чарт. Сборка из исходников возможна, но вендор ее как способ установки не предлагает.

Русский интерфейс полный?

Да. В файле локализации 2.18.0 - 1666 строк, пустых нет, последняя ревизия от 31 июля 2026.

Penpot ходит во внешние ИИ-модели?

Нет. Ни в compose, ни в переменных контейнеров нет ключей OpenAI или Anthropic. MCP-сервер работает в обратную сторону: это к нему подключается ваш агент.

Как отдать разработчику макет?

Режим инспектирования входит в бесплатную установку: размеры, цвета, CSS и экспорт ассетов, без отдельного платного места.

Что бэкапить?

Базу PostgreSQL и том ассетов вместе. В базе геометрия файлов и история версий, в томе - картинки и шрифты.

Какие ограничения лицензии?

MPL-2.0. Это не AGPL: держать инстанс внутри компании и писать рядом свой закрытый код можно без условий.

Итог

Penpot 2.18 ставится за две минуты и держится в 2.26 ГБ памяти в простое - тариф CPU4-RAM8-DISK100 закрывает команду с запасом на экспорт и тяжелые файлы. Русский интерфейс полный, инспектор для разработчика входит в бесплатную установку, лицензия MPL-2.0 не требует ничего взамен. Главное узкое место не на сервере, а в браузере дизайнера, а прототипы из Figma придется собрать заново.

Анонсы новых разборов в Telegram-канале Новые гайды и карточки в маркетплейсе первыми @fatmetal_channel →

Этот стек у нас запущен на тарифе CPU4-RAM8-DISK100. Нашли баг в гайде - напишите, поправим в течение дня.

Спросить инженера в TelegramМы на связи