ProHoster > Blogi > antaminen > CI/CD-ketjun luominen ja työn automatisointi Dockerin avulla
CI/CD-ketjun luominen ja työn automatisointi Dockerin avulla
Kirjoitin ensimmäiset verkkosivustoni 90-luvun lopulla. Silloin niiden saattaminen toimintakuntoon oli erittäin helppoa. Jossain jaetussa hosting-tilassa oli Apache-palvelin, johon voit kirjautua FTP:n kautta kirjoittamalla jotain vastaavaa ftp://ftp.example.com. Sitten sinun piti kirjoittaa nimesi ja salasanasi ja ladata tiedostot palvelimelle. Oli erilaisia aikoja, kaikki oli silloin yksinkertaisempaa kuin nyt.
Sen jälkeen kuluneiden kahden vuosikymmenen aikana kaikki on muuttunut paljon. Verkkosivustot ovat monimutkaistuneet, ne on koottava ennen tuotantoon pääsemistä. Yhdestä palvelimesta tuli useita kuormituksen tasaajien takana olevia palvelimia, ja versionhallintajärjestelmien käytöstä tuli yleistä.
Henkilökohtaista projektiani varten minulla oli erityinen kokoonpano. Ja tiesin, että tarvitsen mahdollisuuden ottaa sivusto käyttöön tuotannossa tekemällä vain yhden toiminnon: kirjoittamalla koodia haaraan master GitHubissa. Lisäksi tiesin, että varmistaakseni pienen verkkosovellukseni toiminnan en halunnut hallita valtavaa Kubernetes-klusteria, käyttää Docker Swarm -tekniikkaa tai ylläpitää palvelimia, joissa on podeja, agentteja ja kaikenlaista muuta. monimutkaisuus. Saavuttaakseni tavoitteen tehdä työstä mahdollisimman helppoa, minun piti tutustua CI/CD:hen.
Jos sinulla on pieni projekti (tässä tapauksessa Node.js-projekti) ja haluat tietää, kuinka tämän projektin käyttöönotto automatisoidaan varmistaen samalla, että arkistoon tallennetut tiedot täsmäävät tuotannossa toimivan kanssa, minä luulet, että saatat olla kiinnostunut tästä artikkelista.
Edellytykset
Tämän artikkelin lukijalta odotetaan perustiedot komentoriviltä ja Bash-skriptien kirjoittamisesta. Lisäksi hän tarvitsee tilit Travis CI и Docker-napa.
tavoitteet
En sano, että tätä artikkelia voidaan ehdottomasti kutsua "opetusohjelmaksi". Tämä on enemmänkin dokumentti, jossa kerron oppimistani ja kuvailen minulle sopivaa prosessia testaamiseen ja koodin käyttöönottoon tuotantoon yhdellä automaattisella läpikäynnillä.
Tähän minun työni päättyi.
Koodille, joka on lähetetty mihin tahansa arkiston haaraan paitsi master, suoritetaan seuraavat toiminnot:
Projektin rakentaminen Travis CI:lle alkaa.
Kaikki yksikkö-, integraatio- ja päästä päähän -testit suoritetaan.
Vain koodille, joka osuu master, suoritetaan seuraava:
Kaikki edellä mainittu, plus...
Docker-kuvan rakentaminen nykyisen koodin, asetusten ja ympäristön perusteella.
Kuvan isännöinti Docker Hubissa.
Yhteys tuotantopalvelimeen.
Kuvan lataaminen Docker Hubista palvelimelle.
Pysäytetään nykyinen säilö ja aloitetaan uusi uuden kuvan perusteella.
Jos et tiedä Dockerista, kuvista ja konteista mitään, älä huoli. Kerron sinulle siitä kaiken.
Mikä on CI/CD?
Lyhenne CI/CD tarkoittaa "jatkuvaa integrointia/jatkuvaa käyttöönottoa".
▍Jatkuva integrointi
Jatkuva integrointi on prosessi, jossa kehittäjät tekevät sitoumuksia projektin päälähdekoodivarastoon (yleensä haaraan master). Samalla koodin laatu varmistetaan automaattisella testauksella.
▍Jatkuva käyttöönotto
Jatkuva käyttöönotto on koodin toistuvaa, automaattista käyttöönottoa tuotantoon. CI/CD-lyhenteen toinen osa on joskus kirjoitettu "jatkuvaksi toimitukseksi". Tämä on periaatteessa sama kuin "jatkuva käyttöönotto", mutta "jatkuva toimitus" tarkoittaa, että muutokset on vahvistettava manuaalisesti ennen projektin käyttöönottoprosessin aloittamista.
Aloittaminen
Sovellus, jolla opin tämän kaiken, on nimeltään Pistä muistiin. Tämä on verkkoprojekti, jonka parissa työskentelen ja joka on suunniteltu muistiinpanojen tekemiseen. Ensin yritin tehdä JAMSstack-projekti tai pelkkä käyttöliittymäsovellus ilman palvelinta, jotta voit hyödyntää sen tarjoamia vakiohosting- ja projektinkäyttöominaisuuksia netlify. Sovelluksen monimutkaisuuden kasvaessa jouduin luomaan sen palvelinosan, mikä tarkoitti sitä, että minun piti muotoilla oma strategiani automatisoitua integrointia ja projektin automaattista käyttöönottoa varten.
Minun tapauksessani sovellus on Node.js-ympäristössä toimiva Express-palvelin, joka palvelee yksisivuista React-sovellusta ja tukee suojattua palvelinpuolen API:ta. Tämä arkkitehtuuri noudattaa strategiaa, joka löytyy tämä Täyspinon todennusopas.
neuvottelin kanssa muut, joka on automaatioasiantuntija, ja kysyi häneltä, mitä minun piti tehdä, jotta kaikki toimisi haluamallani tavalla. Hän antoi minulle idean siitä, miltä automatisoidun työnkulun pitäisi näyttää, ja se on kuvattu tämän artikkelin Tavoitteet-osiossa. Näiden tavoitteiden saavuttaminen tarkoitti, että minun piti selvittää, kuinka käyttää Dockeria.
Satamatyöläinen
Docker on työkalu, joka konttiteknologian ansiosta mahdollistaa sovellusten helpon jakamisen, käyttöönoton ja ajamisen samassa ympäristössä, vaikka itse Docker-alusta toimisi eri ympäristöissä. Ensin minun piti saada käsiini Dockerin komentorivityökalut (CLI). ohje Dockerin asennusopas ei ole kovin selkeä, mutta voit oppia siitä, että jotta voit ottaa asennuksen ensimmäisen vaiheen, sinun on ladattava Docker Desktop (Macille tai Windowsille).
Docker Hub on suunnilleen sama kuin GitHub git-tietovarastoille tai rekisterille NPM JavaScript-paketteja varten. Tämä on Docker-kuvien online-arkisto. Tähän Docker Desktop muodostaa yhteyden.
Joten, jotta voit aloittaa Dockerin käytön, sinun on tehtävä kaksi asiaa:
Tämän jälkeen voit tarkistaa, toimiiko Docker CLI, suorittamalla seuraava komento tarkistaaksesi Docker-version:
docker -v
Kirjaudu seuraavaksi Docker Hubiin antamalla käyttäjätunnuksesi ja salasanasi pyydettäessä:
docker login
Jotta voit käyttää Dockeria, sinun on ymmärrettävä kuvien ja säilöjen käsitteet.
▍Kuvat
Kuva on jotain suunnitelmaa, joka sisältää ohjeet säiliön kokoamiseen. Tämä on muuttumaton tilannekuva sovelluksen tiedostojärjestelmästä ja asetuksista. Kehittäjät voivat helposti jakaa kuvia.
# Вывод сведений обо всех образах
docker images
Tämä komento tulostaa taulukon, jossa on seuraava otsikko:
REPOSITORY TAG IMAGE ID CREATED SIZE
---
Seuraavaksi tarkastellaan joitain esimerkkejä samassa muodossa olevista komennoista - ensin on komento, jossa on kommentti, ja sitten esimerkki siitä, mitä se voi tuottaa.
▍ Säiliöt
Säiliö on suoritettava paketti, joka sisältää kaiken sovelluksen suorittamiseen tarvittavan. Tätä lähestymistapaa käyttävä sovellus toimii aina samalla tavalla infrastruktuurista riippumatta: eristetyssä ympäristössä ja samassa ympäristössä. Pointti on, että saman kuvan esiintymät käynnistetään eri ympäristöissä.
# Перечисление всех контейнеров
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
---
▍ Tunnisteet
Tunniste on osoitus kuvan tietystä versiosta.
▍Pikaopas Docker-komentoihin
Tässä on yleiskatsaus joihinkin yleisesti käytettyihin Docker-komentoihin.
Tiedän kuinka tuotantosovellusta käytetään paikallisesti. Minulla on verkkopaketin konfiguraatio valmiin React-sovelluksen rakentamiseksi. Seuraavaksi minulla on komento, joka käynnistää Node.js-pohjaisen palvelimen portista 5000. Se näyttää tältä:
npm i # установка зависимостей
npm run build # сборка React-приложения
npm run start # запуск Node-сервера
On huomattava, että minulla ei ole esimerkkisovellusta tälle materiaalille. Mutta tässä kokeissa mikä tahansa yksinkertainen solmusovellus käy.
Säiliön käyttöä varten sinun on annettava ohjeet Dockerille. Tämä tehdään tiedoston kautta Dockerfile, joka sijaitsee projektin juurihakemistossa. Tämä tiedosto vaikuttaa aluksi melko käsittämättömältä.
Mutta se, mitä se sisältää, kuvaa vain erikoiskomennoilla jotain samanlaista kuin työympäristön luominen. Tässä on joitain näistä komennoista:
FROM — Tämä komento käynnistää tiedoston. Se määrittää peruskuvan, jolle säiliö on rakennettu.
# Загрузить базовый образ
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
Valitsemastasi peruskuvasta riippuen saatat joutua asentamaan lisäriippuvuuksia. Tosiasia on, että jotkut peruskuvat (kuten Node Alpine Linux) luodaan tavoitteena tehdä niistä mahdollisimman kompakteja. Tämän seurauksena heillä ei ehkä ole kaikkia odottamiasi ohjelmia.
▍Säilön rakentaminen, merkitseminen ja käyttäminen
Paikallinen kokoonpano ja kontin lanseeraus on vasta meillä Dockerfile, tehtävät ovat melko yksinkertaisia. Ennen kuin siirrät kuvan Docker Hubiin, sinun on testattava se paikallisesti.
▍ Kokoaminen
Ensin sinun on kerättävä kuva, joka määrittää nimen ja valinnaisesti tunnisteen (jos tunnistetta ei ole määritetty, järjestelmä määrittää kuvalle tunnisteen automaattisesti latest).
# Сборка образа
docker build -t <image>:<tag> .
Tämän komennon suorittamisen jälkeen voit katsella Dockerin rakentavan kuvan.
Sending build context to Docker daemon 2.88MB
Step 1/9 : FROM node:12-alpine
---> ...выполнение этапов сборки...
Successfully built 123456789123
Successfully tagged <image>:<tag>
Rakentaminen voi kestää muutaman minuutin - kaikki riippuu siitä, kuinka monta riippuvuutta sinulla on. Kun rakennus on valmis, voit suorittaa komennon docker images ja katso uuden kuvasi kuvaus.
REPOSITORY TAG IMAGE ID CREATED SIZE
<image> latest 123456789123 About a minute ago x.xxGB
▍Käynnistä
Kuva on luotu. Tämä tarkoittaa, että voit käyttää säilöä sen perusteella. Koska haluan päästä käsiksi säiliössä olevaan sovellukseen osoitteessa localhost:5000, minä, parin vasemmalla puolella 5000:5000 seuraavassa komennossa asennettuna 5000. Oikealla puolella on konttiportti.
# Запуск с использованием локального порта 5000 и порта контейнера 5000
docker run -p 5000:5000 <image>:<tag>
Nyt kun säilö on luotu ja käynnissä, voit käyttää komentoa docker ps tarkastellaksesi tämän säilön tietoja (tai voit käyttää komentoa docker ps -a, joka näyttää tiedot kaikista säilöistä, ei vain käynnissä olevista).
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
Jos menet nyt osoitteeseen localhost:5000 — näet käynnissä olevan sovelluksen sivun, joka näyttää täsmälleen samalta kuin tuotantoympäristössä käynnissä olevan sovelluksen sivu.
▍ Tunnisteet ja julkaisu
Jotta voisimme käyttää yhtä luoduista kuvista tuotantopalvelimella, meidän on voitava ladata tämä kuva Docker Hubista. Tämä tarkoittaa, että sinun on ensin luotava arkisto projektille Docker Hubissa. Tämän jälkeen meillä on paikka, johon voimme lähettää kuvan. Kuva on nimettävä uudelleen niin, että sen nimi alkaa Docker Hub -käyttäjänimellämme. Tämän jälkeen tulisi kirjoittaa arkiston nimi. Mikä tahansa tunniste voidaan sijoittaa nimen loppuun. Alla on esimerkki kuvien nimeämisestä tätä mallia käyttäen.
Nyt voit rakentaa kuvan uudella nimellä ja suorittaa komennon docker push siirtääksesi sen Docker Hub -tietovarastoon.
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
Jos kaikki menee hyvin, kuva on saatavilla Docker Hubissa ja se voidaan helposti ladata palvelimelle tai siirtää muille kehittäjille.
РЎР »РµРґСѓСЋС ‰ РёРµ С € Р ° РіРё
Tähän mennessä olemme varmistaneet, että Docker-säilön muodossa oleva sovellus toimii paikallisesti. Olemme ladaneet säilön Docker Hubiin. Kaikki tämä tarkoittaa, että olemme jo edistyneet erittäin hyvin kohti tavoitettamme. Nyt meidän on ratkaistava vielä kaksi kysymystä:
CI-työkalun määrittäminen koodin testaamista ja käyttöönottoa varten.
Tuotantopalvelimen asettaminen niin, että se voi ladata ja suorittaa koodimme.
On huomattava, että täällä voit käyttää toista palveluyhdistelmää. Esimerkiksi Travis CI:n sijasta voit käyttää CircleCI- tai Github Actionsia. Ja DigitalOceanin sijaan - AWS tai Linode.
Päätimme työskennellä Travis CI:n kanssa, ja minulla on jo jotain määritetty tähän palveluun. Siksi puhun nyt lyhyesti siitä, kuinka se valmistetaan työhön.
Travis CI
Travis CI on työkalu koodin testaamiseen ja käyttöönottoon. En haluaisi mennä Travis CI:n perustamisen monimutkaisuuteen, koska jokainen projekti on ainutlaatuinen, eikä siitä ole paljon hyötyä. Mutta käsittelen perusasiat, jotta pääset alkuun, jos päätät käyttää Travis CI:tä. Valitsetpa Travis CI:n, CircleCI:n, Jenkinsin tai jonkin muun, samanlaisia määritysmenetelmiä käytetään kaikkialla.
Aloita Travis CI:n käyttö siirtymällä osoitteeseen projektin verkkosivuilla ja luo tili. Integroi sitten Travis CI GitHub-tiliisi. Kun määrität järjestelmää, sinun on määritettävä arkisto, jonka kanssa haluat automatisoida työn ja sallia pääsy siihen. (Käytän GitHubia, mutta olen varma, että Travis CI voi integroida BitBucketin, GitLabin ja muiden vastaavien palvelujen kanssa).
Joka kerta, kun Travis CI käynnistetään, palvelin käynnistetään ja suorittaa määritystiedostossa määritetyt komennot, mukaan lukien vastaavien arkistohaarojen käyttöönotto.
▍Työn elinkaari
Travis CI -määritystiedosto nimeltään .travis.yml ja tallennettu projektin juurihakemistoon, tukee tapahtumien käsitettä elinkaari tehtäviä. Nämä tapahtumat on lueteltu siinä järjestyksessä, jossa ne tapahtuvat:
apt addons
cache components
before_install
install
before_script
script
before_cache
after_success или after_failure
before_deploy
deploy
after_deploy
after_script
▍ Testaus
Aion määrittää paikallisen Travis CI -palvelimen asetustiedostossa. Valitsin kieleksi Node 12:n ja käskin järjestelmää asentaa Dockerin käytön edellyttämät riippuvuudet.
Kaikki mitä on listattu .travis.yml, suoritetaan, kun kaikki vetopyynnöt tehdään arkiston kaikkiin haaroihin, ellei toisin mainita. Tämä on hyödyllinen ominaisuus, koska se tarkoittaa, että voimme testata kaiken arkistoon tulevan koodin. Tämä kertoo, onko koodi valmis kirjoitettavaksi haaraan. master, ja rikkooko se projektin rakennusprosessia. Tässä globaalissa kokoonpanossa asensen kaiken paikallisesti, suoritan Webpack-dev-palvelinta taustalla (tämä on työnkulkuni ominaisuus) ja suoritan testejä.
Jos haluat arkistosi näyttävän merkkejä, jotka osoittavat testin kattavuuden, täällä Löydät lyhyet ohjeet Jestin, Travis CI:n ja haalareiden käyttämisestä näiden tietojen keräämiseen ja näyttämiseen.
Joten tässä on tiedoston sisältö .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
Tähän loppuvat toiminnot, jotka suoritetaan kaikille arkiston haareille ja vetopyynnöille.
▍Käyttöönotto
Olettaen, että kaikki automaattiset testit on suoritettu onnistuneesti, voimme, mikä on valinnaista, ottaa koodin käyttöön tuotantopalvelimelle. Koska haluamme tehdä tämän vain haaran koodille master, annamme järjestelmälle asianmukaiset ohjeet käyttöönottoasetuksissa. Ennen kuin yrität käyttää koodia, jota tarkastelemme seuraavaksi projektissasi, haluan varoittaa sinua siitä, että sinulla on oltava todellinen komentosarja, jota kutsutaan käyttöön.
deploy:
# Собрать Docker-контейнер и отправить его на Docker Hub
provider: script
script: bash deploy.sh
on:
branch: master
Käyttöönottokomentosarja ratkaisee kaksi ongelmaa:
Rakenna, merkitse ja lähetä kuva Docker Hubiin käyttämällä CI-työkalua (tässä tapauksessa Travis CI).
Kuvan lataaminen palvelimelle, vanhan kontin pysäyttäminen ja uuden käynnistäminen (tapauksessamme palvelin toimii DigitalOcean-alustalla).
Ensin sinun on määritettävä automaattinen prosessi kuvan rakentamiseksi, merkitsemiseksi ja työntämiseksi Docker Hubiin. Tämä kaikki on hyvin samanlaista kuin mitä olemme jo tehneet manuaalisesti, paitsi että tarvitsemme strategian yksilöllisten tunnisteiden määrittämiseksi kuville ja kirjautumisten automatisoimiseksi. Minulla oli vaikeuksia joidenkin käyttöönottoskriptin yksityiskohtien kanssa, kuten merkintästrategia, kirjautuminen, SSH-avaimen koodaus, SSH-yhteyden muodostaminen. Mutta onneksi poikaystäväni on erittäin hyvä bashin kanssa, kuten monissa muissakin asioissa. Hän auttoi minua kirjoittamaan tämän käsikirjoituksen.
Joten, skriptin ensimmäinen osa on kuvan lataaminen Docker Hubiin. Tämä on melko helppo tehdä. Käyttämäni merkintäjärjestelmä sisältää git-hash- ja git-tagin yhdistämisen, jos sellainen on olemassa. Tämä varmistaa, että tunniste on ainutlaatuinen ja helpottaa sen kokoonpanon tunnistamista, johon se perustuu. DOCKER_USERNAME и DOCKER_PASSWORD ovat käyttäjäympäristömuuttujia, jotka voidaan asettaa käyttämällä Travis CI -liitäntää. Travis CI käsittelee arkaluontoisia tietoja automaattisesti, jotta ne eivät joudu vääriin käsiin.
Tässä on käsikirjoituksen ensimmäinen osa 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}
Se, mikä skriptin toinen osa on, riippuu täysin käyttämästäsi isännästä ja siitä, kuinka yhteys siihen on järjestetty. Minun tapauksessani, koska käytän Digital Oceania, käytän komentoja yhteyden muodostamiseen palvelimeen docl. Kun työskentelet AWS:n kanssa, apuohjelmaa käytetään aws, ja niin edelleen.
Palvelimen asentaminen ei ollut erityisen vaikeaa. Joten asensin pisaran peruskuvan perusteella. On huomattava, että valitsemani järjestelmä vaatii Dockerin kertaluonteisen manuaalisen asennuksen ja Dockerin manuaalisen kertakäynnistyksen. Asensin Dockerin Ubuntu 18.04:llä, joten jos käytät myös Ubuntua samaan, voit seurata tämä yksinkertainen ohje.
En puhu tässä palvelun erityisistä komennoista, koska tämä näkökohta voi vaihdella suuresti eri tapauksissa. Annan vain yleisen toimintasuunnitelman, joka suoritetaan sen jälkeen, kun olen muodostanut yhteyden SSH:n kautta palvelimeen, johon projekti otetaan käyttöön:
Meidän on löydettävä tällä hetkellä käynnissä oleva kontti ja pysäytettävä se.
Sitten sinun on käynnistettävä uusi säilö taustalla.
Sinun on asetettava palvelimen paikallinen portti 80 - Tämän avulla voit kirjoittaa sivuston osoitteeseen, kuten example.com, määrittelemättä porttia sen sijaan, että käytät osoitetta, kuten example.com:5000.
Lopuksi sinun on poistettava kaikki vanhat säilöt ja kuvat.
Tässä on jatkoa käsikirjoitukselle.
# Найти 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
Joitakin asioita, joihin kannattaa kiinnittää huomiota
On mahdollista, että kun muodostat yhteyden palvelimeen SSH:n kautta Travis CI:stä, näet varoituksen, joka ei anna sinun jatkaa asennusta, koska järjestelmä odottaa käyttäjän vastausta.
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)?
Opin, että merkkijonoavain voidaan koodata base64:ään, jotta se voidaan tallentaa sellaiseen muotoon, jossa sitä voidaan käsitellä kätevästi ja luotettavasti. Asennusvaiheessa voit purkaa julkisen avaimen ja kirjoittaa sen tiedostoon known_hosts päästäksesi eroon yllä olevasta virheestä.
Samaa lähestymistapaa voidaan käyttää yksityisen avaimen kanssa yhteyttä muodostettaessa, koska saatat tarvita yksityisen avaimen päästäksesi palvelimeen. Kun työskentelet avaimen kanssa, sinun on vain varmistettava, että se on tallennettu turvallisesti Travis CI -ympäristömuuttujaan ja ettei sitä näytetä missään.
Toinen huomioitava asia on, että saatat joutua suorittamaan koko käyttöönottokomentosarjan yhtenä rivinä, esimerkiksi - kanssa doctl. Tämä saattaa vaatia lisäponnistuksia.
doctl compute ssh <droplet> --ssh-command "все команды будут здесь && здесь"
TLS/SSL ja kuormituksen tasapainotus
Kun tein kaiken yllä mainitun, viimeinen kohtaamani ongelma oli se, että palvelimella ei ollut SSL:ää. Koska käytän Node.js-palvelinta, pakottaakseni töihin käänteinen välityspalvelin Nginx ja Let's Encrypt, sinun täytyy puuhailla paljon.
En todellakaan halunnut tehdä kaikkea tätä SSL-määritystä manuaalisesti, joten loin vain kuormituksen tasapainottimen ja tallensin sen tiedot DNS:ään. Esimerkiksi DigitalOceanin tapauksessa automaattisesti uusiutuvan itseallekirjoitetun varmenteen luominen kuormituksen tasapainottimeen on yksinkertainen, ilmainen ja nopea toimenpide. Tällä lähestymistavalla on lisäetuna, että sen avulla on erittäin helppoa määrittää SSL useille palvelimille, jotka toimivat kuormituksen tasapainottimen takana tarvittaessa. Näin palvelimet eivät itse voi "ajatella" SSL:ää ollenkaan, vaan käyttää porttia tavalliseen tapaan 80. Joten SSL:n määrittäminen kuormituksen tasapainottimessa on paljon helpompaa ja kätevämpää kuin vaihtoehtoiset SSL-määritystavat.
Nyt voit sulkea kaikki palvelimen portit, jotka hyväksyvät saapuvat yhteydet - porttia lukuun ottamatta 80, jota käytetään kommunikoimaan kuormantasaajan ja portin kanssa 22 SSH:lle. Tämän seurauksena yritys päästä suoraan palvelimeen muista porteista kuin näistä kahdesta portista epäonnistuu.
Tulokset
Kun tein kaiken, mistä tässä materiaalissa puhuin, Docker-alusta tai automatisoitujen CI/CD-ketjujen käsitteet eivät enää pelänneet minua. Pystyin luomaan jatkuvan integraatioketjun, jonka aikana koodi testataan ennen tuotantoon menoa ja koodi otetaan automaattisesti käyttöön palvelimella. Tämä kaikki on minulle vielä suhteellisen uutta, ja olen varma, että on olemassa tapoja parantaa automatisoitua työnkulkuani ja tehdä siitä tehokkaampi. Joten jos sinulla on ideoita tähän asiaan, kerro minulle. minua tietää. Toivon, että tämä artikkeli on auttanut sinua pyrkimyksissäsi. Haluan uskoa, että sen lukemisen jälkeen opit yhtä paljon kuin minä opin samalla kun tajusin kaiken, mistä siinä puhuin.
PS. Meidän markkinapaikka on kuva Satamatyöläinen, joka voidaan asentaa yhdellä napsautuksella. Voit tarkistaa konttien toiminnan osoitteessa VPS. Kaikille uusille asiakkaille annetaan 3 päivää maksutonta testausta.
Hyvä lukijat! Käytätkö projekteissasi CI/CD-tekniikoita?