Git
Chapters ▾ 2nd Edition

4.2 Το Git στον διακομιστή - Εγκατάσταση του Git σε διακομιστή

Εγκατάσταση του Git σε διακομιστή

Τώρα θα δούμε τη δημιουργία μιας υπηρεσίας Git που θα εκτελεί αυτά τα πρωτόκολλα στον δικό μας διακομιστή.

Note

Εδώ θα επιδείξουμε τις εντολές και τα βήματα που απαιτούνται για να κάνουμε βασικές απλοποιημένες εγκαταστάσεις σε έναν διακομιστή σε Linux, αν και είναι επίσης δυνατή η εκτέλεση αυτών των υπηρεσιών σε διακομιστές Mac ή Windows. Η εγκατάσταση ενός διακομιστή παραγωγής στην υποδομή μας προϋποθέτει ασφαλώς διαφορές στα μέτρα ασφαλείας ή τα εργαλεία των λειτουργικών συστημάτων, αλλά αυτό θα μας δώσει τη γενική ιδέα για το τι εμπλέκεται.

Για να ρυθμίσουμε αρχικά οποιοδήποτε διακομιστή Git, πρέπει να εξάγουμε ένα υπάρχον αποθετήριο σε ένα νέο γυμνό αποθετήριο —ένα αποθετήριο που δεν περιέχει κατάλογο εργασίας. Αυτό είναι γενικά εύκολο να γίνει. Για να κλωνοποιήσουμε το αποθετήριό μας και να δημιουργήσουμε ένα νέο γυμνό αποθετήριο, εκτελούμε την εντολή clone με την επιλογή --bare. Συμβατικά, οι γυμνοί κατάλογοι αποθετηρίων τελειώνουν σε .git, ως εξής:

$ git clone --bare my_project my_project.git
Cloning into bare repository 'my_project.git'...
done.

Θα πρέπει τώρα να έχουμε ένα αντίγραφο των δεδομένων του καταλόγου Git στον κατάλογο my_project.git.

Αυτό είναι σχεδόν ισοδύναμο με κάτι σαν αυτό:

$ cp -Rf my_project/.git my_project.git

Υπάρχουν μερικές μικροδιαφορές στο αρχείο ρυθμίσεων· αλλά για τον σκοπό μας αυτό δεν είναι σημαντικό. Η παραπάνω εντολή παίρνει το αποθετήριο Git μόνο του, χωρίς κατάλογο εργασίας και δημιουργεί έναν κατάλογο αποκλειστικά για αυτό.

Τοποθέτηση του γυμνού αποθετηρίου σε έναν διακομιστή

Τώρα που έχουμε ένα γυμνό αντίγραφο του αποθετηρίου μας, το μόνο που χρειάζεται να κάνουμε είναι να το βάλουμε σε έναν διακομιστή και να ρυθμίσουμε τα πρωτόκολλά μας. Ας υποθέσουμε ότι έχουμε δημιουργήσει έναν διακομιστή που ονομάζεται git.example.com στον οποίο έχουμε πρόσβαση μέσω SSH και θέλουμε να αποθηκεύσουμε όλα τα αποθετήρια Git στον κατάλογο /opt/git. Υποθέτοντας ότι το /opt/git υπάρχει σε αυτόν τον διακομιστή, μπορούμε να ρυθμίσουμε το νέο αποθετήριό μας αντιγράφοντας το γυμνό αποθετήριο:

$ scp -r my_project.git user@git.example.com:/srv/git

Σε αυτό το σημείο, άλλοι χρήστες που έχουν πρόσβαση SSH στον ίδιο διακομιστή ο οποίος έχει πρόσβαση ανάγνωσης στον κατάλογο /opt/git μπορούν να κλωνοποιήσουν τον αποθετήριό μας τρέχοντας

$ git clone user@git.example.com:/srv/git/my_project.git

Αν ένας χρήστης συνδεθεί με SSH σε έναΝ διακομιστή και έχει δικαίωμα εγγραφής στον κατάλογο /opt/git/my_project.git, θα έχει αυτόματα δικαίωμα ώθησης.

Το Git θα προσθέσει αυτόματα δικαιώματα εγγραφής σε ομάδες σε ένα αποθετήριο σωστά εάν εκτελέσουμε την εντολή git init με την επιλογή --shared.

$ ssh user@git.example.com
$ cd /opt/git/my_project.git
$ git init --bare --shared

Βλέπουμε πόσο εύκολο είναι να πάρουμε ένα αποθετήριο Git, να δημιουργήσουμε μια γυμνή έκδοσή του και να την τοποθετήσουμε σε έναν διακομιστή στον οποίο εμείς και οι συνεργάτες μας έχουμε πρόσβαση μέσω SSH. Τώρα είμαστε έτοιμοι να συνεργαστούμε στο ίδιο έργο.

Είναι σημαντικό να σημειωθεί ότι αυτό είναι κυριολεκτικά το μόνο που χρειάζεται να κάνουμε για να τρέξουμε έναν χρήσιμο διακομιστή Git στον οποίο έχουν πρόσβαση πολλοί χρήστες —απλά προσθέτουμε λογαριασμούς SSH σε έναν διακομιστή και ρίχνουμε ένα γυμνό αποθετήριο κάπου όπου όλοι αυτοί οι χρήστες έχουν πρόσβαση ανάγνωσης/εγγραφής. Είμαστε έτοιμοι —δεν χρειάζεται τίποτα άλλο.

Στις επόμενες ενότητες θα δούμε πώς μπορούμε να επεκταθούμε σε πιο εξεζητημένες ρυθμίσεις. Αυτή η συζήτηση θα περιλαμβάνει τη μη δημιουργία λογαριασμών χρηστών για κάθε χρήστη, την προσθήκη δημόσιας πρόσβασης ανάγνωσης σε αποθετήρια, την εγκατάσταση διαδικτυακών UI και πολλά άλλα. Ωστόσο, ας έχουμε υπόψη ότι για να συνεργαστούμε με άλλους σε ένα ιδιωτικό έργο, το μόνο που χρειαζόμαστε είναι ένας διακομιστής SSH και ένα γυμνό αποθετήριο.

Μικρές εγκαταστάσεις

Εάν είμαστε μια μικρή επιχείρηση ή απλώς δοκιμάζουμε το Git στον οργανισμό μας και έχουμε μόνο λίγους προγραμματιστές, τα πράγματα είναι απλά. Μια από τις πιο περίπλοκες πτυχές της εγκατάστασης ενός διακομιστή Git είναι η διαχείριση των χρηστών. Εάν θέλουμε μερικά αποθετήρια να είναι πρόσβασιμα από ορισμένους χρήστες μόνο-για-ανάγνωση και για ανάγνωση/εγγραφή από άλλους, η πρόσβαση και τα δικαιώματα μπορεί να είναι λίγο πιο δύσκολο να ρυθμιστούν.

Πρόσβαση μέσω SSH

Εάν έχουμε έναν διακομιστή στον οποίο όλοι οι προγραμματιστές μας έχουν ήδη πρόσβαση SSH, είναι γενικά ευκολότερο να δημιουργήσουμε το πρώτο αποθετήριό μας σε αυτόν, επειδή δεν χρειάζεται να κάνουμε σχεδόν καθόλου δουλειά (όπως συζητήθηκε στην προηγούμενη ενότητα). Αν θέλουμε πιο πολύπλοκα είδη δικαιωμάτων ελέγχου πρόσβασης στα αποθετήριά μας, μπορούμε να τα χειριστούμε με τα δικαιώματα συστήματος αρχείων του λειτουργικού συστήματος που τρέχει ο διακομιστής μας.

Εάν θέλουμε να τοποθετήσουμε τα αποθετήριά μας σε έναν διακομιστή που δεν διαθέτει λογαριασμούς για όλα τα μέλη της ομάδας μας για τα οποία θέλουμε να έχουν δικαίωμα εγγραφής, τότε πρέπει να τους δώσουμε πρόσβαση SSH. Αν έχουμε έναν διακομιστή με τον οποίο μπορούμε να τα κάνουμε αυτά, τότε έχουμε ήδη εγκατεστημένο έναν διακομιστή SSH και έτσι έχουμε πρόσβαση στον διακομιστή.

Υπάρχουν μερικοί τρόποι με τους οποίους μπορούμε να δώσουμε πρόσβαση σε όλους στην ομάδα μας. Ο πρώτος είναι να δημιουργήσουμε λογαριασμούς για όλους, κάτι που είναι απλό, αλλά μπορεί να είναι κουραστικό. Μπορεί να μην θέλουμε να τρέξουμε το adduser και να ορίσουμε προσωρινούς κωδικούς πρόσβασης για κάθε χρήστη.

Μια δεύτερη μέθοδος είναι να δημιουργήσουμε έναν μοναδικό χρήστη git στο μηχάνημα, να ζητήσουμε από κάθε χρήστη που θα έχει πρόσβαση εγγραφής να μας στείλει ένα δημόσιο κλειδί SSH και να προσθέσουμε αυτό το κλειδί στο αρχείο ~/.ssh/authorized_keys του νέου χρήστη git. Σε αυτό το σημείο, όλοι θα μπορούν να έχουν πρόσβαση σε αυτό το μηχάνημα μέσω του χρήστη git. Αυτό δεν επηρεάζει τα δεδομένα των υποβολών με κανέναν τρόπο —ο χρήστης SSH που συνδέεται δεν επηρεάζει τις υποβολές που έχουμε καταγράψει.

Ένας άλλος τρόπος είναι να στήσουμε τον διακομιστή SSH ώστρε να ταυτοποιεί μέσω ενός διακομιστή LDAP ή κάποια άλλη κεντρική πηγή ταυτοποίησης που ενδεχομένως έχουμε ήδη ρυθμίσει. Εφόσον ο κάθε χρήστης μπορεί να αποκτήσει πρόσβαση στο κέλυφος, οποιοσδήποτε μηχανισμός ταυτοποίησης SSH που μπορούμε να σκεφτούμε θα πρέπει να λειτουργεί.