# Deploy cPanel / OnePanel

## Cách đúng nhất trên shared hosting PHP

1. Upload toàn bộ source lên thư mục ngoài public root, ví dụ:

```text
/home/USER/hdnd/
```

2. Trỏ document root của domain về:

```text
/home/USER/hdnd/public
```

3. Bảo đảm hosting dùng PHP 8.2+.

4. Cấp quyền ghi:

```bash
chmod -R 775 storage
chmod -R 775 public/uploads/documents
```

5. Mở:

```text
https://domain-cua-ban/
https://domain-cua-ban/admin/login
```

## Nếu bắt buộc upload vào public_html

Upload toàn bộ source vào:

```text
/home/USER/public_html/
```

File `.htaccess` ở thư mục gốc sẽ tự rewrite request vào `public/index.php`.

## Lỗi 502 trên OnePanel

Lỗi `upstream request failed: client error (Connect)` không phải lỗi PHP trong source. Nguyên nhân thường là:

- Website đang cấu hình kiểu reverse proxy nhưng backend port không chạy.
- Proxy trỏ sai port, ví dụ trỏ `127.0.0.1:5001` nhưng server PHP không chạy.
- Container/app service đã stop.

Với source PHP này, nên tạo site kiểu `PHP runtime / Static + PHP`, không dùng reverse proxy.

Nếu vẫn muốn reverse proxy, cần chạy backend:

```bash
php -S 127.0.0.1:5001 -t public
```

Sau đó OnePanel proxy upstream về:

```text
http://127.0.0.1:5001
```

Khuyến nghị production: dùng Apache/Nginx PHP-FPM, document root là `public`, không dùng `php -S`.
