OpenCart-Hellas 

Η Ελληνική κοινότητα υποστήριξης του Opencart

#473
Καλησπέρα σε όλους...

υπάρχει ένα κλασσικό ρητό το οποίο λέει: "Αν δεν πάθεις δεν θα μάθεις..."
Έτσι και εγώ όπως σίγουρα και πολλοί άλλοι πρώτα έπαθα.. να χάσω σημαντικά αρχεία από σελίδες μου και να μην μπορώ να τα ξαναβρώ λόγω μη ύπαρξης 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ο - Δημιουργία ίδιων χρηστών και στους 2 servers
Για να μπορούμε να μεταφέρουμε αυτόματα τα αρχεία από τον 1ο server στον 2ο server, πρέπει να μπορεί ο 1ος server να συνδέεται αυτόματα μέσω SSH χωρίς password στον 2ο .

Συνδεόμαστε με SSH (πρόγραμμα για σύνδεση SSH) στον 1ο server ως root χρήστης και δίνουμε τις εξής εντολές:
Κώδικας: Επιλογή όλων
adduser onoma
Στην θέση onoma βάζουμε το όνομα που θέλουμε να έχει ο νέος χρήστης.
Κώδικας: Επιλογή όλων
passwd onoma
Στην θέση onoma βάζουμε το όνομα που βάλαμε προηγουμένως.

Και τώρα μας ζητάει να βάλουμε τον νέο κωδικό.
Εικόνα

Συνδεόμαστε με SSH στον 2ο server ως root χρήστης και δίνουμε τις ίδιες εντολές με πριν για να φτιάξουμε τον ίδιο χρήστη με τον ίδιο κωδικό.

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

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

Τέλος κάνουμε μια δοκιμή να δούμε αν όντως μπορούμε να συνδεθούμε από τον 1ο server στον 2o χωρίς να μας ζητηθεί κωδικός με την εντολή:
Κώδικας: Επιλογή όλων
ssh ip-2ou-server
Στην θέση του ip-2ou-server βάζουμε την ip που έχει ο 2ος 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 προηγούμενων ημερών και πάει λέγοντας.
Για τις βάσεις δεδομένων ακολουθούμε παρόμοια διαδικασία
Κώδικας: Επιλογή όλων
#!/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 {} \;
Τα στοιχεία uservasis, kodikosvasis, onomavasis καθώς και τα /home/user5/backups/db πρέπει να αλλαχθούν με τα αντίστοιχα δικά μας.

Βήμα 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
όπου εδώ βάζουμε το path όπου βρίσκεται το αρχείο files.sh και περιέχει τις εντολές για το backup και το ορίζουμε να εκτελείτε π.χ. κάθε βράδυ στις 3 τα ξημερώματα. Αυτό είναι προσωπική επιλογή του καθενός. Για να οριστεί στις 3 πρέπει στα minutes να βάλουμε 0. στο hour 3 και σε όλα τα άλλα * ώστε να το κάνει κάθε μέρα, κάθε μήνα και λοιπά.

Εικόνα

Το ίδιο ακριβώς κάνουμε και για το backup των βάσεων απλά αλλάζουμε το όνομα του αρχείου στην εντολή του task, δηλαδή:
Κώδικας: Επιλογή όλων
/home/user5/backups/db.sh
Βήμα 5ο - Μεταφορά αρχείων backup σε 2o server
Για μεγαλύτερη ασφάλεια και για να υπάρχουν τα 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.
Βήμα 6ο - Αυτόματη μεταφορά αρχείων backup με Cronjob
Πάλι μέσα από το 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

Καλησπέρα στην ομάδα, θέλω να ρωτήσω το εξής: Σε O[…]

Σας ευχαριστώ πολύ για την απάντηση, σκεφτείτε η ε[…]

Έλεγξε αν έχεις πολύ μεγάλα αρχεία εικόνων και αν […]

Κάνε ένα restart τον σερβερ. (βασικα την λειτουργι[…]

Πριν ζητήσετε βοήθεια στο φόρουμ, παρακαλούμε ελέγξτε αν υπάρχει έτοιμη λύση στο OpenCart Extension Marketplace!