हरोकू + डोकर + स्प्रिंग बूट

निम्नलिखित हरकोको क्लाउड सेवा की मुफ्त आभासी मशीनों पर डॉकटराइज़्ड स्प्रिंग बूट एप्लिकेशन चलाने के मेरे अनुभव पर ध्यान केंद्रित करेगा। इस प्रदाता का एक मुख्य लाभ यह है कि यह ऑपरेशन के घंटों पर प्रतिबंध के साथ मुफ्त वर्चुअल मशीन बनाना संभव बनाता है और इसके लिए केवल पंजीकरण ही पर्याप्त है। यहां तक ​​कि भुगतान विवरण की भी पुष्टि करने की आवश्यकता नहीं है, हालांकि यदि आप उनकी पुष्टि करते हैं तो आप अतिरिक्त बोनस प्राप्त कर सकते हैं। आप यहां उनकी कीमत के बारे में अधिक पढ़ सकते हैं। मेरे दृष्टिकोण से, मुक्त संसाधनों के बारे में उनकी नीति में लगभग कोई एनालॉग नहीं है।

और इसलिए, जब आपने हरोकू पर एक एप्लिकेशन बनाया है, तो इसमें आपके कोड को तैनात करने के कई तरीके हैं

  • heroku git भंडार में प्रतिबद्ध
  • गिथब रिपोजिटरी के लिए बाइंड एप्लीकेशन
  • डॉकटर कंटेनर का उपयोग करना

अगला, हम इन विधियों में से अंतिम पर विचार करेंगे। जारी रखने के लिए, हमें निम्नलिखित अनुप्रयोगों की आवश्यकता होगी


इन उपकरणों में से आखिरी हमें कमांड लाइन से क्लाउड के साथ काम करने पर सभी ऑपरेशन करने का अवसर देगा।

हम स्प्रिंग प्रीलिफ़र के माध्यम से एक स्प्रिंग बूट एप्लिकेशन बनाकर शुरू करते हैं। निर्भरता के रूप में स्प्रिंग वेब स्टार्टर जोड़ें। यह पर्याप्त होना चाहिए।

उसी पैकेज में, जिसमें एप्लिकेशन का मुख्य वर्ग स्थित है, हम REST कंट्रोलर की सबसे सरल क्लास को जोड़ते हैं ताकि एप्लिकेशन किसी तरह जीवन के संकेत दिखा सके।

@RestController public class DemoController { @GetMapping("/check") public String check() { return "Application is alive"; } } 

Application.properties फ़ाइल में जोड़ें

 server.port=${PORT:8080} 

यह सेटिंग हरोकू पर कंटेनर को चलाने के लिए महत्वपूर्ण है। तथ्य यह है कि सेवा के आंतरिक नेटवर्क में, लॉन्च के समय एप्लिकेशन को कुछ मुफ्त पोर्ट पर लॉन्च किया जाता है, जिनमें से संख्या PORT पर्यावरण चर के माध्यम से प्रसारित होती है। इसके अलावा, एप्लिकेशन को लॉन्च के बाद पहले 60 सेकंड के भीतर इस पोर्ट से कनेक्ट करने का समय होना चाहिए, अन्यथा यह बंद हो जाएगा।

Pom.xml फ़ाइल के प्लगइन्स अनुभाग में , Spotify से dockerfile-plugin जोड़ें, जो हमें हमारे एप्लिकेशन की docker छवि के असेंबली में मदद करेगा।

 <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> 

इस तरह के प्लग-इन कॉन्फ़िगरेशन छवि को स्थापित लक्ष्य के हिस्से के रूप में बनाना शुरू कर देगा, और छवि को हेरोकू डॉकरी रिपॉजिटरी में तैनाती लक्ष्य के हिस्से के रूप में धकेल देगा। वैसे, मावेन की तैनाती को चलाने में सक्षम होने के लिए, आपको इकट्ठे जार फ़ाइल की तैनाती को अक्षम करने की आवश्यकता है (हमें इसे कहीं भी अपलोड करने की आवश्यकता नहीं है)। आप pom.xml फ़ाइल के गुण अनुभाग में maven.deploy.skip विकल्प का उपयोग करके ऐसा कर सकते हैं।

 <properties> <java.version>1.8</java.version> <maven.deploy.skip>true</maven.deploy.skip> </properties> 

अगला, प्रोजेक्ट के रूट फ़ोल्डर में एक डॉकफाइल बनाएं (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"] 

जैसा कि आप देख सकते हैं, हम असेंबल्ड जार फ़ाइल का नाम यहाँ असेंबली (ARG JAR_FILE) के तर्क के रूप में देते हैं। इस तर्क का मान मावेन प्लगइन सेटिंग्स में सेट किया गया है।

Entpoint.sh स्क्रिप्ट को प्रोजेक्ट के रूट में भी रखा जाएगा और यह बहुत सरल होगा।

 #!/usr/bin/env sh /usr/bin/java -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Xmx256m -Xss512k -XX:MetaspaceSize=100m -jar /apps/app.jar 

स्मृति सीमित करने वाले JVM मापदंडों और विशेष रूप से पहले दो मापदंडों पर ध्यान दें। उनमें एक विशेष मेमोरी प्रबंधन मोड शामिल है, जो आवश्यक है जब डॉकर कंटेनर के अंदर एक जावा एप्लिकेशन लॉन्च किया जाता है। फ्री हरोकू मशीनों पर एप्लिकेशन को उपलब्ध मेमोरी 512MB तक सीमित है। इस सीमा से अधिक आवेदन समाप्त हो जाएगा। यदि आप Java 9+ का उपयोग करना चाहते हैं, तो पहले दो विकल्पों को एक -XX: + UseContainerSupport से बदलना होगा । आप यहां और पढ़ सकते हैं। यह भी लगता है कि जावा 8 में एक प्रयोगात्मक विशेषता के लिए कंटेनर समर्थन बंद हो गया है । यहां विवरण।

इन चरणों को पूरा करने के बाद, शुरू करने का प्रयास करें
 mvnw clean install 

यदि सब कुछ सही ढंग से किया जाता है, तो इसके लिए एप्लिकेशन और डॉकटर छवि का निर्माण करना चाहिए। यदि कमांड का उपयोग करके छवि बनाई गई थी, तो आप जांच सकते हैं
 docker images 

अब बादल स्थापित करते हैं और इसके लिए पहले से ही उल्लेख किए गए हरोकू सीएलआई का उपयोग करते हैं। बेशक, इन चरणों को पूरा करने के लिए, आपको हरोकू पर एक खाता पंजीकृत करना होगा।

सबसे पहले, हमें लॉग इन करने की आवश्यकता है। ऐसा करने के लिए, कमांड चलाएँ
 heroku login 
और नीचे दिए गए निर्देशों का पालन करें।

उसके बाद, आपको हरोकू डॉकर रिपॉजिटरी में लॉग इन करना होगा। ऐसा करने के लिए, कमांड चलाएँ
 heroku container:login 
इसके बिना, हम अपनी डॉक छवि को धक्का नहीं दे सकते।

अगला, हम कमांड का उपयोग करके एप्लिकेशन बनाते हैं
 heroku apps:create <app-name> 

कृपया ध्यान दें कि एप्लिकेशन का नाम pom.xml में निर्दिष्ट विरूपण साक्ष्य के नाम से मेल खाना चाहिए। शायद यहां आपको आवेदन के नाम का चयन करने में कुछ समय बिताना होगा, जो अभी भी किसी के कब्जे में नहीं है।

एप्लिकेशन बनाने के बाद, रन करें
 mvnw clean deploy 

और एप्लिकेशन के निर्मित होने की प्रतीक्षा करें और docker की छवि को आगे बढ़ाएं। कृपया ध्यान दें कि पुश केवल तभी संभव है जब छवि नाम रजिस्ट्री से जुड़ा हो ।heroku.com/<app-name>/ web टेम्पलेट और नाम के साथ एक एप्लिकेशन <app-name> बनाया गया था। यदि आप मावेन प्लगइन सेटिंग्स को देखते हैं, तो आप देखेंगे कि सब कुछ ठीक उसी तरह किया गया है।

छवि को तैनात करने और लॉन्च करने का अंतिम चरण कमांड है
 heroku container:release web --app=<app-name> 

उसके बाद, लिंक https: // <app-name> .herokuapp.com / check को फॉलो करें और थोड़ी देर बाद आपको वह टेक्स्ट दिखाई देगा जो कंट्रोलर हैंडलर द्वारा प्रदर्शित किया जाएगा।

ब्राउज़र में रनिंग एप्लिकेशन खोलने का एक और तरीका है कमांड का उपयोग करना
 heroku open --app=<app-name> 

यदि कुछ काम नहीं करता है, तो लॉग को हरोकू वेब इंटरफ़ेस या कमांड के साथ देखा जा सकता है
 heroku logs 

वह सब है! आशा है कि यह मार्गदर्शिका मददगार रही है!

कुछ उपयोगी लिंक


1. हरोकू सीएलआई प्रलेखन devcenter.heroku.com/categories/command-line
2. Dockerized Java devcenter.heroku.com/articles/java-memory-issues में मेमोरी प्रबंधन की सुविधाओं के बारे में
3. devcenter.heroku.com/categories/deploying-with-docker
4. हरोकू से एक उदाहरण जावा एप्लिकेशन। एक अलग परिनियोजन विधि है, लेकिन यह github.com/heroku/java-getting-started को देखने के लिए उपयोगी है
5. हरोकू का जावा एप्लिकेशन लॉन्च करने की मार्गदर्शिका (डोकर के माध्यम से नहीं) devcenter.heroku.com/articles/getting-started-with-java?singlepage=true
6. डॉकर habr.com/en/company/hh/blog/450954 पर जावा का उपयोग करने पर अच्छी सामग्री
7. डॉकर कंटेनरों में जावा को लॉन्च करने के विकल्पों के बारे में www.oracle.com/technetwork/java/javase/8u191-relnotes-5032181.html#JDK-8146115

Source: https://habr.com/ru/post/hi459472/


All Articles