You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
3.8 KiB
Markdown
104 lines
3.8 KiB
Markdown
# Cleo Minimarket
|
|
|
|
Back-office minimarket berbasis Next.js 16, pengganti aplikasi PHP lama di `old-source/`.
|
|
|
|
Stack: Next.js 16 (App Router), React 19, TypeScript, Tailwind CSS 4, shadcn/ui, Drizzle ORM,
|
|
Better Auth, Postgres (data aplikasi dan login), MariaDB `cleo` (data bisnis lama).
|
|
|
|
## Setup di laptop baru
|
|
|
|
### Yang perlu terpasang
|
|
|
|
- [Node.js](https://nodejs.org) 24 atau lebih baru
|
|
- [pnpm](https://pnpm.io/installation) 11 (`npm install -g pnpm`)
|
|
- [Docker Desktop](https://www.docker.com/products/docker-desktop/), dalam keadaan menyala
|
|
- Git
|
|
|
|
### Langkah
|
|
|
|
1. **Clone repo dan install dependency**
|
|
|
|
```bash
|
|
git clone https://git.amigogroup.id/deardo/nextjs-cleo-minimarket.git
|
|
cd nextjs-cleo-minimarket
|
|
pnpm install
|
|
```
|
|
|
|
2. **Buat `.env` dari contoh**
|
|
|
|
```bash
|
|
cp .env.example .env
|
|
```
|
|
|
|
Lalu isi nilainya:
|
|
|
|
| Variabel | Isi |
|
|
| --------------------- | --------------------------------------------------------------------- |
|
|
| `POSTGRES_PASSWORD` | Password bebas untuk Postgres lokal. |
|
|
| `DATABASE_URL` | Ganti `<POSTGRES_PASSWORD>` dengan password yang sama seperti di atas. |
|
|
| `AMIGO_DATABASE_URL` | User dan password MariaDB `cleo`. Minta ke admin. |
|
|
| `BETTER_AUTH_SECRET` | String acak, buat dengan perintah di bawah. |
|
|
| `SEED_ADMIN_PASSWORD` | Password akun admin pertama (minimal 8 karakter). |
|
|
|
|
```bash
|
|
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"
|
|
```
|
|
|
|
Buat `BETTER_AUTH_SECRET` baru di setiap laptop dan server, jangan disalin dari tempat lain.
|
|
|
|
3. **Nyalakan Postgres**
|
|
|
|
```bash
|
|
docker compose up -d
|
|
```
|
|
|
|
Container `cleo-postgres` akan muncul di Docker Desktop. Data tersimpan di volume
|
|
`cleo-pgdata`, jadi tidak hilang walaupun container dimatikan atau dibuat ulang.
|
|
|
|
4. **Buat tabel**
|
|
|
|
```bash
|
|
pnpm db:migrate
|
|
```
|
|
|
|
5. **Buat akun admin pertama**
|
|
|
|
```bash
|
|
pnpm db:seed
|
|
```
|
|
|
|
Username dan password diambil dari `SEED_ADMIN_*` di `.env`. Aman dijalankan berulang kali:
|
|
kalau akun sudah ada, seed dilewati.
|
|
|
|
6. **Jalankan aplikasi**
|
|
|
|
```bash
|
|
pnpm dev
|
|
```
|
|
|
|
Buka http://localhost:3000. Untuk mengecek koneksi auth, buka
|
|
http://localhost:3000/api/auth/get-session, hasilnya `null` kalau belum login.
|
|
|
|
### Catatan
|
|
|
|
- MariaDB `cleo` (`192.168.3.3`) hanya bisa diakses dari jaringan kantor. Fitur login tidak
|
|
membutuhkannya.
|
|
- Pendaftaran akun lewat web sengaja ditutup (`disableSignUp` di `lib/auth.ts`). Akun pertama
|
|
dibuat lewat `pnpm db:seed`.
|
|
- Kalau port 5432 sudah dipakai Postgres lain di laptop itu, matikan dulu Postgres tersebut, atau
|
|
ganti port kiri di `docker-compose.yml` (mis. `"5433:5432"`) beserta port di `DATABASE_URL`.
|
|
|
|
## Perintah
|
|
|
|
| Perintah | Fungsi |
|
|
| ---------------------- | -------------------------------------------------------- |
|
|
| `pnpm dev` | Dev server di http://localhost:3000 |
|
|
| `pnpm build` | Build production |
|
|
| `pnpm lint` | ESLint |
|
|
| `pnpm exec tsc --noEmit` | Type-check |
|
|
| `docker compose up -d` | Nyalakan Postgres lokal |
|
|
| `pnpm db:generate` | Buat file migrasi dari `db/schema.ts` |
|
|
| `pnpm db:migrate` | Jalankan migrasi ke Postgres |
|
|
| `pnpm db:seed` | Buat akun admin pertama |
|
|
| `pnpm db:studio` | Lihat isi Postgres di https://local.drizzle.studio |
|