Lewati ke konten
create-nextjs-kit

db

Alasan ada: mode fullstack butuh database dengan skema bertipe dan migrasi yang bisa diulang, tanpa merakit Drizzle, Postgres, dan skrip migrasi dari nol.

Mode: fullstack.

Terminal window
npm create nextjs-kit@latest my-app -- --mode fullstack --modules db
Terminal window
cp .env.example .env.local
npm run db:up # nyalakan Postgres lewat Docker Compose
npm run db:migrate # terapkan migrasi di folder drizzle/
npm run dev
Skrip Fungsi
npm run db:up docker compose up -d --wait (menunggu sampai sehat)
npm run db:down Matikan Postgres (data tetap di volume)
npm run db:generate Buat migrasi SQL baru dari perubahan schema.ts
npm run db:migrate Terapkan migrasi yang belum dijalankan
npm run db:studio Buka Drizzle Studio
  1. Edit src/server/db/schema.ts.
  2. npm run db:generate membuat berkas SQL baru di drizzle/.
  3. npm run db:migrate menerapkannya.
  4. Commit folder drizzle/ bersama perubahan skema.
import { db, schema } from "@/server/db";
const rows = await db.select().from(schema.todos);

Modul ini hanya untuk server (import "server-only"). Koneksi dibuat saat query pertama, jadi next build tidak butuh database yang menyala. Saat dev, koneksi disimpan di globalThis supaya HMR tidak membuka koneksi baru di tiap reload.

Skema contoh, tabel todos, memakai bentuk yang sama dengan TodoItem di fitur contoh. Fitur itu masih memakai penyimpanan di memori; memindahkannya ke database adalah tugas modul dal.

Port host Postgres di docker-compose.yml adalah 54320. Port 5432 sering sudah dipakai Postgres lain di mesin developer, dan saat itu terjadi, perintah yang tetap berjalan bisa menyambung ke database yang salah. Kalau Anda mengubah port, samakan di docker-compose.yml, .env.local, dan drizzle.config.ts.

Variabel Default Keterangan
DATABASE_URL postgres://postgres:postgres@localhost:54320/app URL koneksi Postgres
  • drizzle.config.ts dibaca drizzle-kit di luar Next.js, jadi memakai process.env langsung. Ini satu-satunya pengecualian aturan “env hanya lewat config/env.ts”.
  • Folder drizzle/ dikecualikan dari Prettier karena dikelola drizzle-kit.
  • drizzle-kit membawa esbuild; untuk pnpm 11+ build script-nya sudah diizinkan di pnpm-workspace.yaml proyek hasil generate.