Đưa Jarvis lên Mây: Đóng gói API bằng Docker (Containerization)

AI Hunter

Member
Bạn có bao giờ gặp cảnh: Code chạy ngon trên máy mình, nhưng sang máy khác thì lỗi tùm lum do thiếu thư viện?
Docker sinh ra để giải quyết việc đó. Nó đóng gói code, thư viện, và môi trường vào một chiếc "Container" (như thùng hàng). Bạn vứt container này lên bất kỳ máy nào (Linux, Windows, Server), nó đều chạy y hệt nhau.

Đưa Jarvis lên Mây Đóng gói API bằng Docker (Containerization).jpg

1. Cấu trúc thư mục​


Hãy sắp xếp lại dự án của bạn cho chuyên nghiệp:

Mã:
/my-jarvis-app
├── main.py          # File code FastAPI (đã viết ở bài trước)
├── requirements.txt # Danh sách thư viện cần cài
└── Dockerfile       # Bản thiết kế để đóng gói

Bước 1: Tạo file `requirements.txt`
Liệt kê các thư viện bạn đang dùng:
Mã:
fastapi
uvicorn
ollama
pydantic
requests

2. Viết Dockerfile​


Tạo một file tên là `Dockerfile` (không có đuôi .txt) và dán nội dung sau:

Mã:
# 1. Chọn hệ điều hành nền (Python 3.10 siêu nhẹ)
FROM python:3.10-slim

# 2. Tạo thư mục làm việc bên trong container
WORKDIR /app

# 3. Copy file thư viện vào trước để cài đặt (tận dụng cache)
COPY requirements.txt .

# 4. Cài đặt các thư viện
RUN pip install --no-cache-dir -r requirements.txt

# 5. Copy toàn bộ code còn lại vào
COPY . .

# 6. Mở cổng 8000 (Cổng của FastAPI)
EXPOSE 8000

# 7. Lệnh chạy server khi container khởi động
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]

3. Build và Chạy Docker​


Mở Terminal tại thư mục dự án:

B1. Đóng gói (Build Image):
Mã:
docker build -t jarvis-api .
*(Dấu chấm ở cuối nghĩa là thư mục hiện tại)*

B2. Chạy (Run Container):
Mã:
docker run -d -p 8000:8000 --name my-jarvis jarvis-api

* `-d`: Chạy ngầm (Detached mode) - Tắt terminal nó vẫn chạy.
* `-p 8000:8000`: Nối cổng 8000 của máy thật vào cổng 8000 của container.

4. Vấn đề kết nối với Llama 3 (Ollama)​


Đây là phần "khoai" nhất mà người mới hay gặp lỗi.
* **Ollama** đang chạy trên máy thật (Host).
* **FastAPI** đang chạy trong lồng kính (Docker Container).
-> Docker không thể gọi `localhost` để gặp Ollama được (vì localhost của Docker là chính nó).

Giải pháp:
Trong file `main.py`, bạn cần sửa lại địa chỉ kết nối Ollama.
Nếu chạy Docker trên Windows/Mac, hãy dùng địa chỉ đặc biệt: `host.docker.internal`.

Python:
# Sửa trong main.py
client = ollama.Client(host='http://host.docker.internal:11434')

Hoặc khi chạy Docker trên Linux, thêm cờ `--network="host"` vào lệnh run để container dùng chung mạng với máy chủ.

5. Public ra Internet (Miễn phí)​


Bây giờ API đã chạy ngon lành trong Docker ở cổng 8000. Để truy cập từ xa mà không cần mở port modem (rủi ro bảo mật), hãy dùng **Cloudflare Tunnel**.

1. Tải `cloudflared` về máy.
2. Chạy lệnh: `cloudflared tunnel --url http://localhost:8000`
3. Nó sẽ nhả ra một đường link dạng `https://random-name.trycloudflare.com`.

Bùm! Bạn copy link đó, dán vào App điện thoại hoặc code XenForo. Giờ đây, bạn có thể gọi Jarvis từ bất cứ đâu trên thế giới, và Jarvis sẽ xử lý ngay tại máy tính mạnh mẽ ở nhà bạn.

6. Tổng kết​


  • Bạn không cần thuê VPS đắt tiền để chạy AI. Hãy tận dụng máy nhà (Home Lab).
  • Docker giúp môi trường code sạch sẽ, không cài rác ra máy chính.
  • Cloudflare Tunnel giúp public API an toàn tuyệt đối.
 
Back
Top