fix port conflict

This commit is contained in:
Saufi
2026-06-24 20:35:01 +08:00
parent 3f948032b0
commit d7b4089440
3 changed files with 28 additions and 9 deletions

View File

@@ -16,8 +16,10 @@ APP_KEY=
APP_DEBUG=false APP_DEBUG=false
APP_URL=http://localhost APP_URL=http://localhost
# Port nginx pada host (dev 8000; prod 80). Untuk tukar, hantar --env-file .env.docker # Port nginx pada host. Pada prod ia diikat ke 127.0.0.1:<APP_PORT> (loopback),
APP_PORT=80 # host nginx reverse-proxy yang dedah domain awam. Guna port UNIK (elak langgar
# projek lain di server, cth spr2026=8007, taklimat=8008).
APP_PORT=8009
APP_LOCALE=ms APP_LOCALE=ms
APP_FALLBACK_LOCALE=en APP_FALLBACK_LOCALE=en

View File

@@ -76,7 +76,7 @@ Wajib tukar:
|---|---| |---|---|
| `APP_KEY` | Biar kosong — entrypoint jana automatik kali pertama | | `APP_KEY` | Biar kosong — entrypoint jana automatik kali pertama |
| `APP_URL` | cth `https://mat.koipb.gov.my` | | `APP_URL` | cth `https://mat.koipb.gov.my` |
| `APP_PORT` | `80` (atau di belakang reverse proxy) | | `APP_PORT` | Port loopback unik (cth `8009`) — host nginx reverse-proxy ke sini. Elak langgar projek lain (spr2026=8007, taklimat=8008) |
| `DB_PASSWORD` **dan** `MYSQL_PASSWORD` | password user `koipb`**mesti sama** | | `DB_PASSWORD` **dan** `MYSQL_PASSWORD` | password user `koipb`**mesti sama** |
| `MYSQL_ROOT_PASSWORD` | password root MySQL container | | `MYSQL_ROOT_PASSWORD` | password root MySQL container |
| `SEED_DEMO` | `true` = isi 200 anggota + 21 hadiah contoh; `false` = data kosong (import sendiri) | | `SEED_DEMO` | `true` = isi 200 anggota + 21 hadiah contoh; `false` = data kosong (import sendiri) |
@@ -158,17 +158,30 @@ docker compose --env-file .env.docker -f docker-compose.yml -f docker-compose.pr
--- ---
## Reverse Proxy + HTTPS (pilihan) ## Reverse Proxy + HTTPS (host nginx)
Jika ada Nginx/Caddy di host atau sijil SSL, set `APP_PORT` kepada port dalaman (cth `8080`) dan proksi ke port itu. Contoh blok Nginx host: Server ini sudah ada **host nginx** yang dedah domain awam dan proksi ke port loopback setiap projek (spr2026 → 8007, taklimat → 8008). KOIPB guna **8009** (`APP_PORT=8009`, diikat `127.0.0.1:8009:80`).
Tambah vhost host nginx (cth `/etc/nginx/sites-available/koipb.conf`):
```nginx ```nginx
server { server {
server_name mat.koipb.gov.my; server_name mat.koipb.gov.my;
location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto $scheme; } location / {
proxy_pass http://127.0.0.1:8009;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
} }
``` ```
Kemudian pasang sijil melalui `certbot --nginx`. Kemudian:
```bash
sudo ln -s /etc/nginx/sites-available/koipb.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d mat.koipb.gov.my # HTTPS
```
--- ---
@@ -176,7 +189,9 @@ Kemudian pasang sijil melalui `certbot --nginx`.
| Masalah | Tindakan | | Masalah | Tindakan |
|---|---| |---|---|
| `app` asyik restart | `docker compose logs app` — biasanya MySQL belum sedia atau `.env` salah | | `address already in use` (port) | Port `APP_PORT` dah diguna projek lain. Tukar ke port loopback bebas dalam `.env.docker` (cth `8009`) & `up` semula |
| MySQL `CPU does not support x86-64-v2` | Guna `mariadb:11.4` (sudah ditetapkan), bukan `mysql:8` |
| `app` asyik restart | `docker compose logs app` — biasanya DB belum sedia, `.env.docker` salah, atau cache `bootstrap/cache/config.php` basi |
| `419 Page Expired` / log masuk gagal | `APP_KEY` kosong — `docker compose exec app php artisan key:generate --force` lalu `docker compose restart app` | | `419 Page Expired` / log masuk gagal | `APP_KEY` kosong — `docker compose exec app php artisan key:generate --force` lalu `docker compose restart app` |
| 502 Bad Gateway | container `app` belum naik / belum siap `composer install`; tunggu log "Aplikasi bersedia" | | 502 Bad Gateway | container `app` belum naik / belum siap `composer install`; tunggu log "Aplikasi bersedia" |
| Tukar `.env` tak berkesan | `docker compose exec app php artisan config:clear` dan restart | | Tukar `.env` tak berkesan | `docker compose exec app php artisan config:clear` dan restart |

View File

@@ -35,8 +35,10 @@ services:
nginx: nginx:
restart: always restart: always
# Ikat ke loopback sahaja — host nginx (reverse-proxy) yang dedah domain awam.
# Port unik supaya tidak berlanggar dgn projek lain (spr2026=8007, taklimat=8008).
ports: ports:
- "${APP_PORT:-80}:80" - "127.0.0.1:${APP_PORT:-8009}:80"
# ── Node (opsional) ──────────────────────────────────────────────────────── # ── Node (opsional) ────────────────────────────────────────────────────────
# UI guna CDN + CSS statik (public/css/koipb.css) — TIADA langkah build Vite. # UI guna CDN + CSS statik (public/css/koipb.css) — TIADA langkah build Vite.