Hogyan építettem egy cserét a Heroku számára, és 4X-el csökkentettem a platform költségeit

Ha közvetlenül a vállalkozáshoz szeretne eljutni, ugorjon a Mit csinál szakaszra.

2019 UPDATE : A CaptainDuckDuck most márkanévre vált és CapRover néven terjesztésre kerül. Lásd: //github.com/caprover/caprover

A fájdalom

Pár évvel ezelőtt elkezdtem szerveroldali nyelvekkel játszani - főleg a Node JS-szel. Néhány napos küzdelem után telepíthettem egy Hello World alkalmazást a sajátomra localhost. Nagyon szórakoztató volt, amíg el nem döntöttem, hogy megteszem a következő lépést, és az egyik projektemet az internetre telepítem, hogy az emberek hozzáférhessenek hozzá egy nyilvános URL-ről, például //www.some-awesome-web-app.com.

Ekkor rájöttem, hogy van egy teljesen új technológia, amelyet meg kell tanulnom a webalkalmazás telepítéséhez. Tudnom kellett, hogyan készítsek eszközöket és telepítési folyamatokat, hogyan működik az nginx útválasztás és az SSL, és még sok minden mást ...

Mondanom sem kell, hogy a bevetés fájdalmas élmény volt. Rájöttem, hogy majdnem ugyanannyi időt kellett töltenem, amelyet kódolással töltöttem a kód szerverre történő telepítésével, a függőségek felépítésével, a függőségek telepítésével és a szerver karbantartásával. Egyszerűen hülyeség! Időt kellett töltenem ugyanazokkal a dolgokkal, újra és újra.

Inkább azzal töltöm az időmet, hogy kódoljak egy olyan terméket / szolgáltatást, amelyet a felhasználók használni fognak, nem pedig órákat és napokat töltök a HTTPS beállításával. Végül is a HTTPS-en nem különbözik az interneten található több százezer HTTPS-webhelytől. Egyszerűbb módon kellett lennie.

Az ideiglenes Megváltó

Ennek a fájdalmas tapasztalatnak akkor lett vége, amikor rábukkantam a Heroku-ra, amely készen áll az alkalmazások telepítésére. Azt mondtam magamnak: „Remek! Ennek kell lennie egy telepítési platformnak! ” Imádtam, hogyan elvonták az egyszerű felület mögött rejlő összes összetettséget. Egyetlen kattintással létrehozhat egy alkalmazást, és megnyomhatja. Azonnal elérhetővé válik nyilvános URL-címmel. 30 perc inaktivitás után ingyen áll rendelkezésre, kis alvásköltséggel. A dolgok nem lehetnek jobbak!

Minden jó volt. Amíg nem vettem részt olyan projektekben, amelyek folyamatos 24 órás végrehajtást igényeltek (olvasó bot). Fizetett szolgáltatásra kellett frissítenem. Nem volt túl rossz, mindössze havi 7 dollár. De a dolgok megőrültek, miután egyre több alkalmazást kezdtem telepíteni. Néhányan személyes projektek voltak, és mások üzleti vonatkozásúak, amelyekhez 512 MB-nál (szabad korlát) meghaladó RAM-ra vagy 24 órás folyamatos rendelkezésre állásra volt szükség.

Nem tartott sokáig, amíg rájöttem, hogy 100 dollárt + fizetek Heroku-nak. Csak nem volt értelme. Néhány olvasói robotom, amelyek 24 órás rendelkezésre állást igényelnek, csak 128 MB RAM-ot fogyasztanak. Mégis, fizetnem kellett a fel nem használt RAM-ért is. Nem tudtam megosztani a RAM / CPU-t az alkalmazások között. A magas RAM-használattal rendelkező alkalmazások esetén még rosszabbá válik. Ha van olyan alkalmazásom, amelyhez 1 GB RAM szükséges - havonta minimum 50 dollárt kell fizetnem.

Remélve, hogy jobb ajánlatokat találok, elkezdtem vizsgálni az AWS, a Digital Ocean, a Vultr és más szerver szolgáltatókat. Az árak, amelyeket láttam, egyszerűen felrobbantották a fejem. A Digital Ocean-en például havi 20 dollárért megkaphattam egy 2 GB RAM-mal rendelkező szervert. Az 1 GB RAM-ból 2 példányt el tudtam helyezni abban a gépben 100 dollár helyett 20 dollárért. 4x csökkenteni tudnám a költségeimet !

Van egy fogása ennek az olcsóbb árnak. Ha nem tudja, mi ez, akkor nem olvasta el az első bekezdést, a Fájdalmat . Ezeknek a barebones szerver-szolgáltatóknak a használata (szemben a Heroku szolgáltatásokkal) az a probléma, hogy el kell végeznem mindazt a munkát, amit Heroku értem végzett.

Az Örök Megváltót keresve

Tudtam, mit akarok: Szükségem van valamire, ami egy barebone szervert (például AWS vagy Digital Ocean) Heroku-szerű platformká alakít. Ahogy újabb tapasztalatokat szereztem, tudtam, hogy valahol a Githubon ülve kell lennie valamiféle nyílt forráskódúnak, mint Heroku. Valóban igazam volt. Nem csak egy van, hanem rengeteg.

Miután azonban eltöltöttem egy-két órát mindkettővel, rájöttem, hogy egyikük sem az a valóban Heroku-könnyű megoldás, amit kerestem. Néhányan nagyon alapszintűek voltak, és csak vékony interfészrétegük volt, kevés dokumentáció nélkül. Néhányan rendkívül fejlettek, rengeteg olyan funkcióval, amelyek nem használtak. Ezen funkciók megléte pedig egyszerűen bonyolult telepítési folyamatot és karbantartást jelentett. Könnyű, mégis előadói megoldást kerestem.

Az örök Megváltó építése

Mivel nem volt szerencsém jó cserét találni Heroku számára, úgy döntöttem, hogy építek egyet. Szerencsére minden szükséges eszköz ingyenesen elérhető volt - a HTTP webszervertől az nginx-től a kérelmek átirányításához, a Dockerig az alkalmazások konténerezéséig és így tovább.

Néhány hónapos tervezés, tervezés, felépítés, törlés és a semmiből való indulást követően a projekt készen állt.

2017. októberében adtam ki a CaptainDuckDuck eredeti verzióját. Csak körülbelül két hónap telt el, és rengeteg pozitív visszajelzés érkezett. Az első kiadás után, amely főleg webalkalmazások telepítésére irányult, a közösség többet kért. Elsősorban adatbázisok és egy kattintásos alkalmazások telepítését akarták. Éppen ezen a héten adtam ki a 0.2.1 verziót mindezekkel a kért funkciókkal :)

Mit csinal

Célom az volt, hogy lehetővé tegyem egy tipikus webalkalmazás-fejlesztő számára, hogy kevesebb mint 10 perc alatt létrehozhasson egy Heroku-szerű szerverpéldányt. Örömmel mondhatom, hogy sikerült!

Egyszerűen átmásol és beilleszt egy sort a szerverére, és megkapja a saját Heroku-ját.

  • Webalkalmazásokat (nodejs, php stb.) Telepíthet egy egyszerű CLI telepítési paranccsal.
  • A „HTTPS engedélyezése” gombra kattintva engedélyezheti a HTTPS-t.
  • Választhat egy kattintással rendelkező alkalmazások / adatbázisok közül, mint például a WordPress, a MongoDB, a MySQL, a Parse és mások.
  • Több kiszolgálót is összekapcsolhat a kiszolgálófürt létrehozásához, csak megadva a kiszolgálók IP-címeit és hitelesítő adatait a webes felhasználói felületen.

A CaptainDuckDuck a NodeJS-be van írva. De a végfelhasználók nem a NodeJS-szel foglalkoznak. A fő motorok, amelyeket a kapitány a motorháztető alatt használ, a nginx és a dokkoló. Mindkettő a legmegbízhatóbb, gyártásra kész eszközök közé tartozik. A CaptainDuckDuck NodeJS részét csak akkor kell használni, amikor egy alkalmazást telepít a kiszolgálóra. Elméletileg telepítés után megölheti a szerveren található CaptainDuckDuck folyamatot, és a felhasználók nem vesznek észre semmilyen változást.

Bemutató

Ha teljes útmutatót szeretne, javasoljuk, hogy nézze meg a video oktatóanyagot, és olvassa el a Github oldalt. A videó az első kiadással készült, így nincsenek adatbázisa és egy kattintásos alkalmazásai. De ez jó kiindulópont.