Wie man Java-Entwickler wird: Tipps und Lebenslauf für Anfänger

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Java-Anwendung auf einem VPS bereitstellen: Fortgeschrittenes Niveau mit CI/CD, Docker und SSL



In diesem Artikel betrachten wir den fortgeschrittenen Prozess der Bereitstellung einer Java-Anwendung auf einem VPS (Virtual Private Server). Wir werden uns nicht mit grundlegenden Schritten wie der Installation des JDK oder dem Ausführen einer JAR-Datei aufhalten. Stattdessen konzentrieren wir uns auf die Einrichtung einer CI/CD-Pipeline, die Containerisierung mit Docker, die Verwendung von Nginx als Reverse-Proxy, das automatische Abrufen von SSL-Zertifikaten sowie die Überwachung und Fehlertoleranz der Anwendung.



Es wird vorausgesetzt, dass Sie bereits einen VPS mit Ubuntu 22.04 LTS, eine Basisdomäne besitzen und mit der Linux-Kommandozeile vertraut sind. Alle Codebeispiele sind in Java 17+ mit Spring Boot geschrieben, aber die Prinzipien gelten für jedes Java-Framework.



1. Containerisierung einer Java-Anwendung mit Docker



Der erste Schritt zur fortgeschrittenen Bereitstellung ist das Verpacken der Anwendung in einen Docker-Container. Dies gewährleistet Reproduzierbarkeit der Umgebung und vereinfacht die Bereitstellung.



Erstellen Sie ein Dockerfile im Projektstammverzeichnis:



# Use multi-stage build to reduce the size of the final imageFROM maven:3.9.6-eclipse-temurin-17 AS builderWORKDIR /appCOPY pom.xml .RUN mvn dependency:go-offlineCOPY src ./srcRUN mvn clean package -DskipTests

FROM eclipse-temurin:17-jre-alpineWORKDIR /appCOPY --from=builder /app/target/*.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]


docker-compose.yml-Datei für den Betrieb mit einer Datenbank:



version: '3.8'services:  app:    build: .    ports:      - "8080:8080"    environment:      - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/mydb      - SPRING_DATASOURCE_USERNAME=user      - SPRING_DATASOURCE_PASSWORD=pass    depends_on:      - db    restart: unless-stopped

db: image: postgres:15-alpine environment: POSTGRES_DB: mydb POSTGRES_USER: user POSTGRES_PASSWORD: pass volumes: - pgdata:/var/lib/postgresql/data restart: unless-stopped

volumes: pgdata:


Nach dem Erstellen des Images mit dem Befehl docker compose build haben Sie einen containerbereit zur Bereitstellung.



2. Einrichten einer CI/CD-Pipeline (GitHub Actions)



Die Automatisierung der Bereitstellung ist ein Schlüsselelement der fortgeschrittenen Stufe. Wir verwenden GitHub Actions, um das Image zu erstellen, zu testen und an den Server zu senden.



Erstellen Sie die Datei .github/workflows/deploy.yml:



name: Deploy Java App to VPS

on: push: branches: [ main ]

jobs: build-and-deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4

- name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin'

- name: Build with Maven run: mvn clean package

- name: Build Docker image run: docker build -t myapp:latest .

- name: Save Docker image to tar run: docker save myapp:latest | gzip > myapp.tar.gz

- name: Copy image to VPS via SCP uses: appleboy/scp-action@v0.1.7 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} source: "myapp.tar.gz" target: "/opt/app/"

- name: Deploy on VPS uses: appleboy/ssh-action@v1.0.3 with: host: ${{ secrets.VPS_HOST }} username: ${{ secrets.VPS_USER }} key: ${{ secrets.VPS_SSH_KEY }} script: | cd /opt/app docker load < myapp.tar.gz docker compose down docker compose up -d rm myapp.tar.gz


Vergessen Sie nicht, die Secrets VPS_HOST, VPS_USER, VPS_SSH_KEY in den Einstellungen hinzuzufügen

Blogs

Buchempfehlungen