Cách chạy PostgreSQL local bằng Docker Compose cho dự án Next.js và Prisma: volume dữ liệu, healthcheck, và lý do không nên cài Postgres trực tiếp lên máy.
Cài Postgres thẳng lên máy dev nghe nhanh, nhưng đến dự án thứ ba cần phiên bản khác là bắt đầu phiền. Docker Compose giải quyết gọn hơn.
services:
postgres:
image: postgres:16-alpine
restart: unless-stopped
environment:
POSTGRES_USER: blog_user
POSTGRES_PASSWORD: blog_password
POSTGRES_DB: blog_db
ports:
- '5432:5432'
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck
Đặt câu hỏi, chia sẻ ý kiến hoặc góp ý giải pháp kỹ thuật cùng cộng đồng.
Khám phá tiếp
Thiết lập pipeline CI/CD zero-downtime: build multi-arch Docker image, đẩy lên private registry và trigger deploy qua SSH an toàn.
Không có healthcheck, docker compose up -d trả về ngay khi container khởi động — nhưng Postgres chưa sẵn sàng nhận kết nối. Chạy prisma migrate ngay sau đó sẽ lỗi ngẫu nhiên, kiểu lỗi khó chịu nhất vì không lặp lại đều.
docker compose up -d
docker compose ps
pnpm prisma migrate devCompose này cố ý mở port 5432 ra host để công cụ GUI kết nối được. Trên production thì ngược lại: Postgres chỉ listen 127.0.0.1 và không bao giờ lộ ra internet.
- ports:
- - '5432:5432'
+ # production: không publish port ra ngoài