JavaRush /Java блогу /Random-KY /Биз тиркемени жайылтууну ишке ашырабыз - "Java долбоору А...
Roman Beekeeper
Деңгээл

Биз тиркемени жайылтууну ишке ашырабыз - "Java долбоору Адан Яга чейин"

Группада жарыяланган
Баарына салам. Долбооруңузду жазуу боюнча макалалар сериясын улантабыз. “Адан Яга Java долбоору”: Колдонмолорду жайылтуу - 1

Бутактарды иреттеңиз

Маанилүү нерсе, бутактарда жана алардын репозиторийдеги тартибинде адашып калбоо үчүн, мен STEP_{number} префиксин кошуу менен алардын атын өзгөртүүнү чечтим . Мисалы, бизде негизгиден тышкары үч бутак бар:
  • JRTB-0
  • JRTB-2
  • JRTB-3
Кайсынысы кайсынысы кийин кетиши керектигин дароо түшүнбөй каласыз. Ошентип, мен алардын атын төмөнкүдөй өзгөртөм:
  • STEP_1_JRTB-0 - биринчи кадам
  • STEP_2_JRTB-2 - экинчи кадам
  • STEP_3_JRTB-3 - үчүнчү кадам
Жана дагы кийинки макалалар үчүн. Фorалдардын атын өзгөртүү үчүн репозиторий барагына өтүңүз , бутактардын кутучасын табыңыз , аны аткарыңыз: “Java долбоору Адан Яга”: Колдонмолорду жайылтуу - 2Ар бир бутактын астындагы карандашты чыкылдатыңыз жана фorалдын атын өзгөртүңүз: “Java долбоору Адан Яга”: Колдонмолорду жайылтуу - 3Натыйжада биз алабыз: Айтмакчы , менин телеграм каналыма“Адан Яга Java долбоору”: Колдонмолорду жайылтуу - 4 жазылгандардын баары табылган дароо эле бутактардын атын өзгөрткөм.

Докер жөнүндө бир аз

Docker деген эмне? Кыскача айтканда, бул сиз тиркемелерди тез жана коопсуз жайгаштыра аласыз (орнизациялай аласыз), алар үчүн жабык инфраструктураны түзүп, алар үчүн гана зарыл. Бул дагы эле кыйын, мен түшүнөм. Жалпысынан алганда, Docker сиз тез жана натыйжалуу иштей турган өнүгүү платформасы катары түшүнсө болот. Докерди serverде иштеген программа катары түшүнсө болот. Бул программа колдонмолор менен контейнерлерди сактоо мүмкүнчүлүгүнө ээ. Контейнер деген эмне? Бул өзүнчө инфраструктура, ага сиз керектүү нерселердин баарын кошо аласыз. Мисалы, Java тиркемеси үчүн бизге тиркемени иштетүү үчүн JRE керек, контейнерде бул болот, бизге башка программа керек болот - биз муну кошо алабыз. Же бизге Linux жана Tomcat сервлет контейнери керек болушу мүмкүн. Муну да жасоого болот. Контейнерлер сүрөттүн негизинде түзүлөт: башкача айтканда, бул Docker контейнерин түзүү үчүн зарыл болгон нерселердин бардыгын камтыган белгилүү бир шаблон. Бул сүрөттү кантип түзүү керек? Биздин учурда, долбоордун түбүндө контейнерде эмне болушу керектигин сүрөттөгөн Dockerfile түзүшүбүз керек болот. Биз боттун белгисин эч жерде ачыкка чыгаргыбыз келбегендиктен, тиркемени жайылтууну каалаган сайын аны өткөрүп берүүгө туура келет. Бул тема тууралуу кененирээк бул жерден жана бул жерден окуй аласыз .

Биз JRTB-13 деп жазабыз

Колдонмобуз үчүн serverге тез жана оңой жайгаштыруу процессин орнотушубуз керек. Башкача айтканда, 24/7 иштеген машина үчүн. Докерди негиз кылып алалы. Бирок биздин тизмеде бул функцияны кошууга жооп бере турган эч кандай тапшырма жок. Аны жаратканда негедир сагындым. Эч кандай көйгөй жок, биз аны азыр түзөбүз. Биз GitHub'да маселени түзүү өтмөгүнө барабыз жана Функция суроосун тандайбыз: “Адан Яга Java долбоору”: Колдонмолорду жайылтуу - 5Тапшырманын сүрөттөмөсүн, аны кабыл алуу критерийлерин кошуңуз, бул маселе кайсы долбоорго таандык экенин белгилеңиз жана сиз жаңы чыгарылышты түзө аласыз: Эми тапшырма аткарылганын “Адан Яга Java долбоору”: Колдонмолорду жайылтуу - 6көрсөтүү үчүн жумушка кабыл алынса, тапшырманын статусун "Аткаруу боюнча аткарылууда"дан өзгөртүңүз: Бул оор макала болот. Эгерде сизде кандайдыр бир көйгөй болсо, комментарийге жазыңыз: Мен аларга колумдан келишинче мониторинг жүргүзүп, жооп берем. Бул кичинекей Кардарларды колдоо кызматы болот: D“Адан Яга Java долбоору”: Колдонмолорду жайылтуу - 7

Докер файлын түзүү

докер файлы деген эмне? Docker үчүн бул Docker контейнери үчүн сүрөттү кантип түзүү боюнча скрипт (кадам-кадам нускамалар). Колдонмобуз иштеши үчүн бизге JDK, 11 versionсы керек. Башкача айтканда, биз JDK 11 докер сүрөтүн таап, аны сүрөтүбүзгө кошуубуз керек. Бул эстутумга көз карандылыкты кошууга окшош нерсе. Бул үчүн Dockerде DockerHub бар . Сүрөттөрдү жергorктүү түрдө жүктөп алуу үчүн, ошол жерде катталуу керек. Катталгандан кийин JDK11ди издейли. Мен тапканымдан, бул контейнер: acceptopenjdk/openjdk11 . Бул контейнердин сүрөттөмөсүндө докер файлы үчүн керектүү нерселер бар:
FROM adoptopenjdk/openjdk11:ubi
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
Келгиле, jar файлын алып жаткан папканы оңдойлу. mvn пакетинин maven тапшырмасын аткаргандан кийин биз аны максаттуу папкада алабыз. Мунун баарын жасоодон мурун, жаңыртылган негизги бутактын негизинде, биз тапшырмабыз үчүн жаңысын түзөбүз: STEP_4_JRTB-13 . Эми сиз иштей аласыз. Долбоордун тамырында Dockerfile кеңейтүүсүз файл түзүп , ичине төмөнкүлөрдү кошуңуз:
FROM adoptopenjdk/openjdk11:ubi
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Биринчи сапта сүрөттөлүш эмнеге негизделет - acceptopenjdk/openjdk11. Экинчи сап максаттуу папкада жайгашкан JAR_FILE аттуу сүрөткө аргумент кошуу. Мындан тышкары, учурдагы папка Dockerfile жайгашкан жери менен аныкталат. Үчүнчү сап - биздин долбоордун банкасын докер сүрөтүнө көчүрүңүз. Акыркы сап негизинен боштук менен бөлүнгөн терминалдагы буйруктан түзүлгөн массивди камтыйт. Башкача айтканда, аягында төмөнкүлөр аткарылат: “java -jar /app.jar” Бот белгисин жашыруун сактоо үчүн, контейнерди ишке киргизүүдө биз эки өзгөрмөлөрдү өткөрүп беришибиз керек - боттун аталышы жана анын белгиси. Бул үчүн, биз өзгөрмөлөр менен долбоорубузду ишке киргизүү керек болгон суроо жазабыз. Анан кантип жасоо керек? Сиз аны Google керек: бул жерде кадимки сүрөттөлүшү менен биринчи шилтеме болуп саналат. Биз эмне кылгыбыз келет? application.properties файлында биз аныктаган эки өзгөрмө бар:
  • bot.username
  • bot.token
Мен докер контейнерин иштетип, бул баалуулуктарды эч ким көрбөшү үчүн, ар бир жолу ошол жерге өзүмдүн баамымды тапшыргым келет. Мен SpringBoot программасында jar долбоору ишке киргизилгенде орнотулган чөйрө өзгөрмөлөрү application.properties файлындагылардан артыкчылыкка ээ болорун билем. Сурамда өзгөрмө өткөрүү үчүн төмөнкү конструкцияны кошушуңуз керек: -D{variable name}=”{variable value}” . Биз тармал кашааларды кошпойбуз;) Биз колдонмону алдын ала аныкталган маанилер менен ишке киргизе турган сурамды алабыз - боттун аты жана белгиси: java -jar -Dbot.username=”test.javarush.community_bot” -Dbot. token=”dfgkdjfglkdjfglkdjfgk” *.jar Эми бул өзгөрмөлөрдү докер контейнеринин ичине өткөрүп беришибиз керек. Бул чөйрө өзгөрмө болуп саналат. Келечекте биздин маалымат базабыз үзгүлтүксүз жана колдонмобуз менен көйгөйсүз иштеши үчүн, биз docker-compose колдонобуз. Бул контейнерлер ортосундагы ишти, баштоону жана көз карандылыкты уюштура турган өзүнчө курал. Башкача айтканда, бул бир инфраструктуранын контейнерлерин башкаруу үчүн Dockerдин үстүндөгү кошумча. Мындан тышкары, docker-compose иштетүүдөн мурун, биз serverден бардык code өзгөртүүлөрүн алып салганыбызга, тиркемени курганыбызга жана эски versionсын токтотконубузга ишенишибиз керек. Бул үчүн биз bash скриптин колдонобуз. Ваа... Мунун баары кыйын угулат, мен макулмун. Бирок тиркемени жайгаштырууну орнотуу менен иштөө дайыма түйшүктүү жана татаал процесс. Ошондуктан, биз абдан жакшы схема бар:
  1. Келгиле, bash сценарийин иштетели.
  2. Bash скрипти docker-compose иштетет.
  3. Docker-compose биздин тиркеме менен докер контейнерин ишке киргизет.
  4. Docker контейнери биздин колдонмону иштетет.
Эми биз эки өзгөрмөнүн - боттун аталышы жана анын белгиси - 1-пункттан 4-пунктка өтүшүн текшеришибиз керек. Жана бул эки өзгөрмө биздин java тиркемесин ишке киргизүүдө колдонулушу үчүн. Келгиле, башынан аягына чейин баралы. Жарникти баштоо үчүн кандай буйрукту аткаруу керек экенин билебиз. Ошондуктан, биз Dockerfileди конфигурациялайбыз, ал эки өзгөрмөлөрдү кабыл алып, аларды сурамга өткөрүүнү үйрөнөт. Бул үчүн, келгиле, Докер файлын төмөнкү формага азайталы:
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"]
Биз эки сап кошуп, ENTRYPOINT жаңыртканыбызды көрө аласыз. Саптар:
ENV BOT_NAME=test.javarush_community_bot
ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
codeдогуч файлдын ичиндеги өзгөрмөлөрдү жарыялоо. Демейки боюнча, алар белгиленген мааниге ээ. Эгерде бул докер файлынан сүрөттү түзүүдө, мындай аталыштар менен чөйрө өзгөрмөлөрү өткөрүлүп берилсе, баалуулуктар башкача болот. Жана ENTRYPOINTте биз бул чөйрө өзгөрмөлөрүн окуй турган дагы бир нече элементтерди коштук:
"-Dbot.username=${BOT_NAME}", "-Dbot.token=${BOT_TOKEN}"
Бул жерде сиз ${} конструкциясын колдонуп, саптын ичинде BOT_NAME жана BOT_TOKEN маанилери өткөрүлө турганын көрө аласыз. Андан кийин, биз бул өзгөрмөлөрдү кантип кабыл алууну жана докер-композитке берүүнү үйрөтүшүбүз керек.

docker-compose.yml түзүңүз

YAML форматы жөнүндө өзүнчө окуп чыксаңыз жакшы болмок, антпесе макала секирик менен өсүп жатат. Биз үчүн бул .properties түрүндөгү өзгөрмөлөрдүн дагы бир сүрөттөлүшү. Касиеттерде гана чекит аркылуу жазылат, бирок YAMLде бул бир аз жакшыраак жасалат. Мисалы, ушул сыяктуу. .properties ичинде эки өзгөрмө: javarush.telegram.bot.name=ivan javarush.telegram.bot.token=pupkin Бирок .yamlда (.yml менен эле) ал мындай болот:
javarush:
	telegram:
		bot:
		  name: ivan
		  token: pupkin
Экинчи параметр сулуу жана түшүнүктүү. Боштуктар жогоруда көрсөтүлгөндөй болушу керек. Келгиле, биздин application.properties жана application.yml дегенди кандайдыр бир жол менен которуп көрөлү. Биринчиден, аны түзүү керек. Долбоордун тамырында docker-compose.yml файлын түзүп , ал жерге төмөндөгүлөрдү жазыңыз:
version: '3.1'

services:
 jrtb:
   build:
     context: .
   environment:
     - BOT_NAME=${BOT_NAME}
     - BOT_TOKEN=${BOT_TOKEN}
   restart: always
Биринчи сап докер түзүүчү version. кызматтар: андан кийинки бардык саптар (жылдырылат) биз конфигурациялап жаткан кызматтарга тиешелүү экенин айтат. Азырынча бизде алардын бирөө гана бар - jrtb деп аталган java колдонмосу . Ал эми анын астында анын бардык орнотуулары болот. Мисалы, куруу: контекст: . Докер файлын docker-compose.yml каталогунан издейбиз дейт. Бирок айлана-чөйрө: бөлүмү керектүү чөйрө өзгөрмөлөрүн Dockerfileге өткөрүп берүүбүз үчүн жооптуу болот. Бизге эмне керек. Ошондуктан, биз төмөндө өзгөрмөлөрдү өткөрүп жатабыз. Docker-compose аларды serverдин иштөө чөйрөсүнүн өзгөрмөлөрүндө издейт. Келгиле, аларды bash скриптине кошолу.

Bash скрипттерин түзүү

Акыркы кадам - ​​bash сценарийин түзүү. Долбоордун тамырында start.sh деп аталган файлды түзүп, ал жерге төмөнкүнү жазыңыз:
#!/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
Биринчи сап бардык bash скрипттери үчүн керек: ансыз иштебейт. Андан кийин - терминалда аткарылышы керек болгон буйруктардын жыйындысы. Мен ар бир буйрукка комментарийлерди коштум, андыктан ал түшүнүктүү болушу керек. Мен түшүндүргүм келген бир гана нерсе - $1 жана $2 деген эмнени билдирет. Бул эки өзгөрмөлөр, алар bash скрипти ишке киргизилгенде өткөрүлөт. Экспорттоо буйругун колдонуу менен алар server өзгөрмөлөрүнө кошулат жана докер-түзүүдө окулат. Бул Ubuntu үчүн иштейт, балким Windows үчүн эмес, бирок мен анык эмесмин. Эми сиз ишти токтото турган stop.sh сценарийин кошушуңуз керек. Ал бир нече саптарды камтыйт:
#!/bin/bash

# Ensure, that docker-compose stopped
docker-compose stop

# Ensure, that the old application won't be deployed again.
mvn clean
Бул жерде биз докер-түзүүнү токтотуп, акыркы куруудан бери жаткан jarnik долбоорун тазалайбыз. Биз муну биздин долбоордун так кайра куруусун камсыз кылуу үчүн жасайбыз. Прецеденттер болгон, ошондуктан мен кошуп жатам) Натыйжада, биз 4 жаңы файлга ээ болдук:
  • Dockerfile - биздин тиркеменин сүрөтүн түзүү үчүн файл;
  • docker-compose.yml - контейнерлерибизди кантип ишке киргизебиз деген орнотуулары бар файл;
  • start.sh - биздин тиркемени жайылтуу үчүн баш скрипти;
  • stop.sh биздин колдонмону токтотуу үчүн баш скрипт.
Биз ошондой эле биздин тиркеменин versionсын 0.2.0-SNAPSHOTтен 0.3.0-SNAPSHOTге жаңыртабыз. Келгиле, RELEASE_NOTES дарегине жаңы versionнын сүрөттөмөсүн кошуп, анда эмне бар экенин бир аз рефакциялайлы:
# Release Notes ## 0.3.0-SNAPSHOT * JRTB-13: долбоорго жайылтуу процесси кошулду ## 0.2.0-SNAPSHOT * JRTB-3: Telegram Bot буйруктарын иштетүү үчүн ишке ашырылган буйрук үлгүсү ## 0.1.0-SNAPSHOT * JRTB -2: кошумча телеграмма боту * JRTB-0: SpringBoot скелет долбоору кошулду
Жана READMEде биз тиркемени кантип жайгаштырууну сүрөттөгөн жаңы абзацты кошобуз:
## Жайгаштыруу Жайгаштыруу процесси мүмкүн болушунча оңой: Талап кылынган программа: - bash скрипттерин иштетүү үчүн терминал - докер - тиркемени жайылтуу үчүн docker-compose, керектүү тармакка которулуу жана bash скриптин иштетүү: $ bash start.sh ${bot_username} ${bot_token } Баары болду.
Албетте, баары англис тorнде жазылган. Адаттагыдай эле, биздин жаңы түзүлгөн STEP_4_JRTB-13 фorалыбызда биз аты менен жаңы милдеттенме түзөбүз: JRTB-13: жайылтуу процессин докер аркылуу ишке ашырып , аны түртүңүз. Мурунку макалаларда айтып өткөн нерселерге майда-чүйдөсүнө чейин токтолбойм. Мен бир эле нерсени кайталоонун маанисин көрбөй турам. Анын үстүнө, муну ойлоп таап, өздөрү жасагандардын эч кандай суроосу болбойт. Бул мен жаңы фorалды кантип түзүү, кантип милдеттенме түзүү, репозиторийге милдеттенмени кантип түртүү керектиги жөнүндө айтып жатам.

Төмөнкү сызык

Бүгүн мен кылдаттык менен карап чыгуу жана кошумча окуу менен кеңейтүү керек болгон көптөгөн жаңы маалыматтарды көрсөттү. Эң негизгиси: БИР (!!!) буйругунун жардамы менен биздин тиркемени жайылтуу үчүн зарыл болгон нерселердин баары аткарылат. Бул абдан сонун, мен сага айта албайм. Ооба, өзгөрмөлөрдү кантип туура жөнөтүүнү түшүнүү үчүн мен Docker documentтеринде татыктуу убакыт коротушум керек болчу. Мындан ары телеграмма боту ар дайым негизги бутагынын акыркы versionсында иштейт . Telegram ботко шилтеме. Бүгүн окууга жакшы боло турган материалдарга шилтемелер болбойт: жоопкерчorк сизде. Сиз маалымат издөөнү үйрөнүшүңүз керек. Менин телеграмм каналыма жазылгандардын баары ботту жайгаштыруу жөнүндө дээрлик дароо бorшти. Достор, сизге долбоор жактыбы? Ага жылдыз бер ! Ошентип, ал популярдуу болуп, көбүрөөк адамдар ал жөнүндө бorп, андан үйрөнө алышат. Адаттагыдай эле, мен GitHubга катталып, бул серияларды жана ал жерде иштеген башка долбоорлорумду ээрчүү үчүн аккаунтумду ээрчүүнү сунуштайм. Эми биз маалымат базасын туташтырууга даярбыз. Кийинки макала узунураак болот жана анда биз маалымат базасы менен иштөө үчүн зарыл болгон нерселердин баарын жасайбыз. Бардык сүрөттөмөлөр JRTB-1де .

Сериядагы бардык материалдардын тизмеси ушул макаланын башында.

Комментарийлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION