
Eine Hono-App mit Docker bauen und deployen
Jonas ScholzHono läuft auf verschiedenen Runtimes. Hier nehmen wir den Node.js-Adapter und starten TypeScript direkt mit tsx. Damit bleibt das Setup klein, und du brauchst keinen eigenen Build-Schritt zum Kompilieren.
App erstellen
Nutzt deine App schon @hono/node-server, kannst du diesen Schritt überspringen. Sonst leg ein neues Projekt an:
npm create hono@latest example-hono
cd example-hono
npm install
Wähle das Template nodejs.

Starte den Dev-Server mit npm run dev und öffne http://localhost:3000. Stopp ihn danach, damit der Port für den nächsten Test frei ist.
Host und Port setzen
Setz diesen Code in src/index.ts ein:
import { serve } from "@hono/node-server";
import { Hono } from "hono";
const app = new Hono();
app.get("/", (c) => c.text("Hello Hono!"));
const port = Number(process.env.PORT ?? 3000);
serve({ fetch: app.fetch, port, hostname: "0.0.0.0" });
process.env.PORT ist ein String. Wandle ihn in eine Zahl um, bevor du den Wert an den Server gibst. Mit dem passenden Host nimmt der Server auch Anfragen über das Container-Netzwerk an.
Prüf, ob tsx installiert ist, und ergänze diese Skripte in deiner package.json. Lass die anderen Einträge stehen:
{
"scripts": {
"start": "tsx src/index.ts",
"dev": "tsx watch src/index.ts"
}
}
Test den Start mit npm run start. Mit PORT=8888 npm run start prüfst du, ob die App auch auf einem anderen Port startet.
Dockerfile hinzufügen
FROM node:24-bookworm-slim
WORKDIR /app
COPY --chown=node:node package.json package-lock.json ./
RUN chown node:node /app
USER node
RUN npm ci
COPY --chown=node:node . .
ENV NODE_ENV=production
ENV PORT=3000
EXPOSE 3000
CMD ["npm", "run", "start"]
npm ci installiert die Versionen aus deiner package-lock.json. Committe die Datei mit. Hier bleiben auch die Entwicklungsabhängigkeiten im Image: tsx steht oft in devDependencies, wird bei diesem Setup aber zum Starten gebraucht. Mit --omit=dev würdest du es dann entfernen. Dafür müsstest du die benötigten Pakete zuerst verschieben oder auf einen kompilierten Build wechseln.
Beim Kopieren bekommt der Benutzer node die Dateien. Danach führt er npm ci aus. Gehört das Verzeichnis noch root, kann die Installation beim Anlegen von node_modules scheitern.
Leg eine .dockerignore an:
.git
node_modules
dist
.env
.env.*
npm-debug.log
Bau das Image und starte den Container:
docker build -t hono-app .
docker run --rm --name hono-app -p 3000:3000 hono-app
Die Startseite sollte Hello Hono! zurückgeben. Kompiliert dein Projekt bereits zu JavaScript, behalte diesen Build und starte seine Ausgabe. Du brauchst dann kein zusätzliches tsx für dieses Dockerfile. Mehr zum Adapter steht in der Hono-Anleitung für Node.js.
Aus GitHub deployen
Committe die Dateien. Erstell dann in Sliplane einen Service und wähle dein Repository. Nimm das Dockerfile im Projektverzeichnis und setz den HTTP-Port auf 3000.

Der Screenshot stammt aus dem ursprünglichen Tutorial. Die Oberfläche kann heute anders aussehen. Öffne nach dem Deployment die Service-URL und prüf die Antwort und die Logs. Zugangsdaten hinterlegst du als Umgebungsvariablen des Services.