Instalar o Berth com Docker
Atualizado em 27 de outubro de 2026
O Berth é um único contêiner, ghcr.io/joveptesg/berth, compilado para amd64 e arm64. Ele roda em um servidor Linux ou VPS, em um NAS ou em um Raspberry Pi e guarda tudo em uma única pasta de dados. A instalação leva poucos minutos.
Do que você precisa
- Docker com Compose, ou um NAS que rode uma imagem de contêiner (Synology, Unraid, CasaOS).
- Uma máquina amd64 ou arm64 — um Raspberry Pi ou um NAS ARM serve.
- Uma pasta em um disco local para
./data. Não a coloque em um compartilhamento de rede (NFS, SMB): lá o SQLite pode corromper o banco de dados.
Rodar com Docker Compose
./data guarda o banco de dados, os backups dele, o armazenamento local e o secret.key.
mkdir berth && cd berth
curl -fsSLO https://raw.githubusercontent.com/joveptesg/berth/main/docker-compose.yml
docker compose up -d # http://localhost:8080, dados em ./data
docker compose logs berth # o código de configuração está no logGuarde uma cópia do secret.key separada dos backups: sem ele, as chaves de armazenamento no banco de dados não podem ser lidas.
Primeira configuração no navegador
- Abra o endereço do servidor em um navegador:
http://<server>:8080, ou o domínio que sua hospedagem atribuiu. - Encontre o código de configuração no log, na linha
server is not set up: … enter the setup code K7P2-9QXM. Ele muda a cada reinício até a configuração ser concluída. - Informe o código e crie o administrador. O endereço que você abriu vira o endereço doméstico ou na internet nos QR codes dos celulares; você pode mudá-lo depois em Configurações → Servidor.
- Envie o primeiro livro: arraste uma pasta ou um arquivo para o painel web. O Berth lê as tags, os capítulos e a capa; confira e adicione o livro à biblioteca.
Docker puro, NAS e Raspberry Pi
Para Docker puro ou uma interface de NAS que pede o nome de uma imagem:
- Na interface de um NAS (Synology Container Manager, Unraid, CasaOS): imagem
ghcr.io/joveptesg/berth:1, porta8080e uma pasta montada em/data. - Em um Raspberry Pi, os mesmos comandos funcionam: a imagem arm64 é baixada automaticamente.
docker run -d --name berth --restart unless-stopped \
-p 8080:8080 -v "$PWD/data:/data" ghcr.io/joveptesg/berth:1
docker logs berth # o código de configuração está no logAtualizar e reverter
A tag 1 acompanha todas as versões 1.x; 1.0 acompanha as correções da 1.0, e uma tag exata como 1.0.1 nunca muda. Evite latest com atualizadores automáticos como o Watchtower: ela também acompanha novas versões principais.
Antes de uma nova versão mudar o esquema do banco de dados, ela salva uma cópia em ./data/backups (as 3 últimas são mantidas). Para reverter, fixe a versão anterior no docker-compose.yml e restaure essa cópia:
docker compose stop berthdocker compose run --rm berth admin restore /data/backups/auto-<time>.sqlitedocker compose up -d
docker compose pull && docker compose up -dAcesso pela internet
O Berth serve HTTP simples, o que basta em casa. Para acesso de fora, coloque na frente um proxy reverso com HTTPS, por exemplo o Caddy:
books.example.com {
reverse_proxy localhost:8080
}Depois informe https://books.example.com no painel web em Configurações → Endereço na internet, para que os QR codes dos celulares o incluam. O app alterna sozinho entre o endereço doméstico e o endereço na internet.
Backups
- No painel web, Configurações → Backup baixa uma cópia do banco de dados e restaura uma, a partir de um backup automático ou de um arquivo enviado. O banco atual é salvo antes, então uma restauração pode ser desfeita.
- Com armazenamento S3, o servidor também pode colocar uma cópia diária do banco de dados no bucket — longe do disco onde o banco fica.
- Pelo console, com o servidor parado:
berth admin restore <file>.
Perguntas
Qual porta o Berth usa?
A 8080 dentro do contêiner. Publique-a em qualquer porta do host que quiser, por exemplo -p 9000:8080.
Onde meus livros ficam guardados?
Por padrão, no armazenamento local dentro de ./data. Depois você pode adicionar um armazenamento compatível com S3 no painel web e torná-lo o padrão para livros novos. Veja Armazenamento S3.
Posso compilar o Berth a partir do código-fonte?
Sim: em um clone do repositório, descomente build: . no docker-compose.yml e rode docker compose up -d --build.