Heliosurge
(Dan DeMontmorency)
Décembre 27, 2025, 10:58
3
Bonjour Ed, points très valables. Un membre a créé un script pour sauvegarder sur un autre système il y a quelque temps, si je me souviens bien. Il faudra faire une recherche et vérifier.
Voici un extrait du message initial. Canapin a une bonne réponse avec un lien vers la sauvegarde sur Google Drive/Dropbox également.
Lhc_fl:
Récemment, une amie a rencontré le problème du fournisseur de VPS qui a soudainement cessé ses activités sans préavis. Malheureusement, pour des raisons de coût, elle a choisi un fournisseur de niche - un qui n’offrait même pas de téléchargement de données. Le pire est qu’elle n’a même pas l’habitude de télécharger régulièrement des sauvegardes. Du jour au lendemain, son site a disparu, ainsi que toutes les données qu’il contenait.
Choquée par cela, j’ai écrit un script Powershell qui téléchargera automatiquement les sauvegardes de votre serveur sur votre ordinateur local régulièrement sans avoir à acheter de services de stockage d’objets supplémentaires ou à dépenser un centime pour d’autres choses. Tout ce dont vous avez besoin est un ordinateur Windows que vous utilisez régulièrement (et qui dispose de beaucoup d’espace disque) et qui est connecté à Internet.
Le script supprimera automatiquement les sauvegardes datant de plus de 5 jours. Vous pouvez définir l’intervalle de sauvegarde automatique et l’ancienneté de la sauvegarde conservée localement en fonction de vos besoins.
$ssh_port = 22
$ssh_address = "username@your.site"
Write-Output "Starting Discourse backup download task..."
Write-Output '------------------------'
Write-Output "Fetching the latest backup file..."
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 "Failed to fetch... Here is the log:"
Write-Output '-------------'
Write-Output $_
$answer = Read-Host "Do you want to re-fetch? (y/N)"
if ($answer -ne 'y') {
break
}
Write-Output ''
}
}
if ([String]::IsNullOrEmpty($filename)) {
Write-Output "Error: Failed to fetch file name $filename"
Write-Output ''
$answer = Read-Host 'Retry?(y/N)'
if ($answer -eq 'y') {
}
else {
exit 1
}
}
else {
Write-Output "Latest backup: $filename"
Write-Output ''
$need_download = $true
if (Test-Path ".\backups\$filename") {
$answer = Read-Host ".\backups\$filename already exists. Do you want to download it again?(y/N)"
Write-Output ''
if ($answer -ne 'y') {
$need_download = $false
}
}
if ($need_download) {
Write-Output "Start downloading..."
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 completed"
Write-Output ''
break
}
catch {
Write-Output "Download failed >_<... The following is the log:"
Write-Output ''
Write-Output $_
$answer = Read-Host "Download again? (y/N)"
Write-Output ''
if ($answer -ne 'y') {
break
}
}
}
}
Write-Output "Start trying to clean old backup files..."
Write-Output ''
$count = 0
$backupfiles = Get-ChildItem -Path .\\backups\\
foreach ($file in $backupfiles) {
if ($file.CreationTime -le (Get-Date).AddDays(-5)) {
try {
Write-Output "Delete old backup file $file ..."
Write-Output ''
$file.Delete()
$count = $count + 1
} catch {
Write-Output "An error occurred while deleting old backup file $file >_<"
Write-Output '-------------------'
Write-Output $_
Write-Output '-------------------'
}
}
}
if ($count -ge 0) {
Write-Output "Cleaned $count old backup files"
Write-Output ''
}
else {
Write-Output 'No old backup files need to clean up'
Write-Output ''
}
Pause
exit 0
}
}
Enregistrez ce script sous scriptname.ps1 dans le chemin où vous souhaitez télécharger la sauvegarde. Essayez « Exécuter avec Powershell ». Si cela réussit, vous pouvez passer à l’étape suivante.
Pour planifier une tâche
Recherchez « Tâches planifiées ».
Double-cliquez sur Ajouter une tâche planifiée. L’Assistant Tâche planifiée apparaît.
Cliquez sur Suivant, puis cliquez sur Parcourir. La boîte de dialogue Sélectionner un programme à planifier apparaît.
Naviguez jusqu’au script que vous avez créé, cliquez dessus, puis sur Ouvrir. Vous revenez à l’Assistant Tâche planifiée.
Fournissez un nom pour la tâche, ou conservez celui par défaut, qui est le nom du fichier, spécifiez la fréquence d’exécution du script, puis cliquez sur Suivant.
Spécifiez l’heure et la date de début (si vous avez spécifié Quotidien, Hebdomadaire, Mensuel, etc.) et la récurrence, puis cliquez sur Suivant. Cet élément doit correspondre au cycle de sauvegarde automatique de votre discourse
Saisissez le nom d’utilisateur et le mot de passe du compte qui exécutera le script, puis cliquez sur Suivant.
Si vous souhaitez configurer des propriétés avancées, cochez la case, puis cliquez sur Terminer.
@Canapin avec l’application de reconstruction du lanceur, ne doit-elle pas être exécutée comme
./launcher r build app
C’est juste la façon dont j’ai l’habitude de l’exécuter à partir d’autres documents ici sur le site. Comme j’ai appris, il y a souvent plusieurs façons de faire les choses. Lol
Bonne rédaction, pratique.
1 « J'aime »