Spaces:
Runtime error
Runtime error
Upload README.md with huggingface_hub
Browse files
README.md
CHANGED
|
@@ -37,3 +37,106 @@ ADMIN_USERNAME=admin
|
|
| 37 |
ADMIN_PASSWORD=...
|
| 38 |
NODE_ENV=production
|
| 39 |
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 37 |
ADMIN_PASSWORD=...
|
| 38 |
NODE_ENV=production
|
| 39 |
```
|
| 40 |
+
|
| 41 |
+
---
|
| 42 |
+
|
| 43 |
+
# 🌐 Lyvuha.com — Hệ Thống Portfolio & Giới Thiệu Sản Phẩm
|
| 44 |
+
|
| 45 |
+
Trang giới thiệu sản phẩm và portfolio công nghệ của **Lý Vũ Hà** (lyvuha.com), xây dựng trên kiến trúc Full-stack hiện đại, bảo mật và hiệu năng cao.
|
| 46 |
+
|
| 47 |
+
## 🚀 Kiến Trúc Hệ Thống (Architecture)
|
| 48 |
+
|
| 49 |
+
Hệ thống được thiết kế chạy 100% online trên các hạ tầng đám mây tối ưu chi phí và mở rộng tốt:
|
| 50 |
+
|
| 51 |
+
```mermaid
|
| 52 |
+
graph TD
|
| 53 |
+
User([Người dùng]) -->|Truy cập HTTPS| Frontend[Vercel Frontend - React + Vite]
|
| 54 |
+
Frontend -->|Gọi API| Backend[Hugging Face Space - Node.js + Express + Docker]
|
| 55 |
+
Backend -->|Truy vấn dữ liệu| DB[Supabase - Managed PostgreSQL Database]
|
| 56 |
+
Backend -->|Fallback khi Dev local| SQLite[Local SQLite database.sqlite]
|
| 57 |
+
```
|
| 58 |
+
|
| 59 |
+
- **Frontend**: Single Page Application (SPA) viết bằng **React** và **Vite**, deploy tĩnh lên **Vercel** tại domain chính `https://lyvuha.com`.
|
| 60 |
+
- **Backend**: **Node.js** + **Express** server chạy dưới dạng container Docker trên **Hugging Face Spaces** (Port 7860).
|
| 61 |
+
- **Database**: **Supabase PostgreSQL** cho môi trường production để lưu trữ dữ liệu các sản phẩm/tin nhắn một cách bền vững.
|
| 62 |
+
- **Bộ chuyển đổi cơ sở dữ liệu kép (Dual-mode Database Adapter)**: Tự động chuyển đổi giữa **PostgreSQL** (production) và **SQLite** (development local) tùy thuộc vào sự có mặt của `DATABASE_URL` trong môi trường.
|
| 63 |
+
|
| 64 |
+
---
|
| 65 |
+
|
| 66 |
+
## ✨ Các Tính Năng Chính (Core Features)
|
| 67 |
+
|
| 68 |
+
1. **Portfolio & Danh Sách Sản Phẩm**: Hiển thị các dự án công nghệ, IoT, AI, DevOps đã làm.
|
| 69 |
+
2. **Admin Dashboard (Trang Quản Trị)**:
|
| 70 |
+
- Thêm, sửa, xoá dự án trực quan (CRUD).
|
| 71 |
+
- Xem hòm thư liên hệ, đánh dấu đã đọc hoặc xoá thư.
|
| 72 |
+
- Bảo mật đầu cuối bằng mã hoá **JWT (JSON Web Token)**.
|
| 73 |
+
3. **Form Liên Hệ (Contact Form)**: Gửi tin nhắn trực tiếp tới cơ sở dữ liệu và gửi thông báo qua email cá nhân/công việc (`havucong25@gmail.com` và `havucong@lyvuha.com`).
|
| 74 |
+
4. **Giao Diện Premium**: Thiết kế hiện đại dạng Dark mode, Neon cyan-to-purple gradient, glassmorphism cao cấp, tương thích mọi thiết bị (Responsive).
|
| 75 |
+
|
| 76 |
+
---
|
| 77 |
+
|
| 78 |
+
## 🛠️ Hướng Dẫn Phát Triển Local (Local Development)
|
| 79 |
+
|
| 80 |
+
### 1. Cài đặt môi trường
|
| 81 |
+
Cài đặt dependencies cho cả Backend và Frontend:
|
| 82 |
+
```bash
|
| 83 |
+
# Backend dependencies
|
| 84 |
+
cd backend && npm install
|
| 85 |
+
|
| 86 |
+
# Frontend dependencies
|
| 87 |
+
cd ../frontend && npm install
|
| 88 |
+
```
|
| 89 |
+
|
| 90 |
+
### 2. File cấu hình môi trường local (`backend/.env`)
|
| 91 |
+
Tạo file `backend/.env` với nội dung mẫu:
|
| 92 |
+
```env
|
| 93 |
+
PORT=5000
|
| 94 |
+
JWT_SECRET=your_jwt_secret_key
|
| 95 |
+
ADMIN_USERNAME=admin
|
| 96 |
+
ADMIN_PASSWORD=your_password
|
| 97 |
+
NODE_ENV=development
|
| 98 |
+
```
|
| 99 |
+
*Lưu ý: Nếu không có `DATABASE_URL`, hệ thống sẽ tự động tạo file cơ sở dữ liệu `database.sqlite` ở thư mục gốc backend để phát triển local.*
|
| 100 |
+
|
| 101 |
+
### 3. Chạy chế độ Development
|
| 102 |
+
Chạy cả frontend và backend đồng thời qua proxy:
|
| 103 |
+
```bash
|
| 104 |
+
# Terminal 1: Chạy Backend
|
| 105 |
+
cd backend && npm run dev
|
| 106 |
+
|
| 107 |
+
# Terminal 2: Chạy Frontend
|
| 108 |
+
cd frontend && npm run dev
|
| 109 |
+
```
|
| 110 |
+
Truy cập: `http://localhost:3000` (Frontend) proxy tới `http://localhost:5000` (Backend).
|
| 111 |
+
|
| 112 |
+
---
|
| 113 |
+
|
| 114 |
+
## 📦 Hướng Dẫn Deploy (Deployment Guide)
|
| 115 |
+
|
| 116 |
+
### 1. Deploy Backend (Hugging Face Spaces)
|
| 117 |
+
1. Tạo một **Space** mới trên Hugging Face với SDK là **Docker**.
|
| 118 |
+
2. Đẩy toàn bộ mã nguồn lên Space (bỏ qua `node_modules` và file `.env`).
|
| 119 |
+
3. Truy cập **Settings** -> **Variables and secrets** của Space đó và cấu hình:
|
| 120 |
+
- `DATABASE_URL`: Đường dẫn kết nối PostgreSQL của Supabase.
|
| 121 |
+
- `JWT_SECRET`: Chuỗi khóa bảo mật JWT.
|
| 122 |
+
- `ADMIN_USERNAME`: Tài khoản admin mong muốn.
|
| 123 |
+
- `ADMIN_PASSWORD`: Mật khẩu admin mong muốn.
|
| 124 |
+
- `NODE_ENV`: `production`.
|
| 125 |
+
|
| 126 |
+
### 2. Deploy Frontend (Vercel)
|
| 127 |
+
1. Cập nhật URL backend của bạn trong `frontend/.env.production`:
|
| 128 |
+
```env
|
| 129 |
+
VITE_API_URL=https://your-space-name.hf.space
|
| 130 |
+
```
|
| 131 |
+
2. Build và deploy bằng Vercel CLI hoặc GitHub Integration:
|
| 132 |
+
```bash
|
| 133 |
+
cd frontend
|
| 134 |
+
npm run build
|
| 135 |
+
npx vercel --prod
|
| 136 |
+
```
|
| 137 |
+
3. Cấu hình domain `lyvuha.com` trỏ về dự án Vercel.
|
| 138 |
+
|
| 139 |
+
---
|
| 140 |
+
|
| 141 |
+
*Hệ thống được phát triển và tối ưu hóa bởi Antigravity AI.*
|
| 142 |
+
|