Tsim CI / CD saw thiab automating ua hauj lwm nrog Docker
Kuv tau sau kuv thawj lub vev xaib hauv 90s lig. Tom qab ntawd nws yooj yim heev los muab lawv tso rau hauv kev ua haujlwm. Muaj Apache server ntawm qee qhov sib koom hosting, koj tuaj yeem nkag mus rau hauv lub server ntawm FTP los ntawm kev sau qee yam zoo li ftp://ftp.example.com. Tom qab ntawd koj yuav tsum sau koj lub npe thiab lo lus zais thiab upload cov ntaub ntawv mus rau lub server. Muaj ntau lub sijhawm sib txawv, txhua yam yooj yim dua li tam sim no.
Hauv ob xyoo caum txij thaum ntawd los, txhua yam tau hloov pauv ntau. Cov vev xaib tau dhau los ua nyuaj; lawv yuav tsum tau sib sau ua ntej tso tawm rau hauv ntau lawm. Ib tus neeg rau zaub mov tau dhau los ua ntau lub servers khiav tom qab load balancers, thiab kev siv cov tshuab tswj hwm tau dhau los ua qhov qub.
Rau kuv tus kheej qhov project kuv muaj ib tug tshwj xeeb configuration. Thiab kuv paub tias kuv xav tau lub peev xwm los siv lub xaib hauv kev tsim khoom los ntawm kev ua ib qho nkaus xwb: sau cov lej rau ib ceg master ntawm GitHub. Tsis tas li ntawd, kuv paub tias txhawm rau txhawm rau ua haujlwm ntawm kuv daim ntawv thov lub vev xaib me me, kuv tsis xav tswj hwm Kubernetes pawg loj, lossis siv Docker Swarm thev naus laus zis, lossis tuav lub nkoj ntawm cov servers nrog cov pods, tus neeg sawv cev thiab txhua yam ntawm lwm yam. nyuaj. Txhawm rau ua tiav lub hom phiaj ntawm kev ua haujlwm yooj yim li sai tau, kuv yuav tsum paub txog CI / CD.
Yog tias koj muaj ib txoj haujlwm me me (qhov no, qhov project Node.js) thiab koj xav paub yuav ua li cas thiaj li siv tau qhov kev xa tawm ntawm qhov project no, thaum ua kom ntseeg tau tias dab tsi yog khaws cia hauv qhov chaw cia khoom raws nraim qhov ua haujlwm hauv kev tsim khoom, ces kuv xav tias tej zaum koj yuav txaus siab rau tsab xov xwm no.
Yam yuavtsum tau kawm uantej
Tus nyeem ntawv ntawm tsab xov xwm no yuav tsum muaj kev nkag siab yooj yim ntawm kab hais kom ua thiab sau ntawv Bash. Tsis tas li ntawd, nws yuav xav tau nyiaj Travis IB ΠΈ Docker hub.
Cov hom phiaj
Kuv yuav tsis hais tias tsab xov xwm no tuaj yeem raug hu ua "tutorial". Qhov no yog ntau dua ntawm cov ntaub ntawv uas kuv tham txog qhov kuv tau kawm thiab piav qhia txog cov txheej txheem uas haum rau kuv rau kev sim thiab xa cov lej rau kev tsim khoom, ua tiav hauv ib qho kev ua haujlwm.
Qhov no yog qhov kuv txoj haujlwm ua tiav.
Rau cov cai tshaj tawm rau txhua ceg repository tshwj tsis yog master, cov kev ua hauv qab no tau ua:
Qhov project tsim ntawm Travis CI pib.
Tag nrho cov chav tsev, kev sib koom ua ke thiab qhov kawg-rau-kawg xeem yog ua.
Tsuas yog rau code uas poob rau hauv master, cov hauv qab no tau ua:
Txhua yam hais saum toj no, ntxiv rau ...
Tsim cov duab Docker raws li cov cai tam sim no, kev teeb tsa thiab ib puag ncig.
Deploying the image to Docker Hub.
Kev sib txuas rau cov khoom siv ntau lawm.
Uploading ib daim duab los ntawm Docker Hub rau lub server.
Tso tseg lub thawv tam sim no thiab pib ib qho tshiab raws li daim duab tshiab.
Yog tias koj paub tsis muaj dab tsi txog Docker, cov duab thiab cov thawv, tsis txhob txhawj. Kuv mam qhia nej txhua tus paub.
CI/CD yog dab tsi?
Cov ntawv luv CI / CD sawv cev rau "kev koom ua ke txuas ntxiv / kev xa mus txuas ntxiv."
β Kev sib koom ua ke tsis tu ncua
Kev sib koom ua ke tsis tu ncua yog ib txoj hauv kev uas cov neeg tsim khoom tau cog lus rau qhov project lub ntsiab cai qhov chaw cia khoom (feem ntau yog ib ceg master). Nyob rau tib lub sij hawm, qhov zoo ntawm cov cai yog ua kom ntseeg tau los ntawm kev ntsuas automated.
β Kev xa tawm mus tas li
Kev xa tawm mus tas li yog qhov nquag, automated deployment code rau hauv ntau lawm. Qhov thib ob ntawm CI / CD acronym yog qee zaum sau tias "kev xa mus txuas ntxiv." Qhov no yog qhov pib zoo ib yam li "kev xa mus tsis tu ncua", tab sis "kev xa mus tas li" txhais tau tias yuav tsum tau ua kom paub meej cov kev hloov pauv ua ntej pib txoj haujlwm xa tawm.
Pib
Lub app kuv siv los kawm tag nrho cov no yog hu ua TakeNote. Nov yog lub vev xaib uas kuv tab tom ua haujlwm, tsim los sau ntawv. Thaum xub thawj kuv sim ua JAMStack-txoj haujlwm, lossis tsuas yog daim ntawv thov pem hauv ntej uas tsis muaj server, txhawm rau ua kom zoo dua ntawm tus qauv hosting thiab lub peev xwm xa tawm qhov project uas nws muaj Netlify. Raws li qhov nyuaj ntawm daim ntawv thov loj hlob, kuv xav tau los tsim nws cov neeg rau zaub mov, uas txhais tau hais tias kuv yuav tsum tau tsim kuv tus kheej lub tswv yim rau kev sib koom ua ke thiab kev xa tawm ntawm qhov project.
Hauv kuv qhov xwm txheej, daim ntawv thov yog Express server khiav hauv Node.js ib puag ncig, ua haujlwm rau ib nplooj ntawv React daim ntawv thov thiab txhawb kev ruaj ntseg server-sab API. Qhov no architecture ua raws li lub tswv yim uas tuaj yeem pom hauv muab Full stack authentication phau ntawv qhia.
Kuv sab laj nrog phooj ywg, uas yog tus kws tshaj lij automation, thiab nug nws seb kuv yuav tsum ua dab tsi los ua kom nws ua haujlwm txhua yam kuv xav tau. Nws muab kuv lub tswv yim ntawm qhov kev ua haujlwm automated yuav tsum zoo li cas, tau piav qhia hauv Cov Hom Phiaj tshooj ntawm kab lus no. Muaj cov hom phiaj no txhais tau tias kuv yuav tsum paub seb yuav siv Docker li cas.
docker
Docker yog ib qho cuab yeej uas, ua tsaug rau kev siv tshuab ntim khoom, tso cai rau cov ntawv thov kom yooj yim faib, xa tawm thiab khiav hauv tib qhov chaw, txawm tias Docker platform nws tus kheej khiav hauv ib puag ncig sib txawv. Ua ntej, kuv yuav tsum tau txais kuv txhais tes ntawm Docker hais kom ua kab cov cuab yeej (CLI). kev qhia Phau ntawv qhia kev teeb tsa Docker tsis tuaj yeem hu ua qhov tseeb thiab nkag siab, tab sis los ntawm nws koj tuaj yeem kawm tau tias txhawm rau ua thawj kauj ruam, koj yuav tsum rub tawm Docker Desktop (rau Mac lossis Windows).
Docker Hub yog roughly tib yam li GitHub rau git repositories, los yog npe npm rau JavaScript pob. Nov yog qhov chaw cia khoom online rau Docker cov duab. Nov yog qhov Docker Desktop txuas rau.
Yog li, txhawm rau pib nrog Docker, koj yuav tsum ua ob yam:
Kuv paub yuav ua li cas khiav daim ntawv thov kev tsim khoom hauv zos. Kuv muaj Webpack configuration tsim los tsim ib daim ntawv thov React npaj txhij. Tom ntej no, kuv muaj cov lus txib uas pib lub Node.js raws li server ntawm qhov chaw nres nkoj 5000. Nws zoo li no:
npm i # ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ
npm run build # ΡΠ±ΠΎΡΠΊΠ° React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
npm run start # Π·Π°ΠΏΡΡΠΊ Node-ΡΠ΅ΡΠ²Π΅ΡΠ°
Nws yuav tsum raug sau tseg tias kuv tsis muaj daim ntawv thov piv txwv rau cov khoom siv no. Tab sis ntawm no, rau kev sim, txhua daim ntawv thov Node yooj yim yuav ua.
Txhawm rau siv lub thawv, koj yuav tsum tau muab cov lus qhia rau Docker. Qhov no yog ua los ntawm cov ntaub ntawv hu ua Dockerfile, nyob rau hauv lub hauv paus directory ntawm qhov project. Cov ntaub ntawv no, thaum xub thawj, zoo nkaus li incomprehensible.
Tab sis dab tsi nws muaj tsuas yog piav qhia, nrog rau cov lus txib tshwj xeeb, qee yam zoo ib yam li kev teeb tsa ib puag ncig ua haujlwm. Nov yog qee cov lus txib no:
LOS NTAWM - Cov lus txib no pib ib cov ntaub ntawv. Nws qhia txog lub hauv paus duab uas lub thawv tsim.
COPY - Luam cov ntaub ntawv los ntawm qhov chaw hauv zos mus rau lub thawv.
KEV PAB CUAM - Teem lub npe ua haujlwm rau cov lus txib hauv qab no.
ENTRYPOINT - Kev taw qhia ntawm cov lus txib kom ua tiav.
Dockerfile tej zaum yuav zoo li no:
# ΠΠ°Π³ΡΡΠ·ΠΈΡΡ Π±Π°Π·ΠΎΠ²ΡΠΉ ΠΎΠ±ΡΠ°Π·
FROM node:12-alpine
# Π‘ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΡΠ°ΠΉΠ»Ρ ΠΈΠ· ΡΠ΅ΠΊΡΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ app/
COPY . app/
# ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ app/ Π² ΡΠΎΠ»ΠΈ ΡΠ°Π±ΠΎΡΠ΅ΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ
WORKDIR app/
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ (ΠΊΠΎΠΌΠ°Π½Π΄Π° npm ci ΠΏΠΎΡ ΠΎΠΆΠ° npm i, Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ)
RUN npm ci --only-production
# Π‘ΠΎΠ±ΡΠ°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ΅ React-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π΄Π»Ρ ΠΏΡΠΎΠ΄Π°ΠΊΡΠ½Π°
RUN npm run build
# ΠΡΠΎΡΠ»ΡΡΠΈΠ²Π°ΡΡ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΉ ΠΏΠΎΡΡ
EXPOSE 5000
# ΠΠ°ΠΏΡΡΡΠΈΡΡ Node-ΡΠ΅ΡΠ²Π΅Ρ
ENTRYPOINT npm run start
Nyob ntawm lub hauv paus duab koj xaiv, tej zaum koj yuav tau rau nruab ntxiv dependencies. Qhov tseeb yog tias qee cov duab hauv paus (xws li Node Alpine Linux) tau tsim nrog lub hom phiaj ntawm kev ua kom lawv compact li sai tau. Yog li ntawd, lawv yuav tsis muaj qee qhov kev pab cuam uas koj xav tau.
β Kev tsim, sau npe thiab khiav lub thawv
Kev sib dhos hauv zos thiab tso tawm lub thawv yog tom qab peb muaj Dockerfile, cov dej num yog heev yooj yim. Ua ntej koj thawb daim duab mus rau Docker Hub, koj yuav tsum sim nws hauv zos.
β Sib dhos
Ua ntej koj yuav tsum sau duab, qhia lub npe thiab, xaiv tau, lub cim (yog tias tsis tau teev tseg, lub kaw lus yuav cia li muab ib daim ntawv rau daim duab latest).
Tom qab khiav cov lus txib no, koj tuaj yeem saib Docker tsim cov duab.
Sending build context to Docker daemon 2.88MB
Step 1/9 : FROM node:12-alpine
---> ...Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ°ΠΏΠΎΠ² ΡΠ±ΠΎΡΠΊΠΈ...
Successfully built 123456789123
Successfully tagged <image>:<tag>
Kev tsim yuav siv sijhawm li ob peb feeb - nws tag nrho yog nyob ntawm seb koj muaj pes tsawg qhov kev vam meej. Thaum qhov tsim tiav, koj tuaj yeem khiav cov lus txib docker images thiab saib cov lus piav qhia ntawm koj daim duab tshiab.
REPOSITORY TAG IMAGE ID CREATED SIZE
<image> latest 123456789123 About a minute ago x.xxGB
β Launch
Cov duab tau tsim. Qhov no txhais tau tias koj tuaj yeem khiav lub thawv raws li nws. Vim kuv xav kom muaj peev xwm nkag tau rau hauv daim ntawv thov khiav hauv lub thawv ntawm localhost:5000, kuv, ntawm sab laug ntawm khub 5000:5000 nyob rau hauv cov lus txib tom ntej ntsia 5000. Ntawm sab xis yog lub thawv ntim khoom.
Tam sim no lub thawv tau tsim thiab khiav, koj tuaj yeem siv cov lus txib docker ps saib cov ntaub ntawv hais txog lub thawv no (lossis koj tuaj yeem siv cov lus txib docker ps -a, uas qhia cov ntaub ntawv hais txog tag nrho cov ntim khoom, tsis yog khiav ib leeg xwb).
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
987654321234 <image> "/bin/sh -c 'npm runβ¦" 6 seconds ago Up 6 seconds 0.0.0.0:5000->5000/tcp stoic_darwin
Yog koj tam sim no mus rau qhov chaw nyob localhost:5000 - koj tuaj yeem pom ib nplooj ntawv ntawm daim ntawv thov khiav uas zoo ib yam li nplooj ntawv ntawm daim ntawv thov khiav hauv qhov chaw tsim khoom.
β Tag thiab tshaj tawm
Txhawm rau siv ib qho ntawm cov duab tsim ntawm cov neeg siv khoom tsim khoom, peb yuav tsum muaj peev xwm rub tawm cov duab no los ntawm Docker Hub. Qhov no txhais tau tias koj thawj zaug yuav tsum tau tsim ib lub chaw cia khoom rau qhov project ntawm Docker Hub. Tom qab no, peb yuav muaj qhov chaw uas peb tuaj yeem xa daim duab. Daim duab yuav tsum tau hloov npe kom nws lub npe pib nrog peb Docker Hub username. Qhov no yuav tsum tau ua raws li lub npe ntawm lub chaw cia khoom. Txhua daim ntawv tuaj yeem muab tso rau tom kawg ntawm lub npe. Hauv qab no yog ib qho piv txwv ntawm naming dluab siv lub tswv yim no.
Tam sim no koj tuaj yeem tsim cov duab nrog lub npe tshiab thiab khiav cov lus txib docker push thawb nws mus rau Docker Hub repository.
Yog tias txhua yam mus zoo, cov duab yuav muaj nyob rau ntawm Docker Hub thiab tuaj yeem yooj yim muab tso rau hauv server lossis xa mus rau lwm tus tsim tawm.
Cov kauj ruam tom ntej
Txog tam sim no peb tau txheeb xyuas tias daim ntawv thov, nyob rau hauv daim ntawv ntawm Docker thawv, tab tom khiav hauv zos. Peb tau xa lub thawv rau Docker Hub. Tag nrho qhov no txhais tau hais tias peb twb tau ua tiav zoo heev rau peb lub hom phiaj. Tam sim no peb yuav tsum daws ob lo lus nug ntxiv:
Teeb tsa CI cuab yeej rau kev sim thiab xa cov lej.
Teeb tsa cov neeg rau zaub mov ntau lawm kom nws tuaj yeem rub tawm thiab khiav peb cov cai.
Nws yuav tsum raug sau tseg tias ntawm no koj tuaj yeem siv lwm cov kev pabcuam ua ke. Piv txwv li, tsis yog Travis CI, koj tuaj yeem siv CircleCI lossis Github Actions. Thiab tsis yog DigitalOcean - AWS lossis Linode.
Peb tau txiav txim siab ua haujlwm nrog Travis CI, thiab kuv twb muaj qee yam teeb tsa hauv qhov kev pabcuam no. Yog li ntawd, tam sim no kuv yuav tham luv luv txog yuav ua li cas npaj nws rau kev ua haujlwm.
Travis IB
Travis CI yog ib qho cuab yeej rau kev sim thiab xa cov lej. Kuv tsis xav mus rau qhov tsis sib xws ntawm kev teeb tsa Travis CI, vim tias txhua qhov haujlwm tshwj xeeb, thiab qhov no yuav tsis muaj txiaj ntsig ntau. Tab sis kuv mam li npog cov hauv paus kom koj pib yog tias koj txiav txim siab siv Travis CI. Txawm hais tias koj xaiv Travis CI, CircleCI, Jenkins, lossis lwm yam, cov txheej txheem kev teeb tsa zoo sib xws yuav raug siv txhua qhov chaw.
Txhawm rau pib nrog Travis CI, mus rau ua tsaug thiab tsim ib tus account. Tom qab ntawd koom nrog Travis CI nrog koj tus lej GitHub. Thaum teeb tsa lub kaw lus, koj yuav tsum qhia meej lub chaw cia khoom uas koj xav kom ua haujlwm automate thiab pab kom nkag mus rau nws. (Kuv siv GitHub, tab sis kuv paub tseeb tias Travis CI tuaj yeem koom nrog BitBucket, thiab GitLab, thiab lwm yam kev pabcuam zoo sib xws).
Txhua lub sij hawm Travis CI pib, tus neeg rau zaub mov tau pib, ua tiav cov lus txib uas tau teev tseg hauv cov ntaub ntawv teeb tsa, suav nrog kev xa tawm cov chaw khaws khoom sib txuas.
β Kev ua haujlwm lub neej
Travis CI configuration file hu ua .travis.yml thiab khaws cia rau hauv qhov project root directory, txhawb lub tswv yim ntawm cov xwm txheej lub neej voj voog hauj lwm. Cov xwm txheej no tau teev nyob rau hauv qhov kev txiav txim uas lawv tshwm sim:
apt addons
cache components
before_install
install
before_script
script
before_cache
after_success ΠΈΠ»ΠΈ after_failure
before_deploy
deploy
after_deploy
after_script
β Kev Xeem
Nyob rau hauv cov ntaub ntawv configuration kuv yuav configure lub zos Travis CI server. Kuv xaiv Node 12 ua hom lus thiab hais rau lub kaw lus kom txhim kho cov kev vam meej uas yuav tsum tau siv Docker.
Txhua yam uas tau teev tseg hauv .travis.yml, yuav raug tua thaum txhua qhov kev thov rub tawm mus rau txhua ceg ntawm lub chaw cia khoom, tshwj tsis yog tias tau teev tseg. Qhov no yog qhov muaj txiaj ntsig zoo vim tias nws txhais tau tias peb tuaj yeem sim tag nrho cov lej tuaj rau hauv qhov chaw cia khoom. Qhov no ua rau koj paub yog tias tus lej tau npaj los sau rau ntawm ceg. master, thiab seb nws puas yuav tawg qhov project tsim txheej txheem. Hauv qhov kev teeb tsa thoob ntiaj teb no, kuv nruab txhua yam hauv zos, khiav Webpack dev server hauv keeb kwm yav dhau (qhov no yog qhov tshwj xeeb ntawm kuv qhov kev ua haujlwm), thiab khiav kev xeem.
Yog tias koj xav kom koj lub chaw cia khoom tso saib cov paib qhia txog qhov kev xeem, S, SΡS, Koj tuaj yeem nrhiav cov lus qhia luv luv ntawm kev siv Jest, Travis CI thiab Coveralls los sau thiab tso tawm cov ntaub ntawv no.
Yog li ntawm no yog cov ntsiab lus ntawm cov ntaub ntawv .travis.yml:
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ·ΡΠΊ
language: node_js
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π²Π΅ΡΡΠΈΡ Node.js
node_js:
- '12'
services:
# ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΡΡΡΠΎΠΊΡ Docker
- docker
install:
# Π£ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ²
- npm ci
before_script:
# ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΠ²Π΅Ρ ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ²
- npm run dev &
script:
# ΠΠ°ΠΏΡΡΡΠΈΡΡ ΡΠ΅ΡΡΡ
- npm run test
Qhov no yog qhov uas cov kev nqis tes ua uas tau ua rau txhua ceg ntawm qhov chaw cia khoom thiab rau rub cov lus thov xaus.
β Kev xa tawm
Raws li qhov kev xav tias tag nrho cov kev xeem automated tiav tiav, peb tuaj yeem, uas yog xaiv tau, xa cov cai rau cov neeg siv khoom ntau lawm. Txij li thaum peb xav ua qhov no tsuas yog rau code los ntawm ceg master, peb muab cov lus qhia tsim nyog rau hauv qhov chaw xa tawm. Ua ntej koj sim siv cov cai uas peb yuav saib tom ntej hauv koj qhov project, kuv xav ceeb toom koj tias koj yuav tsum muaj tsab ntawv tiag tiag hu rau kev xa tawm.
Qhov thib ob ntawm tsab ntawv yuav yog nyob ntawm seb koj siv tus tswv tsev twg thiab qhov kev sib txuas rau nws tau teeb tsa li cas. Hauv kuv qhov xwm txheej, txij li thaum kuv siv Digital Ocean, kuv siv cov lus txib los txuas rau lub server doctl. Thaum ua haujlwm nrog AWS, cov khoom siv hluav taws xob yuav raug siv aws, thiab lwm yam.
Kev teeb tsa lub server tsis yog qhov nyuaj tshwj xeeb. Yog li, kuv teeb tsa lub tee dej raws li lub hauv paus duab. Nws yuav tsum tau muab sau tseg tias lub kaw lus kuv xaiv yuav tsum tau ib-lub sij hawm phau ntawv installation ntawm Docker thiab ib zaug xwb phau ntawv pib ntawm Docker. Kuv siv Ubuntu 18.04 rau nruab Docker, yog li yog tias koj tseem siv Ubuntu los ua tib yam, koj tuaj yeem ua raws. qhov no yooj yim qhia.
Kuv tsis tau tham ntawm no txog cov lus txib tshwj xeeb rau kev pabcuam, vim qhov no tuaj yeem sib txawv heev hauv ntau qhov sib txawv. Kuv tsuas yog yuav muab cov phiaj xwm dav dav uas yuav tsum tau ua tom qab txuas ntawm SSH rau cov neeg rau zaub mov uas qhov project yuav raug xa mus:
Peb yuav tsum nrhiav lub thawv uas tam sim no khiav thiab nres nws.
Tom qab ntawd koj yuav tsum tso lub thawv tshiab rau hauv keeb kwm yav dhau.
Koj yuav tsum tau teeb tsa lub server lub chaw nres nkoj hauv zos rau 80 - qhov no yuav tso cai rau koj nkag mus rau lub xaib ntawm qhov chaw nyob zoo li example.com, tsis hais qhov chaw nres nkoj, tsis yog siv qhov chaw nyob zoo li example.com:5000.
# ΠΠ°ΠΉΡΠΈ ID ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅Π³ΠΎ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
CONTAINER_ID=$(docker ps | grep takenote | cut -d" " -f1)
# ΠΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΡΠ°ΡΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ, Π·Π°ΠΏΡΡΡΠΈΡΡ Π½ΠΎΠ²ΡΠΉ, ΠΎΡΠΈΡΡΠΈΡΡ ΡΠΈΡΡΠ΅ΠΌΡ
docker stop ${CONTAINER_ID}
docker run --restart unless-stopped -d -p 80:5000 ${IMAGE}:${GIT_VERSION}
docker system prune -a -f
Tej yam uas yuav tsum tau them rau
Nws muaj peev xwm hais tias thaum koj txuas mus rau tus neeg rau zaub mov ntawm SSH los ntawm Travis CI, koj yuav pom cov lus ceeb toom uas yuav tiv thaiv koj los ntawm kev txuas ntxiv nrog kev teeb tsa vim tias lub kaw lus yuav tos tus neeg siv cov lus teb.
The authenticity of host '<hostname> (<IP address>)' can't be established.
RSA key fingerprint is <key fingerprint>.
Are you sure you want to continue connecting (yes/no)?
Kuv tau kawm tias txoj hlua tseem ceeb tuaj yeem nkag mus rau hauv base64 thiaj li yuav txuag tau nws hauv daim ntawv uas nws tuaj yeem yooj yim thiab ntseeg tau ua haujlwm nrog. Nyob rau theem kev teeb tsa, koj tuaj yeem txiav txim siab tus yuam sij pej xeem thiab sau rau hauv cov ntaub ntawv known_hosts txhawm rau tshem tawm qhov yuam kev saum toj no.
Tib txoj hauv kev tuaj yeem siv nrog tus yuam sij ntiag tug thaum tsim kev sib txuas, vim koj yuav xav tau tus yuam sij ntiag tug nkag mus rau lub server. Thaum ua haujlwm nrog tus yuam sij, koj tsuas yog yuav tsum xyuas kom meej tias nws tau khaws cia ruaj ntseg hauv Travis CI ib puag ncig hloov pauv thiab nws tsis pom nyob qhov twg.
Lwm qhov yuav tsum nco ntsoov yog tias koj yuav tsum tau khiav tag nrho cov ntawv xa mus ua ib kab, piv txwv li - nrog doctl. Qhov no yuav xav tau kev siv zog ntxiv.
Tom qab kuv tau ua txhua yam uas tau hais los saum no, qhov teeb meem kawg kuv ntsib yog tias lub server tsis muaj SSL. Txij li thaum kuv siv Node.js server, txhawm rau yuam mus ua hauj lwm thim rov qab npe Nginx thiab Cia Encrypt, koj yuav tsum tau tinker ntau.
Kuv yeej tsis xav ua txhua qhov kev teeb tsa SSL no manually, yog li kuv nyuam qhuav tsim cov khoom sib npaug thiab sau nws cov ntsiab lus hauv DNS. Nyob rau hauv cov ntaub ntawv ntawm DigitalOcean, piv txwv li, tsim ib qho kev rov pib dua nws tus kheej daim ntawv pov thawj ntawm lub load balancer yog ib txoj kev yooj yim, dawb thiab ceev. Txoj hauv kev no muaj qhov txiaj ntsig ntxiv uas nws ua rau nws yooj yim heev los teeb tsa SSL ntawm ntau lub servers khiav tom qab lub load balancer yog tias xav tau. Qhov no tso cai rau cov servers lawv tus kheej tsis txhob "xav" txog SSL txhua, tab sis tib lub sijhawm siv qhov chaw nres nkoj li niaj zaus 80. Yog li kev teeb tsa SSL ntawm lub load balancer yog yooj yim dua thiab yooj yim dua li lwm txoj hauv kev teeb tsa SSL.
Tam sim no koj tuaj yeem kaw tag nrho cov chaw nres nkoj ntawm lub server uas lees txais cov khoom sib txuas - tsuas yog qhov chaw nres nkoj 80, siv los sib txuas lus nrog lub load balancer, thiab qhov chaw nres nkoj 22 rau SSH. Yog li ntawd, kev sim nkag mus ncaj qha rau cov neeg rau zaub mov ntawm txhua qhov chaw nres nkoj uas tsis yog ob qho no yuav ua tsis tiav.
Cov txiaj ntsim tau los
Tom qab kuv tau ua txhua yam kuv tau tham txog hauv cov khoom no, tsis yog Docker platform lossis cov ntsiab lus ntawm kev siv CI / CD chains ntshai kuv ntxiv lawm. Kuv tuaj yeem teeb tsa kev sib txuas txuas ntxiv mus, thaum lub sijhawm kuaj cov lej ua ntej nws nkag mus rau hauv kev tsim khoom thiab cov cai tau txais kev xa tawm ntawm lub server. Qhov no yog txhua yam tseem tshiab rau kuv, thiab kuv paub tseeb tias muaj txoj hauv kev los txhim kho kuv cov haujlwm ua haujlwm tsis siv neeg thiab ua kom nws ua haujlwm zoo dua. Yog li yog tias koj muaj lus nug txog qhov teeb meem no, thov qhia rau kuv paub. rau kuv paub. Kuv vam tias tsab xov xwm no tau pab koj hauv koj txoj haujlwm. Kuv xav ntseeg tias tom qab nyeem nws, koj tau kawm ntau npaum li kuv tau kawm thaum pom txhua yam uas kuv tau tham txog hauv nws.
PS Ntawm peb khw muaj ib daim duab docker, uas tuaj yeem ntsia tau rau hauv ib qho nias. Koj tuaj yeem tshawb xyuas cov kev ua haujlwm ntawm cov ntim khoom ntawm VPS. Txhua tus neeg siv khoom tshiab tau muab 3 hnub ntawm kev kuaj dawb dawb.
Nyob zoo nyeem! Koj puas siv CI / CD thev naus laus zis hauv koj cov haujlwm?