AI Hunter
Member
Anh em có thấy mệt khi mỗi lần khởi động Jarvis là phải mở 3-4 cái cửa sổ Terminal không?
Chưa kể hôm nào đẹp trời cài lại Win, cài lại Python là lỗi tùm lum.
Hôm nay, chúng ta sẽ dùng Docker để gói tất cả lại thành một "cục". Chỉ cần gõ 1 lệnh duy nhất là hệ thống tự chạy.
Để đóng gói gọn gàng, chúng ta cần chia code thành các thư mục rõ ràng.
Hãy tạo cấu trúc thư mục dự án như sau:
Lưu ý: Hãy tách file
Tạo file
Tạo file
Đây là file quan trọng nhất. Nó sẽ định nghĩa toàn bộ hệ thống Jarvis của bạn.
Tạo file
Bây giờ là giây phút của sự thật.
Mở Terminal tại thư mục gốc
Điều gì sẽ xảy ra?
Sau khi chạy xong, truy cập:
Chúc mừng! Bạn đã chính thức "Docker hóa" thành công Jarvis.
Bây giờ, nếu muốn chia sẻ Jarvis cho bạn bè, bạn chỉ cần nén thư mục
- Chạy Qdrant.
- Chạy Ollama.
- Chạy FastAPI.
- Chạy Chainlit.
Chưa kể hôm nào đẹp trời cài lại Win, cài lại Python là lỗi tùm lum.
Hôm nay, chúng ta sẽ dùng Docker để gói tất cả lại thành một "cục". Chỉ cần gõ 1 lệnh duy nhất là hệ thống tự chạy.
1. Chuẩn bị: Sắp xếp lại nhà cửa
Để đóng gói gọn gàng, chúng ta cần chia code thành các thư mục rõ ràng.
Hãy tạo cấu trúc thư mục dự án như sau:
Mã:
my_jarvis/
├── backend/ # Chứa code FastAPI
│ ├── Dockerfile # <--- File mới
│ ├── requirements.txt # Các thư viện cho Backend
│ └── server.py # File server.py cũ của bạn
├── frontend/ # Chứa code Chainlit
│ ├── Dockerfile # <--- File mới
│ ├── requirements.txt # Các thư viện cho Frontend
│ ├── chainlit.md
│ └── app.py # File app.py cũ của bạn
└── docker-compose.yml # <--- File "Nhạc trưởng" điều khiển tất cả
Lưu ý: Hãy tách file
requirements.txt gốc ra làm 2 file nhỏ cho backend và frontend tương ứng để tối ưu dung lượng ảnh Docker.2. Bước 1: Viết Dockerfile cho Backend
Tạo file
backend/Dockerfile (không có đuôi file):
Mã:
# Sử dụng Python 3.10 siêu nhẹ
FROM python:3.10-slim
# Thiết lập thư mục làm việc
WORKDIR /app
# Copy file thư viện vào trước để tận dụng Cache
COPY requirements.txt .
# Cài đặt thư viện
RUN pip install --no-cache-dir -r requirements.txt
# Copy toàn bộ code vào
COPY . .
# Mở cổng 8000
EXPOSE 8000
# Lệnh chạy server
CMD ["uvicorn", "server:app", "--host", "0.0.0.0", "--port", "8000"]
3. Bước 2: Viết Dockerfile cho Frontend
Tạo file
frontend/Dockerfile:
Mã:
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
# Chainlit mặc định chạy port 8000, ta sẽ map nó ra port khác sau
EXPOSE 8000
# Lệnh chạy Chainlit
CMD ["chainlit", "run", "app.py", "--host", "0.0.0.0", "--port", "8000"]
4. Bước 3: Viết docker-compose.yml (Nhạc trưởng)
Đây là file quan trọng nhất. Nó sẽ định nghĩa toàn bộ hệ thống Jarvis của bạn.
Tạo file
docker-compose.yml ngay thư mục gốc:
Mã:
version: '3.8'
services:
# 1. Database Vector (Qdrant)
qdrant:
image: qdrant/qdrant
ports:
- "6333:6333"
volumes:
- ./qdrant_data:/qdrant/storage # Lưu dữ liệu ra ngoài để không bị mất khi tắt container
# 2. Brain (FastAPI Backend)
backend:
build: ./backend # Build từ thư mục backend
ports:
- "8000:8000"
environment:
- OPENAI_API_KEY=ollama # Hoặc key thật nếu dùng OpenAI
- QDRANT_URL=http://qdrant:6333 # Gọi nhau bằng tên service
- OLLAMA_URL=http://host.docker.internal:11434/v1 # Kết nối với Ollama chạy trên máy thật
depends_on:
- qdrant
extra_hosts:
- "host.docker.internal:host-gateway" # Để container nhìn thấy Ollama ở máy thật
# 3. Face (Chainlit Frontend)
frontend:
build: ./frontend # Build từ thư mục frontend
ports:
- "8501:8000" # Map port 8000 trong container ra port 8501 máy thật
environment:
- API_URL=http://backend:8000/chat # Gọi Backend bằng tên service
depends_on:
- backend
# Mạng nội bộ để các container nói chuyện với nhau
networks:
default:
driver: bridge
5. Chạy hệ thống
Bây giờ là giây phút của sự thật.
Mở Terminal tại thư mục gốc
my_jarvis/ và gõ:
Mã:
docker-compose up --build
Điều gì sẽ xảy ra?
- Docker sẽ tự động tải Qdrant về.
- Tự động build file ảnh cho Backend và Frontend.
- Tự động kết nối mạng giữa 3 thằng này.
- Bạn chỉ cần ngồi rung đùi đợi dòng chữ xanh lá hiện lên.
Sau khi chạy xong, truy cập:
- Frontend: http://localhost:8501 (Lưu ý là cổng 8501 nhé)
- Backend Docs: http://localhost:8000/docs
- Qdrant Dashboard: http://localhost:6333/dashboard
Tổng kết
Chúc mừng! Bạn đã chính thức "Docker hóa" thành công Jarvis.
Bây giờ, nếu muốn chia sẻ Jarvis cho bạn bè, bạn chỉ cần nén thư mục
my_jarvis lại và gửi cho họ. Họ chỉ cần cài Docker và gõ 1 lệnh là xong. Không cần quan tâm Python phiên bản bao nhiêu, thư viện gì.Bài viết liên quan