Διαμόρφωση μεταβλητών περιβάλλοντος
Περιεχόμενα:
Περίληψη
Ζήτημα
Θέλουμε οι εφαρμογές μας να είναι διαμορφώσιμες πέρα από τα τεχνουργήματα/δυαδικά αρχεία/πηγαίο κώδικα, ώστε ένα build να συμπεριφέρεται διαφορετικά ανάλογα με το περιβάλλον ανάπτυξής του.
Για να το πετύχουμε αυτό, θέλουμε να χρησιμοποιήσουμε διαμόρφωση με μεταβλητές περιβάλλοντος.
Θέλουμε να διαχειριζόμαστε τη διαμόρφωση χρησιμοποιώντας αρχεία που μπορούμε να ελέγχουμε με έλεγχο εκδόσεων.
Θέλουμε να παρέχουμε κάποια εργονομία στην εμπειρία των προγραμματιστών, όπως η γνώση του τι μπορεί να διαμορφωθεί και των σχετικών προεπιλογών.
Απόφαση
Αποφασίστηκαν αρχεία .env με σχετικό αρχείο προεπιλογών και αρχείο σχήματος.
Κατάσταση
Αποφασίστηκε. Είμαστε ανοικτοί στην εξέταση νέων δυνατοτήτων όταν προκύπτουν.
Λεπτομέρειες
Παραδοχές
Προτιμούμε τον διαχωρισμό του κώδικα της εφαρμογής από τον κώδικα του περιβάλλοντος. Υποθέτουμε ότι η εφαρμογή πρέπει να λειτουργεί διαφορετικά σε διαφορετικά περιβάλλοντα, όπως περιβάλλον ανάπτυξης, περιβάλλον δοκιμών, περιβάλλον επίδειξης, περιβάλλον παραγωγής κ.λπ.
Προτιμούμε την πρακτική του κλάδου «12 factor app» και ακόμη περισσότερο τη σχετική πρακτική «15 factor app».
Πολλά από τα προηγούμενα έργα μας έχουν χρησιμοποιήσει τη σύμβαση ενός αρχείου .env ή παρόμοιου καταλόγου .env. Υπάρχει τυπική πρακτική να κρατώνται αυτά εκτός του ελέγχου εκδόσεων και αντ' αυτού να χρησιμοποιείται κάποιος άλλος τρόπος για την ανάπτυξη, την έκδοση και τη διαχείρισή τους.
Περιορισμοί
Θέλουμε να κρατάμε τα μυστικά εκτός του συστήματος ελέγχου εκδόσεων (VCS) διαχείρισης πηγαίου κώδικα (SCM).
Θέλουμε να στοχεύουμε σε συμβατότητα με δημοφιλή πλαίσια και βιβλιοθήκες λογισμικού. Για παράδειγμα, το Node έχει μια μονάδα «dotenv» για την ανάγνωση διαμόρφωσης μεταβλητών περιβάλλοντος.
Θέσεις
Εξετάσαμε μερικές προσεγγίσεις:
Αποθήκευση της διαμόρφωσης στην εφαρμογή, όπως σε ένα αρχείο
config.js.Αποθήκευση της διαμόρφωσης στο περιβάλλον, όπως σε ένα αρχείο
.env.Ανάκτηση της διαμόρφωσης από γνωστή τοποθεσία, όπως ένας διακομιστής αδειών.
Επιχείρημα
Επιλέξαμε την προσέγγιση ενός αρχείου .env επειδή:
Είναι δημοφιλής, μεταξύ άλλων και ανάμεσα σε ειδικούς.
Ακολουθεί το μοτίβο των αρχείων
.envπου οι ομάδες μας έχουν χρησιμοποιήσει με επιτυχία πολλές φορές σε πολλά έργα.Είναι απλή. Συγκεκριμένα, προς το παρόν είμαστε εντάξει με τους σημαντικούς συμβιβασμούς που βλέπουμε, όπως η έλλειψη δυνατοτήτων ελέγχου σε σύγκριση με μια προσέγγιση διακομιστή αδειών.
Επιπτώσεις
Πρέπει να βρούμε έναν τρόπο να διαχωρίσουμε τη διαμόρφωση μεταβλητών περιβάλλοντος που είναι δημόσια από τη διαχείριση μυστικών.
Σχετικά
Σχετικές αποφάσεις
Αναμένουμε όλες οι εφαρμογές μας να χρησιμοποιούν αυτή την προσέγγιση.
Θα σχεδιάσουμε την αναβάθμιση οποιασδήποτε από τις εφαρμογές μας που χρησιμοποιεί λιγότερο ικανή προσέγγιση, όπως η σκληρή κωδικοποίηση σε δυαδικό αρχείο ή σε πηγαίο κώδικα.
Θα διατηρήσουμε ως έχουν οποιεσδήποτε από τις εφαρμογές μας χρησιμοποιούν πιο ικανή προσέγγιση, όπως ένας διακομιστής αδειοδότησης.
Σχετικές απαιτήσεις
Θα προσθέσουμε δυνατότητες devops για τα αρχεία, συμπεριλαμβανομένων hooks, δοκιμών και συνεχούς ολοκλήρωσης.
Πρέπει να εκπαιδεύσουμε όλους τους συναδέλφους προγραμματιστές σε αυτή την απόφαση.
Σχετικά τεχνουργήματα
Κάθε περιοχή όπου αναπτύσσουμε θα χρειάζεται το δικό της αρχείο .env και σχετικά αρχεία.
Σχετικές αρχές
Εύκολα αναστρέψιμο.
Σημειώσεις
Παράδειγμα αρχείου .env:
NAME=Alice Anderson
EMAIL=alice@example.com
Παράδειγμα αρχείου .env.defaults:
NAME=Joe Doe
EMAIL=joe@example.com
Παράδειγμα αρχείου .env.schema μόνο με τα κλειδιά:
NAME
EMAIL