76 lines
2.8 KiB
HTML
76 lines
2.8 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<title>Build & Deploy</title>
|
|
<link rel="stylesheet" href="./style.css" />
|
|
</head>
|
|
<body>
|
|
<header>
|
|
<h1>Build & Deploy Pipeline</h1>
|
|
<div class="meta">Node/Next build, Docker multi-stage, registry push, kubectl rollout.</div>
|
|
</header>
|
|
<main class="grid">
|
|
<section class="card">
|
|
<h2>Build Inputs</h2>
|
|
<ul>
|
|
<li>Source: Next.js app with TypeScript and Prisma.</li>
|
|
<li>Env: <code>.env</code> (local), K8s Secret <code>lomavuokraus-web-secrets</code> in cluster.</li>
|
|
<li>Prisma schema: <code>prisma/schema.prisma</code>, migrations in <code>prisma/migrations/</code>.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2>NPM Scripts</h2>
|
|
<ul>
|
|
<li><code>npm run lint</code> → <code>next lint</code></li>
|
|
<li><code>npm run build</code> → <code>next build</code> (used inside Docker and locally)</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2>Docker Image</h2>
|
|
<ul>
|
|
<li>Multi-stage Dockerfile:
|
|
<ul>
|
|
<li>deps: npm ci</li>
|
|
<li>builder: copy source, <code>npx prisma generate</code>, <code>npm run build</code></li>
|
|
<li>runner: Node 20 bookworm-slim, copy standalone + static</li>
|
|
</ul>
|
|
</li>
|
|
<li>Tags: numeric (git SHA-derived) + <code>:latest</code>.</li>
|
|
<li>Scan: Trivy runs post-build if available.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2>Deploy Scripts</h2>
|
|
<ul>
|
|
<li><code>deploy/build.sh</code> → build image, write <code>deploy/.last-image</code>.</li>
|
|
<li><code>deploy/push.sh</code> → push image.</li>
|
|
<li><code>deploy/deploy.sh</code> → envsubst <code>k8s/app.yaml</code>, kubectl apply, rollout.</li>
|
|
<li>Environment wrappers:
|
|
<ul>
|
|
<li><code>deploy/deploy-staging.sh</code></li>
|
|
<li><code>deploy/deploy-prod.sh</code></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2>Config & Env Vars</h2>
|
|
<ul>
|
|
<li>From ConfigMap (public): <code>NEXT_PUBLIC_SITE_URL</code>, <code>NEXT_PUBLIC_API_BASE</code>, <code>APP_ENV</code>.</li>
|
|
<li>From Secret: DB URL, AUTH_SECRET, SMTP, DKIM, etc.</li>
|
|
<li>App env resolution: <code>process.env.*</code> in Next server code.</li>
|
|
</ul>
|
|
</section>
|
|
|
|
<section class="card">
|
|
<h2>Pipeline Diagram</h2>
|
|
<p>For visuals, edit/export <code>docs/drawio/architecture.drawio</code> or create a dedicated pipeline page in draw.io.</p>
|
|
</section>
|
|
</main>
|
|
</body>
|
|
</html>
|