JavaRush /Java блогы /Random-KK /Біз қолданбаларды орналастыруды жүзеге асырамыз - «Java ж...
Roman Beekeeper
Деңгей

Біз қолданбаларды орналастыруды жүзеге асырамыз - «Java жобасы А-дан Я-ға дейін».

Топта жарияланған
Бәріңе сәлем. Біз сіздің жобаңызды жазу туралы мақалалар сериясын жалғастырамыз. «A-дан Я-ға дейінгі Java жобасы»: қолданбаларды орналастыруды жүзеге асыру - 1

Бұтақтарды сұрыптаңыз

Ең бастысы, фorалдар мен репозиторийдегі олардың тәртібін жоғалтып алмау үшін мен STEP_{number} префиксін қосу арқылы олардың атын өзгертуді шештім . Мысалы, бізде негізгіден басқа үш фorал бар:
  • JRTB-0
  • JRTB-2
  • JRTB-3
Қайсысынан кейін жүру керектігін бірден түсіне алмайсыз. Сондықтан мен олардың атын келесідей өзгертемін:
  • STEP_1_JRTB-0 - бірінші қадам
  • STEP_2_JRTB-2 – екінші қадам
  • STEP_3_JRTB-3 - үшінші қадам
Келесі мақалалар үшін және т.б. Фorалдардың атын өзгерту үшін репозиторий бетіне өтіңіз , фorалдар жолағын табыңыз , оны орындаңыз: «А-дан Я-ға Java жобасы»: қолданбаларды орналастыруды жүзеге асыру - 2Әр фorалдың астында қарындашты басып, фorалдың атын өзгертіңіз: «А-дан Я-ға дейінгі Java жобасы»: қолданбаларды орналастыруды жүзеге асыру - 3Нәтижесінде біз аламыз: Айтпақшы , менің телеграм каналыма«А-дан Я-ға дейінгі Java жобасы»: қолданбаларды орналастыруды жүзеге асыру - 4 жазылғандардың барлығы табылды. Мен фorалдардың атын өзгерттім.

Докер туралы аздап

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

Біз JRTB-13 жазамыз

Қолданбамыз үшін serverге жылдам және оңай орналастыру процесін орнатуымыз керек. Яғни, тәулік бойы жұмыс істейтін машина үшін. Докерді негізге алайық. Бірақ біздің тізімде бұл функцияны қосуға жауап беретін тапсырма жоқ. Оны жасау кезінде әйтеуір сағындым. Мәселе жоқ, оны қазір жасаймыз. GitHub жүйесінде мәселені жасау қойындысына өтіп , «Мүмкіндік сұрауы» тармағын таңдаңыз: «А-дан Я-ға дейінгі Java жобасы»: қолданбаларды орналастыруды жүзеге асыру - 5Тапсырманың сипаттамасын, оны қабылдау критерийлерін қосыңыз, бұл мәселе қай жобаға жататынын орнатыңыз және жаңа шығарылымды жасай аласыз: Енді тапсырма қабылданғанын «А-дан Я-ға Java жобасы»: қолданбаларды орналастыруды жүзеге асыру - 6көрсету үшін жұмыс үшін тапсырманың күйін Орындалуда деп өзгертіңіз: Бұл қиын мақала болады. Егер сізде қандай да бір проблемалар болса, түсініктемелерде жазыңыз: Мен оларды қадағалап, мүмкіндігімше жауап беремін. Бұл шағын тұтынушыларды қолдау қызметі болады: D«А-дан Я-ға дейінгі Java жобасы»: қолданбаларды орналастыруды жүзеге асыру - 7

Docker файлын жасау

Докер файлы дегеніміз не? Docker үшін бұл Docker контейнері үшін суретті қалай жасау керектігі туралы сценарий (қадамдық нұсқаулар). Қолданбамыз жұмыс істеуі үшін бізге JDK, 11 нұсқасы қажет. Яғни, JDK 11 докер кескінін тауып, оны суретімізге қосуымыз керек. Бұл жадқа тәуелділікті қалай қосуымызға ұқсас нәрсе. Бұл мақсат үшін Docker бағдарламасында DockerHub бар . Суреттерді жергілікті түрде жүктеп алу үшін сол жерде тіркелу керек. Тіркелгеннен кейін 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{айнымалының аты}=”{айнымалы мән}” . Біз бұйра жақшаларды қоспаймыз;) Біз қолданбаны алдын ала анықталған мәндермен іске қосатын сұрау аламыз - боттың аты мен белгісі: java -jar -Dbot.username=”test.javarush.community_bot” -Dbot. token=”dfgkdjfglkdjfglkdjfgk” *.jar Енді бұл айнымалы мәндерді докер контейнерінің ішіне беру керек. Бұл орта айнымалысы. Болашақта біздің дерекқорымыз біркелкі және қолданбамызбен қиындықсыз жұмыс істеуін қамтамасыз ету үшін біз docker-compose қолданбасын қолданамыз. Бұл контейнерлер арасындағы жұмысты, іске қосуды және тәуелділіктерді ұйымдастыруға болатын бөлек құрал. Басқаша айтқанда, бұл бір инфрақұрылымның контейнерлерін басқаруға арналған Docker үстіңгі қосымшасы. Сонымен қатар, docker-compose қолданбасын іске қоспас бұрын, serverден барлық code өзгерістерін алып тастағанымызға, қолданбаны құрастырғанымызға және ескі нұсқаны тоқтатқанымызға сенімді болуымыз керек. Ол үшін біз bash сценарийін қолданамыз. Уау... Бәрі қиын сияқты, келісемін. Бірақ қолданбаны орналастыруды орнатумен жұмыс істеу әрқашан жалықтыратын және күрделі процесс. Сондықтан бізде өте жақсы схема бар:
  1. Bash сценарийін іске қосайық.
  2. Bash сценарийі docker-compose бағдарламасын іске қосады.
  3. Docker-compose біздің қолданбамызбен докер контейнерін іске қосады.
  4. Docker контейнері біздің қолданбаны іске қосады.
Ал енді екі айнымалының – боттың аты мен оның таңбалауышы – 1-ші нүктеден 4-ші нүктеге өтуіне көз жеткізуіміз керек. Және осы екі айнымалы мән java қолданбасын іске қосқан кезде пайдаланылуы үшін. Соңынан басына қарай жүрейік. Жарникті бастау үшін қандай пәрменді орындау керек екенін білеміз. Сондықтан біз Docker файлын екі айнымалыны қабылдауды және оларды сұрауға жіберуді үйренетіндей конфигурациялаймыз. Ол үшін Docker файлын келесі пішінге азайтайық:
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
Бірінші жол - docker-compose нұсқасы. қызметтер: осыдан кейінгі барлық жолдар (жылжытылатын) біз конфигурациялап жатқан қызметтерге қатысты екенін айтады. Бізде осылардың біреуі ғана бар - jrtb деп аталатын java қолданбасы . Оның астында оның барлық параметрлері болады. Мысалы, құрастыру: контекст: . Dockerfile файлын 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 айнымалыларына қосылады және docker-compose ішінде оқылады. Бұл 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 жобасын docker-compose тоқтатамыз және тазартамыз. Біз мұны жобамыздың дұрыс қайта құруын қамтамасыз ету үшін жасаймыз. Прецеденттер болды, сондықтан мен қосып отырмын) Нәтижесінде біз 4 жаңа файлды аламыз:
  • Dockerfile – қолданбамыздың суретін жасауға арналған файл;
  • docker-compose.yml - контейнерлерімізді іске қосудың параметрлері бар файл;
  • start.sh - қолданбамызды орналастыруға арналған bash сценарийі;
  • stop.sh - бұл қолданбаны тоқтатуға арналған bash сценарийі.
Сондай-ақ біз қолданбамыздың нұсқасын 0.2.0-SNAPSHOT-тан 0.3.0-SNAPSHOT-қа дейін жаңартамыз. 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 сценарийлерін іске қосу үшін терминал - докер - қолданбаны орналастыру үшін докер-құрастыру, қажетті тармаққа ауысу және bash сценарийін іске қосу: $ bash start.sh ${bot_username} ${bot_token } Бар болғаны.
Әрине, барлығы ағылшын тілінде жазылған. Әдеттегідей, жаңадан құрылған STEP_4_JRTB-13 фorалында біз атымен жаңа міндеттеме жасаймыз: JRTB-13: орналастыру процесін докер арқылы жүзеге асырып , оны итеріңіз. Мен алдыңғы мақалаларда сипатталған нәрселерге егжей-тегжейлі тоқталуды тоқтатамын. Мен бір нәрсені қайталаудың мәнін көрмеймін. Оның үстіне ойлап тауып, өзі жасағандарға сұрақ болмайды. Бұл мен жаңа фorалды қалай жасау керектігі, міндеттемені қалай жасау керектігі, репозиторийге міндеттемені қалай итеру керектігі туралы айтып отырмын.

Төменгі сызық

Бүгін мен мұқият қарастыруды және қосымша оқу арқылы кеңейтуді қажет ететін көптеген жаңа ақпаратты көрсеттім. Ең бастысы: БІР (!!!) пәрменінің көмегімен біздің қосымшамызды орналастыру үшін қажеттінің бәрі орындалады. Бұл соншалықты керемет, мен сізге айта алмаймын. Иә, айнымалы мәндерді қалай дұрыс жіберу керектігін түсіну үшін Docker құжаттамасында лайықты уақыт жұмсауға тура келді. Бұдан былай телеграмма боты әрқашан негізгі фorалдың соңғы нұсқасында жұмыс істейтін болады . Telegram ботына сілтеме. Бүгін оқуға болатын материалдарға сілтемелер болмайды: жауапкершілік сізде. Ақпаратты іздеуді үйрену керек. Менің Telegram-арнама жазылғандардың бәрі боттарды орналастыру туралы бірден білді. Достар, жоба ұнады ма? Оған жұлдыз беріңіз ! Осылайша ол танымал бола түседі және көптеген адамдар бұл туралы біліп, одан сабақ ала алады. Әдеттегідей, мен GitHub сайтында тіркелуді және осы серияны және мен онда жұмыс істейтін басқа жобаларымды қадағалау үшін тіркелгімді орындауды ұсынамын. Енді біз дерекқорды қосуға дайынбыз. Келесі мақала ұзағырақ болады және онда біз дерекқормен жұмыс істеу үшін барлық қажетті нәрсені жасаймыз. Барлық сипаттамалар JRTB-1 ішінде .

Сериядағы барлық материалдардың тізімі осы мақаланың басында.

Пікірлер
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION