После создания сервера Penpot ставится автоматически: docker compose поднимает весь стек апстрима (8 контейнеров), а Caddy отдельным контейнером выпускает Let's Encrypt и открывает доступ по HTTPS на magic-DNS домене. Первая загрузка образов занимает несколько минут - самый тяжелый образ, экспортер, весит почти 3 ГБ (внутри полноценный Chromium для выгрузки PNG и PDF).

Что внутри

  • Penpot (Clojure/JVM бэкенд, ClojureScript + Rust/Skia фронтенд) - редактор, инспектор кода, дизайн-токены.
  • Exporter - выгрузка PNG/PDF настоящим браузером внутри контейнера.
  • Admin-console, MCP-сервер - административная консоль и доступ для внешних AI-агентов (Claude, Cursor и т.п.) к файлам.
  • PostgreSQL 15, Valkey 8.1 - база и уведомления/кеш.
  • Caddy - reverse-proxy и авто-TLS (Let's Encrypt), отдельный контейнер. Penpot слушает только localhost.

Безопасность

  • Администратора заводит установка сама - штатным CLI апстрима, сразу активным, подтверждение почты не требуется.
  • Регистрация закрыта по умолчанию - посторонний не заведет себе учетную запись, даже зная адрес; участников приглашает администратор.
  • fail2ban - банит IP после серии неудачных попыток входа по SSH.
  • HTTPS + security-заголовки - Let's Encrypt с автопродлением, HSTS, X-Content-Type-Options, Referrer-Policy.

Как войти

  1. Адрес формируется из IP сервера: замените точки на дефисы и добавьте .fatmetal.net. Пример: IP 45.15.159.10 → https://45-15-159-10.fatmetal.net/.
  2. Администратор уже заведен: логин - адрес из поля ADMIN_EMAIL (если задавали при заказе), иначе admin@<ваш-адрес>; пароль - пароль этого сервера, тот же, что для SSH (он в личном кабинете).
  3. Смените пароль сразу: «Ваш аккаунт» → «Пароль». Дальше пригласите участников команды (в настройках команды) и откройте готовые библиотеки и шаблоны на дашборде - там уже есть дизайн-система, набор токенов и примеры прототипов.

Свой домен

Наведите A-запись на IP этого сервера, впишите домен в DOMAIN= (/etc/penpot-mp/params.env) и запустите bash /opt/penpot-mp/install.sh еще раз - скрипт идемпотентен, перевыпустит TLS под новый домен.

Требования

В простое стек занимает около 2,3 ГБ RAM; бэкенд на JVM растет вместе с весом открытых файлов (один файл дизайн-системы в 40 МБ поднял его с 1,1 до 1,4 ГБ), а каждый параллельный экспорт добавляет около 200 МБ. Образы на диске - около 7 ГБ. Главное узкое место не на сервере, а в браузере дизайнера: рендер холста идет через WASM/WebGL, современный Chrome важнее лишнего гигабайта памяти на сервере. Тариф CPU4-RAM8-DISK100.

Ассеты (картинки, шрифты) растут отдельно от базы и их можно унести в S3 - Penpot умеет это нативно (переменная PENPOT_OBJECTS_STORAGE_BACKEND). Берите горячий класс: ассеты редактор читает постоянно, пока вы работаете с файлом. База с геометрией файлов и историей версий в S3 не выносится и остается на диске тарифа.

Подробный разбор с замерами и скриншотами