File size: 2,723 Bytes
3718c84
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Fix Ngrok Tunnel với PostgreSQL

## Vấn đề

Ngrok TCP tunnel không kết nối được PostgreSQL trong Docker container mặc dù:
- ✅ PostgreSQL đang listen trên `*` (tất cả interfaces)
- ✅ pg_hba.conf đã có rule cho `0.0.0.0/0`
- ✅ Docker port mapping đúng (`0.0.0.0:5543->5432`)
- ✅ Ngrok tunnel đang chạy và forward đến `localhost:5543`

## Nguyên nhân có thể

1. **Ngrok TCP tunnel không forward đúng PostgreSQL protocol handshake**
2. **Docker network isolation** - PostgreSQL trong container không accept connection từ ngrok IP range
3. **PostgreSQL trong Docker chỉ bind đến localhost bên trong container**

## Giải pháp đã thử

### 1. Fix PostgreSQL config
- ✅ Set `listen_addresses = '*'`
- ✅ Thêm rule vào `pg_hba.conf`: `host all all 0.0.0.0/0 md5`
- ✅ Restart PostgreSQL container

### 2. Fix Docker config
- ✅ Set port mapping: `0.0.0.0:5543:5432`
- ✅ Thêm command: `postgres -c listen_addresses='*'`

### 3. Scripts đã tạo
-`khoidongDB.sh` - Khởi động ngrok và update DATABASE_URL
- ✅ `fix_ngrok_postgres.sh` - Fix và test ngrok tunnel

## Giải pháp thay thế

### Option 1: SSH Tunnel (Khuyến nghị)
```bash
# Trên server có PostgreSQL
ssh -N -L 5543:localhost:5543 user@your-server

# Hoặc reverse SSH tunnel
ssh -R 5543:localhost:5543 user@your-server
```

### Option 2: Cloudflare Tunnel
```bash
# Cài đặt cloudflared
brew install cloudflared  # macOS
# hoặc
sudo apt install cloudflared  # Linux

# Tạo tunnel
cloudflared tunnel --url tcp://localhost:5543
```

### Option 3: Tailscale
```bash
# Cài đặt Tailscale
# Tạo mesh network
# PostgreSQL sẽ accessible qua Tailscale IP
```

### Option 4: Docker network_mode: host
```yaml
# docker-compose.yml
db:
  network_mode: host
  # ... config khác
```

**Lưu ý:** `network_mode: host` chỉ hoạt động trên Linux, không hoạt động trên macOS/Windows.

## Workaround hiện tại

Space đang dùng **SQLite fallback**:
- ✅ App chạy được
- ✅ Migration pass
- ✅ Chatbot hoạt động (không có data)
- ⚠️  Không có data để trả lời câu hỏi phức tạp

## Next Steps

1. **Test SSH tunnel** thay vì ngrok
2. **Hoặc dùng Cloudflare Tunnel** (miễn phí, ổn định hơn)
3. **Hoặc chấp nhận SQLite fallback** cho Space (chỉ để test)

## Scripts

- `khoidongDB.sh` - Khởi động ngrok và update DATABASE_URL
- `fix_ngrok_postgres.sh` - Fix và test ngrok tunnel (chưa fix được)

## Cách sử dụng

```bash
# Khởi động ngrok và update DATABASE_URL
./hue-portal-backend/khoidongDB.sh

# Fix và test ngrok tunnel
./hue-portal-backend/fix_ngrok_postgres.sh
```