paint-brush
So erstellen Sie eine CI/CD-Pipeline mit GitHub und AWS EC2by@wesleybaxterhuber
1,164
1,164

So erstellen Sie eine CI/CD-Pipeline mit GitHub und AWS EC2

Wes Huber6m2024/04/30
Read on Terminal Reader

Diese Technik ermöglicht es Ihrem EC2-Server im Wesentlichen, auf Änderungen zu reagieren, die an Ihr Github-Repository gesendet werden.
featured image - So erstellen Sie eine CI/CD-Pipeline mit GitHub und AWS EC2
Wes Huber HackerNoon profile picture

Hallo zusammen, heute möchte ich ein Tutorial zu einer meiner bevorzugten Methoden zum Bereitstellen einer schnellen REST-API mit NodeJS/Express auf einem Amazon EC2-Server machen. Mit dieser Technik kann Ihr EC2-Server im Wesentlichen auf Änderungen reagieren, die an Ihr GitHub-Repository gesendet werden.

Das Wichtigste zuerst: „Hallo Welt“

Erstellen Sie ein neues Verzeichnis auf Ihrem Computer, in dem eine NodeJS/Express-App gehostet wird. Ich nenne meins rekognition


Öffnen Sie ein Terminal und führen Sie diesen Befehl aus, um ein package.json zu initialisieren npm init -y


Installieren Sie express.js npm i express


Erstellen Sie einen einfachen Express-Server mit einem „Hallo Welt“-Befehl auf der Standardroute

 const express = require('express'); const app = express(); const port = 3000; app.get('/', (req, res) => { res.send('Hello World!'); }); app.listen(port, () => { console.log(`Example app listening at http://localhost:${port}`); });

Stellen Sie durch Testen sicher, dass unter http://localhost:3000/ „Hallo Welt!“ angezeigt wird.


Gute Arbeit, Schritt eins abgeschlossen! 💪

Als nächstes übertragen wir unseren Code auf GitHub

Initialisieren Sie ein Git-Repo in Ihrem Verzeichnis und führen Sie Ihren ersten Commit durch —

 git init git add . git commit -m "First commit"


Erstellen Sie ein Remote-Repository auf Ihrem GitHub-Konto

Fügen Sie das neue Repo als Ursprung hinzu und pushen Sie Ihren Zweig.

 git remote add origin <REMOTE_REPOSITORY_URL> git push -u origin master


Ersetzen Sie <REMOTE_REPOSITORY_URL> durch den Link zum Remote-Repository, das Sie gerade erstellt haben.


Möglicherweise müssen Sie Ihre Repository-Einstellungen ändern, um „Master“ statt „Main“ als Standardzweig zu verwenden.

Nachdem Sie dies getan haben, können Sie den Hauptzweig löschen.


Schritt 2: Fertig! Wir kochen mit Gas ⛽️

Gehen wir in die Cloud – Richten Sie den Ec2-Server ein

Hier sind die Schritte zum Starten Ihrer EC2-Instance:



  • Navigieren Sie zum EC2-Dashboard und starten Sie eine neue Instanz.

  • Wählen Sie ein geeignetes AMI (Amazon Machine Image). Ich verwende Amazon Linux 2.


  • Wählen Sie einen Instanztyp aus (z. B. t2.micro, wenn Sie die kostenlose Stufe nutzen).


  • Konfigurieren Sie die Instanzdetails, fügen Sie Speicher hinzu und fügen Sie nach Bedarf Tags hinzu.


  • Konfigurieren Sie eine Sicherheitsgruppe, um eingehenden Datenverkehr auf den benötigten Ports zuzulassen (mindestens TCP-Port 22 für SSH und den Port Ihrer Anwendung und dann 3000 für Webdatenverkehr).


  • Überprüfen und starten Sie die Instanz. Stellen Sie sicher, dass Sie das für den SSH-Zugriff verwendete Schlüsselpaar speichern.


Testen wir nun die Anmeldung bei Ihrem Server per SSH auf einem Terminal:

ssh ec2-user@<YOUR_SERVER_IP> -i <YOUR_PRIVATE_KEY>.pem


Ersetzen Sie die Variablen dort durch die Werte, die Sie für Ihre EC2-Instanz definiert haben.

Wenn Sie dies sehen, haben Sie eine Verbindung zu Ihrem Server hergestellt, herzlichen Glückwunsch! 👏

Wir sind aber noch nicht fertig – wir fangen gerade erst an 😏

Lassen Sie uns NodeJS auf unserem Server installieren:
sudo yum install -y nodejs


Installieren Sie pm2 global auf unserem Server über npm

sudo npm i -g pm2


Installieren Sie Git auf dem Server und konfigurieren Sie Ihre Anmeldeinformationen:

sudo yum install git -y

 git config --global user.name "Your Name" git config --global user.email "[email protected]"


Okay, jetzt erstellen wir einen Ordner var/www/ , falls er noch nicht existiert:

sudo mkdir -p /var/www


Fügen Sie dann unserem EC2-Benutzer den Besitz hinzu:

sudo chown -R ec2-user:ec2-user /var/www


Navigieren Sie vom Stammverzeichnis Ihres Servers zum Verzeichnis – nicht zum /home-Ordner 👌 cd ~/var/www


Von hier aus klonen wir nun unser Git-Repository: git clone https://github.com/USERNAME/REPO_NAME.git YOUR_PROJECT_DIRECTORY

Ersetzen Sie [USERNAME] [REPO_NAME] und [YOUR_PROJECT_DIRECTORY] durch Ihre eigenen Werte.


Als nächstes wechseln wir das Verzeichnis in unser Repository, sodass cd YOUR_PROJECT_DIRECTORY die Datei ecosystem.config.js für unser pm2-Setup erstellen kann:

nano ecosystem.config.js


Es sieht aus wie das:

 module.exports = { apps : [{ name: "my-app", // A name for your application script: "app.js", // The script file to launch the app instances: "max", // This can be set to the number of CPU cores to use, or "max" to use all available autorestart: true, // Automatically restart app if it crashes watch: false, // Enable/disable watching file changes for automatic restart max_memory_restart: '1G', // Optional: Restart app if it reaches a memory limit env: { NODE_ENV: "development", }, env_production: { NODE_ENV: "production", } }] };

Cool, okay – wenn das erstellt und gespeichert ist, starten wir die App mit pm2:

pm2 start ecosystem.config.js


Jetzt können wir prüfen, ob wir von unserem Server auf Port 3000 ein „Hallo Welt!“ erhalten:

Damit pm2 beim Neustart des Servers automatisch gestartet wird, führen wir Folgendes aus:

 pm2 save pm2 startup

Um zu überprüfen, ob Ihr Server läuft, können Sie pm2 status ausführen. Die Dokumentation zu pm2 finden Sie hier


Wenn du es bis hierhin geschafft hast, bist du ein Superstar ⭐️

Integration mit GitHub Actions

Dies ist der letzte Schritt in unserem Prozess. Wir werden eine .yml Datei für Github-Aktionen erstellen, um unseren Server jedes Mal zu aktualisieren, wenn eine Änderung in unseren Master-Zweig übertragen wird.

Gehen Sie in Ihrem Repository zur Registerkarte „Aktionen“ und erstellen Sie einen neuen benutzerdefinierten Workflow. Ich nenne meinen nodejs.yml


Hier ist die .yml-Datei zum Aktualisieren des Repo und Neustarten von pm2:

 name: Node.js CI/CD on Amazon Linux on: push: branches: [ master ] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Install dependencies run: npm install - name: Deploy to AWS EC2 uses: appleboy/scp-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} source: "./" # This now correctly points to the current directory target: "/var/www/your_project_directory" - name: Restart PM2 application uses: appleboy/ssh-action@master with: host: ${{ secrets.REMOTE_HOST }} username: ${{ secrets.REMOTE_USER }} key: ${{ secrets.SSH_PRIVATE_KEY }} script: | cd /var/www/your_project_directory pm2 reload all # This command restarts your application

Stellen Sie sicher, dass Sie „Ihr Projektverzeichnis“ aktualisieren.


Zuletzt müssen Sie diese Umgebungsgeheimnisse hinzufügen. REMOTE_HOST ist die IP-Adresse Ihres Servers; REMOTE_USER ist ec2-user für Amazon Linux 2 AMI. Fügen Sie dann den Inhalt Ihrer PEM-Datei als SSH_PRIVATE_KEY ein.


Dies alles können Sie in den Repository-Einstellungen tun:

Das ist es! Wir sind fertig, juhuu 😁


Sie können dies alles testen, indem Sie die Nachricht „Hallo Welt“ ändern und diese Änderung in Ihren Master-Zweig übertragen. Anschließend sollten Sie das Update unter http://your.ip.address:3000 sehen.


Das Einrichten ist ein bisschen aufwändig, aber bei der Entwicklung ist es wirklich praktisch, eine einfache CI/CD-Pipeline zu haben, die Änderungen automatisch an Ihren REST-API-Server überträgt. Auf diese Weise können Sie die Änderungen schnell live bereitstellen und sie im Frontend Ihrer Web-/Mobilanwendung sehen.


Lassen Sie mich in den Kommentaren wissen, ob dies hilfreich war, und danke fürs Lesen!!


Entspann dich,

- Wir s