Migração Paperless-ngx
Migração Paperless-ngx entre containers no Proxmox (Debian 11 → Paperless v2.12.1)
Este é o passo a passo que usei para migrar meus dados do Paperless-ngx, mantendo a versão v2.12.1, de um container antigo para um novo, sem usar Docker.
Entrar e sair dos containers
pct enter <ct_id>
Etapa 1: Verificando espaço no container antigo
Entrar no container antigo e executar os seguintes comandos.
Antes de começar a exportação, verifiquei o espaço usado pelas pastas principais:
du -sh /opt/paperless/media /opt/paperless/data
E também quanto de espaço livre havia disponível:
df -h /
Como havia espaço suficiente, segui sem aumentar o disco.
Etapa 2: Exportando os dados
Entrei na pasta do projeto e rodei o document_exporter
indicando um diretório, como é exigido na versão v2.12.1:
mkdir /opt/paperless/src/export
python3 manage.py document_exporter /opt/paperless/src/export
O comando gerou os arquivos diretamente dentro da pasta export/
, incluindo manifest.json
e todos os PDFs e arquivos .webp
no mesmo nível.
Etapa 3: Compactando os arquivos de exportação
Para facilitar a transferência, compacte o conteúdo da pasta (e não a pasta em si):
cd /opt/paperless/src/export
tar -czf /tmp/paperless-export.tar.gz *
Etapa 4: Transferindo o export para o host do Proxmox
No host Proxmox, copiei o arquivo .tar.gz
do container antigo para o host:
pct pull <ct_id_antigo> /tmp/paperless-export.tar.gz /root/paperless-export.tar.gz
Etapa 5: Criando o novo container com Paperless atualizado
No shell do Proxmox, usei o script oficial para instalar um novo container:
bash -c "$(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVE/main/ct/paperless-ngx.sh)"
Etapa 6: Transferindo o export para o novo container
Ainda no host, enviei o arquivo para o novo container:
pct push <ct_id_novo> /root/paperless-export.tar.gz /tmp/paperless-export.tar.gz
Etapa 7: Verificando ou definindo a senha do banco
Entrar no container novo e executar os seguintes comandos.
No novo container, verifiquei a senha gerada automaticamente no arquivo:
cat /opt/paperless/paperless.conf
Se necessário, eu poderia ter alterado a senha diretamente no PostgreSQL e atualizado esse mesmo arquivo com a nova senha:
sudo -u postgres psql -c "ALTER USER paperless WITH PASSWORD 'nova_senha';"
nano /opt/paperless/paperless.conf
Etapa 8: Limpando o banco no novo container
Como o banco novo já tinha dados (usuário padrão criado automaticamente), precisei apagá-lo para garantir uma importação limpa:
sudo -u postgres dropdb paperlessdb
sudo -u postgres createdb paperlessdb
sudo -u postgres psql -c "ALTER USER paperless WITH PASSWORD 'nova_senha';"
Etapa 9: Corrigindo permissões do banco
Dentro do psql:
\c paperlessdb
ALTER SCHEMA public OWNER TO paperless;
GRANT USAGE, CREATE ON SCHEMA public TO paperless;
GRANT ALL PRIVILEGES ON DATABASE paperlessdb TO paperless;
\q
Etapa 10: Aplicando as migrations
Exportei as variáveis de ambiente antes de rodar as migrations:
export PAPERLESS_DBUSER=paperless
export PAPERLESS_DBPASS=nova_senha
export PAPERLESS_DBNAME=paperlessdb
export PAPERLESS_DBHOST=127.0.0.1
cd /opt/paperless-ngx/src
python3 manage.py migrate
Etapa 11: Importando os dados
Importei os dados a partir do .tar.gz
:
python3 manage.py document_importer /tmp/paperless-export.tar.gz
Etapa 12: Indexação dos documentos
Para reconstruir os índices e OCR:
python3 manage.py document_indexer
Etapa 14: Iniciando os serviços
Como estou usando systemd, ativei e iniciei os serviços:
systemctl daemon-reexec
systemctl daemon-reload
systemctl start paperless-webserver
systemctl start paperless-consumer
systemctl start paperless-scheduler
systemctl enable paperless-webserver
systemctl enable paperless-consumer
systemctl enable paperless-scheduler
Resultado
O Paperless-ngx foi migrado com sucesso para um novo container com os dados intactos e estrutura funcional, mantendo compatibilidade com a versão 2.12.1 e pronta para futuros upgrades.