GIT deployment σε VPS server

Μας ρωτάτε πολλές φορές πως γίνεται να κάνετε deploy τα project σας άμεσα στον VPS σας από το git με push. Η λύση είναι απλή και περιγράφεται παρακάτω.

 

Λίγα λόγια για το Git

Παρότι υπάρχουν πολλοί τρόποι να ανεβάσεις τα project σου,θα επικεντρωθούμε στον συνηθέστερο, ο οποίος απαιτεί την ελάχιστη γνώση, της δημιουργίας δηλαδή ενός repository στον υπολογιστή σας. Το git είναι control version το οποίο διαφέρει αρκετά από άλλα VCS. Το Git διαχειρίζεται κυρίως τα δεδομένα του(τις κάθε αλλαγές), ως μια σειρά από στιγμιότυπα και δεν δημιουργεί νέα αν δεν υπάρχουν αλλαγές, γεγονός που το κάνει αρκετά γρήγορο. Αποτελείται από ένα τοπικό(local) repository στο οποίο δουλεύει η ομάδα ανάπτυξης και ένα απομακρυσμένο (remote) repository, με το οποίο συγχρονίζονται και ενημερώνουν, οι χρήστες που συμμετέχουν σ’αυτή την ομάδα.

Δημιουργία remote repository

Έστω η διαδρομή του site σας είναι η εξής: /var/www/mysite.gr
Έστω η διαδρομή του git είναι η εξής: /var/remoterepo/mysite.git

Αφού συνδεθούμε στο VPS μας από την γραμμή εντολών γράφουμε:
cd /var
mkdir remoterepo && cd remoterepo
mkdir mysite.git && cd mysite.git
git init –bare

Η παράμετρος –bare σημαίνει ότι ο φάκελος που δημιουργούμε το repository, δεν έχει πηγαίο κώδικα αλλά μόνο το version control.

Hooks

Τα git repositories έχουν ένα φάκελο που ονομάζεται hooks , ο οποίος περιέχει κάποια δειγματικά αρχεία τα οποία μπορούμε να χρησιμοποιήσουμε για να κάνουμε κάποιες συγκεκριμένες ενέργειες. Στο git χρησιμοποιούνται κύρίως 3 server hooks. Το pre-receive που εκτελείται όταν κάνουμε push τα αρχεία μας στον server, το update που είναι παρόμοιο και εκτελείται μια φορά για κάθε branch (κλαδί), και το post-receive που εκτελείται όταν ολοκληρώνεται εντελώς το push και στην πράξη μας ενδιαφέρει περισσότερο.

Αφού μπόυμε στο φάκελο του repository που δημιουργήσαμε πατάμε
ls
και βλέπουμε τον φάκελο hooks.Στη συνέχεια μπαίνουμε μέσα :
cd hooks

Δημιουργούμε το post-receive αρχείο :
nano post-receive

Στη συνέχεια βλέπουμε τον κέρσορα να αναβοσβήνει και γράφουμε τα παρακατω
#!/bin/sh
git –work-tree=/var/www/mysite.gr –git-dir=/var/remoterepo/mysite.git checkout -f

Αφού τελειώσουμε αποθηκεύουμε το αρχείο πατώντας ‘control+x’,y(es) και enter, και στη συνέχεια του δίνομαι τα κατάλληλα δικαιώματα ώστε να μπορούμε να το τρέξουμε με την εντολή:
chmod +x post-receive

Τοπικός υπολογιστής(local repository)

Αν είμαστε συνδεδεμένοι στον VPS, κάνουμε πρώτα αποσύνδεση με:
exit

Και δημιουργούμε το τοπικό μας repository με τις εντολές:
cd /my/workspace
mkdir project && cd project
git init

Έπειτα πρέπει να ενημερώσουμε το git, να προσθέσει το απομακρυσμένο repository(πχ live)
git remote add live ssh://user@mymysite.gr/var/remoterepo/mysite.git

Για να ανεβάσουμε τα αρχεία μας(από τον φάκελο που ήδη βρισκόμαστε), προσθέτουμε όλα τα αρχεία του φακέλου με μια τελεία στο τέλος και έπειτα ένα μήνυμα το οποίο θα πρέπει να γράφεται σε κάθε Push που κάνουμε
git add .
git commit -m “h efarmogi enimerothike topika”

Τέλος κάνουμε ένα push στον server τα αρχεία μας , χρησιμοποιόντας την συντόμευση ‘live’ από τη ρύθμιση που κάναμε στον server, με την εντολή:
git push live master

και μας επιστρέφει κάτι παρόμοιο:
Counting objects: 7, done.Delta compression using up to 4 threads.Compressing objects: 100% (7/7), done.Writing objects: 100% (7/7), 10.56 KiB, done.Total 7 (delta 0), reused 0 (delta 0)To ssh://user@mymysite.gr/var/remoterepo/mysite.git* [new branch] master -> master

Beta repository

Για να μπορέσουμε να έχουμε ένα χώρο ώστε να ελέγχουμε την εφαρμογή μας πριν την τελική της έκδοση(beta) θα πρέπει να δημιουργήσουμε ένα νέο repository στο VPS μας.

Αφου συνδεθούμε στο VPS , δημιουργούμε ένα νεο φάκελο beta
cd /var/www
mkdir beta

Και στη συνέχεια το νεο μας repository
cd /var/remoterepo
mkdir beta.git && cd beta.git
git init –bare

Επειτά δημιουργούμε το νέο post-receive αρχείο :
nano post-receive

και γράφουμε τα παρακάτω
#!/bin/sh
git –work-tree=/var/www/beta –git-dir=/var/remoterepo/beta.git checkout -f

Όταν πάλι τελειώσουμε αποθηκεύουμε το αρχείο πατώντας ‘control+x’,y(es) και enter, και στη συνέχεια του δίνομαι παρομοίως με πριν τα κατάλληλα δικαιώματα ώστε να μπορούμε να το τρέξουμε με την εντολή:
chmod +x post-receive

Για να συνδέσουμε τώρα το νεο απομακρυσμένο repository με το δικό μας γράφουμε:
git remote add beta ssh://user@mymysite.gr/var/remoterepo/beta.git

Με αυτόν τον τρόπο, μπορούμε να κάνουμε Push πρώτα στο beta repository:
git add .
git commit -m “New version”
git push beta master

και αν όλα λειτουργούν σωστά να τα κάνουμε Push στο live repository:
git push live master

Εαν έχετε μια ομάδα που δουλεύει στην εφαρμογή και θέλετε να μπορούν να αποφασίζουν και άλλοι πότε θα πρέπει να τρέξει ‘live’ η εφαρμογή, τότε το μόνο που έχετε να κάνετε είναι,να συνδέσετε το beta με το live repository.
Αφού συνδεθούμε στο VPS μας γράφουμε τα εξής:
cd /var/remoterepo/beta.git
git remote add live ../mysite.git

Έτσι μπορούμε να κάνουμε push από το beta στο live στον server μας:
cd /var/remoterepo/beta.git
git push live master

Share it!