Fotos no servidor de casa com Immich: backup fora de casa antes do primeiro álbum
Um servidor de fotos em casa só é seguro com cópia em outro lugar. Monte o backup do banco e das fotos com restic, fixe a versão e teste a restauração.
São 38 mil fotos de 12 anos de família num servidor caseiro com Immich, num único HD de 4 TB ao lado do roteador. Numa tempestade, a fonte queima e leva o disco junto. O celular já tinha liberado espaço porque "está tudo no servidor". A resposta curta: sair da nuvem alheia troca o risco de dono, não o elimina. Um servidor de fotos em casa precisa de pelo menos uma cópia em outro lugar físico, com histórico de versões, incluindo o banco de dados, e de um teste de restauração feito antes que você precise dele.
O exemplo deste guia é um mini PC com Debian e Docker, Immich instalado pelo Docker Compose em /srv/immich, fotos em /srv/immich/library, um HD externo USB e um segundo computador na casa da mãe, acessível por SSH.
Por que um disco na sala não é backup
Backup é uma cópia que sobrevive ao que destrói o original. Um disco único na sala sobrevive a quase nada: falha mecânica, surto de energia, roubo, incêndio, uma exclusão por engano no aplicativo. RAID também não resolve isso. Ele protege contra a morte de um disco, mas apaga as fotos dos dois discos ao mesmo tempo quando alguém exclui um álbum, e ambos estão na mesma casa.
A regra prática conhecida como 3-2-1 resume o que é preciso: três cópias dos dados, em pelo menos dois meios diferentes, com uma delas fora do local. No exemplo, as três cópias são o disco do servidor, o HD externo e o computador na casa da mãe.
Sincronizar não é fazer backup
Uma cópia que espelha o original, apagando o que foi apagado lá, propaga o erro. Se um ransomware cifra as fotos ou alguém apaga uma pasta, a sincronização da madrugada replica o estrago. Backup de verdade guarda versões: você consegue voltar à foto como ela era há uma semana ou há três meses.
O que precisa entrar na cópia
O Immich guarda duas coisas que não se reconstroem uma sem a outra:
- Os arquivos originais, na pasta configurada em
UPLOAD_LOCATIONno arquivo.env. - O banco PostgreSQL, com álbuns, pessoas reconhecidas, descrições, quem compartilhou o quê.
Miniaturas e vídeos convertidos podem ser regerados a partir das originais, então dá para deixá-los fora da cópia remota e economizar espaço. As originais e o banco, não. Versões recentes do Immich geram dumps automáticos do banco dentro da pasta de upload; confira na documentação de backup da sua versão onde eles ficam e com que frequência são feitos. Mesmo assim, um dump feito pelo seu script, logo antes da cópia, deixa o backup coerente com as fotos daquele momento.
Como montar o backup passo a passo
- Fixe a versão do Immich. No
.env, troqueIMMICH_VERSION=releasepelo número da versão que você está usando, tirado da página de releases. Atualize de propósito, lendo as notas, nunca por acidente numdocker compose pull. O porquê está em a tag latest mente. - Coloque as fotos num volume separado do sistema. Reinstalar o sistema não pode levar o álbum junto.
- Escolha a ferramenta. O exemplo usa restic, que faz cópias com versões, deduplicação e criptografia, e grava tanto em disco local quanto via SFTP.
- Crie dois repositórios: um no HD externo e outro no computador da casa da mãe.
- Agende o script para a madrugada.
- Defina a retenção: quantas versões diárias, semanais e mensais guardar.
- Teste a restauração logo após o primeiro backup e depois a cada poucos meses.
Criando os repositórios
apt install restic
openssl rand -base64 32 > /root/.restic-senha
chmod 600 /root/.restic-senha
restic -r /mnt/hd-externo/restic-fotos --password-file /root/.restic-senha init
restic -r sftp:backup@casa-da-mae:/srv/restic/fotos --password-file /root/.restic-senha init
Guarde uma cópia dessa senha fora do servidor, num gerenciador de senhas. Sem ela, os repositórios são irrecuperáveis, inclusive para você.
O script diário
#!/bin/sh
set -eu
SENHA=/root/.restic-senha
DUMP=/srv/immich/dump-banco.sql.gz
docker exec immich_postgres pg_dumpall --clean --if-exists --username=postgres | gzip > "$DUMP"
for REPO in /mnt/hd-externo/restic-fotos sftp:backup@casa-da-mae:/srv/restic/fotos; do
restic -r "$REPO" --password-file "$SENHA" backup /srv/immich/library "$DUMP" --exclude /srv/immich/library/thumbs --exclude /srv/immich/library/encoded-video
restic -r "$REPO" --password-file "$SENHA" forget --keep-daily 7 --keep-weekly 4 --keep-monthly 12 --prune
done
O nome do container e o usuário do banco são os padrões do arquivo Compose oficial; se você mudou DB_USERNAME no .env, ajuste o --username. Confira também os nomes das subpastas de miniaturas e vídeos convertidos na sua instalação antes de excluí-las. Agende com o crontab -e do root:
30 3 * * * /usr/local/bin/backup-fotos.sh >> /var/log/backup-fotos.log 2>&1
Como testar a restauração
O teste que importa é o de desligar o disco principal e ver se as fotos ainda existem. Faça uma versão segura disso:
restic -r sftp:backup@casa-da-mae:/srv/restic/fotos --password-file /root/.restic-senha snapshots
restic -r sftp:backup@casa-da-mae:/srv/restic/fotos --password-file /root/.restic-senha check
restic -r sftp:backup@casa-da-mae:/srv/restic/fotos --password-file /root/.restic-senha restore latest --target /tmp/teste-restauracao
Abra algumas fotos restauradas de anos diferentes, veja se o dump do banco descompacta e, uma vez por ano, suba um Immich de teste com o banco e as fotos restauradas. Meça quanto tempo levou para trazer tudo da casa da mãe: esse é o seu tempo real de recuperação.
Acesso de fora de casa sem abrir a porta
Abrir a porta do Immich no roteador para ver as fotos na rua expõe o álbum de família a qualquer varredura da internet. Prefira uma VPN (WireGuard ou um serviço baseado nele) e acesse como se estivesse em casa. Se for publicar, use HTTPS num proxy reverso, senha forte e atualizações em dia. Se o nome não abrir de fora, o diagnóstico está em ERR_ADDRESS_UNREACHABLE. E lembre que fotos de celular carregam localização; antes de compartilhar álbuns, veja foto do celular pode trazer o endereço da casa.
Erros comuns
- Disco único como "backup". Uma falha, um raio ou um roubo levam o álbum inteiro de uma vez.
- Copiar as fotos e esquecer o banco. Você recupera 38 mil arquivos soltos, sem álbuns, pessoas nem descrições.
- Sincronização espelhada no lugar de backup com versões. Exclusão ou ransomware se propagam para a cópia na madrugada seguinte.
- Imagem sem versão fixa. Uma atualização com mudança no banco entra sem você ler as notas e quebra o serviço.
- Perder a senha do repositório. As cópias criptografadas existem, mas ninguém consegue abri-las.
- Porta aberta na internet sem autenticação forte. O álbum de família vira alvo de qualquer robô que varre endereços.
Checklist
- Existe pelo menos uma cópia fora de casa.
- O backup guarda versões, não só espelha.
- O banco entra na cópia junto com as originais.
- A versão do Immich está fixada no
.env. - A senha do repositório está guardada fora do servidor.
- Uma restauração foi testada e o tempo foi medido.
- O acesso de fora passa por VPN ou HTTPS com autenticação.
Se o disco do servidor parasse agora, de onde viriam as fotos, e quanto tempo você aceita esperar para recuperar um ano de álbum?
Referência: https://docs.immich.app/install/docker-compose