- 11 Σεπ 2014, 15:12
#473
Καλησπέρα σε όλους...
υπάρχει ένα κλασσικό ρητό το οποίο λέει: "Αν δεν πάθεις δεν θα μάθεις..."
Έτσι και εγώ όπως σίγουρα και πολλοί άλλοι πρώτα έπαθα.. να χάσω σημαντικά αρχεία από σελίδες μου και να μην μπορώ να τα ξαναβρώ λόγω μη ύπαρξης backup ή παλαιότητας backup.
Για αυτό το λόγο θα σας παρουσιάσω παρακάτω την διαδικασία που ακολουθώ εγώ για να παίρνω αυτόματα backup και προεραιτικά την μεταφορά τους σε δεύτερο server για μεγαλύτερη ασφάλεια και εξοικονόμηση χώρου στον κανονικό μας server.
(Τα συγκεκριμένα βήματα απαιτούν πρόσβαση root μέσω SSH, επομένως δεν μπορούν να γίνουν σε shared hosting)
Συγκεκριμένα περιλαμβάνονται τα εξής:
Για να μπορούμε να μεταφέρουμε αυτόματα τα αρχεία από τον 1ο server στον 2ο server, πρέπει να μπορεί ο 1ος server να συνδέεται αυτόματα μέσω SSH χωρίς password στον 2ο .
Συνδεόμαστε με SSH (πρόγραμμα για σύνδεση SSH) στον 1ο server ως root χρήστης και δίνουμε τις εξής εντολές:
Και τώρα μας ζητάει να βάλουμε τον νέο κωδικό.

Συνδεόμαστε με SSH στον 2ο server ως root χρήστης και δίνουμε τις ίδιες εντολές με πριν για να φτιάξουμε τον ίδιο χρήστη με τον ίδιο κωδικό.
Βήμα 2ο - Δημιουργία public και private keys και μεταφορά τους
Συνδεόμαστε με SSH ξανά στον 1ο server, με το όνομα χρήστη που δημιουργήσαμε πριν και τον κωδικό του. Ας θεωρήσουμε ότι τον ονομάσαμε user5.
Δίνουμε την παρακάτω εντολή για να δημιουργηθούν τα public και private keys που θα χρειαστούν στην πορεία για την σύνδεση των 2 server:

Στην συνέχεια πρέπει να αντιγράψουμε το public key που δημιουργήσαμε του 1ου server στον 2ο, δίνοντας την παρακάτω εντολή στον 1ο server συνδεδεμένοι πλέον ως χρήστης user5.

Τέλος κάνουμε μια δοκιμή να δούμε αν όντως μπορούμε να συνδεθούμε από τον 1ο server στον 2o χωρίς να μας ζητηθεί κωδικός με την εντολή:
Εάν όλα έχουν γίνει σωστά η οθόνη που πρέπει να εμφανιστεί είναι κάπως έτσι, χωρίς ανάγκη για κωδικό πλέον.

Βήμα 3ο - Λήψη backup στον 1o server
Με την παρακάτω διαδικασία θα δημιουργήσουμε δυο αρχεία για την λήψη backup (ένα για τα αρχεία που υπάρχουν στον server και ένα για τις βάσεις δεδομένων)
Μέσα στον φάκελο /home/user5/ δημιουργούμε ένα νέο φάκελο με ότι όνομα θέλουμε π.χ. backups
Εκεί δημιουργούμε 2 νέα αρχεία με όνομα files.sh και db.sh (το όνομα είναι επιλογή του καθενός)
Εάν θέλουμε να αντιγράψουμε τα αρχεία π.χ. που βρίσκονται στον server μας στην τοποθεσία /var/www/vhosts/domain.gr/httpdocs βάζουμε μέσα στο αρχείο files.sh
Βήμα 4ο - Αυτόματη λήψη backup με Cronjob
Για να γίνετε όλη αυτή η διαδικασία αυτόματα και να μην πρέπει να εκτελούμε εμείς την εντολή κάθε φορά, πρέπει να ορίσουμε ένα cronjob στον 1ο server για κάθε ένα από τα αρχεία files.sh και db.sh (που περιέχουν τις εντολές για την λήψη των backup).
Εγώ συγκεκριμένα τα έκανα μέσω του Plesk panel. Υπάρχουν όμως εντολές και για μέσω SSH (Αποτελέσματα Google - τα οποία όμως δεν έχω δοκιμάσει).
Στο Plesk Panel πάμε στο Tools and Settings --> Scheduled Tasks, επιλέγουμε τον root και δημιουργούμε ένα νέο Task με εντολή την

Το ίδιο ακριβώς κάνουμε και για το backup των βάσεων απλά αλλάζουμε το όνομα του αρχείου στην εντολή του task, δηλαδή:
Για μεγαλύτερη ασφάλεια και για να υπάρχουν τα backups και αλλού μπορούμε να μεταφέρουμε αυτόματα αυτά τα καθημερινά backup σε άλλο server και εκεί να κρατάμε backups για μεγαλύτερο διάστημα (σε αντίθεση με το τελευταίο μόνο backup που κρατάει ο 1ος server).
Υπάρχουν VPS server στο εξωτερικό οικονομικοί από 4$, δεν πρόκειται για αξιόπιστα συστήματα για να στήσετε σελίδες αλλά για 2ο backup είναι ότι πρέπει.
Δημιουργούμε μέσα στο /home/user5/backups άλλο ένα αρχείο transfer.sh
Αυτό θα περιέχει μέσα την εντολή για την μεταφορά
Πάλι μέσα από το Plesk Panel όπως πριν (γίνεται κ με εντολή στο SSH) ορίζουμε ένα cronjob ώστε η μεταφορά να γίνεται αυτόματα π.χ. κάθε βράδυ τα ξημερώματα στις 5 (ώστε να έχουν προλάβει να δημιουργηθούν και τα backup στον 1ο server)
Ως εντολή βάζουμε το path του αρχείου 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
υπάρχει ένα κλασσικό ρητό το οποίο λέει: "Αν δεν πάθεις δεν θα μάθεις..."
Έτσι και εγώ όπως σίγουρα και πολλοί άλλοι πρώτα έπαθα.. να χάσω σημαντικά αρχεία από σελίδες μου και να μην μπορώ να τα ξαναβρώ λόγω μη ύπαρξης 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 χρήστης και δίνουμε τις εξής εντολές:
Κώδικας: Επιλογή όλων
Στην θέση onoma βάζουμε το όνομα που θέλουμε να έχει ο νέος χρήστης. adduser onoma
Κώδικας: Επιλογή όλων
Στην θέση onoma βάζουμε το όνομα που βάλαμε προηγουμένως.passwd onoma
Και τώρα μας ζητάει να βάλουμε τον νέο κωδικό.

Συνδεόμαστε με SSH στον 2ο server ως root χρήστης και δίνουμε τις ίδιες εντολές με πριν για να φτιάξουμε τον ίδιο χρήστη με τον ίδιο κωδικό.
Βήμα 2ο - Δημιουργία public και private keys και μεταφορά τους
Συνδεόμαστε με SSH ξανά στον 1ο server, με το όνομα χρήστη που δημιουργήσαμε πριν και τον κωδικό του. Ας θεωρήσουμε ότι τον ονομάσαμε user5.
Δίνουμε την παρακάτω εντολή για να δημιουργηθούν τα public και private keys που θα χρειαστούν στην πορεία για την σύνδεση των 2 server:
Κώδικας: Επιλογή όλων
και πατάμε σε όλα Enter χωρίς να βάλουμε κάτι στο passphraseόπως φαίνεται και στην παρακάτω εικόνα.ssh-keygen

Στην συνέχεια πρέπει να αντιγράψουμε το public key που δημιουργήσαμε του 1ου server στον 2ο, δίνοντας την παρακάτω εντολή στον 1ο server συνδεδεμένοι πλέον ως χρήστης user5.
Κώδικας: Επιλογή όλων
Βάζουμε τον κωδικό του χρήστη user5 και πατάμε Enterssh-copy-id -i ~/.ssh/id_rsa.pub ip-deuterou-server

Τέλος κάνουμε μια δοκιμή να δούμε αν όντως μπορούμε να συνδεθούμε από τον 1ο server στον 2o χωρίς να μας ζητηθεί κωδικός με την εντολή:
Κώδικας: Επιλογή όλων
Στην θέση του ip-2ou-server βάζουμε την ip που έχει ο 2ος server.ssh ip-2ou-server
Εάν όλα έχουν γίνει σωστά η οθόνη που πρέπει να εμφανιστεί είναι κάπως έτσι, χωρίς ανάγκη για κωδικό πλέον.

Βήμα 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 προηγούμενων ημερών και πάει λέγοντας.
Κώδικας: Επιλογή όλων
Τα στοιχεία uservasis, kodikosvasis, onomavasis καθώς και τα /home/user5/backups/db πρέπει να αλλαχθούν με τα αντίστοιχα δικά μας.#!/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 με εντολή την
Κώδικας: Επιλογή όλων
όπου εδώ βάζουμε το path όπου βρίσκεται το αρχείο files.sh και περιέχει τις εντολές για το backup και το ορίζουμε να εκτελείτε π.χ. κάθε βράδυ στις 3 τα ξημερώματα. Αυτό είναι προσωπική επιλογή του καθενός. Για να οριστεί στις 3 πρέπει στα minutes να βάλουμε 0. στο hour 3 και σε όλα τα άλλα * ώστε να το κάνει κάθε μέρα, κάθε μήνα και λοιπά./home/user5/backups/files.sh

Το ίδιο ακριβώς κάνουμε και για το backup των βάσεων απλά αλλάζουμε το όνομα του αρχείου στην εντολή του task, δηλαδή:
Κώδικας: Επιλογή όλων
Βήμα 5ο - Μεταφορά αρχείων backup σε 2o server/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