A modern Node.js stack for building reliable web apps — Express API + Vite frontend + PostgreSQL (pgvector) + Redis + SonarQube.
- Backend: Node 22, Express 5, Prisma 6
- DB: PostgreSQL 17 +
pgvector(มี shadow DB สำหรับ Prisma) - Queue/Cache: Redis 7
- Frontend: Vite (+ Tailwind)
- Code Quality: SonarQube LTS
| Service | URL/Port (host) | ในคอนเทนเนอร์ |
|---|---|---|
| App (Vite) | http://localhost:4043 | 5173 |
| API Server | http://localhost:4044 | 4044 |
| Postgres | localhost:4045 | 5432 |
| SonarQube | http://localhost:9000 | 9000 |
| Sonar DB | localhost:4050 | 5432 |
| Redis | localhost:6379 | 6379 |
Frontend proxy: คำขอที่ขึ้นต้นด้วย
/apiจะถูกส่งไปserver:4044และ rewrite เป็น/api/v1อัตโนมัติ
- Docker & Docker Compose v2
- Docker Desktop
- Node.js 22.x + npm 10.x (ใช้แค่สร้าง
package-lock.jsonที่ root และทำงานกับ workspaces ได้สะดวก)
npm iสร้าง .env ใน root directoryสร้าง .env ใน folder serverdocker compose -f docker-dev-compose.yml up --buildเสร็จแล้ว:
- App: http://localhost:4043
- API: http://localhost:4044/api/v1
- Database Port: 4045
- SonarQube: http://localhost:9000 (ครั้งแรก login
admin/adminแล้วระบบจะบังคับให้เปลี่ยนรหัสผ่าน)
docker compose -f docker-dev-compose.yml downnpm idocker compose up --buildเสร็จแล้ว:
- App: http://localhost:4040
- API: http://localhost:4041/api/v1
-
- Database Port: 4042
- SonarQube: http://localhost:9000 (ครั้งแรก login
admin/adminแล้วระบบจะบังคับให้เปลี่ยนรหัสผ่าน)
docker compose down# ดู log แบบ real-time
docker compose -f docker-dev-compose.yml logs -f server
docker compose -f docker-dev-compose.yml logs -f app
docker compose -f docker-dev-compose.yml logs -f db
docker compose -f docker-dev-compose.yml logs -f redis
docker compose -f docker-dev-compose.yml logs -f sonarqube sonar-db
# รีสตาร์ทเฉพาะ service
docker compose -f docker-dev-compose.yml restart server
docker compose -f docker-dev-compose.yml restart app
# หยุดเฉพาะ service
docker compose -f docker-dev-compose.yml stop app
docker compose -f docker-dev-compose.yml stop server
# ลบคอนเทนเนอร์ของ service (ไม่แตะ volumes)
docker compose -f docker-dev-compose.yml rm -f app
docker compose -f docker-dev-compose.yml rm -f server
# บิลด์ใหม่เฉพาะ service แล้วสตาร์ท
docker compose -f docker-dev-compose.yml build server && docker compose -f docker-dev-compose.yml up -d server
docker compose -f docker-dev-compose.yml build app && docker compose -f docker-dev-compose.yml up -d app
# เข้า shell ในคอนเทนเนอร์ (ไว้ดีบัก)
docker compose -f docker-dev-compose.yml exec server sh
docker compose -f docker-dev-compose.yml exec app sh
docker compose -f docker-dev-compose.yml exec db sh
# เข้า psql ไปที่ DB หลัก
docker compose -f docker-dev-compose.yml exec db psql -U 404 -d orbis_track
# เช็คการเชื่อมต่อ DB ด้านในคอนเทนเนอร์
docker compose -f docker-dev-compose.yml exec db pg_isready -U 404 -d orbis_track
# Prisma Studio (รันในคอนเทนเนอร์ server)
docker compose -f docker-dev-compose.yml exec server npx prisma studio -p 5555
# แล้วเปิด http://localhost:5555
# Prisma migrate/generate (รันในคอนเทนเนอร์ server)
docker compose -f docker-dev-compose.yml exec server npx prisma migrate dev
docker compose -f docker-dev-compose.yml exec server npx prisma generate.
├─ app/ # Vite + Tailwind
├─ server/ # Express API + Prisma
│ ├─ src/
│ ├─ docker-entrypoint.sh
│ └─ infrastructure/database/prisma/ (schema + migrations)
├─ docker-dev-compose.yml
├─ docker-compose.yml
├─ package.json # workspaces root
└─ .env # ดูตัวอย่างด้านบน