GNU/Linux >> Tutoriels Linux >  >> Linux

Mettez en miroir votre site Web avec rsync

Ce didacticiel montre comment vous pouvez mettre en miroir votre site Web à partir de votre serveur Web principal vers un serveur de sauvegarde qui peut prendre le relais en cas de défaillance du serveur principal. Nous utilisons l'outil rsync pour cela, et nous lui faisons exécuter une tâche cron qui vérifie toutes les x minutes s'il y a quelque chose à mettre à jour sur le miroir. Ainsi, votre serveur de sauvegarde doit généralement être à jour s'il doit prendre le relais.

rsync ne met à jour que les fichiers qui ont été modifiés, vous n'avez donc pas besoin de transférer 5 Go de données chaque fois que vous exécutez rsync. Il ne reflète que les fichiers nouveaux/modifiés et peut également supprimer les fichiers du miroir qui ont été supprimés sur le serveur principal. En plus de cela, il peut conserver les autorisations et les propriétés des fichiers et répertoires en miroir ; pour préserver les propriétés, nous devons exécuter rsync en tant que root, ce que nous faisons ici. Si les autorisations et/ou les propriétaires changent sur le serveur principal, rsync les modifiera également sur le serveur de sauvegarde.

Dans ce didacticiel, nous tunnelliserons rsync via SSH, qui est plus sécurisé. cela signifie également que vous n'avez pas besoin d'ouvrir un autre port dans votre pare-feu pour rsync - cela suffit si le port 22 (SSH) est ouvert. Le problème est que SSH nécessite un mot de passe pour se connecter, ce qui n'est pas bon si vous souhaitez exécuter rsync en tant que tâche cron. Le besoin d'un mot de passe nécessite une interaction humaine qui n'est pas ce que nous voulons.

Mais heureusement, il existe une solution :l'utilisation de clés publiques . Nous créons une paire de clés (sur notre serveur de sauvegarde mirror.example.com ), dont l'un est enregistré dans un fichier sur le système distant (server1.example.com ). Ensuite, nous ne serons plus invités à entrer un mot de passe lorsque nous exécuterons rsync. Cela inclut également les tâches cron, ce qui est exactement ce que nous voulons.

Comme vous l'avez peut-être déjà deviné d'après ce que j'ai écrit jusqu'à présent, le concept est que nous lançons la mise en miroir de server1.example.com directement depuis mirror.example.com; serveur1.exemple.com n'a rien à faire pour être mis en miroir.

Je vais utiliser la configuration suivante ici :

  • Serveur principal :serveur1.exemple.com (serveur1) - Adresse IP :192.168.0.100
  • Serveur miroir/sauvegarde :mirror.example.com (miroir) - Adresse IP :192.168.0.175
  • Le site Web à mettre en miroir se trouve dans /var/www sur server1.example.com.

rsync sert uniquement à mettre en miroir des fichiers et des répertoires ; si vous souhaitez mettre en miroir votre base de données MySQL, utilisez plutôt la mise en miroir/réplication MySQL.

Je veux d'abord dire que ce n'est pas la seule façon de mettre en place un tel système. Il existe de nombreuses façons d'atteindre cet objectif, mais c'est la voie que je prends.

1 Installer rsync

Tout d'abord, nous devons installer rsync sur server1.example.com et mirror.example.com. Pour les systèmes Debian et Ubuntu, cela ressemble à ceci :

serveur1/miroir :

(Nous faisons cela en tant que root !)

apt-get install rsync

Sur d'autres distributions Linux, vous utiliseriez yum (Fedora/CentOS) ou yast (SuSE) pour installer rsync.

2 Créer un utilisateur non privilégié sur server1.example.com

Maintenant, nous créons un utilisateur non privilégié appelé someuser sur server1.example.com qui sera utilisé par rsync sur mirror.example.com pour refléter le répertoire /var/www (bien sûr, someuser doit avoir des autorisations de lecture sur /var/www sur server1 .exemple.com).

serveur1 :

(Nous faisons cela en tant que root !)

useradd -d /home/someuser -m -s /bin/bash someuser

Cela créera l'utilisateur someuser avec le répertoire personnel /home/someuser et le shell de connexion /bin/bash (il est important que someuser ait un shell de connexion valide - quelque chose comme /bin/false ne fonctionne pas !). Donnez maintenant un mot de passe à un utilisateur :

passwd someuser

3 Tester rsync

Ensuite, nous testons rsync sur mirror.example.com. En tant que root, nous faisons ceci :

miroir :

rsync -avz -e ssh [email protected]:/var/www/ /var/www/

Vous devriez voir quelque chose comme ça. Répondez par oui :

The authenticity of host 'server1.example.com (192.168.0.100)' can't be established.
RSA key fingerprint is 32:e5:79:8e:5f:5a:25:a9:f1:0d:ef:be:5b:a6:a6:23.
Are you sure you want to continue connecting (yes/no)?
<-- yes

Entrez ensuite le mot de passe d'un utilisateur et vous devriez voir que le répertoire /var/www de server1.example.com est mis en miroir sur /var/www sur mirror.example.com.

Vous pouvez vérifier cela comme ceci sur les deux serveurs :

serveur1/miroir :

ls -la /var/www

Vous devriez voir que tous les fichiers et répertoires ont été mis en miroir sur mirror.example.com, et que les fichiers et répertoires doivent avoir les mêmes autorisations/propriétés que sur server1.example.com.

4 Créer les clés sur mirror.example.com

Nous créons maintenant la paire de clés privée/publique sur mirror.example.com :

miroir :

(Nous faisons cela en tant que root !)

mkdir /root/rsync
ssh-keygen -t dsa -b 1024 -f /root/rsync/mirror-rsync-key

Vous verrez quelque chose comme ceci :

Generating public/private dsa key pair.
Enter passphrase (empty for no passphrase): [press enter here]
Enter same passphrase again: [press enter here]
Your identification has been saved in /root/cron/mirror-rsync-key.
Your public key has been saved in /root/cron/mirror-rsync-key.pub.
The key fingerprint is:
68:95:35:44:91:f1:45:a4:af:3f:69:2a:ea:c5:4e:d7 [email protected]

Il est important que vous n'entriez pas de phrase de passe, sinon la mise en miroir ne fonctionnera pas sans interaction humaine, alors appuyez simplement sur enter !

Ensuite, nous copions notre clé publique sur server1.example.com :

miroir :

(Pourtant, nous le faisons en tant que root.)

scp /root/rsync/mirror-rsync-key.pub [email protected]:/home/someuser/

La clé publique mirror-rsync-key.pub devrait maintenant être disponible dans /home/someuser sur server1.example.com.

5 Configurer server1.example.com

Connectez-vous maintenant via SSH sur server1.example.com en tant qu'utilisateur (pas root !) et procédez comme suit :

serveur1 :

(Veuillez le faire en tant qu'utilisateur !)

mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/mirror-rsync-key.pub ~/.ssh/
cd ~/.ssh
touch authorized_keys
chmod 600 authorized_keys
cat mirror-rsync-key.pub >> authorized_keys

En faisant cela, nous avons ajouté le contenu de mirror-rsync-key.pub au fichier /home/someuser/.ssh/authorized_keys. /home/someuser/.ssh/authorized_keys devrait ressembler à ceci :

serveur1 :

(Toujours en tant qu'utilisateur !)

vi /home/someuser/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom [email protected]
mirror

Maintenant, nous voulons autoriser les connexions uniquement à partir de mirror.example.com, et l'utilisateur qui se connecte doit être autorisé à utiliser uniquement rsync, nous ajoutons donc

command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty

juste au début de /home/someuser/.ssh/authorized_keys :

serveur1 :

(Toujours en tant qu'utilisateur !)

vi /home/someuser/.ssh/authorized_keys
command="/home/someuser/rsync/checkrsync",from="mirror.example.com",no-port-forwarding,no-X11-forwarding,no-pty ssh-dss AAAAB3NzaC1kc3MAAA[...]lSUom [email protected]
mirror

Il est important que vous utilisiez un FQDN comme mirror.example.com au lieu d'une adresse IP après from=, sinon la mise en miroir automatique ne fonctionnera pas !

Nous créons maintenant le script /home/someuser/rsync/checkrsync qui rejette toutes les commandes sauf rsync.

serveur1 :

(Nous le faisons toujours en tant qu'utilisateur !)

mkdir ~/rsync
vi ~/rsync/checkrsync
#!/bin/sh

case "$SSH_ORIGINAL_COMMAND" in
*\&*)
echo "Rejected"
;;
*\(*)
echo "Rejected"
;;
*\{*)
echo "Rejected"
;;
*\;*)
echo "Rejected"
;;
*\<*)
echo "Rejected"
;;
*\`*)
echo "Rejected"
;;
rsync\ --server*)
$SSH_ORIGINAL_COMMAND
;;
*)
echo "Rejected"
;;
esac
chmod 700 ~/rsync/checkrsync

6 Tester rsync sur mirror.example.com

Maintenant, nous devons tester sur mirror.example.com si nous pouvons mettre en miroir server1.example.com sans être invité à entrer le mot de passe d'un utilisateur. Nous faisons ceci :

miroir :

(Nous faisons cela en tant que root !)

rsync -avz --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]:/var/www/ /var/www/

(L'option --delete signifie que les fichiers qui ont été supprimés sur server1.example.com doivent également être supprimés sur mirror.example.com. L'option --exclude signifie que ces fichiers/répertoires ne doivent pas être mis en miroir ; par exemple --exclude =**/error signifie "ne pas refléter /var/www/error". Vous pouvez utiliser plusieurs options --exclude. J'ai répertorié ces options à titre d'exemples ; vous pouvez ajuster la commande à vos besoins. Jetez un œil à

man rsync

pour plus d'informations.)

Vous devriez maintenant voir que la mise en miroir a lieu :

receiving file list ... done

sent 71 bytes received 643 bytes 476.00 bytes/sec
total size is 64657 speedup is 90.56

sans être invité à entrer un mot de passe ! C'est ce que nous voulions.

7 Créer une tâche Cron

Nous voulons automatiser la mise en miroir, c'est pourquoi nous créons une tâche cron pour elle sur mirror.example.com. Exécutez crontab -e en tant que root :

miroir :

(Nous faisons cela en tant que root !)

crontab -e

et créez une tâche cron comme celle-ci :

*/5 * * * * /usr/bin/rsync -azq --delete --exclude=**/stats --exclude=**/error --exclude=**/files/pictures -e "ssh -i /root/rsync/mirror-rsync-key" [email protected]com:/var/www/ /var/www/ 

Cela exécuterait rsync toutes les 5 minutes; adaptez-le à vos besoins (voir

man 5 crontab

). J'utilise le chemin complet vers rsync ici (/usr/bin/rsync) juste pour m'assurer que cron sait où trouver rsync. Votre emplacement rsync peut différer. Exécuter

miroir :

(Nous faisons cela en tant que root !)

which rsync

pour savoir où se trouve le vôtre.

  • rsync : https://rsync.samba.org/

Linux
  1. Sécurisez vos conteneurs avec SELinux

  2. Stockage haute disponibilité avec GlusterFS sur Debian 8 - Mise en miroir sur deux serveurs de stockage

  3. Autorisations de fichiers sous Linux avec exemple

  4. Emplacement de DocumentRoot dans CentOS

  5. Comment écrire votre propre module de noyau Linux avec un exemple simple

Dépannez votre réseau avec tcpdump

Comment exécuter vos propres serveurs DNS (primaires et secondaires) avec ISPConfig 3 (Debian Squeeze)

Héberger plusieurs sites Web sur un seul serveur avec Apache sur Ubuntu 18.04

Sécuriser votre serveur Web Apache avec Mod Security

Sauvegardez vos fichiers avec rsync

Comment mapper une adresse IP statique sur votre domaine (avec l'exemple de GoDaddy)