Hi there. If it's the first time you come here, maybe you want to read a short site presentation. If you're interested in editing, you can check how to create a page and how to edit a page to get started right away! You may also want to make an account, so your name will be linked to your contributions.

If you already have an account, you should log in now.

User:Patheticcockroach/Script de backup ftp pour wiki sous Ubuntu 8.04

From Wiki4Games
Jump to: navigation, search
Cette page est un backup de ma contribution sur http://www.wikiovh.com/index.php/Ubuntu_8.04:Script_de_backup_ftp_pour_wiki

Introduction

Dans ce tutorial nous allons réaliser un script de backup FTP simple pour un site + base de données MySQL (en l'occurence un forum phpBB) associé à un backup spécifique pour un wiki. Prérequis:

  • Webmin, pour la création de la tâche Cron
  • De quoi envoyer les fichiers sur le serveur (serveur FTP par exemple ProFTPd ou autre), ou sinon de quoi l'éditer directement sur le serveur (nano, par exemple, est isntallé en standard sur Ubuntu 8.04)
  • Un espace de backup FTP (fourni par OVH pour les gammes non Kimsufi). En fait le script présenté ici envoie le backup sur 2 serveurs FTP différents.
  • Spécifique pour MediaWiki: un serveur HTTP supportant les fichiers .htaccess (Apache...)

Préparation

Installation de ncftp

Nous utiliserons la commande ncftpput. Pour cela, nous devons installer ncftp:

apt-get install ncftp

Configuration du wiki

Ajouter la ligne suivante dans la configuration:

$wgReadOnlyFile = "locking_database.txt";

Cela signifie que si MediaWiki trouve le fichier [chemin du wiki]/locking_database.txt et qu'il n'est pas vide, la base de donnée du wiki sera verouillée (ie aucun edit ne pourra être fait) et la raison affichée sera le contenu du fichier locking_database.txt.

Préparation d'un dossier temporaire (pour le wiki)

MediaWiki génère de nombreuses versions des images stockées, pour en accélerer l'affichage. Enregistrer ces versions dans le backup serait un gâchi de place considérable. Supprimer ces versions entraînerait des ralentissements du wiki pour le re-création de ces version. La solution est donc de déplacer ces versions secondaires le temps du backup, puis de les replacer après. Il nous faut donc créer un dossier temporaire, réservé à ces déplacements. Par exemple si notre wiki est dans /home/wiki4games/www nous pourrons choisir de créer /home/wiki4games/tmp comme dossier temporaire:

cd /home/wiki4games
mkdir tmp


Le script

####### PARAMETERS - START #######
SLEEP=0
SLEEP_LOCKS=2

FTP_A_IP=*******
FTP_A_PORT=*******
FTP_A_USER=*******
FTP_A_PASS=*******

FTP_B_IP=ftpback4.ovh.net
FTP_B_PORT=21
FTP_B_USER=*******.kimsufi.com
FTP_B_PASS=*******
####### PARAMETERS - END #######
echo "Backup script starting."
DAY=$(date +%u)
WEEK=$(date +%V)
echo "Today is day $DAY, week $WEEK"

if [ $DAY -eq 1 ]
        then
        echo "This is Monday! We're going to make the weekly backup, too."
fi

function send_to_FTPs()
{
#First arg: from file
#Second arg: to file or directory
#for instance, to send /blabla/arff.txt to /ftpfolder, use send_to_FTPs /blabla/arff.txt /ftpfolder
echo "FTP server B..."
/usr/bin/ncftpput -t 5 -u $FTP_B_USER -p $FTP_B_PASS -P $FTP_B_PORT $FTP_B_IP $2 $1
echo "FTP server A..."
/usr/bin/ncftpput -t 2 -u $FTP_A_USER -p $FTP_A_PASS -P $FTP_A_PORT $FTP_A_IP $2 $1
}

echo "Cleaning former backups."
rm /home/wiki4games/wikibak_$DAY.tar.gz
rm /home/wiki4games/wikibak_files_$DAY.tar
rm /home/wiki4games/phpbbbak_$DAY.tar.gz
rm /home/wiki4games/phpbbbak_files_$DAY.tar

echo "Locking wiki database."
####### LOCKING DATABASE #######
echo "The database was locked at $(date +%T) for backup. It will be unlocked in a few minutes." > /home/wiki4games/www/locking_database.txt
sleep $SLEEP_LOCKS

echo "Processing the wiki database..."
/usr/bin/mysqldump --user=******* --password=******* wiki4games > /home/wiki4games/wikibak5.sql
echo "...done. Sleeping."
sleep $SLEEP

echo "Blocking wiki to move out temp and thumb files."
####### MOVING TEMP AND THUMB FILES, and creating empty ones to avoid bugs. Total security by forbidding any acces during file moves (some milliseconds) #######
mv /home/wiki4games/www/.htaccess /home/wiki4games/www/tmp.htaccess
echo -e "deny from all\nErrorDocument 403 \"A backup is currently running and needs to block access for a few seconds. You can try again now.\"" > /home/wiki4games/www/.htaccess
sleep $SLEEP_LOCKS
mv /home/wiki4games/www/images/temp /home/wiki4games/tmp
mv /home/wiki4games/www/images/thumb /home/wiki4games/tmp
mkdir /home/wiki4games/www/images/temp
mkdir /home/wiki4games/www/images/thumb
rm /home/wiki4games/www/.htaccess
mv /home/wiki4games/www/tmp.htaccess /home/wiki4games/www/.htaccess
echo "Wiki unblocked."

echo "Processing the wiki files..."
/bin/tar -cf /home/wiki4games/wikibak_files_$DAY.tar /home/wiki4games/www
echo "...done. Sleeping."
sleep $SLEEP

echo "Blocking wiki to move back temp and thumb files."
####### MOVING BACK TEMP AND THUMB FILES, and unlocking database, but first remove dummies!! #######
mv /home/wiki4games/www/.htaccess /home/wiki4games/www/tmp.htaccess
echo -e "deny from all\nErrorDocument 403 \"A backup is currently running and needs to block access for a few seconds. You can try again now.\"" > /home/wiki4games/www/.htaccess
sleep $SLEEP_LOCKS
rm -R /home/wiki4games/www/images/temp
rm -R /home/wiki4games/www/images/thumb
mv /home/wiki4games/tmp/temp /home/wiki4games/www/images
mv /home/wiki4games/tmp/thumb /home/wiki4games/www/images
rm /home/wiki4games/www/.htaccess
mv /home/wiki4games/www/tmp.htaccess /home/wiki4games/www/.htaccess
rm /home/wiki4games/www/locking_database.txt
echo "Wiki unblocked."
echo "Wiki database unlocked."

echo "Compressing the wiki database..."
/bin/tar -zcf /home/wiki4games/wikibak_$DAY.tar.gz /home/wiki4games/wikibak5.sql
echo "...done. Sleeping."
sleep $SLEEP

echo "Processing the phpBB database..."
/usr/bin/mysqldump --user=******* --password=******* phpbbgamers > /home/wiki4games/phpbbbak5.sql
echo "...done. Compressing it now..."
/bin/tar -zcf /home/wiki4games/phpbbbak_$DAY.tar.gz /home/wiki4games/phpbbbak5.sql
echo "...done. Sleeping."
sleep $SLEEP

echo "Processing the phpBB files..."
/bin/tar -cf /home/wiki4games/phpbbbak_files_$DAY.tar /home/wiki4games/sd/bbs
echo "...done. Sleeping."
sleep $SLEEP


echo "All sensitive operations are done. Now we just need to upload the stuff to the backup servers"

if [ $DAY -eq 1 ]
        then
                echo "This is Monday... we need to send the files as weekly backups."
                echo "Wiki database..."
                mv /home/wiki4games/wikibak_$DAY.tar.gz /home/wiki4games/wikibak_week$WEEK.tar.gz
                send_to_FTPs /home/wiki4games/wikibak_week$WEEK.tar.gz /
                # mv /home/wiki4games/wikibak_week$WEEK.tar.gz /home/wiki4games/wikibak_$DAY.tar.gz
                echo "...done. Now wiki files..."
                mv /home/wiki4games/wikibak_files_$DAY.tar /home/wiki4games/wikibak_files_week$WEEK.tar
                send_to_FTPs /home/wiki4games/wikibak_files_week$WEEK.tar /
                # mv /home/wiki4games/wikibak_files_week$WEEK.tar /home/wiki4games/wikibak_files_$DAY.tar
                echo "...done. Now phpBB database..."
                mv /home/wiki4games/phpbbbak_$DAY.tar.gz /home/wiki4games/phpbbbak_week$WEEK.tar.gz
                send_to_FTPs /home/wiki4games/phpbbbak_week$WEEK.tar.gz /
                # mv /home/wiki4games/phpbbbak_week$WEEK.tar.gz /home/wiki4games/phpbbbak_$DAY.tar.gz
                echo "...done. Now phpBB files..."
                mv /home/wiki4games/phpbbbak_files_$DAY.tar /home/wiki4games/phpbbbak_files_week$WEEK.tar
                send_to_FTPs /home/wiki4games/phpbbbak_files_week$WEEK.tar /
        else    
                echo "Starting transfers..."
                echo "Wiki database..."
                send_to_FTPs /home/wiki4games/wikibak_$DAY.tar.gz /
                echo "...done. Now wiki files..."
                send_to_FTPs /home/wiki4games/wikibak_files_$DAY.tar /
                echo "...done. Now phpBB database..."
                send_to_FTPs /home/wiki4games/phpbbbak_$DAY.tar.gz /
                echo "...done. Now phpBB files..."
                send_to_FTPs /home/wiki4games/phpbbbak_files_$DAY.tar /
fi

echo "ALL DONE - see you tomorrow ;)"