JavaRush /Blog Jawa /Random-JV /Kita ngetrapake panyebaran aplikasi - "proyek Java saka A...

Kita ngetrapake panyebaran aplikasi - "proyek Java saka A nganti Z"

Diterbitake ing grup
Halo kabeh. Kita nerusake seri artikel babagan nulis proyek sampeyan. "Proyek Jawa saka A nganti Z": Ngleksanakake panyebaran aplikasi - 1

Urut cabang

Sing penting, supaya ora ilang ing cabang lan urutane ing gudang, aku mutusake kanggo ngganti jeneng kanthi nambahake STEP_{number} prefix . Contone, kita duwe telung cabang saliyane sing utama:
  • JRTB-0
  • JRTB-2
  • JRTB-3
Sampeyan ora bakal langsung ngerti endi sing kudu ditindakake. Dadi aku bakal ngganti jeneng kasebut:
  • STEP_1_JRTB-0 - langkah pisanan
  • STEP_2_JRTB-2 - langkah kapindho
  • STEP_3_JRTB-3 - langkah katelu
Lan sateruse kanggo artikel sabanjure. Kanggo ngganti jeneng cabang, pindhah menyang kaca repositori , temokake kothak cabang , tindakake: "Proyek Jawa saka A nganti Z": Ngleksanakake panyebaran aplikasi - 2Ing saben cabang, klik potlot lan ganti jeneng cabang: "Proyek Jawa saka A nganti Z": Ngleksanakake panyebaran aplikasi - 3Lan minangka asil kita entuk: "Proyek Jawa saka A nganti Z": Ngleksanakake panyebaran aplikasi - 4Miturut cara, saben wong sing langganan saluran telegramku ketemu metu langsung sing aku ngganti jeneng cabang.

A sethitik babagan Docker

Apa iku Docker? Ing cendhak, iku alat sing sampeyan bisa kanthi cepet lan aman nyebarke (nyebar) aplikasi, nggawe infrastruktur tertutup kanggo wong-wong mau, mung perlu kanggo wong-wong mau. Isih angel, aku ngerti. Umumé, Docker bisa dingerteni minangka platform pangembangan ing ngendi sampeyan bisa kerja kanthi cepet lan efisien. Docker bisa dingerteni minangka program sing mlaku ing server. Program iki nduweni kemampuan kanggo nyimpen wadhah kanthi aplikasi. Apa iku wadhah? Iki minangka infrastruktur sing kapisah sing sampeyan bisa nambah kabeh sing dibutuhake. Contone, kanggo aplikasi Jawa kita kudu JRE kanggo mbukak aplikasi, wadhah bakal duwe iki, kita kudu sawetara piranti lunak liyane - kita bisa nambah iki. Utawa mungkin kita butuh Linux lan wadah servlet Tomcat. Iki uga bisa ditindakake. Kontainer digawe adhedhasar gambar: yaiku, iki minangka cithakan khusus ing ngendi kabeh sing dibutuhake kanggo nggawe wadhah Docker ditulis. Kepiye carane nggawe gambar iki? Ing kasus kita, kita kudu nggawe Dockerfile ing oyod proyek sing nggambarake apa sing kudu ana ing wadhah kasebut. Amarga kita ora pengin mbabarake token bot ing endi wae, kita kudu nggunakake aplikasi kasebut saben-saben pengin nyebarake aplikasi kasebut. Sampeyan bisa maca liyane babagan topik iki kene lan kene .

Kita nulis JRTB-13

Kita kudu nyiyapake proses penyebaran cepet lan gampang kanggo aplikasi kita menyang server. Sing, kanggo mesin sing dianggo 24/7. Ayo njupuk Docker minangka basis. Nanging ora ana tugas ing dhaptar sing bakal tanggung jawab kanggo nambah fungsi iki. Piye wae aku ora kejawab nalika nggawe. Ora masalah, kita bakal nggawe saiki. Kita pindhah menyang tab nggawe masalah ing GitHub banjur pilih Panjaluk Fitur: "Proyek Jawa saka A nganti Z": Ngleksanakake panyebaran aplikasi - 5Tambah katrangan babagan tugas, kritéria kanggo ditampa, atur proyek endi masalah iki lan sampeyan bisa nggawe masalah anyar: "Proyek Jawa saka A nganti Z": Ngleksanakake panyebaran aplikasi - 6Saiki, kanggo nuduhake yen tugas kasebut wis rampung. ditampa kanggo karya, ngganti status tugas saka Kanggo nindakake ing Progress: "Proyek Jawa saka A nganti Z": Ngleksanakake panyebaran aplikasi - 7Iki bakal dadi artikel angel. Yen sampeyan duwe masalah, tulis ing komentar: Aku bakal ngawasi lan njawab kanthi paling apik. Iki bakal dadi Dhukungan Pelanggan cilik :D

Nggawe Dockerfile

Apa iku dockerfile? Kanggo Docker, iki minangka skrip (instruksi langkah-langkah) babagan carane nggawe gambar kanggo wadhah Docker. Supaya aplikasi bisa digunakake, kita butuh JDK, versi 11. Yaiku, kita kudu nemokake gambar docker JDK 11 lan ditambahake menyang gambar kita. Iki soko padha carane kita nambah katergantungan ing memori. Docker duwe DockerHub kanggo tujuan iki . Kanggo ndownload gambar sacara lokal, sampeyan kudu ndhaptar ing kana. Sawise registrasi, ayo goleki JDK11. Saka apa aku ketemu, iki wadhah: adoptopenjdk/openjdk11 . Katrangan babagan wadhah iki nduweni apa sing dibutuhake kanggo file docker:
FROM adoptopenjdk/openjdk11:ubi
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
Ayo ndandani folder sing njupuk file jar. Kita duwe ing folder target sawise kita mbukak tugas mvn paket maven. Sadurunge nindakake kabeh iki, adhedhasar cabang utama sing dianyari, kita nggawe sing anyar kanggo tugas kita: STEP_4_JRTB-13 . Saiki sampeyan bisa kerja. Ing oyod proyek, gawe file tanpa ekstensi Dockerfile lan tambahake ing ngisor iki:
FROM adoptopenjdk/openjdk11:ubi
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Baris pisanan yaiku apa sing bakal didhasarake gambar - adoptopenjdk/openjdk11. Baris kapindho yaiku nambah argumen menyang gambar sing jenenge JAR_FILE, sing ana ing folder target. Kajaba iku, folder saiki ditemtokake dening lokasi Dockerfile. Baris katelu - nyalin jar proyek kita menyang gambar docker. Baris pungkasan ateges ngemot array sing digawe saka printah ing terminal, sing dipisahake kanthi spasi. Yaiku, ing pungkasan bakal ditindakake: "java -jar /app.jar" Kanggo njaga rahasia token bot, nalika miwiti wadhah, kita kudu ngliwati rong variabel - jeneng bot lan token. Kanggo nindakake iki, kita bakal nulis pitakon sing kudu miwiti proyek kita kanthi variabel. Lan carane nindakake? Sampeyan kudu Google: iki link pisanan karo gambaran normal. Apa sing arep kita lakoni? Kita duwe rong variabel ing file application.properties sing ditetepake ana:
  • bot.jeneng panganggo
  • bot.token
Aku pengin mbukak wadhah docker lan pass Nilai ana saben wektu supaya ora ana sing bisa ndeleng nilai iki. Aku ngerti sing ing SpringBoot, variabel lingkungan sing disetel nalika project jar dibukak bakal njupuk precedence saka ing file application.properties. Kanggo ngliwati variabel ing panjalukan, sampeyan kudu nambah konstruksi ing ngisor iki: -D{variable name}="{variable value}" . Kita ora nambah kurung kriting ;) Kita bakal nampa panjalukan sing bakal mbukak aplikasi kita kanthi nilai sing wis ditemtokake - jeneng lan token bot: java -jar -Dbot.username=”test.javarush.community_bot” -Dbot. token =”dfgkdjfglkdjfglkdjfgk” *.jar Saiki kita kudu pass variabel iki nang wadhah docker. Iki minangka variabel lingkungan. Kanggo mesthekake yen ing mangsa ngarep database bisa mlaku kanthi lancar lan tanpa masalah karo aplikasi, kita bakal nggunakake docker-compose. Iki minangka alat sing kapisah ing ngendi sampeyan bisa ngatur karya, wiwitan, lan dependensi ing antarane wadhah. Kanthi tembung liyane, iki minangka tambahan ing ndhuwur Docker kanggo ngatur wadhah siji infrastruktur. Kajaba iku, sadurunge mbukak docker-compose, kita kudu mesthekake yen kita wis narik kabeh owah-owahan kode saka server, mbangun aplikasi kasebut lan mungkasi versi lawas. Kanggo iki, kita bakal nggunakake skrip bash. Wah... Iku kabeh muni angel, aku setuju. Nanging nggarap nyiyapake panyebaran aplikasi mesthi dadi proses sing angel lan rumit. Dadi, kita duwe skema sing apik:
  1. Ayo mbukak skrip bash.
  2. Skrip bash nganggo docker-compose.
  3. Docker-compose ngluncurake wadhah docker karo aplikasi kita.
  4. Wadah Docker mbukak aplikasi kita.
Lan saiki kita kudu mesthekake yen rong variabel - jeneng bot lan token - pindhah saka titik 1 nganti titik 4. Lan supaya loro variabel iki digunakake nalika mbukak aplikasi java kita. Ayo dadi saka pungkasan nganti wiwitan. Kita wis ngerti prentah apa sing kudu ditindakake kanggo miwiti jarnik. Mulane, kita bakal ngatur Dockerfile supaya sinau kanggo nampa rong variabel lan ngirim menyang panjalukan. Kanggo nindakake iki, ayo nyuda Dockerfile menyang formulir ing ngisor iki:
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"]
Sampeyan bisa ndeleng manawa kita nambahake rong baris lan nganyari ENTRYPOINT. garis:
ENV BOT_NAME=test.javarush_community_bot
ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
ngumumake variabel ing file encoder. Kanthi gawan, padha duwe nilai sing ditemtokake. Yen, nalika nggawe gambar saka dockerfile iki, variabel lingkungan kanthi jeneng kasebut dilewati, nilai kasebut bakal beda. Lan ing ENTRYPOINT kita nambah sawetara unsur liyane sing bakal maca variabel lingkungan iki:
"-Dbot.username=${BOT_NAME}", "-Dbot.token=${BOT_TOKEN}"
Ing kene sampeyan bisa ndeleng manawa ing baris kasebut, nggunakake konstruksi ${}, nilai BOT_NAME lan BOT_TOKEN bakal diterusake. Sabanjure kita kudu ngajari carane nampa lan ngliwati variabel kasebut menyang docker-compose.

Nggawe docker-compose.yml

Luwih becik sampeyan maca babagan format YAML kanthi kapisah, yen ora, artikel kasebut wis akeh banget. Kanggo kita, iki mung gambaran liyane saka variabel saka jinis .properties. Mung ing properti ditulis liwat titik, nanging ing YAML iki rampung luwih apik. Contone, kaya iki. Rong variabel ing .properties: javarush.telegram.bot.name=ivan javarush.telegram.bot.token=pupkin Nanging ing .yaml (padha karo .yml) bakal kaya mangkene:
javarush:
	telegram:
		bot:
		  name: ivan
		  token: pupkin
Pilihan kapindho luwih ayu lan bisa dingerteni. Spasi kudu persis kaya sing kasebut ing ndhuwur. Ayo kita nerjemahake application.properties lan application.yml piye wae. Pisanan sampeyan kudu nggawe. Ing oyod proyek, gawe file docker-compose.yml lan tulis ing ngisor iki:
version: '3.1'

services:
 jrtb:
   build:
     context: .
   environment:
     - BOT_NAME=${BOT_NAME}
     - BOT_TOKEN=${BOT_TOKEN}
   restart: always
Baris pisanan yaiku versi docker-compose. layanan: ngandika sing kabeh baris ing ngisor iki sawise iki (bakal dipindhah) nuduhake layanan sing kita configuring. Kita mung duwe siji iki nganti saiki - aplikasi java sing diarani jrtb . Lan wis ana ing sangisore kabeh setelane. Contone, mbangun: konteks:. ngandika yen kita bakal katon kanggo Dockerfile ing direktori padha docker-compose.yml. Nanging lingkungan: bagean bakal tanggung jawab kanggo mesthekake yen kita pass variabel lingkungan perlu kanggo Dockerfile. Mung apa kita kudu. Mulane, kita ngliwati variabel ing ngisor iki. Docker-compose bakal nggoleki ing variabel lingkungan operasi server. Ayo ditambahake menyang skrip bash.

Nggawe skrip bash

Langkah pungkasan yaiku nggawe skrip bash. Gawe file sing diarani start.sh ing oyod proyek lan tulis ing ngisor iki:
#!/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
Baris pisanan dibutuhake kanggo kabeh skrip bash: ora bakal bisa digunakake tanpa. Banjur - mung sakumpulan printah ing terminal sing kudu dieksekusi. Aku wis nambah komentar ing saben printah supaya kudu cetha. Ing bab mung aku arep nerangake apa $1 lan $2 tegese. Iki minangka rong variabel sing bakal dilewati nalika skrip bash diluncurake. Nggunakake printah ekspor, bakal ditambahake menyang variabel server lan diwaca ing docker-compose. Iki dianggo kanggo Ubuntu, mbokmenawa ora kanggo Windows, nanging aku ora yakin. Saiki sampeyan kudu nambah script stop.sh, kang bakal mungkasi karya. Bakal ngemot sawetara baris:
#!/bin/bash

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

# Ensure, that the old application won't be deployed again.
mvn clean
Kene kita mungkasi docker-nyipta lan ngresiki jarnik project, kang wis lying watara wiwit mbangun pungkasan. Kita nindakake iki kanggo mesthekake yen proyek kita dibangun maneh kanthi akurat. Ana precedents, mulane aku nambah) Akibate, kita entuk 4 file anyar:
  • Dockerfile - file kanggo nggawe gambar aplikasi kita;
  • docker-compose.yml - file kanthi setelan carane kita bakal mbukak wadhah kita;
  • start.sh - bash script kanggo deploying aplikasi kita;
  • stop.sh minangka skrip bash kanggo mungkasi aplikasi kita.
Kita uga bakal nganyari versi aplikasi saka 0.2.0-SNAPSHOT dadi 0.3.0-SNAPSHOT. Ayo ditambahake katrangan versi anyar menyang RELEASE_NOTES lan rada refactor apa sing ana:
# Cathetan Rilis ## 0.3.0-SNAPSHOT * JRTB-13: nambahake proses penyebaran menyang proyek kasebut ## 0.2.0-SNAPSHOT * JRTB-3: dileksanakake pola Command kanggo nangani perintah Telegram Bot ## 0.1.0-SNAPSHOT * JRTB -2: ditambahake bot telegram rintisan * JRTB-0: ditambahake proyek kerangka SpringBoot
Lan ing README kita bakal nambah paragraf anyar sing njlèntrèhaké cara masang aplikasi kita:
## Proses Deployment Deployment segampang mungkin: Piranti lunak sing dibutuhake: - terminal kanggo mbukak skrip bash - docker - docker-compose kanggo nyebarake aplikasi, ngalih menyang cabang sing dibutuhake lan mbukak skrip bash: $ bash start.sh $ {bot_username} ${bot_token } Iku kabeh.
Mesthi, kabeh ditulis nganggo basa Inggris. Kaya biasane, ing cabang sing mentas digawe STEP_4_JRTB-13 kita nggawe komitmen anyar kanthi jeneng: JRTB-13: ngleksanakake proses penyebaran liwat docker lan push. Aku mandheg manggoni kanthi rinci babagan perkara sing wis dakcritakake ing artikel sadurunge. Aku ora weruh titik kanggo mbaleni bab sing padha. Kajaba iku, sing ngerti lan nindakake dhewe ora bakal duwe pitakon. Iki aku ngomong babagan carane nggawe cabang anyar, carane nggawe commit, carane push commit menyang repositori.

Garis ing ngisor

Dina iki aku wis nuduhake akeh informasi anyar sing kudu dipikirake kanthi ati-ati lan ditambahi kanthi maca tambahan. Sing paling penting: kanthi bantuan ONE (!!!) printah, kabeh sing dibutuhake kanggo nyebarake aplikasi bakal rampung. Iki kelangan banget aku ora bisa ngomong sampeyan. Ya, aku kudu nglampahi wektu sing cukup ing dokumentasi Docker kanggo ngerti carane nerusake variabel kanthi bener. Wiwit saiki, bot telegram bakal tansah bisa digunakake ing versi paling anyar saka cabang utama . Link menyang bot telegram. Dina iki ora bakal ana pranala menyang materi sing apik kanggo diwaca: tanggung jawab ana ing sampeyan. Sampeyan kudu sinau kanggo nggoleki informasi. Saben uwong sing langganan saluran telegramku langsung sinau babagan panyebaran bot. Kanca-kanca, apa sampeyan seneng proyek kasebut? Wenehana lintang ! Kanthi cara iki bakal dadi luwih populer lan luwih akeh wong bakal bisa sinau lan sinau saka iku. Kaya biasane, aku saranake ndhaptar ing GitHub lan tindakake akun kanggo ngetutake seri iki lan proyek liyane sing dakgarap ing kana. Saiki kita siap kanggo nyambungake database. Artikel sabanjure bakal luwih dawa lan ing kana kita bakal nindakake kabeh sing dibutuhake kanggo nggarap database. Kabeh katrangan ana ing JRTB-1 .

Dhaptar kabeh materi ing seri kasebut ana ing wiwitan artikel iki.

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