Nextuschat / README.md
quan3s's picture
Rename readme.md to README.md
679b1c2 verified
|
Raw
History Blame Contribute Delete
4.32 kB
---
title: Nexus Chat
emoji: 💬
colorFrom: blue
colorTo: purple
sdk: docker
pinned: false
app_port: 7860
---
# Nexus Chat — Standalone Node.js Server
Server chat (Express 5 + WebSocket + PostgreSQL + Redis), chạy trực tiếp bằng
Node, không cần bước build. Dữ liệu lưu trong PostgreSQL; Redis dùng cho
trạng thái online và pub/sub realtime (hỗ trợ chạy nhiều instance).
## Cài đặt
```bash
npm install
cp .env.example .env # rồi sửa các giá trị cho phù hợp
```
## Chạy
```bash
npm start
# hoặc khi phát triển (tự restart khi sửa file):
npm run dev
```
Hoặc chạy toàn bộ (app + Postgres + Redis) bằng Docker Compose:
```bash
docker compose up --build
```
Mặc định lắng nghe ở `PORT=7860` (đặt biến môi trường `PORT` để đổi; Hugging
Face Spaces yêu cầu `7860`).
## Biến môi trường (`.env`)
Xem file `.env.example` để biết toàn bộ danh sách. Các nhóm chính:
| Nhóm | Biến | Ý nghĩa |
|-------------|--------------------------------------------------------------------|--------------------------------------------|
| Server | `PORT`, `NODE_ENV`, `LOG_LEVEL` | Cổng, môi trường, mức log |
| Auth | `JWT_SECRET`, `SEED_ADMIN_PASSWORD` | Khóa ký JWT, mật khẩu admin seed lần đầu |
| PostgreSQL | `DATABASE_URL` hoặc `PGHOST/PGPORT/PGUSER/PGPASSWORD/PGDATABASE/PGSSL` | Kết nối database |
| Redis | `REDIS_URL` | Kết nối Redis (presence + pub/sub) |
| Web Push | `VAPID_PUBLIC`, `VAPID_PRIVATE`, `VAPID_EMAIL` | Web Push notifications |
`DATABASE_URL` nếu được đặt sẽ ưu tiên hơn các biến `PG*` riêng lẻ.
Với các nhà cung cấp Postgres managed (Neon, Supabase, RDS...) thường cần
`PGSSL=true`.
## Cấu trúc
```
src/
index.js # entrypoint: init Postgres + Redis, tạo HTTP server, WS, seed admin
app.js # Express app: middleware + static + routes
db/index.js # lớp dữ liệu PostgreSQL (pg)
lib/
logger.js # pino logger
redis.js # Redis client, presence helpers, pub/sub
chat/
routes.js # toàn bộ REST API (auth, friends, rooms, messages, admin)
ws.js # WebSocket server (chat realtime, gọi điện WebRTC)
push.js # Web Push notifications
public/
index.html # UI gốc
patch.js # script vá lỗi phía client (được tự động chèn vào index.html)
sw.js # service worker cho push
```
## Tài khoản admin mặc định
Khi server khởi động lần đầu, hai tài khoản admin sẽ được tạo tự động:
- `admin@nexus.vn`
- `quantri@nexus.vn`
Mật khẩu mặc định lấy từ `SEED_ADMIN_PASSWORD` (mặc định `11082012`) —
**nên đặt biến môi trường này thành một mật khẩu mạnh, hoặc đổi ngay sau khi
đăng nhập lần đầu** (qua `PUT /me/password`).
## Database
Schema PostgreSQL được tự động tạo (nếu chưa có) khi server khởi động
(`initDb()` trong `src/db/index.js`). Cần một database PostgreSQL đang chạy
và truy cập được qua `DATABASE_URL`.
## Redis
Redis được dùng để:
- Theo dõi danh sách user đang online (set `nexus:online`), hoạt động đúng
khi chạy nhiều instance của server.
- Pub/Sub kênh `nexus:events` để chuyển tiếp tin nhắn realtime (chat, typing,
thu hồi tin nhắn, gọi điện WebRTC...) giữa các instance.
## Deploy lên Hugging Face Spaces (Docker)
1. Tạo Space mới, chọn SDK **Docker**.
2. Cấu hình các biến môi trường (`Settings → Variables and secrets`) tương
ứng với `.env.example` — đặc biệt `DATABASE_URL`, `REDIS_URL`,
`JWT_SECRET`, `SEED_ADMIN_PASSWORD`.
3. Push code (kèm `Dockerfile`) lên Space.
Lưu ý: PostgreSQL và Redis cần chạy ở dịch vụ ngoài (managed Postgres/Redis),
vì Hugging Face Spaces không cung cấp các dịch vụ này.