Diese Anleitung zeigt Ihnen, wie Sie Ihre SvelteKit-Anwendung für eine vereinfachte Bereitstellung und Verwaltung in einen Container umwandeln. Denken Sie daran: Dies ist für SvelteKit, nicht für Svelte!
Einrichten
Wenn Ihnen ein SvelteKit-Projekt fehlt, erstellen Sie eines:
<code class="language-bash">npx sv create my-svelte-app --template demo --types ts</code>
Als nächstes konfigurieren Sie SvelteKit für die Verwendung von adapter-node
für die Node.js-Kompatibilität, die für die Containerisierung unerlässlich ist. Installieren Sie es:
<code class="language-bash">npm i -D @sveltejs/adapter-node</code>
Ändern svelte.config.js
:
<code class="language-javascript">// svelte.config.js - import adapter from '@sveltejs/adapter-auto'; + import adapter from '@sveltejs/adapter-node';</code>
Jetzt erstellen Sie Ihr Dockerfile
. Dies weist Docker an, Ihre Anwendung zu erstellen und auszuführen:
<code class="language-dockerfile"># Builder stage FROM node:22-alpine AS builder WORKDIR /app COPY package*.json ./ RUN npm ci COPY . . RUN npm run build RUN npm prune --production # Final stage FROM node:22-alpine WORKDIR /app COPY --from=builder /app/build build/ COPY --from=builder /app/node_modules node_modules/ COPY package.json . EXPOSE 3000 ENV NODE_ENV=production CMD [ "node", "build" ]</code>
Dieser Dockerfile
verwendet einen mehrstufigen Build. In der Builder-Phase wird Ihre App kompiliert und in der letzten Phase wird ein schlankeres Laufzeitbild erstellt.
Um den Build-Prozess zu optimieren, erstellen Sie eine .dockerignore
Datei:
<code>Dockerfile .dockerignore .git .gitignore .gitattributes README.md .npmrc .prettierrc .eslintrc.cjs .graphqlrc .editorconfig .svelte-kit .vscode node_modules build package **/.env</code>
Im Allgemeinen installieren Sie alle Abhängigkeiten als devDependencies
(mit npm i -D <package>
). Dadurch kann SvelteKit sie bündeln und ungenutzte Importe entfernen. Wenn Sie jedoch während des Builds auf Probleme wie „__dirname
undefiniert“ stoßen, installieren Sie das Paket als reguläre Abhängigkeit. Wenn alle Abhängigkeiten devDependencies
sind, können Sie das Kopieren node_modules
in der letzten Docker-Phase weglassen, um die Bildgröße weiter zu minimieren.
Erstellen Sie Ihr Docker-Image:
<code class="language-bash">docker build -t my-sveltekit-app .</code>
Führen Sie die Container-App aus:
<code class="language-bash">docker run -p 3000:3000 my-sveltekit-app</code>
Zugriff auf Ihre App unter http://localhost:3000
.
Umgebungsvariablen
SvelteKit bietet vier Möglichkeiten zum Verwalten von Umgebungsvariablen: $env/dynamic/private
, $env/dynamic/public
, $env/static/private
und $env/static/public
. Denken Sie daran, dass verschiedene Bereitstellungsplattformen damit unterschiedlich umgehen. Konsultieren Sie deren Dokumentation.
Für Formularaktionen und serverseitige Funktionen legen Sie die Umgebungsvariable ORIGIN
richtig fest, um siteübergreifende POST-Fehler zu verhindern:
<code class="language-bash">docker run -p 3000:3000 -e ORIGIN=http://localhost:3000 my-sveltekit-app</code>
Ersetzen Sie http://localhost:3000
durch Ihre Produktionsdomäne.
Produktionsoptimierung
/health
Endpunkt hinzu und verwenden Sie die HEALTHCHECK
-Anweisung von Docker:<code class="language-dockerfile">HEALTHCHECK --interval=30s --timeout=3s \ CMD wget --no-verbose --tries=1 --spider http://localhost:3000/health || exit 1</code>
<code class="language-bash">docker run -p 3000:3000 -e NODE_OPTIONS="--max-old-space-size=512" my-sveltekit-app</code>
<code class="language-bash">docker scout quickview</code>
Fazit
Sie haben Ihre SvelteKit-Anwendung jetzt in einem Container zusammengefasst. Ziehen Sie für die Bereitstellung Sliplane.io in Betracht.
Das obige ist der detaillierte Inhalt vonSo dockerisieren Sie SvelteKit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!