# Langkah Belajar Docker

File Docker sudah disiapkan, tetapi belum dijalankan.

## File yang Dibuat

```text
Dockerfile
docker-compose.yml
docker-compose.local.yml
.env.example
.dockerignore
docker/mysql-init/99-grants.sql
```

## Fungsi Setiap File

`Dockerfile`

Membuat image aplikasi PHP Apache. File ini memasang extension PHP yang dibutuhkan project, seperti `pdo_mysql`, `mysqli`, dan `curl`.

`docker-compose.yml`

Mengatur dua service untuk deploy:

```text
app = Apache + PHP + semua file project
db  = MySQL 8.0
```

File ini tidak membuka port host secara langsung supaya aman dipakai di server/Coolify dan tidak bentrok dengan aplikasi lain.

`docker-compose.local.yml`

File tambahan khusus saat menjalankan di laptop. File ini membuka:

```text
APP_PORT=8080 -> app port 80
DB_PORT=3307  -> db port 3306
```

`.env.example`

Template konfigurasi port, username, password, dan nama database. File ini boleh masuk Git karena tidak berisi password production.

`.dockerignore`

Mengatur file/folder yang tidak perlu ikut masuk image Docker, seperti `.git`, `.env`, upload, log, `vendor`, dan `node_modules`.

`docker/mysql-init/99-grants.sql`

Memberi akses user `webgis_user` ke dua database:

```text
webgis_spbu
webgis_miskin
```

## Urutan Menjalankan Nanti

Jangan jalankan dulu kalau masih belajar struktur. Saat sudah siap, urutannya:

1. Salin file environment:

```bash
copy .env.example .env
```

2. Buka `.env`, lalu pelajari nilai berikut:

```text
APP_PORT=8080
DB_PORT=3307
DB_USERNAME=webgis_user
DB_PASSWORD=webgis_password
MYSQL_ROOT_PASSWORD=root_password
```

3. Build dan jalankan container:

```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml up -d --build
```

4. Buka aplikasi:

```text
http://localhost:8080
```

5. Cek container:

```bash
docker compose ps
```

atau jika ingin melihat compose lokal:

```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml ps
```

6. Lihat log jika ada error:

```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml logs -f
```

7. Matikan container:

```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml down
```

8. Reset database Docker dari awal:

```bash
docker compose -f docker-compose.yml -f docker-compose.local.yml down -v
docker compose -f docker-compose.yml -f docker-compose.local.yml up -d --build
```

## Catatan Penting

Kalau kamu mengubah `DB_USERNAME` di `.env`, sesuaikan juga isi:

```text
docker/mysql-init/99-grants.sql
```

Untuk production, ganti semua password default di `.env`.

Saat deploy di Coolify, cukup gunakan `docker-compose.yml`. Jangan publish port `8080` dari compose utama karena port itu bisa sudah dipakai aplikasi lain di server.
