υπάρχει ένα κλασσικό ρητό το οποίο λέει: "Αν δεν πάθεις δεν θα μάθεις..."
Έτσι και εγώ όπως σίγουρα και πολλοί άλλοι πρώτα έπαθα.. να χάσω σημαντικά αρχεία από σελίδες μου και να μην μπορώ να τα ξαναβρώ λόγω μη ύπαρξης backup ή παλαιότητας backup.
Για αυτό το λόγο θα σας παρουσιάσω παρακάτω την διαδικασία που ακολουθώ εγώ για να παίρνω αυτόματα backup και προεραιτικά την μεταφορά τους σε δεύτερο server για μεγαλύτερη ασφάλεια και εξοικονόμηση χώρου στον κανονικό μας server.
(Τα συγκεκριμένα βήματα απαιτούν πρόσβαση root μέσω SSH, επομένως δεν μπορούν να γίνουν σε shared hosting)
Συγκεκριμένα περιλαμβάνονται τα εξής:
- 1. Λαμβάνονται καθημερινά backup όλων των αρχείων και των βάσεων δεδομένων του κυρίως server (1ος server) μας το βράδυ στις 3
2. Γίνεται αυτόματη μεταφορά των νέων backup αρχείων σε backup server (2ος server) (Προαιρετικό)
3. Στον 1ο server διαγράφονται αυτόματα τα backup της προηγούμενης ημέρας και κρατιέται μόνο το τελευταίο για εξοικονόμηση χώρου ενώ ο 2ος server κρατάει backup για παραπάνω μέρες.
Για να μπορούμε να μεταφέρουμε αυτόματα τα αρχεία από τον 1ο server στον 2ο server, πρέπει να μπορεί ο 1ος server να συνδέεται αυτόματα μέσω SSH χωρίς password στον 2ο .
Συνδεόμαστε με SSH (πρόγραμμα για σύνδεση SSH) στον 1ο server ως root χρήστης και δίνουμε τις εξής εντολές:
adduser onoma
passwd onoma
Και τώρα μας ζητάει να βάλουμε τον νέο κωδικό.
![Εικόνα](http://www.imageupload.co.uk/images/2014/09/12/1sxhFR.png)
Συνδεόμαστε με SSH στον 2ο server ως root χρήστης και δίνουμε τις ίδιες εντολές με πριν για να φτιάξουμε τον ίδιο χρήστη με τον ίδιο κωδικό.
Βήμα 2ο - Δημιουργία public και private keys και μεταφορά τους
Συνδεόμαστε με SSH ξανά στον 1ο server, με το όνομα χρήστη που δημιουργήσαμε πριν και τον κωδικό του. Ας θεωρήσουμε ότι τον ονομάσαμε user5.
Δίνουμε την παρακάτω εντολή για να δημιουργηθούν τα public και private keys που θα χρειαστούν στην πορεία για την σύνδεση των 2 server:
ssh-keygen
![Εικόνα](http://www.imageupload.co.uk/images/2014/09/12/27a1Rm.png)
Στην συνέχεια πρέπει να αντιγράψουμε το public key που δημιουργήσαμε του 1ου server στον 2ο, δίνοντας την παρακάτω εντολή στον 1ο server συνδεδεμένοι πλέον ως χρήστης user5.
ssh-copy-id -i ~/.ssh/id_rsa.pub ip-deuterou-server
![Εικόνα](http://www.imageupload.co.uk/images/2014/09/12/3.png)
Τέλος κάνουμε μια δοκιμή να δούμε αν όντως μπορούμε να συνδεθούμε από τον 1ο server στον 2o χωρίς να μας ζητηθεί κωδικός με την εντολή:
ssh ip-2ou-server
Εάν όλα έχουν γίνει σωστά η οθόνη που πρέπει να εμφανιστεί είναι κάπως έτσι, χωρίς ανάγκη για κωδικό πλέον.
![Εικόνα](http://www.imageupload.co.uk/images/2014/09/12/4.png)
Βήμα 3ο - Λήψη backup στον 1o server
Με την παρακάτω διαδικασία θα δημιουργήσουμε δυο αρχεία για την λήψη backup (ένα για τα αρχεία που υπάρχουν στον server και ένα για τις βάσεις δεδομένων)
Μέσα στον φάκελο /home/user5/ δημιουργούμε ένα νέο φάκελο με ότι όνομα θέλουμε π.χ. backups
Εκεί δημιουργούμε 2 νέα αρχεία με όνομα files.sh και db.sh (το όνομα είναι επιλογή του καθενός)
Εάν θέλουμε να αντιγράψουμε τα αρχεία π.χ. που βρίσκονται στον server μας στην τοποθεσία /var/www/vhosts/domain.gr/httpdocs βάζουμε μέσα στο αρχείο files.sh
#!/bin/sh
tar czf /home/user5/backups/files/site1_`/bin/date +\%d\%m\%Y\%H\%M`.tar -C /var/www/vhosts/domain.gr/httpdocs
find /home/user5/backups/files -mtime +0 -exec rm {} \;
- το domain.gr πρέπει να αλλαχθεί ανάλογα με το domain μας που βρίσκονται και τα αρχεία
το site1 θα είναι το όνομα που θα έχει το backup που θα ληφθεί, οπότε μπορούμε να το αλλάξουμε όπως μας βολεύει
και η τελευταία γραμμή δηλώνει ότι μόλις ληφθεί το backup θα διαγραφούν ότι προηγούμενο backup υπάρχει και είναι προηγούμενης ημέρας, εάν το ορίσουμε +1 αντί για +0 θα κρατάει ένα backup παραπάνω (της προηγούμενης μέρας), +2 θα κρατάει των 2 προηγούμενων ημερών και πάει λέγοντας.
#!/bin/sh
mysqldump -u uservasis -pkodikosvasis onomavasis | gzip > /home/user5/backups/db/onomavasis_`/bin/date +\%d\%m\%Y\%H\%M`.sql.gz
find /home/user5/backups/db -mtime +2 -exec rm {} \;
Βήμα 4ο - Αυτόματη λήψη backup με Cronjob
Για να γίνετε όλη αυτή η διαδικασία αυτόματα και να μην πρέπει να εκτελούμε εμείς την εντολή κάθε φορά, πρέπει να ορίσουμε ένα cronjob στον 1ο server για κάθε ένα από τα αρχεία files.sh και db.sh (που περιέχουν τις εντολές για την λήψη των backup).
Εγώ συγκεκριμένα τα έκανα μέσω του Plesk panel. Υπάρχουν όμως εντολές και για μέσω SSH (Αποτελέσματα Google - τα οποία όμως δεν έχω δοκιμάσει).
Στο Plesk Panel πάμε στο Tools and Settings --> Scheduled Tasks, επιλέγουμε τον root και δημιουργούμε ένα νέο Task με εντολή την
/home/user5/backups/files.sh
![Εικόνα](http://www.imageupload.co.uk/images/2014/09/12/5OxVYs.png)
Το ίδιο ακριβώς κάνουμε και για το backup των βάσεων απλά αλλάζουμε το όνομα του αρχείου στην εντολή του task, δηλαδή:
/home/user5/backups/db.sh
Για μεγαλύτερη ασφάλεια και για να υπάρχουν τα backups και αλλού μπορούμε να μεταφέρουμε αυτόματα αυτά τα καθημερινά backup σε άλλο server και εκεί να κρατάμε backups για μεγαλύτερο διάστημα (σε αντίθεση με το τελευταίο μόνο backup που κρατάει ο 1ος server).
Υπάρχουν VPS server στο εξωτερικό οικονομικοί από 4$, δεν πρόκειται για αξιόπιστα συστήματα για να στήσετε σελίδες αλλά για 2ο backup είναι ότι πρέπει.
Δημιουργούμε μέσα στο /home/user5/backups άλλο ένα αρχείο transfer.sh
Αυτό θα περιέχει μέσα την εντολή για την μεταφορά
#!/bin/sh
rsync -e ssh -azv /home/user5/backups/ ip-2ou-server:/home/user5/backups/
- Στην θέση του ip-2ou-server βάζουμε την ip που έχει ο 2ος server.
Το πρώτο path δηλώνει ποιον φάκελο θέλουμε να μεταφέρουμε.
Το δεύτερο path δηλώνει που θα αποθηκευτούν τα αρχεία στον 2ο server.
Πάλι μέσα από το Plesk Panel όπως πριν (γίνεται κ με εντολή στο SSH) ορίζουμε ένα cronjob ώστε η μεταφορά να γίνεται αυτόματα π.χ. κάθε βράδυ τα ξημερώματα στις 5 (ώστε να έχουν προλάβει να δημιουργηθούν και τα backup στον 1ο server)
Ως εντολή βάζουμε το path του αρχείου transfer.sh δλδ:
/home/user5/backups/transfer.sh
και ορίζουμε minutes 0, hour 5 και τα υπόλοιπα *
Βήμα 7ο - Ορισμός δικαιωμάτων αρχείων
Τέλος, πρέπει να ορίσουμε σωστά δικαιώματα στα αρχεία files.sh , db.sh και transfer.sh και τους φακέλους ώστε να μπορούν να εκτελεστούν από τον χρήστη user5 στον 1ο server.
Επομένως ορίζουμε σε όλους τους φακέλους owner και group τον user5 και δικαιώματα 700.
Στα αρχεία πάλι owner και group τον user5 και δικαιώματα 600.
Αυτός είναι ο τρόπος που το έχω υλοποιήσει εγώ και με έχει καλύψει, αλλά χρειάζονται πολλές δοκιμές ώστε να σιγουρευτούμε ότι όλα λειτουργούν σωστά.
Υ.Γ. Όποιος έχει να προτείνει κάποια βελτίωση ή κάποια αλλαγή για θέματα ασφαλείας ευχαρίστως να προτείνει.
Πηγές: thegeekstuff
webmasterworld