Перейти к основному содержимому
Купить

Установка за 15 минут

Установка Papyro

Это руководство проведёт вас через установку Papyro на вашем собственном сервере. Предполагается базовое знание Docker.

1. Требования

  • Docker 24+ и docker compose v2
  • Минимум 2 ГБ ОЗУ, 10 ГБ диска
  • Обратный прокси с HTTPS (Cloudflare, Traefik, nginx)
  • Домен или поддомен (например, papyro.yourcompany.com)
  • Ваш приобретённый PAPYRO_LICENSE_KEY (отправлен по email)
  • Ваш токен GHCR (для загрузки образа, отправлен по email)

2. Настройка рабочего каталога

mkdir papyro && cd papyro
curl -fsSL https://papyro.dev/install/docker-compose.yml -o docker-compose.yml
curl -fsSL https://papyro.dev/install/env.example -o .env

3. Заполните файл .env

Вставьте значения из письма о покупке:

# Domain
BETTER_AUTH_URL=https://papyro.yourcompany.com

# Database password (generate randomly)
DB_PASSWORD=$(openssl rand -hex 16)

# Better Auth secret (generate randomly)
BETTER_AUTH_SECRET=$(openssl rand -hex 32)

# Redis password (generate randomly)
REDIS_PASSWORD=$(openssl rand -hex 16)

# Cron secret (generate randomly)
CRON_SECRET=$(openssl rand -hex 32)

# License (from your purchase email)
PAPYRO_LICENSE_KEY=eyJ2IjoxLCJjdXN0b21lciI6...

# License check-in is ON by default. Uncomment to run fully air-gapped:
# PAPYRO_LICENSE_CHECKIN_URL=off

# AG Grid Enterprise license (data-grid block renders watermarked without it)
AG_GRID_LICENSE_KEY=

# OpenAI API key ("ask the grid" feature)
OPENAI_API_KEY=

# R2 backup (optional)
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=

Выполните команды openssl rand в терминале и вставьте их вывод. Не теряйте эти значения — они нужны для доступа к БД.

Проверка лицензии (и как её отключить)

Примерно раз в 12 часов Papyro отправляет небольшой сигнал проверки лицензии на admin.papyro.dev и получает в ответ подписанное разрешение, поэтому изменения тарифа, количества мест и срока действия доходят до вашей установки без нового файла ключа. Передаются идентификатор лицензии, необратимый хеш BETTER_AUTH_URL, число используемых мест, версия Papyro и одноразовый nonce — никогда содержимое рабочего пространства, имена пользователей или адреса электронной почты.

PAPYRO_LICENSE_CHECKIN_URL=off

Добавьте эту строку в .env для полностью изолированной (air-gapped) установки. Ваш подписанный ключ продолжает работать офлайн на уровне, который вы приобрели; изменения тарифа в этом случае приходят в виде переизданного ключа.

Дополнительные модули и настройка

В скачанном .env есть больше переключателей, чем в блоке выше. По умолчанию всё здесь закомментировано — раскомментируйте только то, что вам нужно:

  • Комнаты для встреч — раскомментируйте сервис livekit, затем задайте LIVEKIT_URL и LIVEKIT_API_SECRET. ROOMS_MAX_CONCURRENT ограничивает количество одновременных участников во всех комнатах.
  • Живые субтитры в комнатах (50 языков речи → 51 язык субтитров) — добавьте сервис translator, задайте ROOMS_TRANSLATION_ENABLED=true, а также собственные DEEPGRAM_API_KEY и OPENAI_API_KEY. Использование оплачивается с ваших аккаунтов. Какие языки предлагают селекторы, решаете вы через ROOMS_SPOKEN_LANGUAGES (по умолчанию — семь языков интерфейса).
  • Резервные копии вне площадки — раскомментируйте сервис r2-sync и заполните значения R2_*, чтобы ежедневно зеркалировать дампы базы данных и загрузки в Cloudflare R2.
  • Хранение данных — TRASH_RETENTION_DAYS, BOARD_TRASH_RETENTION_DAYS, ACTIVITY_RETENTION_DAYS, AUTH_EVENTS_RETENTION_DAYS и остальные переопределяют, как долго хранится каждый тип записей.
  • Уведомления хелпдеска — NETGSM_* отправляет SMS, когда обращение помечено как недозвон; RESEND_API_KEY и RESEND_FROM отправляют по email отчёты об активности. Пустые значения отключают оба варианта.
  • Отслеживание ошибок — ERROR_AI_ENABLED=0 отключает AI-анализ первопричины (при включении трассировки стека отправляются в OpenAI). WEBHOOK_ALLOW_PRIVATE=1 позволяет webhook-ам досок обращаться к получателям в приватной сети.
  • Эксплуатация — DB_POOL_MAX, SHUTDOWN_DRAIN_MS, REALTIME_MAX_* и UPLOAD_MIN_FREE_BYTES настраивают размер пула соединений, время дренирования, лимиты realtime-подключений и защиту по свободному месту.

Каждое значение задокументировано прямо в скачанном вами .env. Пустое значение означает, что применяется встроенное значение по умолчанию.

Hardening: encryption at rest

Like other self-hosted collaboration tools, Papyro stores workspace content as regular PostgreSQL rows so search and exports work; application-layer secrets (integration credentials) are additionally encrypted. Protecting the data at rest is done at the disk layer of your server:

  • Encrypt the disk or volume that holds your Docker volumes — LUKS on bare-metal Linux, or your cloud provider's encrypted block storage.
  • Database dumps land in the dbbackups volume on the same disk. If you copy them elsewhere, keep them encrypted in transit and at the destination.
  • If you enable the optional R2 backup sync, Cloudflare encrypts stored objects at rest; scope the API token to that single bucket.

HTTPS in front of the app is already required (step 1). Combined with disk encryption and encrypted backups this matches the at-rest baseline that SOC 2 / ISO 27001 questionnaires expect.

4. Загрузите Docker-образ

Используйте токен GHCR, который мы отправили вам по email, чтобы войти и загрузить образ:

echo "ghp_xxxxxxxxxxxx" | docker login ghcr.io \
  -u egebilge --password-stdin

docker pull ghcr.io/egebilge/papyro:latest

Зафиксируйте тег версии (например, :v0.2.0) в docker-compose.yml для продакшена, чтобы обновление было вашим осознанным выбором, а не тем, что случайно произойдёт при следующем перезапуске.

5. Запустите

docker compose up -d

Первоначальный запуск занимает 30–60 секунд (выполняются миграции, поднимаются контейнеры).

6. Создайте первого администратора

Откройте https://papyro.yourdomain.com в браузере. Появится мастер настройки — введите данные первого пользователя. Этот первый пользователь создаётся с ролью super-admin, а мастер запускается ровно один раз.

7. Проверьте статус лицензии

Перейдите в Admin → License (боковая панель). Должны отобразиться имя клиента, редакция, количество мест и дата истечения.

Устранение неполадок
ErrorCause / SebepFix / Çözüm
PAPYRO_LICENSE_KEY is not setПеременная окружения отсутствует или скопирована неверно.Вставьте точную строку из письма о покупке в .env. Перезапустите: docker compose up -d --force-recreate app
PAPYRO_LICENSE_KEY is invalid: malformed envelopeКонверт был скопирован не полностью (обрезанная вставка).Выделите и скопируйте всю строку PAPYRO_LICENSE_KEY=... из письма. Значение должно содержать точку (.), разделяющую полезную нагрузку и подпись.
PAPYRO_LICENSE_KEY is invalid: invalid signatureНеверная версия образа, либо конверт принадлежит другой сборке вендора.Проверьте тег образа в вашей команде docker pull. За помощью обращайтесь на [email protected].
PAPYRO_LICENSE_KEY is invalid: license revokedЛицензия была отозвана в панели вендора, и установка получила это при последней проверке.Свяжитесь с [email protected]. Если это ошибка, восстановление применится при следующей проверке — новый ключ не понадобится.
LICENSE_OVER_SEAT — Cannot add new userЛимит мест по вашей лицензии исчерпан. Заблокированные пользователи не занимают место.Напишите на [email protected], чтобы увеличить количество мест, или заблокируйте пользователей, которые больше не работают у вас.

Продление

Мы пишем вам по email за 30 дней до истечения срока. После оплаты новый PAPYRO_LICENSE_KEY приходит по email. Замените значение в .env и перезапустите:

docker compose up -d --force-recreate app

Поддержка

Email: [email protected]

Ответ в течение 48 часов. Для срочных вопросов используйте префикс темы «URGENT».