Berikut ini akan fokus pada pengalaman saya menjalankan aplikasi Boot Musim Semi bersandar pada mesin virtual gratis layanan cloud
Heroku . Salah satu keuntungan utama dari penyedia ini adalah memungkinkan untuk membuat mesin virtual gratis dengan batasan jam kerja, dan untuk ini, hanya pendaftaran yang cukup. Bahkan detail pembayaran tidak perlu dikonfirmasi, meskipun jika Anda mengonfirmasinya, Anda bisa mendapatkan bonus tambahan. Anda dapat membaca lebih lanjut tentang harganya di
sini . Dari sudut pandang saya, kebijakan mereka mengenai sumber daya gratis hampir tidak memiliki analog.
Jadi, setelah Anda membuat aplikasi di Heroku, ada
beberapa cara untuk menggunakan kode Anda di dalamnya
- komit di repositori heroku git
- ikat aplikasi ke repositori github
- menggunakan wadah buruh pelabuhan
Selanjutnya, kami akan mempertimbangkan yang terakhir dari metode ini. Untuk melanjutkan, kita perlu aplikasi berikut
Alat terakhir ini akan memberi kita kesempatan untuk melakukan semua operasi untuk bekerja dengan cloud dari baris perintah.
Kami mulai dengan membuat aplikasi Spring Boot melalui
Spring Initializr . Sebagai dependensi tambahkan Spring Web Starter. Itu sudah cukup.
Dalam paket yang sama di mana kelas utama aplikasi berada, kami menambahkan kelas paling sederhana dari pengendali REST sehingga aplikasi entah bagaimana menunjukkan tanda-tanda kehidupan.
@RestController public class DemoController { @GetMapping("/check") public String check() { return "Application is alive"; } }
Tambahkan ke file
application.properties server.port=${PORT:8080}
Pengaturan ini sangat penting untuk menjalankan wadah di Heroku. Faktanya adalah bahwa dalam jaringan internal layanan, aplikasi diluncurkan pada beberapa port bebas pada saat peluncuran, yang jumlahnya ditransmisikan melalui variabel lingkungan PORT. Selain itu, aplikasi harus memiliki waktu untuk terhubung ke port ini dalam
60 detik pertama setelah peluncuran, jika tidak maka akan berhenti.
Di bagian
plugins dari file
pom.xml kami menambahkan
dockerfile-plugin dari Spotify, yang akan membantu kami dengan perakitan gambar buruh pelabuhan dari aplikasi kami.
<plugin> <groupId>com.spotify</groupId> <artifactId>dockerfile-maven-plugin</artifactId> <version>1.4.6</version> <executions> <execution> <id>default</id> <goals> <goal>build</goal> <goal>push</goal> </goals> </execution> </executions> <configuration> <repository>registry.heroku.com/${project.artifactId}/web</repository> <tag>latest</tag> <buildArgs> <JAR_FILE>${project.build.finalName}.jar</JAR_FILE> </buildArgs> </configuration> </plugin>
Konfigurasi plug-in seperti itu akan mulai membangun gambar sebagai bagian dari target instal, dan mendorong gambar ke dalam repositori buruh pelabuhan Heroku sebagai bagian dari target penyebaran. Ngomong-ngomong, untuk dapat menjalankan maven deploy, Anda harus menonaktifkan penyebaran file jar yang sudah dirakit (kami tidak perlu mengunggahnya ke mana saja). Anda dapat melakukan ini menggunakan opsi
maven.deploy.skip di bagian properti file pom.xml.
<properties> <java.version>1.8</java.version> <maven.deploy.skip>true</maven.deploy.skip> </properties>
Selanjutnya, buat
Dockerfile di folder root proyek (di sebelah pom.xml)
FROM openjdk:8-jdk-alpine ARG JAR_FILE RUN mkdir -p /apps COPY ./target/${JAR_FILE} /apps/app.jar COPY ./entrypoint.sh /apps/entrypoint.sh RUN chmod +x /apps/entrypoint.sh CMD ["/apps/entrypoint.sh"]
Seperti yang Anda lihat, kami meneruskan nama file jar yang dirakit di sini sebagai argumen ke majelis (ARG JAR_FILE). Nilai argumen ini diatur dalam pengaturan plugin pakar.
Script
entrypoint.sh juga akan ditempatkan di root proyek dan itu akan sangat sederhana.
Perhatikan parameter JVM yang membatasi memori, dan terutama untuk dua parameter pertama. Mereka termasuk mode manajemen memori khusus, yang diperlukan ketika aplikasi java diluncurkan di dalam wadah Docker. Memori yang tersedia untuk aplikasi pada mesin Heroku gratis dibatasi hingga 512MB. Melebihi batas ini akan mengakhiri aplikasi. Jika Anda ingin menggunakan Java 9+, maka dua opsi pertama harus diganti dengan satu
-XX: + UseContainerSupport . Anda dapat membaca lebih lanjut di
sini . Tampaknya juga dukungan kontainer tidak lagi menjadi fitur eksperimental di Java 8.
Detail di sini.Setelah menyelesaikan langkah-langkah ini, coba mulai
mvnw clean install
Jika semuanya dilakukan dengan benar, maka aplikasi dan gambar buruh pelabuhan untuk itu harus dibangun. Anda dapat memeriksa apakah gambar itu dibuat menggunakan perintah
docker images
Sekarang mari kita atur cloud dan gunakan Heroku CLI yang sudah disebutkan untuk ini. Tentu saja, untuk menyelesaikan langkah-langkah ini, Anda harus mendaftarkan akun di Heroku.
Pertama-tama, kita harus masuk. Untuk melakukan ini, jalankan perintah
heroku login
dan ikuti instruksi di bawah ini.
Setelah itu, Anda harus masuk ke repositori heroku Docker. Untuk melakukan ini, jalankan perintah
heroku container:login
tanpa ini, kita tidak dapat mendorong gambar buruh pelabuhan kami.
Selanjutnya, kita membuat aplikasi menggunakan perintah
heroku apps:create <app-name>
Harap dicatat bahwa nama aplikasi harus cocok dengan nama artefak yang ditentukan dalam
pom.xml . Mungkin di sini Anda harus meluangkan waktu untuk memilih nama aplikasi, yang masih belum ditempati oleh siapa pun.
Setelah aplikasi dibuat, jalankan
mvnw clean deploy
dan tunggu aplikasi yang akan dibangun dan dorong gambar buruh pelabuhan terjadi. Harap dicatat bahwa push hanya dimungkinkan jika nama gambar cocok dengan templat
registry.heroku.com/<app-name>/web dan aplikasi dengan nama <app-name> telah dibuat. Jika Anda melihat pengaturan plugin maven, Anda akan melihat bahwa semuanya dilakukan persis seperti itu.
Langkah terakhir untuk gambar yang akan digunakan dan diluncurkan adalah perintah
heroku container:release web --app=<app-name>
Setelah itu, ikuti tautan
https: // <app-name> .herokuapp.com / periksa dan setelah beberapa saat Anda akan melihat teks yang akan ditampilkan oleh pengendali pengendali.
Cara lain untuk membuka aplikasi yang sedang berjalan di browser adalah dengan menggunakan perintah
heroku open --app=<app-name>
Jika sesuatu tidak berfungsi, log dapat dilihat di antarmuka Web Heroku atau dengan perintah
heroku logs
Itu saja! Semoga panduan ini bermanfaat!
Beberapa tautan bermanfaat
1.
Dokumentasi Heroku CLI
devcenter.heroku.com/categories/command-line2. Tentang fitur manajemen memori di Java
devcenter.heroku.com/articles/java-memory-issues Java
3.
devcenter.heroku.com/categories/deploying-with-docker4. Contoh aplikasi Java dari Heroku. Ada metode penyebaran yang berbeda, tetapi berguna untuk melihat
github.com/heroku/java-getting-started5. Panduan Heroku untuk meluncurkan aplikasi Java (bukan melalui Docker)
devcenter.heroku.com/articles/getting-started-with-java?singlepage=true6. Materi yang Baik tentang Menggunakan Java di Docker
habr.com/en/company/hh/blog/4509547. Tentang opsi untuk meluncurkan Java dalam wadah Docker
www.oracle.com/technetwork/java/javase/8u191-relnotes-5032181.html#JDK-8146115