Kugadzira CI / CD cheni uye otomatiki basa neDocker

Ndakanyora mawebhusaiti angu ekutanga mukupera kwema90s. Kare ikako zvaive nyore kuaisa muhurongwa hwekushanda. Paive neApache server pane imwe yakagovaniswa yekutambira, unogona kupinda mune iyi server kuburikidza neFTP nekunyora chimwe chinhu chakadai ftp://ftp.example.com. Ipapo iwe waifanira kuisa zita rako uye password uye kurodha mafaera kune server. Paive nenguva dzakasiyana, zvese zvaive nyore ipapo kupfuura ikozvino.

Kugadzira CI / CD cheni uye otomatiki basa neDocker

Mumakumi maviri emakore kubva ipapo, zvese zvachinja zvakanyanya. Mawebhusaiti ave akaomarara; anofanirwa kuunganidzwa asati aburitswa mukugadzira. Imwe sevha imwe chete yakava maseva mazhinji anomhanya kuseri kwezviyereso zvemutoro, uye kushandiswa kweshanduro yekudzora masisitimu kwakava kwakajairika.

Kune yangu yega purojekiti ndaiva neyakakosha configuration. Uye ndaiziva kuti ndaida kugona kuendesa saiti mukugadzirwa nekuita chiito chimwe chete: kunyora kodhi kubazi. master paGitHub. Uye zvakare, ndaiziva kuti kuitira kuti ndive nechokwadi chekushanda kwewebhu diki application, ndaisada kubata hombe Kubernetes cluster, kana kushandisa Docker Swarm tekinoroji, kana kuchengetedza boka remaseva ane pods, vamiririri uye mamwe marudzi ese ezvimwe. zvakaoma. Kuti ndikwanise kuzadzisa chinangwa chekuita basa rive nyore sezvinobvira, ndaifanira kujairana neCI/CD.

Kana iwe uine purojekiti diki (munyaya iyi, chirongwa cheNode.js) uye iwe ungade kuziva maitiro ekugadzira otomatiki kutumirwa kweprojekiti iyi, uchiona kuti izvo zvakachengetwa mudura zvinonyatsoenderana nezvinoshanda mukugadzira, ipapo ini funga kuti ungafarira chinyorwa ichi.

Zvinotarisirwa

Muverengi wechinyorwa ichi anotarisirwa kuve nekunzwisisa kwekutanga kwemutsara wekuraira uye kunyora Bash zvinyorwa. Mukuwedzera, iye achada maakaundi Travis C.I. и Docker hub.

Zvinangwa

Ini handisi kuzotaura kuti chinyorwa ichi chinogona kunzi "chidzidzo". Ichi chimwe chegwaro randinotaura pamusoro pezvandakadzidza uye kutsanangura maitiro anondikodzera kuyedza uye kuendesa kodhi mukugadzira, inoitwa mune imwe otomatiki pass.

Izvi ndizvo zvakaita mafambiro angu ebasa.

Yekodhi yakatumirwa kune chero repository bazi kunze master, zviito zvinotevera zvinoitwa:

  • Iyo purojekiti inovaka paTravis CI inotanga.
  • Yese unit, yekubatanidza uye yekupedzisira-kusvika-kumagumo bvunzo inoitwa.

Chete kodhi inowira mairi master, zvinotevera zvinoitwa:

  • Zvese zvataurwa pamusoro apa, plus...
  • Kuvaka mufananidzo weDocker wakavakirwa pane yazvino kodhi, marongero uye nharaunda.
  • Kuendesa mufananidzo kuDocker Hub.
  • Kubatanidza kune server yekugadzira.
  • Kuisa mufananidzo kubva kuDocker Hub kune server.
  • Kumisa mudziyo wezvino uye kutanga imwe nyowani zvichienderana nemufananidzo mutsva.

Kana iwe usingazive chero chinhu nezve Docker, mifananidzo uye midziyo, usanetseka. Ndichakuudzai zvose nezvazvo.

Chii chinonzi CI/CD?

Chidimburiko cheCI/CD chinomirira "kuenderera mberi kwekubatanidza / kuenderera mberi kwekutumira."

▍Kubatanidzwa kunopfuurira

Kuenderera mberi kubatanidzwa inzira iyo vagadziri vanoita kuzvipira kune iyo purojekiti main source code repository (kazhinji bazi. master) Panguva imwecheteyo, hutano hwekodhi hunosimbiswa kuburikidza nekuongorora kwemagetsi.

▍ Kuenderera mberi nekuendesa

Kuenderera mberi kutumirwa ndiko kunowanzo, otomatiki kutumira kwekodhi mukugadzira. Chikamu chechipiri cheCI / CD acronym dzimwe nguva chinoperengerwa se "kuenderera mberi kuburitsa." Izvi zvakangofanana ne "kuenderera mberi kwekuendesa", asi "kuenderera mberi kwekutumira" kunoreva kukosha kwekusimbisa shanduko usati watanga chirongwa chekuendesa purojekiti.

kutanga

App yandaishandisa kudzidza zvese izvi inonzi TakeNote. Iyi ipurojekiti yewebhu yandiri kushanda pairi, yakagadzirirwa kutora manotsi. Pakutanga ndakaedza kuita JAMStack-purojekiti, kana kungoita yekumberi-yekupedzisira application isina sevha, kuitira kutora mukana weyakajairwa yekutambira uye purojekiti yekuparadzira hunyanzvi hwainopa. Netlify. Sezvo kuomarara kwechikumbiro kwakawedzera, ndaida kugadzira chikamu chayo cheseva, izvo zvaireva kuti ndaizoda kugadzira yangu zano rekubatanidza otomatiki uye kutumira otomatiki kweprojekiti.

Mune yangu, iyo application ndeye Express sevha inomhanya munzvimbo yeNode.js, ichishandira peji-imwe React application uye inotsigira yakachengeteka server-side API. Ichi chivakwa chinotevera zano rinogona kuwanikwa mukati kupiwa Full stack authentication guide.

Ndakabvunza shamwari, ari mazvikokota otomatiki, ndikamubvunza zvandaifanira kuita kuti zvese zvishande sezvandaida. Akandipa zano rekuti otomatiki mafambiro ebasa anofanira kutaridzika sei, akatsanangurwa muchikamu cheZvinangwa chechinyorwa ichi. Kuve nezvinangwa izvi zvaireva kuti ndaifanira kufunga mashandisiro eDocker.

Docker

Docker chishandiso icho, nekuda kwechigadziko tekinoroji, inobvumira zvikumbiro kugovaniswa zviri nyore, kuendeswa uye kumhanya munzvimbo imwechete, kunyangwe iyo Docker chikuva pachayo ichimhanya munzvimbo dzakasiyana. Kutanga, ndaida kuisa maoko angu paDocker command line maturusi (CLI). Mirayiridzo Iyo Docker yekumisikidza gwaro haigone kunzi yakajeka uye inonzwisisika, asi kubva mairi unogona kudzidza kuti kuti utore yekutanga yekuisa nhanho, unofanirwa kurodha Docker Desktop (yeMac kana Windows).

Docker Hub ingangoita chinhu chimwe chete GitHub ye git repositories, kana registry npm yeJavaScript mapakeji. Iyi inzvimbo yepamhepo yekuchengetedza yeDocker mifananidzo. Izvi ndizvo zvinobatanidzwa neDocker Desktop.

Saka, kuti utange neDocker, unofanirwa kuita zvinhu zviviri:

Mushure meizvi, unogona kutarisa kana Docker CLI iri kushanda nekumhanyisa unotevera kuraira kutarisa iyo Docker vhezheni:

docker -v

Tevere, pinda muDocker Hub nekuisa zita rako rekushandisa uye password kana wabvunzwa:

docker login

Kuti ushandise Docker, iwe unofanirwa kunzwisisa pfungwa dzemifananidzo uye midziyo.

▍Mifananidzo

Mufananidzo chinhu chakaita sepurani ine mirairo yekuunganidza mudziyo. Iyi ndiyo isingachinjiki snapshot yemashandisirwo efaira system uye marongero. Vagadziri vanogona kugovera mifananidzo zviri nyore.

# Вывод сведений обо всех образах
docker images

Uyu murairo uchaburitsa tafura ine musoro unotevera:

REPOSITORY     TAG     IMAGE ID     CREATED     SIZE
---

Tevere tichatarisa mimwe mienzaniso yemirairo mune imwe fomati - kutanga pane murairo une chirevo, uyezve muenzaniso wezvainogona kubuda.

▍ Containers

Mugaba ipakeji inogoneka ine zvese zvinodiwa kuti umhanye application. Chikumbiro neiyi nzira inogara ichishanda zvakafanana, zvisinei neiyo hupfumi: munzvimbo iri yega uye munzvimbo imwechete. Icho chiripo ndechekuti zviitiko zvemufananidzo mumwechete zvinotangwa munzvimbo dzakasiyana.

# Перечисление всех контейнеров
docker ps -a
CONTAINER ID     IMAGE     COMMAND     CREATED     STATUS     PORTS     NAMES
---

▍Tags

Tagi chiratidzo cheimwe shanduro yemufananidzo.

▍Kureva nekukurumidza kuDocker mirairo

Heino mhedziso yemamwe anowanzo shandiswa Docker mirairo.

chikwata

Pfungwa

kushanda

docker kuvaka

Image

Kuvaka chifananidzo kubva kuDockerfile

docker tag

Image

Image tagging

docker mifananidzo

Image

Kunyora mifananidzo

docker runomhanya

Mudziyo

Kumhanyisa mudziyo unobva pamufananidzo

docker push

Image

Kuisa mufananidzo kune registry

docker dhonza

Image

Kurodha mufananidzo kubva kune registry

docker ps

Mudziyo

Kunyora midziyo

docker system prune

Mufananidzo/mudziyo

Kubvisa midziyo isina kushandiswa uye mifananidzo

▍Dockerfile

Ndinoziva kumhanyisa application yekugadzira munharaunda. Ndine Webpack kumisikidzwa yakagadzirirwa kuvaka yakagadzirira-yakagadzirwa React application. Tevere, ndine murairo unotanga Node.js yakavakirwa server pachiteshi 5000. Zvinoita seizvi:

npm i         # установка зависимостей
npm run build # сборка React-приложения
npm run start # запуск Node-сервера

Izvo zvinofanirwa kucherechedzwa kuti ini handina muenzaniso application yechinhu ichi. Asi pano, yekuyedza, chero yakapusa Node application ichaita.

Kuti ushandise mudziyo, iwe unozofanirwa kupa mirairo kuDocker. Izvi zvinoitwa kuburikidza nefaira inonzi Dockerfile, iri mumudzi wedhairekitori reprojekiti. Iyi faira, pakutanga, inoita seisinganzwisisike.

Asi zvariinazvo zvinongotsanangura, nemirairo yakakosha, chimwe chinhu chakafanana nekugadzirisa nzvimbo yekushanda. Heino mimwe yemirairo iyi:

  • KUBVA - Uyu murairo unotanga faira. Inotsanangura mufananidzo wepasi pakavakirwa mudziyo.
  • KOPA -Kukopa mafaera kubva kunzvimbo yemuno kuenda kumudziyo.
  • WORKDIR -Kuisa dhairekitori rekushanda kune inotevera mirairo.
  • RUN - Run mirairo.
  • EXPOSE - Zvirongwa zvePort.
  • ENTRYPOINT - Chiratidzo chemurairo unofanirwa kuurayiwa.

Dockerfile inogona kutaridzika seizvi:

# Загрузить базовый образ
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

Zvichienderana nemufananidzo wepasi waunosarudza, ungangoda kuisa zvimwe zvinotsamira. Icho chokwadi ndechekuti mamwe mabhesi emifananidzo (seNode Alpine Linux) anogadzirwa aine chinangwa chekuita kuti ive compact sezvinobvira. Nekuda kweizvozvo, vangave vasina zvimwe zvezvirongwa zvaunotarisira.

▍Kuvaka, kutara nekumhanyisa mudziyo

Kuungana kwepanzvimbo uye kuvhurwa kwegaba mushure mekunge taita Dockerfile, mabasa acho ari nyore. Usati wasundira chifananidzo kuDocker Hub, unofanirwa kuchiyedza munharaunda.

▍Musangano

Kutanga iwe unoda kuunganidza mufananidzo, kutsanangura zita uye, sarudzo, tag (kana tag isina kutaurwa, sisitimu yacho inongopa tag kumufananidzo. latest).

# Сборка образа
docker build -t <image>:<tag> .

Mushure mekumhanyisa uyu murairo, unogona kuona Docker ichivaka mufananidzo.

Sending build context to Docker daemon   2.88MB
Step 1/9 : FROM node:12-alpine
 ---> ...выполнение этапов сборки...
Successfully built 123456789123
Successfully tagged <image>:<tag>

Kuvaka kunogona kutora maminetsi akati wandei - zvese zvinoenderana nekuti vangani vanotsamira iwe. Kana iyo kuvaka kwapera, unogona kumhanya kuraira docker images uye tarisa tsanangudzo yemufananidzo wako mutsva.

REPOSITORY          TAG               IMAGE ID            CREATED              SIZE
<image>             latest            123456789123        About a minute ago   x.xxGB

▍ Tanga

Mufananidzo wakagadzirwa. Izvi zvinoreva kuti iwe unogona kumhanyisa mudziyo unoenderana nawo. Nekuti ini ndinoda kukwanisa kuwana iyo application inoshanda mumudziyo pa localhost:5000, ini, kuruboshwe rwevaviri 5000:5000 mumurairo unotevera wakaiswa 5000. Kurutivi rworudyi kune chiteshi chemidziyo.

# Запуск с использованием локального порта 5000 и порта контейнера 5000
docker run -p 5000:5000 <image>:<tag>

Iye zvino kuti mudziyo wagadzirwa uye uchimhanya, unogona kushandisa murairo docker ps kutarisa ruzivo nezve mudziyo uyu (kana unogona kushandisa murairo docker ps -a, iyo inoratidza ruzivo pamusoro pemidziyo yese, kwete kungomhanya chete).

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

Kana iwe zvino enda kukero localhost:5000 - iwe unogona kuona peji rekushandisa rinoshanda rinotaridzika chaizvo sepeji rekushandisa rinomhanya munzvimbo yekugadzira.

▍Kumaka uye kutsikisa

Kuti tishandise imwe yemifananidzo yakagadzirwa pane sevha yekugadzira, isu tinofanirwa kukwanisa kudhawunirodha mufananidzo uyu kubva kuDocker Hub. Izvi zvinoreva kuti iwe unofanirwa kutanga wagadzira repository yepurojekiti paDocker Hub. Mushure meizvi, tichava nenzvimbo yatinogona kutumira mufananidzo. Mufananidzo unofanirwa kupihwa zita kuti zita rawo ritange neDocker Hub yedu yekushandisa. Izvi zvinofanira kuteverwa nezita repository. Chero tag inogona kuiswa panoperera zita. Pazasi pane muenzaniso wekutumidza mifananidzo uchishandisa chirongwa ichi.

Iye zvino unogona kuvaka chifananidzo nezita idzva uye shandisa murairo docker push kuisundidzira kuDocker Hub repository.

docker build -t <username>/<repository>:<tag> .
docker tag <username>/<repository>:<tag> <username>/<repository>:latest
docker push <username>/<repository>:<tag>

# На практике это может выглядеть, например, так:
docker build -t user/app:v1.0.0 .
docker tag user/app:v1.0.0 user/app:latest
docker push user/app:v1.0.0

Kana zvese zvikafamba zvakanaka, chifananidzo chichave chiripo paDocker Hub uye chinogona kuiswa nyore kuseva kana kuendeswa kune vamwe vanogadzira.

Matanho anotevera

Parizvino takaona kuti chikumbiro, muchimiro cheDocker mudziyo, chiri kushanda munharaunda. Isu takaisa mudziyo kuDocker Hub. Zvose izvi zvinoreva kuti isu takatoita fambiro mberi yakanaka kusvika kuchinangwa chedu. Iye zvino tinoda kugadzirisa mimwe mibvunzo miviri:

  • Kumisikidza chishandiso cheCI chekuyedza uye kutumira kodhi.
  • Kumisikidza sevha yekugadzira kuitira kuti ikwanise kurodha nekumhanyisa kodhi yedu.

Muchiitiko chedu, tinoshandisa Travis C.I.. Sevha - DitigalOcean.

Zvinofanira kucherechedzwa kuti pano unogona kushandisa imwe musanganiswa webasa. Semuenzaniso, panzvimbo yeTravis CI, unogona kushandisa CircleCI kana Github Zviito. Uye panzvimbo yeDigitalOcean - AWS kana Linode.

Takasarudza kushanda naTravis CI, uye ini ndatova nechimwe chinhu chakagadzirirwa mubasa iri. Nokudaro, ikozvino ini ndichataura muchidimbu nezvekuti ndingagadzirira sei basa.

Travis C.I.

Travis CI chishandiso chekuyedza uye kutumira kodhi. Ini handingade kupinda mumatambudziko ekumisikidza Travis CI, sezvo purojekiti yega yega yakasiyana, uye izvi hazvizounze bhenefiti yakawanda. Asi ini ndichavhara izvo zvekutanga kuti iwe utange kana ukafunga kushandisa Travis CI. Kunyangwe iwe ukasarudza Travis CI, CircleCI, Jenkins, kana chimwe chinhu, nzira dzakafanana dzekugadzirisa dzichashandiswa kwese.

Kuti utange neTravis CI, enda ku projekiti webhusaiti uye gadzira account. Wobva wabatanidza Travis CI neGitHub account yako. Paunenge uchiseta sisitimu, iwe unozofanirwa kutsanangura iyo repository yaunoda kuita otomatiki basa uye nekugonesa kuwana kwairi. (Ini ndinoshandisa GitHub, asi ndine chokwadi chekuti Travis CI inogona kusanganisa neBitBucket, uye GitLab, uye mamwe masevhisi akafanana).

Nguva imwe neimwe Travis CI inotangwa, sevha inotangwa iyo inoita mirairo inotsanangurwa mufaira rekugadzirisa, kusanganisira kutumira matavi anoenderana repository.

▍ Hupenyu hwebasa

Travis CI yekumisikidza faira inonzi .travis.yml uye yakachengetwa mumudziyo weprojekiti, inotsigira pfungwa yezviitiko life cycle mabasa. Zviitiko izvi zvakanyorwa muhurongwa hwazvinoitika:

  • apt addons
  • cache components
  • before_install
  • install
  • before_script
  • script
  • before_cache
  • after_success или after_failure
  • before_deploy
  • deploy
  • after_deploy
  • after_script

▍Kuedza

Mune iyo faira yekumisikidza ini ndichagadzirisa iyo yemuno Travis CI server. Ndakasarudza Node 12 semutauro uye ndakaudza sisitimu kuti iise zvinotsamira zvinodikanwa kushandisa Docker.

Zvese zvakanyorwa mukati .travis.yml, ichaitwa kana zvikumbiro zvese zvekudhonza zvaitwa kumapazi ese enzvimbo, kunze kwekunge zvatsanangurwa. Ichi chinhu chinobatsira nekuti zvinoreva kuti isu tinogona kuyedza kodhi yese inouya mudura. Izvi zvinoita kuti uzive kana kodhi yacho yagadzirira kunyorerwa kubazi. master, uye kuti ichaputsa chirongwa chekuvaka chirongwa. Mukugadzirisa kwepasirese uku, ini ndinoisa zvese munharaunda, mhanyisa iyo Webpack dev server kumashure (ichi chinhu chekufamba kwangu kwebasa), uye mhanyisa bvunzo.

Kana iwe uchida kuti repository yako iratidze mabheji anoratidza kuvharwa kwebvunzo, pano Unogona kuwana mirairo mipfupi pakushandisa Jest, Travis CI uye Coveralls kuunganidza uye kuratidza ruzivo urwu.

Saka hezvino zviri mukati mefaira .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

Apa ndipo panopera zviito zvinoitwa kumapazi ese erepository uye zvekudhonza zvikumbiro.

▍ Deployment

Zvichienderana nefungidziro yekuti ese otomatiki bvunzo akapedza zvinobudirira, isu tinogona, izvo zvingasarudzika, kuendesa kodhi kune yekugadzira server. Sezvo isu tichida kuita izvi chete kune kodhi kubva kubazi master, tinopa hurongwa hwakakodzera mirairo mumagadziro ekutumira. Usati waedza kushandisa kodhi yatichazotarisa inotevera mupurojekiti yako, ndinoda kukuyambira kuti unofanirwa kuve uine script chaiyo inodaidzwa kutumirwa.

deploy:
  # Собрать Docker-контейнер и отправить его на Docker Hub
  provider: script
  script: bash deploy.sh
  on:
    branch: master

Iyo deployment script inogadzirisa matambudziko maviri:

  • Vaka, tag uye tumira mufananidzo kuDocker Hub uchishandisa CI chishandiso (munyaya yedu, Travis CI).
  • Kuisa chifananidzo pane sevha, kumisa chigadziko chekare uye kutanga chitsva (munyaya yedu, sevha inomhanya paDigitalOcean platform).

Kutanga, iwe unofanirwa kuseta otomatiki maitiro ekuvaka, kumaka, uye kusundira mufananidzo kuDocker Hub. Izvi zvese zvakafanana nezvatakatoita nemaoko, kunze kwekuti isu tinoda zano rekupa akasiyana ma tag kumifananidzo uye otomatiki logins. Ndakaomerwa nedzimwe ruzivo rweiyo deployment script, senge tagging zano, login, SSH kiyi encoding, SSH yekubatanidza kumisikidzwa. Asi rombo rakanaka mukomana wangu akanaka kwazvo nebash, sezvimwe zvinhu zvakawanda. Akandibatsira kunyora script iyi.

Saka, chikamu chekutanga chechinyorwa chiri kurodha chifananidzo kuDocker Hub. Izvi zviri nyore kuita. Chirongwa chekumaka chandakashandisa chinosanganisira kubatanidza git hash uye git tag, kana iripo. Izvi zvinovimbisa kuti tag yakasarudzika uye inoita kuti zvive nyore kuziva gungano payakavakirwa. DOCKER_USERNAME и DOCKER_PASSWORD ndiwo mashandisirwo enzvimbo yevashandisi anogona kusetwa uchishandisa iyo Travis CI interface. Travis CI inozogadzirisa data rakadzama kuitira kuti risawira mumaoko asiri iwo.

Heino chikamu chekutanga che script deploy.sh.

#!/bin/sh
set -e # Остановить скрипт при наличии ошибок

IMAGE="<username>/<repository>"                             # Образ Docker
GIT_VERSION=$(git describe --always --abbrev --tags --long) # Git-хэш и теги

# Сборка и тегирование образа
docker build -t ${IMAGE}:${GIT_VERSION} .
docker tag ${IMAGE}:${GIT_VERSION} ${IMAGE}:latest

# Вход в Docker Hub и выгрузка образа
echo "${DOCKER_PASSWORD}" | docker login -u "${DOCKER_USERNAME}" --password-stdin
docker push ${IMAGE}:${GIT_VERSION}

Kuti chikamu chechipiri chescript chichava chii chinoenderana zvachose nekuti uri kushandisa muiti upi uye kuti kubatana kwairi kwakarongwa sei. Mune yangu, sezvo ini ndichishandisa Digital Ocean, ini ndinoshandisa mirairo yekubatanidza kune server doctl. Paunenge uchishanda neAWS, iyo yekushandisa ichashandiswa aws, zvichingoenda zvakadaro.

Kugadzika sevha hakuna kunyanya kuoma. Saka, ini ndakagadzira droplet zvichienderana nemufananidzo wepasi. Izvo zvinofanirwa kucherechedzwa kuti iyo system yandakasarudza inoda imwe-nguva yekumisikidzwa kweDocker uye imwe-nguva yemanyorero kuvhurwa kweDocker. Ndakashandisa Ubuntu 18.04 kuisa Docker, saka kana uri kushandisa Ubuntu kuita zvimwe chete, unogona kungotevera. izvi simple guide.

Ini handisi kutaura pano nezve yakananga mirairo yebasa, sezvo chikamu ichi chinogona kusiyana zvakanyanya mumakesi akasiyana. Ini ndichangopa hurongwa hwekuita huchaitwa mushure mekubatanidza kuburikidza neSSH kune server iyo iyo purojekiti ichaiswa:

  • Isu tinofanirwa kutsvaga chigaba chiri kushanda parizvino tochimisa.
  • Ipapo iwe unofanirwa kuvhura mudziyo mutsva kumashure.
  • Iwe unozofanirwa kuseta sevha yenzvimbo chiteshi kuti 80 - izvi zvinokutendera kuti uise saiti pane kero senge example.com, pasina kutsanangura chiteshi, pane kushandisa kero yakafanana example.com:5000.
  • Chekupedzisira, unofanirwa kudzima zvese midziyo yekare nemifananidzo.

Heino kuenderera kwe script.

# Найти 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

Zvimwe zvinhu zvekuteerera

Zvinogoneka kuti kana iwe ukabatanidza kune sevha kuburikidza neSSH kubva kuTravis CI, iwe uchaona yambiro iyo inokudzivirira kuti urege kuenderera mberi nekuisa sezvo sisitimu ichimirira mhinduro yemushandisi.

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)?

Ndakadzidza kuti kiyi yetambo inogona kuvharidzirwa mu base64 kuitira kuti ichengetedze muchimiro iyo inogona kushandiswa nayo zviri nyore uye nekuvimbika. Padanho rekuisa, unogona kudhidha kiyi yeruzhinji woinyorera kufaira known_hosts kuti ubvise kukanganisa kuri pamusoro.

echo <public key> | base64 # выводит <публичный ключ, закодированный в base64>

Mukuita, uyu murairo unogona kutaridzika seizvi:

echo "123.45.67.89 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAklOUpkDHrfHY17SbrmTIpNLTGK9Tjom/BWDSU
GPl+nafzlHDTYW7hdI4yZ5ew18JH4JW9jbhUFrviQzM7xlELEVf4h9lFX5QVkbPppSwg0cda3
Pbv7kOdJ/MTyBlWXFCR+HAo3FXRitBqxiX1nKhXpHAZsMciLq8V6RjsNAQwdsdMFvSlVK/7XA
t3FaoJoAsncM1Q9x5+3V0Ww68/eIFmb1zuUFljQJKprrX88XypNDvjYNby6vw/Pb0rwert/En
mZ+AW4OZPnTPI89ZPmVMLuayrD2cE86Z/il8b+gw3r3+1nKatmIkjn2so1d01QraTlMqVSsbx
NrRFi9wrf+M7Q== [email protected]" | base64

Uye hezvino izvo zvazvinoburitsa - base64 encoded tambo:

MTIzLjQ1LjY3Ljg5IHNzaC1yc2EgQUFBQUIzTnphQzF5YzJFQUFBQUJJd0FBQVFFQWtsT1Vwa0RIcmZIWTE3U2JybVRJcE5MVEdLOVRqb20vQldEU1UKR1BsK25hZnpsSERUWVc3aGRJNHlaNWV3MThKSDRKVzlqYmhVRnJ2aVF6TTd4bEVMRVZmNGg5bEZYNVFWa2JQcHBTd2cwY2RhMwpQYnY3a09kSi9NVHlCbFdYRkNSK0hBbzNGWFJpdEJxeGlYMW5LaFhwSEFac01jaUxxOFY2UmpzTkFRd2RzZE1GdlNsVksvN1hBCnQzRmFvSm9Bc25jTTFROXg1KzNWMFd3NjgvZUlGbWIxenVVRmxqUUpLcHJyWDg4WHlwTkR2allOYnk2dncvUGIwcndlcnQvRW4KbVorQVc0T1pQblRQSTg5WlBtVk1MdWF5ckQyY0U4NlovaWw4YitndzNyMysxbkthdG1Ja2puMnNvMWQwMVFyYVRsTXFWU3NieApOclJGaTl3cmYrTTdRPT0geW91QGV4YW1wbGUuY29tCg==

Heino murairo wataurwa pamusoro apa

install:
  - echo < публичный ключ, закодированный в base64> | base64 -d >> $HOME/.ssh/known_hosts

Iyo nzira imwechete inogona kushandiswa nekiyi yakavanzika paunenge uchigadzira chinongedzo, nekuti ungangoda kiyi yakavanzika kuti uwane sevha. Paunenge uchishanda nekiyi, iwe unongoda kuve nechokwadi kuti yakachengetedzwa zvakachengeteka muTravis CI nharaunda inosiyana uye kuti haina kuratidzwa chero kupi.

Chimwe chinhu chekucherechedza ndechekuti ungangoda kumhanyisa script yese yekuendesa semutsara mumwe, semuenzaniso - ne doctl. Izvi zvingada kushanda nesimba.

doctl compute ssh <droplet> --ssh-command "все команды будут здесь && здесь"

TLS/SSL uye Mutoro Kuyera

Mushure mekunge ndaita zvese zvataurwa pamusoro apa, dambudziko rekupedzisira randakasangana naro nderekuti sevha yanga isina SSL. Sezvo ini ndichishandisa sevha yeNode.js, kuitira kumanikidza kushanda reverse proxy Nginx uye Let's Encrypt, iwe unofanirwa kutarisa zvakanyanya.

Ini ndanga ndisingade kuita zvese izvi SSL kumisikidzwa nemaoko, saka ini ndangogadzira yekuremedza balancer uye ndakarekodha zvinyorwa zvayo muDNS. Panyaya yeDigitalOcean, semuenzaniso, kugadzira otomatiki-yekuzvisaina chitupa pane inoremerwa balancer iri nyore, yemahara uye nekukurumidza maitiro. Iyi nzira ine bhenefiti yakawedzerwa inoita kuti zvive nyore kwazvo kumisikidza SSL pane akawanda maseva anomhanya kuseri kwekuremerwa balancer kana zvichidikanwa. Izvi zvinobvumira maseva pachawo kuti asa "funga" nezve SSL zvachose, asi panguva imwechete shandisa chiteshi semazuva ese. 80. Saka kumisikidza SSL pane chiyero chemutoro zviri nyore uye zviri nyore pane dzimwe nzira dzekumisa SSL.

Iye zvino unogona kuvhara ese madoko pane sevha anogamuchira anouya akabatana - kunze kwechiteshi 80, yaishandiswa kutaurirana neinotakura zvinhu, uye chiteshi 22 yeSSH. Nekuda kweizvozvo, kuedza kuwana zvakananga sevha pane chero zviteshi kunze kweaya maviri kunokundikana.

Migumisiro

Mushure mekunge ndaita zvese zvandaitaura nezvazvo mune ino chinyorwa, kana iyo Docker chikuva kana pfungwa dzeotomatiki dzeCI / CD cheni dzakandityisa zvakare. Ini ndakakwanisa kuseta inoenderera yekubatanidza ketani, panguva iyo iyo kodhi inoedzwa isati yaenda mukugadzirwa uye iyo kodhi inongoiswa paserver. Izvi zvese zvichiri zvitsva kwandiri, uye ndine chokwadi chekuti pane nzira dzekuvandudza yangu otomatiki mafambiro uye kuita kuti inyatsoita. Saka kana mune mazano panyaya iyi, ndapota ndizivisei. kwandiri ziva. Ndinovimba chinyorwa ichi chakakubatsira mukuedza kwako. Ndinoda kutenda kuti mushure mekuiverenga, wakadzidza zvakawanda sezvandakadzidza uku uchifunga zvese zvandakataura nezvazvo.

PS Mune yedu marketplace pane mufananidzo Docker, iyo inogona kuiswa nekudzvanya kumwe chete. Unogona kutarisa kushanda kwemidziyo pa VPS. Vese vatengi vatsva vanopihwa mazuva matatu ekuedzwa pasina muripo.

Vanodiwa vaverengi! Iwe unoshandisa CI/CD tekinoroji mumapurojekiti ako?

Kugadzira CI / CD cheni uye otomatiki basa neDocker

Source: www.habr.com

Voeg