Πώς δημιούργησα έναν αντικαταστάτη για το Heroku και μείωσα το κόστος της πλατφόρμας κατά 4Χ

Μπορείτε να μεταβείτε στην ενότητα Τι κάνει εάν θέλετε να μεταβείτε απευθείας στην επιχείρηση.

2019 ΕΝΗΜΕΡΩΣΗ : Το CaptainDuckDuck ανανεώνεται τώρα και διανέμεται ως CapRover. Ανατρέξτε στο //github.com/caprover/caprover

Ο πόνος

Πριν από μερικά χρόνια, άρχισα να παίζω με γλώσσες διακομιστή - κυρίως Node JS. Μετά από λίγες ημέρες αγώνα, κατάφερα να αναπτύξω μια εφαρμογή Hello World στο δικό μου localhost. Ήταν διασκεδαστικό, μέχρι που αποφάσισα να κάνω το επόμενο βήμα και να αναπτύξω ένα από τα έργα μου στο Διαδίκτυο, ώστε οι χρήστες να μπορούν να έχουν πρόσβαση σε αυτό από μια δημόσια διεύθυνση URL //www.some-awesome-web-app.com.

Σε αυτό το σημείο, συνειδητοποίησα ότι υπήρχε ένα εντελώς νέο σύνολο τεχνολογιών που έπρεπε να μάθω να αναπτύξω την εφαρμογή ιστού μου. Έπρεπε να μάθω πώς να δημιουργώ εργαλεία και αγωγούς ανάπτυξης, πώς λειτουργεί η δρομολόγηση nginx και το SSL και πολλά άλλα πράγματα…

Περιττό να πούμε ότι η ανάπτυξη ήταν μια οδυνηρή εμπειρία. Συνειδητοποίησα ότι έπρεπε να ξοδέψω σχεδόν τον ίδιο χρόνο που πέρασα κωδικοποιώντας την ανάπτυξη κώδικα στον διακομιστή, την κατασκευή, την εγκατάσταση εξαρτήσεων και τη συντήρηση του διακομιστή. Είναι απλά ηλίθιο! Έπρεπε να περάσω χρόνο κάνοντας τα ίδια πράγματα ξανά και ξανά.

Θα προτιμούσα να αφιερώσω τον χρόνο μου κωδικοποιώντας ένα προϊόν / υπηρεσία που θα χρησιμοποιηθεί από τους χρήστες, χωρίς να ξοδεύω ώρες και ημέρες για τον τρόπο ρύθμισης του HTTPS. Σε τελική ανάλυση, το HTTPS μου δεν διαφέρει από άλλους εκατοντάδες χιλιάδες ιστότοπους HTTPS στο Διαδίκτυο. Έπρεπε να υπάρχει ένας απλούστερος τρόπος.

Ο Προσωρινός Σωτήρας

Αυτή η οδυνηρή εμπειρία τελείωσε όταν συνάντησα το Heroku, μια έτοιμη πλατφόρμα για ανάπτυξη εφαρμογών. Είπα στον εαυτό μου «Τέλεια! Αυτό πρέπει να είναι μια πλατφόρμα ανάπτυξης! " Μου άρεσε πολύ πώς αφαίρεσαν όλη την πολυπλοκότητα πίσω από μια εύκολη διεπαφή. Μπορείτε απλά να δημιουργήσετε μια εφαρμογή με ένα απλό κλικ και να την ωθήσετε. Διατίθεται αμέσως με μια δημόσια διεύθυνση URL. Διατίθεται δωρεάν με μικρό κόστος ύπνου μετά από 30 λεπτά αδράνειας. Τα πράγματα δεν θα μπορούσαν να είναι καλύτερα!

Όλα ήταν καλά. Μέχρι να ασχοληθώ με κάποια έργα που απαιτούσαν συνεχή εκτέλεση 24 ωρών (ένα bot αναγνώστη). Έπρεπε να αναβαθμίσω στην υπηρεσία επί πληρωμή. Δεν ήταν πολύ κακό, μόνο 7 $ το μήνα. Αλλά τα πράγματα άρχισαν να τρελαίνονται αφού άρχισα να αναπτύσσω όλο και περισσότερες εφαρμογές. Μερικά ήταν προσωπικά έργα, και άλλα σχετίζονται με τις επιχειρήσεις που απαιτούσαν είτε μεγαλύτερη από 512MB (δωρεάν όριο) ή 24ωρη συνεχή διαθεσιμότητα.

Δεν χρειάστηκε πολύς χρόνος έως ότου συνειδητοποίησα ότι πληρώνω 100 $ + στο Heroku. Δεν είχε νόημα. Μερικά από τα bots του αναγνώστη μου που απαιτούν διαθεσιμότητα 24 ωρών καταναλώνουν μόνο 128MB μνήμης RAM. Ωστόσο, έπρεπε να πληρώσω και για την αχρησιμοποίητη μνήμη RAM. Δεν μπορούσα να μοιραστώ RAM / CPU σε εφαρμογές. Επιδεινώνεται με τις εφαρμογές χρήσης με υψηλή μνήμη RAM. Εάν έχω μια εφαρμογή που χρειάζεται 1 GB μνήμης RAM - πρέπει να πληρώσω τουλάχιστον 50 $ ανά μήνα.

Ελπίζοντας να βρω καλύτερες προσφορές, άρχισα να βλέπω AWS, Digital Ocean, Vultr και άλλους παρόχους διακομιστών. Η τιμολόγηση που είδα απλώς έριξε το μυαλό μου. Στο Digital Ocean, για παράδειγμα, θα μπορούσα να αποκτήσω έναν διακομιστή με 2 GB μνήμης RAM για $ 20 ανά μήνα. Θα μπορούσα να χωρέσω 2 παρουσίες της μνήμης RAM 1 GB σε αυτό το μηχάνημα για $ 20 αντί για 100 $. Θα μπορούσα να μειώσω το κόστος μου κατά 4 φορές !

Υπάρχει μια παγίδα σε αυτήν τη φθηνότερη τιμή. Εάν δεν ξέρετε τι είναι αυτό, δεν έχετε διαβάσει την πρώτη παράγραφο, τον πόνο . Το πρόβλημα με τη χρήση αυτών των παρόχων διακομιστή barebones (σε αντίθεση με υπηρεσίες όπως το Heroku) είναι ότι πρέπει να κάνω όλη τη δουλειά που έκανε η Heroku για μένα.

Αναζητώντας τον Αιώνιο Σωτήρα

Ήξερα τι ήθελα: Χρειαζόμουν κάτι που να μετατρέπει έναν διακομιστή barebone (όπως AWS ή Digital Ocean) σε μια πλατφόρμα τύπου Heroku. Καθώς απέκτησα περισσότερη εμπειρία, ήξερα ότι πρέπει να υπάρχει κάποιο είδος ανοιχτού κώδικα ισοδύναμο με τον Heroku κάπου να κάθεται στο Github. Σίγουρα, είχα δίκιο. Δεν υπάρχει μόνο ένα, αλλά ένας τόνος από αυτούς.

Ωστόσο, αφού πέρασα μία ή δύο ώρες με το καθένα, συνειδητοποίησα ότι καμία από αυτές δεν ήταν η πραγματικά εύκολη λύση Heroku που έψαχνα. Μερικά ήταν εξαιρετικά βασικά και είχαν μόνο ένα λεπτό επίπεδο διασύνδεσης με λίγα ή καθόλου τεκμηρίωση. Μερικά ήταν εξαιρετικά προηγμένα με τόνους χαρακτηριστικών που δεν χρησιμοποίησαν. Και έχοντας αυτά τα χαρακτηριστικά απλώς σήμαινε μια περίπλοκη διαδικασία εγκατάστασης και συντήρησης. Έψαχνα για μια εύκολη αλλά αποτελεσματική λύση.

Χτίζοντας τον Αιώνιο Σωτήρα

Επειδή δεν είχα τύχη να βρω έναν καλό αντικαταστάτη για τον Heroku, αποφάσισα να φτιάξω ένα. Ευτυχώς, όλα τα εργαλεία που χρειαζόμουν ήταν διαθέσιμα δωρεάν - από το HTTP webserver nginx για αιτήματα δρομολόγησης, μέχρι το Docker για κοντέινερ εφαρμογών και ούτω καθεξής.

Μετά από μερικούς μήνες σχεδιασμού, σχεδιασμού, κατασκευής, διαγραφής και εκκίνησης από το μηδέν, το έργο ήταν έτοιμο.

Κυκλοφόρησα την αρχική έκδοση του CaptainDuckDuck τον Οκτώβριο του 2017. Έχουν περάσει περίπου δύο μήνες και υπήρξαν πολλά θετικά σχόλια. Μετά την πρώτη κυκλοφορία, η οποία αφορούσε κυρίως την ανάπτυξη εφαρμογών ιστού, η κοινότητα ζήτησε περισσότερα. Ήθελαν κυρίως τη δυνατότητα ανάπτυξης βάσεων δεδομένων και εφαρμογών με ένα κλικ. Μόλις αυτήν την εβδομάδα, κυκλοφόρησα την έκδοση 0.2.1 με όλες αυτές τις απαιτούμενες δυνατότητες :)

Τι κάνει

Ο στόχος μου ήταν να επιτρέψω σε έναν τυπικό προγραμματιστή εφαρμογών ιστού να δημιουργήσει μια παρουσία διακομιστή τύπου Heroku σε λιγότερο από 10 λεπτά. Είμαι στην ευχάριστη θέση να πω ότι το έκανα!

Απλά αντιγράφετε και επικολλάτε μια γραμμή στον διακομιστή σας και θα έχετε ένα δικό σας Heroku.

  • Μπορείτε να αναπτύξετε εφαρμογές ιστού (nodejs, php, κλπ…) με μια απλή εντολή ανάπτυξης CLI.
  • Μπορείτε να ενεργοποιήσετε το HTTPS κάνοντας απλώς κλικ στο κουμπί "Ενεργοποίηση HTTPS".
  • Μπορείτε να επιλέξετε από εφαρμογές / βάσεις δεδομένων με ένα κλικ, όπως WordPress, MongoDB, MySQL, Parse και άλλα.
  • Μπορείτε να συνδέσετε πολλούς διακομιστές για να δημιουργήσετε ένα σύμπλεγμα διακομιστών εισάγοντας μόνο τις διευθύνσεις IP και τα διαπιστευτήρια των διακομιστών στη διεπαφή χρήστη ιστού.

Το CaptainDuckDuck είναι γραμμένο στο NodeJS. Αλλά δεν είναι το NodeJS με το οποίο ασχολούνται οι τελικοί χρήστες σας. Οι κύριοι κινητήρες που χρησιμοποιεί ο Captain κάτω από την κουκούλα είναι οι nginx και docker Και τα δύο είναι από τα πιο αξιόπιστα, έτοιμα για παραγωγή εργαλεία. Το τμήμα NodeJS του CaptainDuckDuck χρησιμοποιείται μόνο κατά την ανάπτυξη μιας εφαρμογής στο διακομιστή. Θεωρητικά, μπορείτε να σκοτώσετε τη διαδικασία CaptainDuckDuck στον διακομιστή σας μετά την ανάπτυξη και οι χρήστες δεν θα παρατηρήσουν καμία αλλαγή.

Φροντιστήριο

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