Hai semua. Kami meneruskan siri artikel mengenai penulisan projek anda.
Susun dahan
Daripada kepentingannya, untuk tidak tersesat dalam cawangan dan susunannya dalam repositori, saya memutuskan untuk menamakan semula mereka dengan menambahkan awalan STEP_{number} . Sebagai contoh, kami mempunyai tiga cawangan sebagai tambahan kepada yang utama:- JRTB-0
- JRTB-2
- JRTB-3
- STEP_1_JRTB-0 - langkah pertama
- STEP_2_JRTB-2 - langkah kedua
- STEP_3_JRTB-3 - langkah ketiga
Sedikit tentang Docker
Apa itu Docker? Ringkasnya, ia adalah alat yang anda gunakan dengan cepat dan selamat menggunakan (mengerahkan) aplikasi, mewujudkan untuk mereka infrastruktur tertutup yang hanya diperlukan untuk mereka. Masih sukar, saya faham. Secara umum, Docker boleh difahami sebagai platform pembangunan di mana anda boleh bekerja dengan cepat dan cekap. Docker boleh difahami sebagai program yang berjalan pada pelayan. Program ini mempunyai keupayaan untuk menyimpan bekas dengan aplikasi. Apakah bekas? Ini adalah infrastruktur yang berasingan di mana anda boleh menambah semua yang anda perlukan. Sebagai contoh, untuk aplikasi Java kita memerlukan JRE untuk menjalankan aplikasi, bekas akan mempunyai ini, kita akan memerlukan beberapa perisian lain - kita boleh menambah ini. Atau mungkin kita memerlukan Linux dan bekas servlet Tomcat. Ini juga boleh dilakukan. Bekas dibuat berdasarkan imej: iaitu, ini adalah templat khusus yang mengandungi semua yang diperlukan untuk membuat bekas Docker. Bagaimana untuk mencipta imej ini? Dalam kes kami, kami perlu mencipta Dockerfile pada akar projek yang menerangkan perkara yang sepatutnya ada dalam bekas. Memandangkan kami tidak mahu mendedahkan token bot di mana-mana sahaja, kami perlu meneruskannya setiap kali kami mahu menggunakan aplikasi. Anda boleh membaca lebih lanjut mengenai topik ini di sini dan di sini .Kami menulis JRTB-13
Kami perlu menyediakan proses penempatan yang cepat dan mudah untuk aplikasi kami kepada pelayan. Iaitu, untuk mesin yang berfungsi 24/7. Mari kita ambil Docker sebagai asas. Tetapi tiada tugas dalam senarai kami yang akan bertanggungjawab untuk menambah fungsi ini. Entah bagaimana saya terlepas ketika menciptanya. Tiada masalah, kami akan menciptanya sekarang. Pergi ke tab penciptaan isu pada GitHub dan pilih Permintaan Ciri: Tambahkan penerangan tugas, kriteria penerimaannya, tetapkan projek mana yang dimiliki oleh isu ini dan anda boleh mencipta isu baharu: Sekarang, untuk menunjukkan bahawa tugas itu telah diterima untuk kerja, tukar status tugas daripada Untuk dilakukan pada Sedang Dijalankan: Ini akan menjadi artikel yang sukar. Jika anda mempunyai sebarang masalah, tulis dalam komen: Saya akan memantau dan menjawabnya dengan sebaik mungkin. Ini akan menjadi Sokongan Pelanggan yang kecil :DMencipta fail Docker
Apakah fail docker? Untuk Docker, ini ialah skrip (arahan langkah demi langkah) tentang cara mencipta imej untuk bekas Docker. Untuk aplikasi kami berfungsi, kami memerlukan JDK, versi 11 pada masa itu. Iaitu, kita perlu mencari imej docker JDK 11 dan menambahnya pada imej kita. Ini adalah sesuatu yang serupa dengan cara kita menambah kebergantungan pada ingatan. Docker mempunyai DockerHub untuk tujuan ini . Untuk memuat turun imej secara tempatan, anda perlu mendaftar di sana. Lepas daftar, jom cari JDK11. Daripada apa yang saya dapati, ini ialah bekasnya: adoptopenjdk/openjdk11 . Perihalan bekas ini mempunyai perkara yang diperlukan untuk fail docker:FROM adoptopenjdk/openjdk11:ubi
RUN mkdir /opt/app
COPY japp.jar /opt/app
CMD ["java", "-jar", "/opt/app/japp.jar"]
Mari kita betulkan folder dari mana kita mengambil fail jar. Kami mempunyainya dalam folder sasaran selepas kami menjalankan tugas maven pakej mvn. Sebelum melakukan semua ini, berdasarkan cawangan utama yang dikemas kini, kami mencipta cawangan baharu untuk tugas kami: STEP_4_JRTB-13 . Sekarang anda boleh bekerja. Dalam akar projek, buat fail tanpa sambungan Dockerfile dan tambahkan yang berikut di dalam:
FROM adoptopenjdk/openjdk11:ubi
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
Baris pertama ialah imej akan berdasarkan - adoptopenjdk/openjdk11. Baris kedua adalah untuk menambah hujah pada imej bernama JAR_FILE, yang terletak dalam folder sasaran. Selain itu, folder semasa ditentukan oleh lokasi Dockerfile. Baris ketiga - salin balang projek kami ke dalam imej docker. Baris terakhir pada dasarnya mengandungi tatasusunan yang dibuat daripada arahan dalam terminal, yang dipisahkan oleh ruang. Iaitu, pada akhirnya perkara berikut akan dilaksanakan: “java -jar /app.jar” Untuk merahsiakan token bot, apabila memulakan bekas kita perlu lulus dua pembolehubah - nama bot dan tokennya. Untuk melakukan ini, kami akan menulis pertanyaan yang sepatutnya melancarkan projek kami dengan pembolehubah. Dan bagaimana untuk melakukannya? Anda perlu Google itu: berikut ialah pautan pertama dengan penerangan biasa. Apa yang kita nak buat? Kami mempunyai dua pembolehubah dalam fail application.properties yang kami takrifkan di sana:
- bot.nama pengguna
- bot.token
- Mari jalankan skrip bash.
- Skrip bash menjalankan docker-compose.
- Docker-compose melancarkan bekas docker dengan aplikasi kami.
- Bekas Docker menjalankan aplikasi kami.
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"]
Anda dapat melihat bahawa kami menambah dua baris dan mengemas kini ENTRYPOINT. Garisan:
ENV BOT_NAME=test.javarush_community_bot
ENV BOT_TOKEN=1375780501:AAE4A6Rz0BSnIGzeu896OjQnjzsMEG6_uso
mengisytiharkan pembolehubah di dalam fail pengekod. Secara lalai mereka mempunyai nilai yang ditentukan. Jika, apabila mencipta imej daripada fail docker ini, pembolehubah persekitaran dengan nama sedemikian diluluskan, nilainya akan berbeza. Dan dalam ENTRYPOINT kami menambah beberapa lagi elemen yang akan membaca pembolehubah persekitaran ini:
"-Dbot.username=${BOT_NAME}", "-Dbot.token=${BOT_TOKEN}"
Di sini anda boleh melihat bahawa di dalam baris, menggunakan binaan ${}, nilai BOT_NAME dan BOT_TOKEN akan dihantar. Seterusnya, kita perlu mengajar cara menerima dan menghantar pembolehubah ini kepada docker-compose.
Buat docker-compose.yml
Adalah baik untuk anda membaca tentang format YAML secara berasingan, jika tidak artikel itu sudah berkembang dengan pesat. Bagi kami, ini hanyalah satu lagi perihalan pembolehubah jenis .properties. Hanya dalam sifat ia ditulis melalui titik, tetapi dalam YAML ini dilakukan dengan lebih cantik sedikit. Sebagai contoh, seperti ini. Dua pembolehubah dalam .properties: javarush.telegram.bot.name=ivan javarush.telegram.bot.token=pupkin Tetapi dalam .yaml (sama seperti .yml) ia akan menjadi seperti ini:javarush:
telegram:
bot:
name: ivan
token: pupkin
Pilihan kedua lebih cantik dan boleh difahami. Ruang hendaklah betul-betul seperti yang ditunjukkan di atas. Mari menterjemahkan application.properties dan application.yml kami entah bagaimana. Mula-mula anda perlu menciptanya. Dalam akar projek, buat fail docker-compose.yml dan tulis yang berikut di sana:
version: '3.1'
services:
jrtb:
build:
context: .
environment:
- BOT_NAME=${BOT_NAME}
- BOT_TOKEN=${BOT_TOKEN}
restart: always
Baris pertama ialah versi docker-compose. services: mengatakan bahawa semua baris berikut selepas ini (akan dialihkan) merujuk kepada perkhidmatan yang kami konfigurasikan. Kami hanya mempunyai satu daripada ini setakat ini - aplikasi java yang dipanggil jrtb . Dan sudah di bawahnya semua tetapannya. Sebagai contoh, bina: konteks: . mengatakan bahawa kami akan mencari Dockerfile dalam direktori yang sama seperti docker-compose.yml. Tetapi bahagian persekitaran: akan bertanggungjawab untuk memastikan bahawa kami menghantar pembolehubah persekitaran yang diperlukan kepada Dockerfile. Hanya apa yang kita perlukan. Oleh itu, kami lulus pembolehubah di bawah. Docker-compose akan mencarinya dalam pembolehubah persekitaran operasi pelayan. Mari tambahkan mereka pada skrip bash.
Mencipta skrip bash
Langkah terakhir ialah membuat skrip bash. Buat fail yang dipanggil start.sh dalam akar projek dan tulis yang berikut di sana:#!/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 pertama diperlukan untuk semua skrip bash: ia tidak akan berfungsi tanpanya. Dan kemudian - hanya satu set arahan dalam terminal yang perlu dilaksanakan. Saya telah menambah komen dalam setiap arahan supaya ia harus jelas. Satu-satunya perkara yang saya ingin jelaskan ialah maksud $1 dan $2. Ini adalah dua pembolehubah yang akan diluluskan apabila skrip bash dilancarkan. Menggunakan arahan eksport, ia akan ditambahkan pada pembolehubah pelayan dan dibaca dalam docker-compose. Ini berfungsi untuk Ubuntu, mungkin bukan untuk Windows, tetapi saya tidak pasti. Sekarang anda perlu menambah skrip stop.sh, yang akan menghentikan kerja. Ia akan mengandungi beberapa baris:
#!/bin/bash
# Ensure, that docker-compose stopped
docker-compose stop
# Ensure, that the old application won't be deployed again.
mvn clean
Di sini kita berhenti mengarang docker dan membersihkan jarnik projek, yang telah sedia ada sejak binaan terakhir. Kami melakukan ini untuk memastikan projek kami dibina semula dengan tepat. Terdapat preseden, itulah sebabnya saya menambah) Akibatnya, kami mendapat 4 fail baharu:
- Dockerfile - fail untuk mencipta imej aplikasi kami;
- docker-compose.yml - fail dengan tetapan untuk cara kami melancarkan bekas kami;
- start.sh - skrip bash untuk menggunakan aplikasi kami;
- stop.sh ialah skrip bash untuk menghentikan aplikasi kami.
# Nota Keluaran ## 0.3.0-SNAPSHOT * JRTB-13: menambahkan proses penempatan pada projek ## 0.2.0-SNAPSHOT * JRTB-3: melaksanakan corak Perintah untuk mengendalikan arahan Bot Telegram ## 0.1.0-SNAPSHOT * JRTB -2: menambah bot telegram rintisan * JRTB-0: menambah projek rangka SpringBoot
Dan dalam README kami akan menambah perenggan baharu yang menerangkan cara menggunakan aplikasi kami:
## Proses Deployment semudah mungkin: Perisian yang diperlukan: - terminal untuk menjalankan skrip bash - docker - docker-compose untuk menggunakan aplikasi, beralih ke cawangan yang diperlukan dan jalankan skrip bash: $ bash start.sh ${bot_username} ${bot_token } Itu sahaja.
Sudah tentu, semuanya ditulis dalam bahasa Inggeris. Seperti biasa, dalam cawangan kami yang baru dibuat STEP_4_JRTB-13 kami membuat komitmen baharu dengan nama: JRTB-13: melaksanakan proses penempatan melalui docker dan menolaknya. Saya berhenti memikirkan secara terperinci perkara-perkara yang telah saya jelaskan dalam artikel sebelumnya. Saya tidak nampak guna mengulangi perkara yang sama. Selain itu, mereka yang mengetahuinya dan melakukannya sendiri tidak akan mempunyai sebarang soalan. Ini saya bercakap tentang cara membuat cawangan baharu, cara membuat komit, cara menolak komit ke repositori.
GO TO FULL VERSION