Docker: Node.js
Kaip naudoti ir diegti Node.js programą su Docker
👋 Sveiki atvykę į Stackhero dokumentaciją!
Stackhero siūlo paruoštą naudoti Docker cloud CaaS (Containers as a Service) sprendimą, kuris suteikia daugybę privalumų, įskaitant:
- Lengvai diekite savo konteinerius į gamybą su paprastu
docker-compose up.- Pritaikomas domeno vardas su HTTPS apsauga (pavyzdžiui, https://api.jusu-imone.com, https://www.jusu-imone.com, https://backoffice.jusu-imone.com).
- Optimali veikla ir tvirta apsauga naudojant privačią ir dedikuotą VM.
- Paprasti atnaujinimai vienu paspaudimu.
Taupykite laiką ir supaprastinkite savo gyvenimą: tereikia 5 minučių išbandyti Stackhero Docker CaaS cloud hosting sprendimą ir diegti savo konteinerius į gamybą!
Šis vadovas suteikia tvirtą pagrindą kurti Node.js programą ir greitai bei lengvai ją diegti į gamybą.
Išankstinių žinių apie Docker nereikia. Viskas paruošta sklandžiai patirčiai užtikrinti; jums tereikia, kad Docker būtų įdiegtas jūsų kompiuteryje.
Ši dokumentacija skirta tiek pradedantiesiems, tiek patyrusiems vartotojams, norintiems diegti Node.js programą naudojant modernias, skalabilias technologijas be nereikalingų komplikacijų.
Pagrindinės šio sprendimo savybės:
- 💪 Lengvas nustatymas su minimaliomis pastangomis
- 🐳 Docker naudojimas tiek kūrimo, tiek gamybos aplinkose
- 🔄 Automatinis Node.js perkrovimas keičiant kodą naudojant nodemon
- 🚀 Vieno komandos diegimas į gamybą
- 🔒 TLS sertifikatų valdymas saugiam HTTPS šifravimui
- 🚧 Palaikymas testavimo ir priešgamybiniams platformoms
- 🧱 Modulinė ir skalabilinė architektūra
Pradžia
Jei Docker dar nėra įdiegtas jūsų kompiuteryje, galite jį atsisiųsti iš Docker oficialios svetainės. Norėdami patikrinti, ar Docker veikia tinkamai, atidarykite terminalą ir paleiskite docker version. Turėtumėte matyti versijos informaciją be klaidų.
Įdiegę Docker, klonuokite šią boilerplate saugyklą:
git clone https://github.com/stackhero-io/nodejsWithDockerGettingStarted/
cd nodejsWithDockerGettingStarted
Tada paleiskite kūrimo platformą vykdydami make development-start arba peržiūrėkite visas galimas komandas su make help.
Kūrimo platforma
Norėdami paleisti kūrimo platformą, vykdykite:
make development-start
Ši komanda sukuria Docker atvaizdą, jį paleidžia ir vykdo dev skriptą, apibrėžtą my-app/package.json (tai prilygsta npm run dev vykdymui).
Šiame pavyzdyje sukuriama paprasta REST API naudojant Express. API galite peržiūrėti naršydami į http://localhost:5000. Puslapyje turėtų būti rodomas "Hello World".
Tada atidarykite failą my-app/src/app.js savo mėgstamame IDE ir pakeiskite šią eilutę:
res.send('Hello World');
Pakeiskite ją į:
res.send('Updated!');
Išsaugokite failą. Node.js kodas automatiškai persikraus, o atnaujinus http://localhost:5000 bus atspindėtas atnaujintas API atsakas.
Sveikiname - dabar turite visiškai veikiančią kūrimo platformą!
Įdiegti paketus
Jei reikia įdiegti papildomus paketus, galite vykdyti make development-shell, kad pasiektumėte konteinerio apvalkalą. Viduje naudokite NPM su npm install <package> arba Yarn su yarn add <package>, kad įdiegtumėte norimus paketus.
Naudoti esamą Node.js projektą
Jei turite esamą Node.js projektą, kurį norite integruoti su Docker, atlikite šiuos veiksmus:
-
Sukurkite naują katalogą pavadinimu
my-appsavo projekte. -
Perkelkite visus projekto failus į
my-appkatalogą, išskyrus.gitignoreir.gitfailus. -
Nukopijuokite
docker,secretsirMakefileiš boilerplate į savo projekto šaknies katalogą. -
Redaguokite
.gitignorefailą savo projekte ir pridėkite šias eilutes:node_modules/ secrets/*.production secrets/*.staging
Atidarytas prievadas
Šis boilerplate numato, kad jūsų programa klausosi 5000 prievade. Jei norite kito prievado, galite redaguoti docker/docker-compose.development.yml failą ir tada iš naujo paleisti aplinką su make development-start.
Pasirinkti konkrečią Node.js versiją
Jei norite nurodyti kitą Node.js versiją, atlikite šiuos veiksmus:
- Atidarykite failą
docker/my-app.dockerfile, kuris apibrėžia Docker atvaizdą jūsų programai. - Suraskite pirmą eilutę, kuri skaito
FROM node:<version>-alpine. - Pakeiskite
<version>į pasirinktą Node.js versiją. Rekomenduojama naudoti ilgalaikės palaikymo (LTS) versiją. Naujausią LTS versiją galite patikrinti Node.js svetainėje. Pavyzdžiui, norėdami naudoti naujausią LTS versiją (šiuo metu 22), atnaujinkite eilutę įFROM node:22-alpine. Jei norite konkretaus versijos numerio, galite naudoti kažką panašaus įFROM node:22.13.0-alpine. - Išsaugokite savo pakeitimus Dockerfile.
Aplinkos kintamieji
Nustatykite aplinkos kintamuosius kūrimo platformai faile secrets/my-app.development.
Gamybai naudokite failą secrets/my-app.production.
Neįtraukite
secrets/my-app.productionfailo į savo Git saugyklą! Šis failas turi jautrią informaciją ir pagal numatytuosius nustatymus ignoruojamas boilerplate.gitignore, kad būtų išvengta atsitiktinio dalijimosi.
Vietinių failų saugojimas
Jei jūsų Node.js programa turi saugoti failus (pvz., vartotojų įkėlimus), apsvarstykite galimybę naudoti objektų saugojimo paslaugą, tokią kaip MinIO. Objektų saugojimo paslauga padeda jūsų programai sklandžiai augti, sumažinant galimas problemas.
Jei norite saugoti failus vietoje, visada naudokite Docker tūrį. Failų saugojimas tiesiogiai konteineryje gali sukelti duomenų praradimą. Šis boilerplate suteikia tūrį, montuojamą /persistent, kad failai būtų saugiai saugomi.
Niekada nesaugokite nuolatinių duomenų už
/persistentkatalogo ribų, nebent sukūrėte pasirinktinius tūrius ir esate tikri dėl konfigūracijos. Failų saugojimas už/persistentribų sukels duomenų praradimą!
Pridėti testavimo aplinką
Galite lengvai modifikuoti šį boilerplate, kad pridėtumėte testavimo aplinką. Norėdami tai padaryti:
- Sukurkite
docker/docker-compose.production.ymlkopiją ir pavadinkite jądocker/docker-compose.staging.yml. Šis failas apibrėžia konteinerius ir konfigūraciją jūsų testavimo aplinkai. - Sukurkite
secrets/my-app.stagingfailą, kuriame yra bet kokia jautri informacija, reikalinga testavimui, pvz., duomenų bazės slaptažodžiai ar API raktai. Makefilesuraskite skyrių pavadinimu "Staging platform" ir iškomentuokite jį.
Galiausiai, vykdykite make help, kad pamatytumėte naujas testavimo komandas, kurios dabar yra prieinamos.
Gamybos platforma
Jei dar neturite Stackhero for Docker paslaugos, galite ją lengvai sukurti iš savo Stackhero prietaisų skydelio. Ji bus aktyvuota per maždaug 2 minutes.
Jei esate naujas Stackhero vartotojas, galite išbandyti Docker konteinerių debesų talpinimą nemokamai mėnesį.
Paruošti pirmąjį diegimą į gamybą
Prieš diegdami savo programą į gamybą, turite paruošti keletą konfigūracijos failų:
- Nukopijuokite
secrets/global.production.exampleįsecrets/global.production. - Redaguokite
secrets/global.productionir pakeiskite<XXXXXX>.stackhero-network.comį savo Docker paslaugos pagrindinį vardą iš savo Stackhero prietaisų skydelio. - Nukopijuokite
secrets/my-app.production.exampleįsecrets/my-app.production. - Redaguokite
secrets/my-app.productionir įveskite savo prisijungimo duomenis. - Atnaujinkite
docker/docker-compose.production.yml, pakeisdami<XXXXXX>.stackhero-network.comį savo Docker paslaugos pagrindinį vardą.
Diegti į gamybą
Diegimas į gamybą yra paprastas: vykdykite:
make production-deploy
Ši komanda sukuria Docker konteinerį, perkelia jūsų projekto duomenis ir siunčia juos į jūsų Docker paslaugą gamyboje. Atidarykite naršyklę ir naršykite į savo Docker paslaugos pagrindinį vardą (pvz., https://<XXXXXX>.stackhero-network.com). Turėtumėte matyti, kaip jūsų REST API atsako "Hello World".
Taip pat galite naudoti
make production, kuris diegia jūsų konteinerius ir rodo realaus laiko žurnalus.
Rodyti žurnalus
Norėdami stebėti savo gamybos aplinką arba spręsti problemas, galite peržiūrėti savo žurnalus naudodami šias komandas:
- Norėdami transliuoti tiesioginius žurnalus, vykdykite:
make production-logs-live - Norėdami gauti visus saugomus žurnalus, vykdykite:
make production-logs - Norėdami gauti konkrečios dienos žurnalus (pakeiskite
YYYY-MM-DDnorima data), vykdykite:make production-logs | grep "YYYY-MM-DD"
Pritaikyti domenų vardus
Jei norite naudoti kitą domeno vardą vietoj https://<XXXXXX>.stackhero-network.com, Stackhero for Docker integruoja Traefik, kad supaprastintų domenų valdymą. Traefik tvarko HTTP maršrutizavimą ir TLS šifravimą (HTTPS) už jus.
Štai keletas pavyzdžių, kaip pritaikyti savo domenų vardus:
-
Norėdami aptarnauti
api.my-company.comper savo konteinerįmy-app5000 prievade su TLS šifravimu, atnaujinkitedocker/docker-compose.production.ymlfailą, pakeisdamilabelsskyrių:labels: - "traefik.enable=true" # Įjungti Traefik, kad nukreiptų srautą į šį konteinerį - "traefik.http.routers.my-app.rule=Host(`api.my-company.com`)" # Apibrėžti pagrindinį vardą - "traefik.http.routers.my-app.tls.certresolver=letsencrypt" # Naudoti letsencrypt TLS sertifikatams - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Nurodyti 5000 prievadą -
Norėdami aptarnauti
my-company.comper savo konteinerįmy-app5000 prievade ir nukreipti visas užklausas išwww.my-company.comįmy-company.com, atnaujinkitelabelsskyrių tame pačiame faile:labels: - "traefik.enable=true" - "traefik.http.routers.my-app.rule=Host(`my-company.com`) || Host(`www.my-company.com`)" # Įtraukti abu domenus - "traefik.http.routers.my-app.tls.certresolver=letsencrypt" - "traefik.http.services.my-app.loadbalancer.server.port=5000" # Nurodyti 5000 prievadą # Nukreipti www.my-company.com į my-company.com: - "traefik.http.routers.my-app.middlewares=redirect-www" - "traefik.http.middlewares.redirect-www.redirectregex.regex=^https://www.my-company.com/(.*)" - "traefik.http.middlewares.redirect-www.redirectregex.replacement=https://my-company.com/$${1}" - "traefik.http.middlewares.redirect-www.redirectregex.permanent=true"
Nepamirškite sukonfigūruoti DNS
my-company.comirwww.my-company.com, kad kiekvienas nurodytų kaip CNAME į jūsų Docker paslaugąhttps://<XXXXXX>.stackhero-network.com.