
Wie man Fastify APIs dockerisiert und deployed

Lerne in dieser Schritt-für-Schritt-Anleitung, wie du eine Fastify-App dockerisierst. Entdecke ein minimales Dockerfile-Setup, eine .dockerignore-Datei und die Befehle, um deine App in einem Container zu bauen und auszuführen. Verstehe die Dockerfile-Anweisungen und deploye deine containerisierte Fastify-App mühelos.
Falls du nur zum Kopieren und Einfügen hier bist, hier ist das fertige Dockerfile, das ein Image für deine Fastify-App erstellt:
FROM node:20-alpine
WORKDIR /app
COPY package-lock.json package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Und hier ist die .dockerignore-Datei, die du verwenden solltest:
node_modules
npm-debug.log
Um das Image zu bauen und auszuführen, verwende diese Befehle:
docker build -t fastify-app .
docker run -p 3000:3000 fastify-app
Nicht nur zum Kopieren und Einfügen hier? Lass uns durchgehen, was im Dockerfile passiert!
Das Setup
Für dieses Tutorial gehe ich davon aus, dass du bereits ein Fastify-Projekt eingerichtet hast. Fastify ist ein Web-Framework, das stark darauf ausgerichtet ist, die beste Entwicklererfahrung mit dem geringsten Overhead und einer leistungsstarken Plugin-Architektur zu bieten. Wenn du ein anderes Setup hast, musst du das Dockerfile möglicherweise entsprechend anpassen.
Normalerweise würdest du lokal npm install
und dann node index.js
ausführen. Für das Deployment werden wir einen ähnlichen Ansatz verwenden, aber in einem Docker-Container. Schauen wir uns die Details des Dockerfiles an.
Das Dockerfile
FROM node:20-alpine
LABEL maintainer="[email protected]"
WORKDIR /app
COPY package-lock.json package.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]
Was passiert hier also?
- Basis-Image:
- Verwendet Node.js 20 auf Alpine, was ein leichtgewichtiges Basis-Image bietet.
- Arbeitsverzeichnis:
- Richtet
/app
als Arbeitsverzeichnis für nachfolgende Anweisungen ein.
- Richtet
- Installation der Abhängigkeiten:
- Kopiert
package.json
undpackage-lock.json
(falls vorhanden) ins Arbeitsverzeichnis. - Führt
npm install
aus, um Abhängigkeiten zu installieren. - Das ermöglicht Caching!
- Kopiert
- Anwendungscode:
- Kopiert den Rest des Anwendungscodes in den Container.
- Port-Freigabe:
- Gibt Port 3000 frei, den wir für unsere Fastify-Anwendung verwenden werden.
- Start-Befehl:
- Gibt den Befehl an, um die Anwendung mit
node index.js
zu starten.
- Gibt den Befehl an, um die Anwendung mit
Dieser Ansatz ist unkompliziert und effizient für Fastify-Anwendungen, die typischerweise keinen separaten Build-Schritt benötigen. Falls deine App doch einen braucht, füge einfach ein RUN npm build
dazwischen ein. Achte auch darauf, die .dockerignore
-Datei hinzuzufügen, um den node_modules
-Ordner und npm-Debug-Logs zu ignorieren. Das beschleunigt den Build-Prozess und reduziert die Image-Größe.
Die minimale Fastify JavaScript-Datei
Hier ist eine minimale index.js
-Datei, um Fastify mit dem Host auf 0.0.0.0
zu starten:
const fastify = require("fastify")({ logger: true });
fastify.get("/", async (request, reply) => {
return { hello: "world" };
});
const start = async () => {
try {
await fastify.listen({ port: 3000, host: "0.0.0.0" });
} catch (err) {
fastify.log.error(err);
process.exit(1);
}
};
start();
Die Einstellung des Hosts auf 0.0.0.0
ist in Docker notwendig, weil sie der Anwendung erlaubt, Verbindungen von jeder IPv4-Adresse anzunehmen. Wenn du das nicht einstellst, ist die Anwendung nur innerhalb des Containers zugänglich, nicht vom Host-Rechner oder externen Netzwerken.
Deployment
Du kannst diesen Docker-Container auf jedem Cloud-Anbieter deployen, der Docker unterstützt. Zum Beispiel könntest du Plattformen wie Heroku, DigitalOcean oder AWS ECS verwenden.
Da ich Mitgründer von Sliplane bin, zeige ich dir, wie du es dort deployen kannst. Nach der Anmeldung kannst du einen neuen Service erstellen, indem du dein Github-Repository auswählst. Behalte dann einfach die Standardeinstellungen bei und klicke auf Deployment.
Nach dem Deployment wird deine Fastify-App unter einer Subdomain von sliplane.app verfügbar sein, normalerweise ist das einfach dein Service-Name. Du kannst auch die Logs deiner App sehen, Metriken wie CPU- und Speichernutzung einsehen, persistenten Speicher hinzufügen und vieles mehr. Wann immer du auf dein Repository pushst, wird Sliplane deine App automatisch deployen.
Wenn du Sliplane ausprobieren möchtest, sind die ersten 2 Tage kostenlos! Probier es aus und lass mich wissen, was du davon hältst :)
{% cta https://sliplane.io?utm_source=dockerize-fastify %} Deploye Fastify in 2 Minuten 🚀 {% endcta %}
Nächste Schritte
Gibt es noch etwas, das du wissen möchtest? Brauchst du Hilfe beim Dockerisieren deiner Fastify-App? Brauchst du Hilfe beim Deployen auf einer bestimmten Plattform? Zögere nicht, mich zu kontaktieren! Du findest mich auf X oder kommentiere einfach hier im Blog.
Cheers, Jonas