Heliosurge
(Dan DeMontmorency)
Dezembro 27, 2025, 10:58pm
3
Olá Ed, pontos muito válidos. Um membro há algum tempo criou um script para fazer backup em outro sistema, se bem me lembro. Precisarei pesquisar e verificar.
Aqui está um trecho da postagem original. Canapin tem uma boa resposta com um link para fazer backup no Google Drive/Dropbox também.
Lhc_fl:
Recentemente, uma amiga minha se deparou com o problema de o provedor de VPS fechar repentinamente sem aviso. Infelizmente, em prol de economizar, ela escolheu um provedor de nicho — um que nem sequer oferecia a opção de download de dados. O que é pior, ela nem tem o hábito de baixar backups regularmente. Da noite para o dia, o site dela desapareceu, juntamente com todos os dados contidos nele.
Chocada com isso, escrevi um script em Powershell que baixará automaticamente backups do seu servidor para o seu computador local regularmente, sem a necessidade de adquirir serviços adicionais de armazenamento de objetos ou gastar um centavo em outras coisas. Tudo o que você precisa é de um computador Windows que você usa regularmente (e que tenha bastante espaço em disco) e esteja conectado à Internet.
O script limpará automaticamente os backups com mais de 5 dias. Você pode definir o intervalo de backup automático e o tempo do backup mais antigo salvo localmente de acordo com suas necessidades.
$ssh_port = 22
$ssh_address = "username@your.site"
Write-Output "Iniciando a tarefa de download de backup do Discourse..."
Write-Output '------------------------'
Write-Output "Buscando o arquivo de backup mais recente..."
Write-Output ''
while ($true) {
$filename = ''
while ($true) {
try {
Write-Output "> ssh -p $ssh_port $ssh_address 'cd /var/discourse/shared/standalone/backups/default/ && ls -t | head -n 1'"
Write-Output ''
$filename = ssh -p $ssh_port "$ssh_address" 'cd /var/discourse/shared/standalone/backups/default/ && ls -t | head -n 1'
break
}
catch {
$filename = ''
Write-Output "Falha ao buscar... Aqui está o log:"
Write-Output '-------------'
Write-Output $_
$answer = Read-Host "Deseja buscar novamente? (s/N)"
if ($answer -ne 's') {
break
}
Write-Output ''
}
}
if ([String]::IsNullOrEmpty($filename)) {
Write-Output "Erro: Falha ao buscar o nome do arquivo $filename"
Write-Output ''
$answer = Read-Host 'Tentar novamente?(s/N)'
if ($answer -eq 's') {
}
else {
exit 1
}
}
else {
Write-Output "Backup mais recente: $filename"
Write-Output ''
$need_download = $true
if (Test-Path ".\backups\$filename") {
$answer = Read-Host ".\backups\$filename já existe. Deseja baixá-lo novamente?(s/N)"
Write-Output ''
if ($answer -ne 's') {
$need_download = $false
}
}
if ($need_download) {
Write-Output "Iniciando o download..."
Write-Output ''
while ($true) {
try {
Write-Output "scp -p $ssh_port ${ssh_address}:/var/discourse/shared/standalone/backups/default/$filename .\\backups\\"
Write-Output ''
scp -p $ssh_port "${ssh_address}:/var/discourse/shared/standalone/backups/default/$filename" .\\backups\\
Write-Output "Download concluído"
Write-Output ''
break
}
catch {
Write-Output "Download falhou >_<... O log a seguir:"
Write-Output ''
Write-Output $_
$answer = Read-Host "Baixar novamente? (s/N)"
Write-Output ''
if ($answer -ne 's') {
break
}
}
}
}
Write-Output "Iniciando a tentativa de limpeza de arquivos de backup antigos..."
Write-Output ''
$count = 0
$backupfiles = Get-ChildItem -Path .\\backups\\
foreach ($file in $backupfiles) {
if ($file.CreationTime -le (Get-Date).AddDays(-5)) {
try {
Write-Output "Excluindo arquivo de backup antigo $file ..."
Write-Output ''
$file.Delete()
$count = $count + 1
} catch {
Write-Output "Ocorreu um erro ao excluir o arquivo de backup antigo $file >_<"
Write-Output '-------------------'
Write-Output $_
Write-Output '-------------------'
}
}
}
if ($count -ge 0) {
Write-Output "Foram limpos $count arquivos de backup antigos"
Write-Output ''
}
else {
Write-Output 'Nenhum arquivo de backup antigo precisa ser limpo'
Write-Output ''
}
Pause
exit 0
}
}
Salve o script acima como nomedoscript.ps1 no caminho onde deseja baixar o backup. Tente “Executar com Powershell”. Se for bem-sucedido, você pode prosseguir para a próxima etapa.
Para agendar uma tarefa
Pesquise por “Agendador de Tarefas”.
Dê um duplo clique em Adicionar Tarefa Agendada. O Assistente para Agendamento de Tarefas é exibido.
Clique em Avançar e depois em Procurar. A caixa de diálogo Selecionar Programa para Agendar aparece.
Navegue até o script que você criou, clique nele e depois em Abrir. Você retorna ao Assistente para Agendamento de Tarefas.
Forneça um nome para a tarefa, ou mantenha o padrão, que é o nome do arquivo, especifique com que frequência executar o script e clique em Avançar.
Especifique a hora e a data de início (se você especificou Diariamente, Semanalmente, Mensalmente, etc.) e recorrência, e clique em Avançar. Este item deve corresponder ao ciclo de backup automático do seu discourse
Digite o nome de usuário e a senha da conta que executará o script e clique em Avançar.
Se desejar configurar propriedades avançadas, selecione a caixa de seleção e clique em Concluir.
@Canapin com o aplicativo de reconstrução do launcher, ele não precisa ser executado como
./launcher r build app
É assim que tenho usado para executá-lo a partir de outros documentos aqui no site. Como aprendi, muitas vezes há muitas maneiras de fazer as coisas. Lol
Ótima descrição, útil.
1 curtida