VPS पर Java एप्लिकेशन का डिप्लॉयमेंट: CI/CD, Docker और SSL के साथ उन्नत स्तर
\n\nइस लेख में, हम VPS (वर्चुअल प्राइवेट सर्वर) पर Java एप्लिकेशन के डिप्लॉयमेंट की उन्नत प्रक्रिया पर विचार करेंगे। हम JDK इंस्टॉल करने या JAR फ़ाइल चलाने जैसे बुनियादी चरणों पर नहीं रुकेंगे। इसके बजाय, हम CI/CD पाइपलाइन की सेटअप, Docker के साथ कंटेनरीकरण, रिवर्स प्रॉक्सी के रूप में Nginx का उपयोग, स्वचालित SSL प्रमाणपत्र प्राप्त करना, साथ ही एप्लिकेशन की मॉनिटरिंग और फॉल्ट टॉलरेंस पर ध्यान केंद्रित करेंगे।
\n\nयह माना जाता है कि आपके पास पहले से ही Ubuntu 22.04 LTS वाला VPS, एक बेसिक डोमेन है, और आप Linux कमांड लाइन से परिचित हैं। सभी कोड उदाहरण Spring Boot के साथ Java 17+ में लिखे गए हैं, लेकिन सिद्धांत किसी भी Java फ्रेमवर्क पर लागू होते हैं।
\n\n1. Docker के साथ Java एप्लिकेशन का कंटेनरीकरण
\n\nउन्नत डिप्लॉयमेंट की ओर पहला कदम एप्लिकेशन को Docker कंटेनर में पैकेज करना है। यह वातावरण की पुनरुत्पादन क्षमता सुनिश्चित करता है और डिप्लॉयमेंट को सरल बनाता है।
\n\nप्रोजेक्ट की रूट में Dockerfile बनाएं:
\n\n# फाइनल इमेज का आकार कम करने के लिए मल्टी-स्टेज बिल्ड का उपयोग करें\nFROM maven:3.9.6-eclipse-temurin-17 AS builder\nWORKDIR /app\nCOPY pom.xml .\nRUN mvn dependency:go-offline\nCOPY src ./src\nRUN mvn clean package -DskipTests\n\nFROM eclipse-temurin:17-jre-alpine\nWORKDIR /app\nCOPY --from=builder /app/target/*.jar app.jar\nEXPOSE 8080\nENTRYPOINT ["java", "-jar", "app.jar"]\n\nडेटाबेस के साथ चलाने के लिए docker-compose.yml फ़ाइल:
\n\nversion: '3.8'\nservices:\n app:\n build: .\n ports:\n - "8080:8080"\n environment:\n - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/mydb\n - SPRING_DATASOURCE_USERNAME=user\n - SPRING_DATASOURCE_PASSWORD=pass\n depends_on:\n - db\n restart: unless-stopped\n\n db:\n image: postgres:15-alpine\n environment:\n POSTGRES_DB: mydb\n POSTGRES_USER: user\n POSTGRES_PASSWORD: pass\n volumes:\n - pgdata:/var/lib/postgresql/data\n restart: unless-stopped\n\nvolumes:\n pgdata:\n\ndocker compose build कमांड से इमेज बनाने के बाद, आपको डिप्लॉय करने के लिए तैयार कंटेनर मिलेगा।
2. CI/CD पाइपलाइन की सेटअप (GitHub Actions)
\n\nडिप्लॉयमेंट का ऑटोमेशन उन्नत स्तर का एक प्रमुख तत्व है। हम बिल्ड, टेस्ट और सर्वर पर इमेज भेजने के लिए GitHub Actions का उपयोग करते हैं।
\n\n.github/workflows/deploy.yml फ़ाइल बनाएं:
\n\nname: Deploy Java App to VPS\n\non:\n push:\n branches: [ main ]\n\njobs:\n build-and-deploy:\n runs-on: ubuntu-latest\n steps:\n - uses: actions/checkout@v4\n\n - name: Set up JDK 17\n uses: actions/setup-java@v4\n with:\n java-version: '17'\n distribution: 'temurin'\n\n - name: Build with Maven\n run: mvn clean package\n\n - name: Build Docker image\n run: docker build -t myapp:latest .\n\n - name: Save Docker image to tar\n run: docker save myapp:latest | gzip > myapp.tar.gz\n\n - name: Copy image to VPS via SCP\n uses: appleboy/scp-action@v0.1.7\n with:\n host: ${{ secrets.VPS_HOST }}\n username: ${{ secrets.VPS_USER }}\n key: ${{ secrets.VPS_SSH_KEY }}\n source: "myapp.tar.gz"\n target: "/opt/app/"\n\n - name: Deploy on VPS\n uses: appleboy/ssh-action@v1.0.3\n with:\n host: ${{ secrets.VPS_HOST }}\n username: ${{ secrets.VPS_USER }}\n key: ${{ secrets.VPS_SSH_KEY }}\n script: |\n cd /opt/app\n docker load < myapp.tar.gz\n docker compose down\n docker compose up -d\n rm myapp.tar.gz\n\nसेटिंग्स में VPS_HOST, VPS_USER, VPS_SSH_KEY सीक्रेट जोड़ना न भूलें।