Backend API cho ứng dụng LinkenZone - Hệ thống quản lý và chia sẻ tài liệu.
- Node.js & Express - Backend framework
- PostgreSQL - Database (qua Prisma ORM)
- Elasticsearch - Full-text search engine
- Cloudinary - Cloud storage cho files
- JWT - Authentication
- PM2 - Process manager (production)
- Node.js v18 trở lên
- PostgreSQL v14 trở lên
- Elasticsearch v8.x (optional, có thể chạy sau)
# Clone project
git clone <repo-url>
cd Server
# Tạo branch mới
git branch <tên-nhánh-muốn-tạo>
git checkout <tên-nhánh-đã-tạo>
# Install dependencies
npm install# Copy file mẫu
cp config.env.example config.env
# Chỉnh sửa config.env với thông tin của bạn# Tạo database PostgreSQL tên "LinkenZone"
# Generate Prisma Client
npx prisma generate
# Run migrations
npx prisma migrate deploy
# (Optional) Open Prisma Studio
npx prisma studionpm run devServer sẽ chạy tại: http://localhost:5000
Xem hướng dẫn chi tiết tại: VPS_DEPLOYMENT.md
# Install dependencies
npm install --production
# Setup database
npx prisma generate
npx prisma migrate deploy
# Start with PM2
pm2 start ecosystem.config.js
pm2 save
pm2 startupServer/
├── controllers/ # Controllers xử lý logic
├── routes/ # API routes
├── services/ # Business logic layer
├── utils/ # Utilities & helpers
├── prisma/ # Database schema & migrations
├── public/ # Static files
├── app.js # Express app configuration
├── server.js # Server entry point
├── ecosystem.config.js # PM2 configuration
└── nginx.conf # Nginx configuration example
GET /health- Health check endpoint
POST /api/v1/auth/register- Đăng ký userPOST /api/v1/auth/login- Đăng nhậpGET /api/v1/auth/logout- Đăng xuất
GET /api/v1/document- Lấy danh sách documentsPOST /api/v1/document- Tạo document mớiGET /api/v1/document/:id- Lấy chi tiết documentPATCH /api/v1/document/:id- Cập nhật documentDELETE /api/v1/document/:id- Xóa documentGET /api/v1/document/search- Tìm kiếm documents
GET /api/v1/admin/users- Quản lý usersGET /api/v1/admin/stats- Thống kê
Xem file config.env.example để biết các biến cần thiết:
NODE_ENV- Environment (development/production)PORT- Server portDATABASE_URL- PostgreSQL connection stringJWT_SECRET- JWT secret keyJWT_EXPIRES_IN- JWT expiration timeCLOUD_NAME,API_KEY,API_SECRET- Cloudinary credentialsELASTICSEARCH_URL- Elasticsearch URLFRONTEND_URL- Frontend domain (for CORS)
npm run dev # Chạy development server với nodemon
npm start # Chạy production server
npm run prisma:generate # Generate Prisma Client
npm run prisma:migrate # Deploy migrations
npm run prisma:studio # Open Prisma Studiopm2 start ecosystem.config.js # Start app
pm2 logs linkenzone-api # View logs
pm2 restart linkenzone-api # Restart app
pm2 stop linkenzone-api # Stop app
pm2 monit # Monitorgit add .
git commit -sm"<Thông-Điệp>"
git push origin <Tên-nhánh># Kiểm tra PostgreSQL đang chạy
sudo systemctl status postgresql
# Kiểm tra connection string trong config.env# Kiểm tra Elasticsearch đang chạy
curl http://localhost:9200
# Hoặc disable Elasticsearch trong development (comment code)# Regenerate Prisma Client
npx prisma generate
# Reset database (WARNING: mất dữ liệu)
npx prisma migrate resetISC