Pular para o conteúdo principal
Comprar agora

Instalação em 15 minutos

Instalar o Papyro

Este guia conduz você pela instalação do Papyro no seu próprio servidor. Pressupõe-se conhecimento básico de Docker.

1. Requisitos

  • Docker 24+ e docker compose v2
  • Mínimo de 2 GB de RAM, 10 GB de disco
  • Reverse proxy com HTTPS (Cloudflare, Traefik, nginx)
  • Um domínio ou subdomínio (ex.: papyro.yourcompany.com)
  • O seu PAPYRO_LICENSE_KEY adquirido (enviado por e-mail)
  • Seu token GHCR (para baixar a imagem, enviado por e-mail)

2. Configurar o diretório de trabalho

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. Preencher o arquivo .env

Cole os valores do seu e-mail de compra:

# 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=

Execute os comandos openssl rand no seu terminal e cole as saídas. Não as perca — são necessárias para acessar o banco de dados.

Check-in de licença (e como desativá-lo)

O Papyro envia um pequeno beacon de licença para admin.papyro.dev aproximadamente a cada 12 horas e recebe de volta um direito assinado, para que alterações de plano, assentos e expiração cheguem à sua instalação sem um novo arquivo de chave. Ele envia o ID da sua licença, um hash unidirecional de BETTER_AUTH_URL, os assentos em uso, a versão do Papyro e um nonce de uso único — nunca conteúdo do espaço de trabalho, nomes de usuários ou endereços de e-mail.

PAPYRO_LICENSE_CHECKIN_URL=off

Adicione esta linha ao .env para uma instalação totalmente isolada da rede (air-gapped). Sua chave assinada continua funcionando offline no nível que você adquiriu; as alterações de plano então chegam como uma chave reemitida.

Módulos opcionais e ajustes

O .env baixado traz mais opções do que o bloco acima. Tudo aqui vem comentado por padrão — descomente apenas o que você precisar:

  • Salas de reunião — descomente o serviço livekit e defina LIVEKIT_URL e LIVEKIT_API_SECRET. ROOMS_MAX_CONCURRENT limita os participantes simultâneos em todas as salas.
  • Legendas de sala ao vivo (50 idiomas falados → 51 idiomas de legenda) — adicione o serviço translator, defina ROOMS_TRANSLATION_ENABLED=true e informe seus próprios DEEPGRAM_API_KEY e OPENAI_API_KEY. O uso é cobrado nas suas próprias contas. Os idiomas oferecidos nos seletores são escolha sua via ROOMS_SPOKEN_LANGUAGES (padrão: os sete idiomas da interface).
  • Backups externos — descomente o serviço r2-sync e preencha os valores R2_* para espelhar dumps do banco de dados e uploads para o Cloudflare R2 todas as noites.
  • Retenção — TRASH_RETENTION_DAYS, BOARD_TRASH_RETENTION_DAYS, ACTIVITY_RETENTION_DAYS, AUTH_EVENTS_RETENTION_DAYS e os demais substituem por quanto tempo cada tipo de registro é mantido.
  • Notificações do Helpdesk — NETGSM_* envia um SMS quando uma chamada é marcada como inacessível; RESEND_API_KEY e RESEND_FROM enviam por e-mail os relatórios de atividade em campo. Em branco desativa os dois.
  • Rastreamento de erros — ERROR_AI_ENABLED=0 desativa a análise de causa raiz por IA (os stack traces são enviados à OpenAI quando está ativado). WEBHOOK_ALLOW_PRIVATE=1 permite que os webhooks do quadro alcancem receptores em rede privada.
  • Operações — DB_POOL_MAX, SHUTDOWN_DRAIN_MS, REALTIME_MAX_* e UPLOAD_MIN_FREE_BYTES ajustam o tamanho do pool, o tempo de drenagem, os limites de conexões em tempo real e a proteção de espaço livre.

Cada valor está documentado inline no .env que você baixou. Em branco significa que o padrão embutido se aplica.

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. Baixar a imagem Docker

Use o token GHCR que enviamos por e-mail para fazer login e baixar a imagem:

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

docker pull ghcr.io/egebilge/papyro:latest

Fixe uma tag de versão (por exemplo, :v0.2.0) no docker-compose.yml para produção, para que uma atualização seja algo que você escolhe, e não algo que acontece na próxima reinicialização.

5. Executar

docker compose up -d

A inicialização leva de 30 a 60 segundos (migrações são executadas, contêineres sobem).

6. Criar o primeiro administrador

Abra https://papyro.yourdomain.com em um navegador. O assistente de configuração aparece — informe os dados do seu primeiro usuário. Esse primeiro usuário é criado com o papel de super-admin e o assistente roda exatamente uma vez.

7. Verificar o status da licença

Vá em Admin → Licença (barra lateral). Seu nome de cliente, edição, número de assentos e data de expiração devem aparecer.

Solução de problemas
ErrorCause / SebepFix / Çözüm
PAPYRO_LICENSE_KEY is not setVariável de ambiente ausente ou copiada incorretamente.Cole a linha exata do seu e-mail de compra no .env. Reinicie: docker compose up -d --force-recreate app
PAPYRO_LICENSE_KEY is invalid: malformed envelopeO envelope foi copiado de forma incompleta (colagem truncada).Selecione e copie a linha PAPYRO_LICENSE_KEY=... inteira do e-mail. O valor deve conter um ponto (.) separando o payload e a assinatura.
PAPYRO_LICENSE_KEY is invalid: invalid signatureVersão de imagem errada, ou o envelope pertence a um build de outro fornecedor.Verifique a tag da imagem no seu comando docker pull. Para ajuda, entre em contato com [email protected].
PAPYRO_LICENSE_KEY is invalid: license revokedA licença foi revogada no painel do fornecedor, e a instalação percebeu isso no seu último check-in.Entre em contato com [email protected]. Se isso for um engano, uma restauração é aplicada no próximo check-in — sem necessidade de uma nova chave.
LICENSE_OVER_SEAT — Cannot add new userO limite de assentos da sua licença está cheio. Usuários banidos não ocupam um assento.Envie um e-mail para [email protected] para aumentar o número de assentos, ou baneie os usuários que saíram.

Renovação

Enviamos um e-mail 30 dias antes da expiração. Após o pagamento, um novo PAPYRO_LICENSE_KEY chega por e-mail. Substitua o valor no .env e reinicie:

docker compose up -d --force-recreate app

Suporte

E-mail: [email protected]

Resposta em até 48 horas. Use o prefixo de assunto "URGENT" para emergências.