Hemmäňize salam! Taslamaňyzy ýazmak baradaky makalalaryň tapgyryny dowam etdirýäris.
Şahalary tertipläň
Möhümi, şahalarda we ammardaky tertipde ýitmezlik üçin, STEP_ {number} prefiksini goşup, olaryň adyny üýtgetmek kararyna geldim . Mysal üçin, esasy şahadan başga-da üç şahamyz bar:- JRTB-0
- JRTB-2
- JRTB-3
- STEP_1_JRTB-0 - ilkinji ädim
- STEP_2_JRTB-2 - ikinji ädim
- STEP_3_JRTB-3 - üçünji ädim
Docker hakda azajyk
Docker näme? Gysgaça aýdylanda, bu programmalary çalt we ygtybarly ýerleşdirip (ýerleşdirip), diňe olar üçin zerur bolan ýapyk infrastrukturany döredip bilersiňiz. Bu henizem kyn, düşünýärin. Umuman aýdanyňda, Docker çalt we netijeli işläp boljak ösüş platformasy hökmünde düşünilip bilner. Docker serwerde işleýän programma hökmünde düşünilip bilner. Bu programma gaplar bilen konteýnerleri saklamak ukybyna eýedir. Konteýner näme? Bu aýratyn zerur infrastruktura bolup, oňa zerur zatlaryň hemmesini goşup bilersiňiz. Mysal üçin, Java programmasy üçin programmany işletmek üçin JRE gerek, konteýnerde şeýle bolar, başga bir programma üpjünçiligi gerek - muny goşup bileris. Ora-da belki Linux we Tomcat servlet konteýner gerek. Bu hem edilip bilner. Konteýnerler şekiliň esasynda döredilýär: ýagny, Docker konteýnerini döretmek üçin zerur zatlary öz içine alýan belli bir şablon. Bu şekili nädip döretmeli? Biziň ýagdaýymyzda, konteýnerde näme bolmalydygyny beýan edýän taslamanyň düýbünde Dockerfile döretmeli bolarys. Botyň nyşanyny islendik ýerde paş etmek islemeýändigimiz üçin, programmany ýerleşdirmek islänimizde her gezek geçmeli bolarys. Bu mowzuk hakda has giňişleýin maglumaty şu ýerden we şu ýerden okap bilersiňiz .JRTB-13 ýazýarys
Serwere ýüz tutmagymyz üçin çalt we aňsat ýerleşdiriş amalyny gurmalydyrys. 24agny, 24/7 işleýän maşyn üçin. Dockeri esas hökmünde alalyň. Emma sanawymyzda bu funksiýany goşmak üçin jogapkär wezipe ýok. Näme-de bolsa döredenimde sypdyrdym. Mesele ýok, indi dörederis. GitHub-da mesele döretmek goýmasyna girýäris we Aýratynlyk haýyşyny saýlaýarys: Meseläniň düşündirişini, kabul etmegiň ölçeglerini goşuň, bu meseläniň haýsy taslama degişlidigini kesgitläň we täze bir mesele döredip bilersiňiz: Indi, meseläniň bolandygyny görkezmek üçin iş üçin kabul edildi, işiň ýagdaýyny üýtgediň: Öňe gidişlik: Bu kyn makala bolar. Meseleňiz bar bolsa teswirlerde ýazyň: Men olara mümkin boldugyça gözegçilik ederin we jogap bererin. Bu kiçijik müşderi goldawy bolar: D.Dockerfile döretmek
Dokerfile näme? Docker üçin bu, Docker konteýnerine şekil döretmek barada skriptdir (ädimme-ädim görkezmeler). Programmamyzyň işlemegi üçin JDK, 11-nji wersiýasy gerek. .Agny, JDK 11 doker şekilini tapyp, ony öz keşbimize goşmaly. Bu, ýada nädip garaşlylygy goşýandygymyza meňzeýär. Docker-de bu maksat bilen DockerHub bar . Locallyerli suratlary göçürip almak üçin şol ýerde hasaba alynmaly. Hasaba alnandan soň, JDK11 gözläliň. Tapan zatlarymdan şu konteýner: adopopenjdk / openjdk11 . Bu konteýneriň beýanynda dokerfile üçin zerur zatlar bar:FROM adoptopenjdk/openjdk11:ubi
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
Banka faýlyny alýan bukjany düzeliň. Mvn paket maven meselesini ýerine ýetirenimizden soň, maksat bukjasynda bar. Bularyň hemmesini etmezden ozal, täzelenen esasy şaha esaslanyp, öz işimiz üçin täzesini döredýäris: STEP_4_JRTB-13 . Indi işläp bilersiňiz. Taslamanyň düýbünde Dockerfile giňeltmesiz bir faýl dörediň we içindäki aşakdakylary goşuň:
FROM adoptopenjdk/openjdk11:ubi
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Birinji setir, şekiliň nämä esaslanjakdygy - adopopenjdk / openjdk11. Ikinji setir, maksat bukjasynda ýerleşýän JAR_FILE atly surata argument goşmak. Mundan başga-da, häzirki bukja Dockerfile-iň ýerleşýän ýeri bilen kesgitlenýär. Üçünji setir - taslamamyzyň bankasyny doker şekiline göçüriň. Iň soňky setirde, boşluk bilen bölünen terminaldaky buýrukdan döredilen massiw bar. .Agny, ahyrynda aşakdakylar ýerine ýetiriler: “java -jar /app.jar” Bot nyşanynyň gizlin bolmagy üçin, konteýner işe başlanda iki üýtgeýjini - botyň adyny we nyşanyny geçmeli bolarys. Munuň üçin üýtgeýjiler bilen taslamamyzy başlamaly bir talap ýazarys. Muny nädip etmeli? Google-a girmeli: adaty düşündirişli ilkinji baglanyşyk . Biz näme etmek isleýäris? Programma.properties faýlynda şol ýerde kesgitleýän iki üýtgeýjimiz bar:
- bot.username
- bot.token
- Baş skriptini işledeliň.
- Baş skript doker-kompozisiýa işleýär.
- “Docker-compose” programmamyz bilen doker konteýnerini işe girizýär.
- Docker konteýner programmamyzy işledýär.
FROM adoptopenjdk/openjdk11:ubi
ARG JAR_FILE=target/*.jar
ENV BOT_NAME=test.javarush_community_bot
ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-Dbot.username=${BOT_NAME}", "-Dbot.token=${BOT_TOKEN}", "-jar", "/app.jar"]
Iki setir goşup, ENTRYPOINT täzeledigimizi görüp bilersiňiz. Setirler:
ENV BOT_NAME=test.javarush_community_bot
ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
kodlaýjy faýlyň içinde üýtgeýänleri yglan ediň. Adaty tertipde olaryň görkezilen bahasy bar. Bu dokfile faýlyndan şekil döredilende, şeýle atlar bilen daşky gurşaw üýtgeýjileri geçse, bahalar başgaça bolar. ENTRYPOINT-da bu daşky gurşaw üýtgeýjilerini okajak ýene birnäçe element goşduk:
"-Dbot.username=${BOT_NAME}", "-Dbot.token=${BOT_TOKEN}"
Bu ýerde, $ {} konstruksiýasyny ulanyp, setiriň içinde BOT_NAME we BOT_TOKEN bahalarynyň geçjekdigini görüp bilersiňiz. Ondan soň, bu üýtgeýjileri doker-kompozisiýa nädip almalydygyny we geçirmelidigini öwretmeli.
Docker-compose.yml dörediň
YAML formaty barada aýratyn okasaňyz gowy bolardy, ýogsam makala eýýäm bökdençlikler bilen ösýär. Biziň üçin bu .properties görnüşiniň üýtgeýänleriniň başga bir beýany. Diňe häsiýetlerde nokat arkaly ýazylýar, ýöne YAML-da bu birneme owadan edilýär. Mysal üçin. .Properties-de iki üýtgeýji: javarush.telegram.bot.name = ivan javarush.telegram.bot.token = gurjak Butöne .yaml-da (.yml bilen birmeňzeş) şeýle bolar:javarush:
telegram:
bot:
name: ivan
token: pupkin
Ikinji wariant has owadan we düşnükli. Boşluklar ýokarda görkezilişi ýaly bolmaly. Geliň, nädip programma.properties we application.yml terjime edeliň. Ilki bilen ony döretmeli. Taslamanyň düýbünde docker-compose.yml faýly dörediň we aşakdakylary ýazyň:
version: '3.1'
services:
jrtb:
build:
context: .
environment:
- BOT_NAME=${BOT_NAME}
- BOT_TOKEN=${BOT_TOKEN}
restart: always
Birinji setir doker-kompozisiýa görnüşidir. hyzmatlar: şondan soň aşakdaky setirleriň hemmesi (üýtgediler) biziň düzýän hyzmatlarymyza degişlidir diýýär. Bizde şu wagta çenli diňe biri bar - jrtb atly java programmasy . Munuň aşagynda bolsa ähli sazlamalar bolar. Mysal üçin, gurmak: kontekst :. Dockerfile-i docker-compose.yml ýaly katalogda gözlejekdigimizi aýdýar. Emma daşky gurşaw: zerur gurşaw üýtgeýjilerini Dockerfile geçirmegimiz üçin bölüm jogapkär bolar. Diňe bize gerek zat. Şonuň üçin aşakda üýtgeýjileri geçirýäris. “Docker-compose” olary serweriň iş gurşawynyň üýtgeýjilerinde gözlär. Olary baş skriptine goşalyň.
Baş skriptleri döretmek
Iň soňky ädim, baş skript döretmekdir. Taslamanyň düýbünde start.sh atly bir faýl dörediň we aşakdakylary ýazyň:#!/bin/bash
# Pull new changes
git pull
# Prepare Jar
mvn clean
mvn package
# Ensure, that docker-compose stopped
docker-compose stop
# Add environment variables
export BOT_NAME=$1
export BOT_TOKEN=$2
# Start new deployment
docker-compose up --build -d
Birinji setir ähli baş skriptleri üçin zerurdyr: onsuz işlemez. Soň bolsa - ýerine ýetirilmeli terminalda diňe buýruklar toplumy. Her buýrukda düşündiriş goşdum, düşnükli bolmaly. Düşündirmek isleýän zadym, $ 1 we $ 2-iň manysy. Bular baş skript işe girizilende geçjek iki üýtgeýji. Eksport buýrugyny ulanyp, serwer üýtgeýjilerine goşular we doker-kompozisiýada okalar. Bu Ubuntu üçin işleýär, belki Windows üçin däl, ýöne anyk bilemok. Indi işi bes etjek stop.sh skriptini goşmaly. Onda birnäçe setir bolar:
#!/bin/bash
# Ensure, that docker-compose stopped
docker-compose stop
# Ensure, that the old application won't be deployed again.
mvn clean
Bu ýerde doker ýazmagy bes edýäris we soňky gurluşykdan bäri ýatan taslama jarnikini arassalaýarys. Taslamamyzyň takyk gurulmagyny üpjün etmek üçin muny edýäris. Mysallar bardy, şonuň üçin goşýaryn) Netijede 4 sany täze faýl bilen gutarýarys:
- Dockerfile - programmamyzyň şekilini döretmek üçin faýl;
- docker-compose.yml - konteýnerlerimizi nädip işe girizjekdigimizi sazlaýan faýl;
- start.sh - programmamyzy ýerleşdirmek üçin baş skript;
- stop.sh programmamyzy duruzmak üçin baş skriptdir.
# Çykyş bellikleri ## 0.3.0-SNAPSHOT * JRTB-13: taslama ýerleşdirme prosesi goşuldy ## 0.2.0-SNAPSHOT * JRTB-3: Telegram Bot buýruklaryny dolandyrmak üçin buýruk nusgasy ## 0.1.0-SNAPSHOT * JRTB -2: stub telegram bot goşuldy * JRTB-0: SpringBoot skelet taslamasy goşuldy
README-de programmamyzy nädip ýerleşdirmelidigini görkezýän täze abzas goşarys:
## Gurnama prosesi mümkin boldugyça aňsat: Gerekli programma üpjünçiligi: - baş skriptleri işletmek üçin terminal - doker - programmany ýerleşdirmek, gerekli şaha geçmek we baş skriptini işletmek üçin doker-kompozisiýa: $ bash start.sh $ {bot_username} $ {bot_token } Bu hemmesi.
Elbetde, hemme zat iňlis dilinde ýazylýar. Hemişe bolşy ýaly, täze döredilen bölümimizde STEP_4_JRTB-13: JRTB-13: ýerleşdiriş işini doker arkaly amala aşyryň we itekläň. Öňki makalalarda beýan eden zatlarym hakda jikme-jik durmagy bes edýärin. Şol bir zady gaýtalamagyň manysyny göremok. Mundan başga-da, muny anyklap, özleri edenleriň hiç hili soragy bolmaz. Bu, men täze şahamçany nädip döretmelidigi, borçnamany nädip döretmelidigi, ammaryna nädip itergi bermelidigi hakda gürleşýärin.
GO TO FULL VERSION