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.
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! 💪
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 ⛽️
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.
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! 👏
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 ⭐️
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