Next.js 14 telah menjadi standar de‑facto untuk aplikasi React modern. Tutorial ini memberikan langkah demi langkah cara menginstal, mengonfigurasi, menulis kode, serta menerapkan best practice keamanan dan performa, lengkap dengan contoh CI/CD di Docker.
1. Persiapan Lingkungan
Pastikan Anda memiliki Node.js versi 20.10+ dan npm 10+ atau pnpm 9+. Versi tersebut sudah teruji pada Next.js 14 stable release (Juni 2026).
# Install Node.js via nvm (rekomendasi)
nvm install 20.10
nvm use 20.10
# Cek versi
node -v # v20.10.x
npm -v # 10.x
2. Membuat Project Baru
# Menggunakan pnpm (lebih cepat)
pnpm create next-app@latest my-next14-app
# Pilih "App Router" ketika prompt muncul
cd my-next14-app
Struktur folder utama akan berisi app/ (App Router), src/, dan next.config.mjs.
3. Instalasi Dependensi Tambahan
# UI library (opsional) – Tailwind CSS 4
pnpm add -D tailwindcss@latest postcss autoprefixer
npx tailwindcss init -p
# Linter & formatter
pnpm add -D eslint prettier eslint-config-next
# Testing – Playwright (support SSR)
pnpm add -D @playwright/test
# Prisma (ORM contoh) & PostgreSQL driver
pnpm add prisma @prisma/client
pnpm prisma init --datasource-provider postgresql
4. Konfigurasi Next.js (next.config.mjs)
import { createSecureHeaders } from 'next-secure-headers';
export default defineConfig({
reactStrictMode: true,
experimental: {
serverActions: true, // enable Server Actions (Next.js 14)
},
images: {
remotePatterns: [{ hostname: 'images.unsplash.com' }],
},
async headers() {
return [{
source: '/(.*)',
headers: createSecureHeaders({
contentSecurityPolicy: {
directives: {
defaultSrc: "'self'",
imgSrc: ["'self'", "https://images.unsplash.com"],
scriptSrc: ["'self'", "'unsafe-eval'"],
},
},
referrerPolicy: 'strict-origin-when-cross-origin',
permissionsPolicy: { camera: [], microphone: [] },
other: {
'X-Frame-Options': 'DENY',
},
}),
}];
},
});
Konfigurasi di atas mengaktifkan Server Actions, menambah header keamanan, dan mengizinkan gambar eksternal dari Unsplash.
5. Membuat Layout dan Styling dengan Tailwind
// app/layout.tsx
import './globals.css';
export const metadata = { title: 'Next.js 14 Demo', description: 'App Router + Server Actions' };
export default function RootLayout({ children }: { children: React.ReactNode }) {
return (
{children}
);
}
File globals.css memuat Tailwind directives (@tailwind base; dll.) dan mengaktifkan dark mode dengan media strategy.
6. Contoh Server Action – Formulir Kontak
// app/contact/page.tsx
'use server';
import { prisma } from '@/lib/prisma';
export async function submitContact(formData: FormData) {
const name = formData.get('name') as string;
const email = formData.get('email') as string;
const message = formData.get('message') as string;
// Validasi ringan
if (!email.includes('@')) throw new Error('Email tidak valid');
await prisma.message.create({
data: { name, email, message },
});
revalidatePath('/contact/thanks');
}
export default function ContactPage() {
return (
);
}
Server Action dijalankan sepenuhnya di server, tidak mengirim JS ke klien, sehingga keamanan data meningkat.
7. Menambahkan API Route untuk Webhook (Optional)
// app/api/webhook/route.ts
import { NextResponse } from 'next/server';
export async function POST(req: Request) {
const payload = await req.json();
// Verifikasi signature (contoh dengan HMAC)
const signature = req.headers.get('x-signature') ?? '';
const secret = process.env.WEBHOOK_SECRET!;
const expected = createHmac('sha256', secret).update(JSON.stringify(payload)).digest('hex');
if (signature !== expected) return NextResponse.json({ error: 'Invalid signature' }, { status: 401 });
// Proses payload secara async
await prisma.event.create({ data: payload });
return NextResponse.json({ status: 'ok' });
}
Demonstrasi penggunaan route handler baru di Next.js 14 yang mendukung streaming response bila diperlukan.
8. Optimasi Performansi
- Edge Runtime: Letakkan halaman yang tidak membutuhkan akses DB pada
export const runtime = 'edge';untuk mengurangi latency. - React Server Components (RSC): Pisahkan UI statis ke dalam
.server.tsxdan gunakanuse clienthanya pada komponen interaktif. - Image Optimization: Gunakan
next/imagedengan loader default; otomatis menghasilkan CDNs. - Incremental Static Regeneration (ISR): Tambahkan
revalidate = 60pada page export untuk konten yang berubah tiap menit.
9. Setup CI/CD dengan Docker & GitHub Actions
# Dockerfile (multi‑stage)
FROM node:20-alpine AS builder
WORKDIR /app
COPY package*.json pnpm-lock.yaml ./
RUN npm i -g pnpm && pnpm install --frozen-lockfile
COPY . .
RUN pnpm build
FROM node:20-alpine AS runner
WORKDIR /app
ENV NODE_ENV=production
COPY --from=builder /app/.next ./.next
COPY --from=builder /app/public ./public
COPY --from=builder /app/package*.json ./
RUN npm i -g pnpm && pnpm install --prod --frozen-lockfile
EXPOSE 3000
CMD ["pnpm", "start"]
# .github/workflows/deploy.yml
name: Deploy to Fly.io
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Node
uses: actions/setup-node@v4
with: { node-version: '20.x', cache: 'pnpm' }
- name: Install pnpm
run: npm i -g pnpm
- name: Install deps
run: pnpm install --frozen-lockfile
- name: Build
run: pnpm build
- name: Docker Build & Push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: ${{ secrets.FLY_REGISTRY }}/${{ github.repository }}:latest
- name: Deploy to Fly.io
uses: superfly/flyctl-actions@master
with:
args: "deploy --image ${{ secrets.FLY_REGISTRY }}/${{ github.repository }}:latest"
env:
FLY_API_TOKEN: ${{ secrets.FLY_API_TOKEN }}
Pipeline di atas membangun image Docker, meng‑push ke registry pribadi, dan men‑deploy ke Fly.io (platform serverless yang populer di 2026).
10. Monitoring & Error Tracking
Integrasikan Sentry (v8) dan Vercel Analytics (atau Fly.io metrics) untuk observabilitas.
// lib/sentry.ts
import * as Sentry from '@sentry/nextjs';
Sentry.init({
dsn: process.env.SENTRY_DSN,
tracesSampleRate: 0.2,
environment: process.env.NODE_ENV,
});
export default Sentry;
Panggil Sentry.captureException(error) di dalam catch block Server Action.
11. Best Practice Tambahan
- Gunakan
typescript@5.5– tipe kuat untuk data yang lewat ke Server Actions. - Aktifkan
strictNullChecksdannoImplicitAnyditsconfig.json. - Jangan menaruh rahasia di client bundle; selalu akses lewat
process.env.di server. - Audit dependensi dengan
pnpm audittiap rilis dan perbarui ke versi LTS. - Gunakan
next lintdanprettierpada pre‑commit hook (husky).
12. Deploy ke Production
Jika menggunakan Vercel:
vercel login
vercel --prod
Jika menggunakan Fly.io (seperti di CI): pastikan domain DNS mengarah ke .fly.dev dan aktifkan TLS otomatis.
13. Testing End‑to‑End dengan Playwright
// tests/contact.spec.ts
import { test, expect } from '@playwright/test';
test('submit contact form', async ({ page }) => {
await page.goto('/contact');
await page.fill('input[name="name"]', 'Budi');
await page.fill('input[name="email"]', 'budi@example.com');
await page.fill('textarea[name="message"]', 'Halo, ini tes.');
await page.click('button:text("Kirim")');
await expect(page).toHaveURL('/contact/thanks');
});
Jalankan pnpm exec playwright test pada CI untuk memastikan tidak ada regression.
14. Meng-upgrade dari Next.js 13 ke 14
- Perbarui
nextdipackage.jsonke^14.0.0. - Aktifkan
experimental.serverActionsdinext.config.mjs. - Migrasi semua
pages/keapp/untuk memanfaatkan App Router. - Ubah semua
getStaticProps/getServerSidePropsmenjadi Server Actions ataufetchdi RSC. - Jalankan
pnpm auditdan perbaiki breaking change yang tercantum di dokumen resmi.
Proses upgrade biasanya selesai dalam satu sprint bila CI pipeline sudah otomatis.
Dengan mengikuti tutorial ini Anda akan memiliki aplikasi Next.js 14 yang modern, aman, dan siap skala produksi. Mulai dari instalasi, penulisan Server Actions, hingga deployment otomatis menggunakan Docker dan GitHub Actions, semua langkah dirancang untuk meningkatkan produktivitas developer dan kualitas Software Engineering di era Web Development 2026. Jangan lupa menerapkan best practice keamanan, monitoring, serta testing berkelanjutan untuk menjaga performa aplikasi tetap optimal.
Tutorial lengkap Next.js 14 dengan App Router, Server Actions, Docker, CI/CD, dan best practice keamanan. Panduan step-by-step untuk developer Web Development 2026.
Programming,Software Engineering,Web Development
#Programming #SoftwareEngineering #WebDev #Tech #Coding
0 Komentar