Triển khai
Bản build production của RivaLMS chạy trong Docker. Môi trường UAT dựng bằng docker-compose.uat.yml với PostgreSQL và MinIO riêng; production dùng cùng image, trỏ biến môi trường tới PostgreSQL và kho lưu file S3 của môi trường đó.
UAT trên Docker
Stack UAT tách biệt với môi trường dev (khác project, network, volume và cổng) nên chạy song song được.
Bước 1: Tạo file môi trường
cp .env.uat.example .env.uatTrong .env.uat, đặt AUTH_SECRET mới (khác dev), chọn LLM qua các biến OPENAI_*, và quyết định DEMO_MODE, ALLOW_SELF_REGISTER.
Bước 2: Build và khởi động
docker compose -f docker-compose.uat.yml up -d --build
docker compose -f docker-compose.uat.yml ps -a
# kết quả mong đợi:
# db Up (healthy)
# init Exited (0)
# minio Up (healthy)
# minio-init Exited (0)
# app Up (healthy)Container init chạy một lần: áp dụng migration bằng prisma migrate deploy và seed dữ liệu nếu DB còn rỗng. minio-init tạo bucket private. App chỉ khởi động khi hai bước này thành công.
Bước 3: Kiểm tra
Mở http://localhost:3100 và đăng nhập bằng tài khoản dùng thử. Không mở cổng 3100 ra Internet.
Cập nhật sau khi sửa code
Chạy lại lệnh build ở bước 2. init áp dụng migration mới và không seed lại vì DB đã có dữ liệu; dữ liệu UAT được giữ nguyên. Chỉ đổi .env.uat thì dùng up -d --force-recreate app, không cần build lại.
Cơ sở dữ liệu
Mọi môi trường dùng migration có phiên bản; không dùng db push.
# chạy trước khi khởi động bản mới (UAT: container init tự chạy)
npm run db:deploySeed tạo khoa, khóa học mẫu và tài khoản dùng thử, chỉ dùng cho dev và UAT.
Biến môi trường production
Các biến cần đặt cho production. Danh sách đầy đủ xem .env.example và .env.uat.example.
# Cơ sở dữ liệu PostgreSQL
DATABASE_URL="postgresql://..."
# Xác thực: tạo khóa mới bằng npx auth secret
AUTH_SECRET="..."
AUTH_URL="https://..."
# Trợ lý AI (OpenAI)
OPENAI_BASE_URL="https://api.openai.com/v1"
OPENAI_API_KEY="sk-proj-..."
OPENAI_MODEL="gpt-4o-mini"
# Kho lưu file S3 (bucket private)
S3_ENDPOINT="https://..."
S3_REGION="..."
S3_BUCKET="..."
S3_ACCESS_KEY_ID="..."
S3_SECRET_ACCESS_KEY="..."
# Tắt đăng nhập nhanh và tự đăng ký
DEMO_MODE=false
ALLOW_SELF_REGISTER=falseDanh sách kiểm tra
Tài liệu liên quan
Hướng dẫn chi tiết nằm trong thư mục docs/ của mã nguồn:
docs/UAT_DOCKER.mdDựng và cập nhật môi trường UAT
docs/LOCAL_SETUP.mdMôi trường dev, lưu trữ file, xử lý sự cố
docs/OPENAI_SETUP.mdTạo API key, chọn model và kiểm soát chi phí OpenAI
docs/LLM_CONFIG.mdYêu cầu với LLM, đánh giá model chạy trên máy