JavaRush /Java Blog /Random-TK /Programma ýerleşdirmesini amala aşyrýarys - "Java taslama...

Programma ýerleşdirmesini amala aşyrýarys - "Java taslamasy A-dan Z"

Toparda çap edildi
Hemmäňize salam! Taslamaňyzy ýazmak baradaky makalalaryň tapgyryny dowam etdirýäris. “Java-dan A-dan Z” taslamasy: Programmany ýerleşdirmek - 1

Ş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
Haýsynyň yzyndan gitmelidigini derrew düşünmersiňiz. Şonuň üçin olaryň adyny aşakdaky ýaly üýtgederin:
  • STEP_1_JRTB-0 - ilkinji ädim
  • STEP_2_JRTB-2 - ikinji ädim
  • STEP_3_JRTB-3 - üçünji ädim
Indiki makalalar üçin we ş.m. Şahalaryň adyny üýtgetmek üçin ammar sahypasyna giriň , şahalar gutusyny tapyň we yzarlaň: “A-dan Z-a çenli Java taslamasy”: Programmany ýerleşdirmek - 2Her şahanyň aşagynda galamyň üstüne basyň we şahanyň adyny üýtgediň: “Java-dan A-dan Z” taslamasy: Programmany ýerleşdirmek - 3Netijede biz alýarys: theogsa-da , meniň telegram kanalyma“Java-dan A-dan Z” taslamasy: Programmany ýerleşdirmek - 4 ýazylanlaryň hemmesi tapyldy derrew şahalaryň adyny üýtgetdim.

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: “Java-dan A-dan Z” taslamasy: Programmany ýerleşdirmek - 5Meselä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 “Java-dan A-dan Z” taslamasy: Programmany ýerleşdirmek - 6gö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.“Java-dan A-dan Z” taslamasy: Programmany ýerleşdirmek - 7

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
Hiç kim bu gymmatlyklary görüp bilmez ýaly doker konteýnerini işledip, bahamy her gezek şol ýere geçirmek isleýärin. “SpringBoot” -da banka taslamasy işe girizilende kesgitlenýän daşky gurşaw üýtgeýjileriniň “application.properties” faýlyndakylardan has ýokary boljakdygyny bilýärin. Üýtgeýjini haýyşda geçirmek üçin aşakdaky gurluşy goşmaly: -D {üýtgeýän ady} = ”{üýtgeýän baha}” . Egri ýaýlar goşmaýarys;) Programmamyza öňünden kesgitlenen bahalar - botyň ady we nyşany: java -jar -Dbot.username = ”test.javarush.community_bot” -Dbot bilen ýüz tutarys. token = "dfgkdjfglkdjfglkdjfgk" * .jar Indi bu üýtgeýjileri dok konteýneriniň içinde geçirmeli. Bu daşky gurşaw üýtgeýär. Geljekde maglumatlar bazamyzyň işlemegine we programmamyzda kynçylyksyz işlemegine göz ýetirmek üçin doker-kompozisiýany ulanarys. Konteýnerleriň arasynda iş, başlangyç we garaşlylygy tertipläp boljak aýratyn gural. Başgaça aýdylanda, bir infrastrukturanyň konteýnerlerini dolandyrmak üçin Docker-iň üstündäki goşundy. Mundan başga-da, “docker-compose” işlemezden ozal serwerden ähli kod üýtgeşmelerini çykarandygymyzy, programmany gurandygymyzy we köne wersiýasyny duruzandygymyzy anyklamalydyrys. Munuň üçin baş skript ulanarys. Wah ... Hemmesi kyn ýaly, men razy. Applicationöne amaly ýerleşdirmek bilen işlemek elmydama ýadaw we çylşyrymly iş. Şonuň üçin bizde gaty gowy shema bar:
  1. Baş skriptini işledeliň.
  2. Baş skript doker-kompozisiýa işleýär.
  3. “Docker-compose” programmamyz bilen doker konteýnerini işe girizýär.
  4. Docker konteýner programmamyzy işledýär.
Indi bolsa iki üýtgeýjiniň - botyň ady we nyşany - 1-nji nokatdan 4-nji nokada geçýändigine göz ýetirmeli we java programmamyzy işe girizenimizde bu iki üýtgeýjiniň ulanyljakdygyna göz ýetirmeli. Ahyryndan başyna geçeliň. Jarnik başlamak üçin haýsy buýrugyň ýerine ýetirilmelidigini eýýäm bilýäris. Şol sebäpden, iki üýtgeýjini kabul etmegi we haýyşa geçirmegi öwrenmegi üçin Dockerfile-i düzeris. Munuň üçin “Dockerfile” -ni aşakdaky görnüşe geçireliň:
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.
Şeýle hem, programmamyzyň wersiýasyny 0.2.0-SNAPSHOT-dan 0.3.0-SNAPSHOT-a täzeläris. Geliň, täze wersiýanyň düşündirişini RELEASE_NOTES-e goşalyň we ol ýerdäki zatlary birneme refaktor edeliň:
# Ç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.

Aşakdaky setir

Bu gün goşmaça okamak bilen ünsli garalmaly we giňeldilmeli täze maglumatlary görkezdim. Iň möhüm zat: ONE (!!!) buýrugynyň kömegi bilen, programmamyzy ýerleşdirmek üçin zerur zatlaryň hemmesi ýerine ýetiriler. Bu gaty gowy, hatda size aýdyp biljek däl. Hawa, üýtgeýänleri nädip dogry ugratmalydygyna düşünmek üçin Docker resminamalarynda ep-esli wagt sarp etmeli boldum. Mundan beýläk telegramma bot hemişe esasy şahanyň iň soňky wersiýasynda işlär . Telegram botyna baglanyşyk. Bu gün okamak gowy boljak materiallara baglanyşyk bolmaz: jogapkärçilik size bagly. Maglumat gözlemegi öwrenmeli. Telegram kanalyma ýazylanlaryň hemmesi botyň ýerleşdirilmegi barada derrew diýen ýaly bildiler. Dostlar, taslamany haladyňyzmy? Oňa ýyldyz ber ! Şeýlelik bilen has meşhur bolar we has köp adam bu hakda öwrenip we ondan öwrenip biler. Hemişe bolşy ýaly, GitHub-da hasaba durmagy we bu seriýany we ol ýerde işleýän beýleki taslamalarymy yzarlamak üçin hasabymy yzarlamagy maslahat berýärin . Indi maglumat bazasyny birikdirmäge taýýar. Indiki makala has uzyn bolar we maglumatlar bazasy bilen işlemek üçin zerur zatlary ederis. Descriptionhli düşündirişler JRTB-1 .

Tapgyryň ähli materiallarynyň sanawy bu makalanyň başynda.

Teswirler
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION