Estamos usando a DigitalOcean como nosso provedor VPS. Eles têm um tutorial sobre como configurar o Duplicity para backups criptografados, mas não abrange backups de banco de dados ou o endpoint do Google Drive.
Encontrei alguns outros tutoriais online sobre Duplicity e Google Drive, mas todos parecem estar incompletos ou desatualizados.
Levei um pouco mais de 12 horas para reunir todas as informações de que precisava, mas aqui está o processo:
Etapa 1: conta do Google
Escolha uma existente ou crie uma nova conta do Google onde você armazenará seus backups. Eu gosto de ter uma conta separada para que meus dados de backup de negócios não se misturem com meus dados pessoais da conta do Google.
Iremos nos referir ao nome da conta do Google como
<google_account_name>
.Etapa 2: configurar despejos de banco de dados
Para fazer isso, criaremos um diretório especial para despejos de banco de dados e usaremos o
mysqldump
comando.Crie um diretório de backup e dê a si mesmo as permissões necessárias
Minha distribuição do Ubuntu veio com um
backup
usuário, um grupo e umvar/backups
diretório, então por que não usá-los ?Tornar o
backup
proprietário do grupo de/var/backups
:sudo chgrp backup /var/backups
Dê ao
backup
grupo permissões de leitura e gravação neste diretório:sudo chmod g+rw /var/backups
Adicione sua própria conta ao
backup
grupo:sudo usermod -aG backup <username>
Isso facilitará o acesso ao conteúdo do diretório de backup.
Pode ser necessário fazer logoff e logon novamente para que a nova associação ao grupo entre em vigor. Para verificar sua participação no grupo, use o comando
groups
.Crie uma conta de usuário SQL especial para realizar backups
Faça login no MySQL através da linha de comando:
mysql -u root -p
Crie uma nova conta de usuário do banco de dados
Não queremos nos tornar vulneráveis dando mais permissões do que o absolutamente necessário . Assim, criaremos uma nova conta de usuário de banco de dados com privilégios somente leitura. Para manter a consistência, estou chamando esse usuário
backup
. Escolha uma senha muito forte para<db_password>
.CREATE USER 'backup'@'localhost' IDENTIFIED BY '<db_password>'
Conceda privilégios somente leitura:
GRANT SELECT,EVENT,TRIGGER,SHOW DATABASES ON *.* TO 'backup'@'localhost';
Configure o comando de backup do banco de dados:
Teste o comando dump (substitua
<db_password>
pela senha que você definiu anteriormente para o novo usuário do MySQL):Este comando despejará todos os bancos de dados em um único arquivo, rotulado com o ano e o número da semana atual. Cada vez que executarmos isso, ele atualizará o arquivo de despejo atual. No entanto, quando uma nova semana começa, ela acaba criando um novo arquivo. Assim, mantemos um histórico de instantâneos semanais de nossos bancos de dados. Você pode ajustar a parte da data para tornar esses instantâneos mais ou menos frequentes, dependendo do tamanho do seu banco de dados e do espaço que deseja doar para esses instantâneos.
Etapa 3: instalar dependências para Duplicity
Precisamos das versões mais recentes das seguintes bibliotecas para poder usar a versão mais recente do Duplicity:
popt
libbz2
librsync
Execute os seguintes comandos:
Atualizar Duplicidade
A versão estável atual em 6 de outubro de 2016 é 0.7.10.
Configure uma definição para
LD_LIBRARY_PATH
(consulte Como definir $LD_LIBRARY_PATH no Ubuntu? ):O Duplicity precisa dessa variável de ambiente para que possa localizar os
librsync
objetos da biblioteca compartilhada que foram instalados anteriormente.sudo nano /etc/ld.so.conf.d/librsync.so.2.conf
librsync.so.2.conf :
Agora você deve recarregar o cache ldconfig do Ubuntu:
sudo ldconfig
Instalar o PyDrive
Esta é a biblioteca que lida com a negociação OAuth2 entre Duplicity e a API do Google Drive.
pip install pydrive
Etapa 4: configurar a autenticação do Google Drive via OAuth2
Criar credenciais de API
Faça isso por meio do Console do desenvolvedor do Google . Ver:
Criar arquivo de configuração:
O PyDrive usa esse arquivo para armazenar credenciais e definições de configuração para a API do Google .
nano /home/<username>/.duplicity/credentials
Configure a
GOOGLE_DRIVE_SETTINGS
variável de ambiente:export GOOGLE_DRIVE_SETTINGS=/home/<username>/.duplicity/credentials
Eu também recomendaria adicionar
GOOGLE_DRIVE_SETTINGS
às variáveis de ambiente sudo :sudo visudo
Adicione a seguinte linha no final:
Defaults env_keep += "GOOGLE_DRIVE_SETTINGS"
Etapa 5: teste o backup falso não criptografado
(Referência: https://www.digitalocean.com/community/tutorials/how-to-use-duplicity-with-gpg-to-securely-automate-backups-on-ubuntu )
Criaremos alguns arquivos de teste, apenas para verificar se podemos transferi-los para o Google Drive usando o Duplicity com sucesso.
Crie arquivos de teste:
Executar Duplicidade:
duplicity ~/test gdocs://<google_account_name>@gmail.com/backup
Siga o link de verificação criado e copie e cole o código de verificação recebido de volta no prompt. O Duplicity deve armazenar o token de autenticação que ele cria
/home/<username>/.duplicity/gdrive.cache
para que não tenhamos que fazer a etapa de verificação novamente (e assim nosso sistema pode fazer isso automaticamente todas as noites sem nossa entrada).Etapa 6: criar chave GPG
Você precisará de uma chave para o GPG criptografar seus dados de backup antes de enviá-los para o Google Drive. Para gerar a chave, basta executar o comando:
gpg --gen-key
Siga as instruções fornecidas e certifique-se de escolher uma boa senha. Se ficar preso com uma mensagem sobre "entropia insuficiente", você pode tentar executar
sudo apt-get install rng-tools
. A própria instalação deve gerar entropia suficiente para que o GPG possa gerar uma chave verdadeiramente aleatória. Consulte https://stackoverflow.com/a/12716881/2970321 .A "impressão digital" do GPG será exibida após a conclusão. Você precisará do ID da chave pública primária dessa impressão digital. Este é simplesmente o código hexadecimal de 8 dígitos após o
/
na linha que começa compub
. Consulte https://security.stackexchange.com/a/110146/74909 .Adicione a senha que você definiu para sua chave GPG a um arquivo secreto:
.frase secreta :
Faça backup de sua chave GPG:
Se você perder sua chave GPG, seus backups criptografados se tornarão inúteis. Portanto, você deve fazer backup de sua chave GPG em algum lugar além do seu VPS.
Por exemplo, para fazer backup em sua máquina local:
Em seguida, na sua máquina local:
Ver:
https://help.ubuntu.com/community/GnuPrivacyGuardHowto#Backing_up_and_restoring_your_keypair
Dependendo da natureza de seus dados, você pode querer considerar colocar a parte privada de sua chave GPG em um pedaço de papel e, em seguida, armazenar esse pedaço de papel em um cofre .
Etapa 7: testar o backup criptografado de despejos SQL
Etapa 8: coloque o dump do banco de dados e o comando Duplicity juntos em um
cron
scriptConfigurar backup incremental diário
Isso será executado todas as noites, criando backups incrementais. Por padrão, o Duplicity tenta fazer backup de TODOS os arquivos no disco, o que provavelmente não queremos em um VPS. Então, usamos o
--exclude
parâmetro para que ele ignore tudo, exceto os diretórios que incluímos via--include
. Você pode usar vários--include
parâmetros para incluir vários diretórios.sudo nano /etc/cron.daily/duplicity.inc
duplicity.inc :
Definir permissões:
chmod 755 /etc/cron.daily/duplicity.inc
Configurar um backup completo semanal
Isso será executado uma vez por semana, criando um backup completo e limpando todos, exceto os últimos três backups completos, para economizar espaço. Novamente, você pode ajustar essa frequência e o número de backups a serem retidos de acordo com sua situação.
sudo nano /etc/cron.weekly/duplicity.full
duplicity.full :
Definir permissões:
chmod 755 /etc/cron.weekly/duplicity.full
Se suas tarefas nesses
cron.*
diretórios não estiverem sendo executadas automaticamente por algum motivo (muitas vezes, devido a problemas com permissões), você pode adicionar essas tarefas ao arquivo cron raiz:sudo crontab -e
Adicione as linhas (tente escolher horários ímpares):
Salvar e sair.
Etapa 9: testar e verificar o backup
Você pode tentar baixar seu backup do Google Drive de volta para
~/test
:sudo duplicity gdocs://<google_account_name>@gmail.com/backup ~/test