Một REST API đơn giản để sử dụng Google Gemini AI (chat và sinh ảnh) dựa trên cookie authentication. API được containerized với Docker để dễ dàng triển khai.
📌 Lưu ý đặc biệt cho Synology NAS:
Nếu bạn dùng Synology NAS, có một số điểm cần chú ý:
/volume1 hoặc /volume2 tùy vào hệ thốngBảng so sánh nhanh các lệnh và biến môi trường:
| Mục đích | Linux | macOS | Windows | Synology NAS |
|---|---|---|---|---|
| Thư mục hiện tại | $(pwd) | $(pwd) | ${PWD} / %CD% | /volume1 hoặc /volume2 |
| Thư mục home | ~ hoặc $HOME | ~ hoặc $HOME | $env:USERPROFILE / %USERPROFILE% | /volume1/homes |
| Downloads | ~/Downloads | ~/Downloads | $env:USERPROFILE\Downloads | /volume1/downloads |
| Tạo thư mục | mkdir -p dir | mkdir -p dir | New-Item -ItemType Directory dir / mkdir dir | mkdir -p dir |
| Copy file | cp src dest | cp src dest | Copy-Item src dest / copy src dest | cp src dest |
| Dấu xuống dòng | \ | \ | ` / N/A | \ |
Ví dụ đường dẫn thư mục user:
/home/username (ví dụ: /home/john)/Users/username (ví dụ: /Users/jane)C:\Users\username (ví dụ: C:\Users\mike)/volume1/username (ví dụ: /volume1/admin)Ví dụ đường dẫn project:
Giả sử bạn tạo thư mục bananaapi và kctapi bên trong:
/home/john/bananaapi/kctapi/har_and_cookies/Users/jane/bananaapi/kctapi/har_and_cookiesC:\Users\mike\bananaapi\kctapi\har_and_cookies/volume1/docker/bananaapi/kctapi/har_and_cookiesPull image từ Docker Hub:
Docker Hub: https://hub.docker.com/r/xehopnet/geminiapi
docker pull xehopnet/geminiapi:1.0.1
Hoặc dùng tag latest:
docker pull xehopnet/geminiapi:latest
Tạo thư mục để lưu trữ cookies trên máy host.
Linux / macOS:
mkdir -p $(pwd)/har_and_cookies
Giải thích: $(pwd)/ là gì?
pwd là lệnh "print working directory" - hiển thị thư mục hiện tại$(pwd) lấy kết quả của lệnh pwd$(pwd)/har_and_cookies tạo đường dẫn tuyệt đối đến thư mục har_and_cookies trong thư mục hiện tạiVí dụ cụ thể theo hệ điều hành:
Linux (ví dụ Ubuntu): Nếu bạn đang ở /home/username/bananaapi
$(pwd)/har_and_cookies = /home/username/bananaapi/har_and_cookiesmacOS: Nếu bạn đang ở /Users/username/bananaapi
$(pwd)/har_and_cookies = /Users/username/bananaapi/har_and_cookiesSynology NAS: Nếu bạn đang ở /volume1/docker/bananaapi
$(pwd)/har_and_cookies = /volume1/docker/bananaapi/har_and_cookiesWindows (PowerShell): Nếu bạn đang ở C:\Users\username\bananaapi
$(pwd) được, phải dùng:mkdir -p ".\har_and_cookies"
Windows (CMD):
mkdir har_and_cookies
Windows (PowerShell):
New-Item -ItemType Directory -Force -Path ".\har_and_cookies"
Synology NAS:
# Tạo thư mục trên Synology
mkdir -p /volume1/docker/bananaapi/kctapi/har_and_cookies
aistudio.google.com hoặc .google.comaistudio_cookies.json)har_and_cookies trên máy host:Linux / macOS:
cp ~/Downloads/cookies.json $(pwd)/har_and_cookies/aistudio_cookies.json
Giải thích ~:
~ là ký tự đại diện cho thư mục home của user~ = /home/username~ = /Users/username~ = /volume1/homes/username~, phải dùng đường dẫn đầy đủWindows (CMD):
copy "C:\Users\username\Downloads\cookies.json" ".\har_and_cookies\aistudio_cookies.json"
Windows (PowerShell):
Copy-Item "$env:USERPROFILE\Downloads\cookies.json" -Destination ".\har_and_cookies\aistudio_cookies.json"
Linux ví dụ:
# Nếu username là "john" và đang ở /home/john/bananaapi
cp /home/john/Downloads/cookies.json /home/john/bananaapi/har_and_cookies/aistudio_cookies.json
macOS ví dụ:
# Nếu username là "jane" và đang ở /Users/jane/bananaapi
cp /Users/jane/Downloads/cookies.json /Users/jane/bananaapi/har_and_cookies/aistudio_cookies.json
Synology NAS ví dụ:
# Nếu tải cookies về máy local rồi upload lên NAS, hoặc dùng SCP
# Ví dụ: Copy từ máy local lên Synology (chạy trên máy local)
scp ~/Downloads/cookies.json [email protected]:/volume1/docker/bananaapi/kctapi/har_and_cookies/aistudio_cookies.json
# Hoặc nếu có File Station, upload file trực tiếp qua web interface
# Sau đó di chuyển file đến /volume1/docker/bananaapi/kctapi/har_and_cookies/
Lưu ý quan trọng:
Linux / macOS:
docker run -d \
--name gemini-api \
-p 5006:5006 \
-v $(pwd)/har_and_cookies:/app/kctapi/har_and_cookies \
xehopnet/geminiapi:1.0.1
Windows (PowerShell):
docker run -d `
--name gemini-api `
-p 5006:5006 `
-v "${PWD}\har_and_cookies:/app/kctapi/har_and_cookies" `
xehopnet/geminiapi:1.0.1
Windows (CMD):
docker run -d --name gemini-api -p 5006:5006 -v "%CD%\har_and_cookies:/app/kctapi/har_and_cookies" xehopnet/geminiapi:1.0.1
Synology NAS (SSH Terminal):
docker run -d \
--name gemini-api \
-p 5006:5006 \
-v /volume1/docker/bananaapi/kctapi/har_and_cookies:/app/kctapi/har_and_cookies \
xehopnet/geminiapi:1.0.1
Hoặc dùng Docker GUI trên Synology DSM:
docker run -d --name gemini-api -p 5006:5006 -v /volume1/docker/bananaapi/kctapi/har_and_cookies:/app/kctapi/har_and_cookies xehopnet/geminiapi:1.0.1
xehopnet/geminiapi:1.0.1gemini-api5006 → Container port: 5006/volume1/docker/bananaapi/kctapi/har_and_cookies → /app/kctapi/har_and_cookiesLinux / macOS:
docker run -d \
--name gemini-api \
-p 5006:5006 \
-v $(pwd)/har_and_cookies:/app/kctapi/har_and_cookies \
-e AUTH_TOKEN=your-secure-token \
xehopnet/geminiapi:1.0.1
Windows (PowerShell):
docker run -d `
--name gemini-api `
-p 5006:5006 `
-v "${PWD}\har_and_cookies:/app/kctapi/har_and_cookies" `
-e AUTH_TOKEN=your-secure-token `
xehopnet/geminiapi:1.0.1
Synology NAS (SSH Terminal):
docker run -d \
--name gemini-api \
-p 5006:5006 \
-v /volume1/docker/bananaapi/kctapi/har_and_cookies:/app/kctapi/har_and_cookies \
-e AUTH_TOKEN=your-secure-token \
xehopnet/geminiapi:1.0.1
-d: Chạy container ở chế độ detached (nền)--name gemini-api: Đặt tên container là gemini-api-p 5006:5006: Map port 5006 của container ra port 5006 của host-v $(pwd)/har_and_cookies:/app/kctapi/har_and_cookies: Mount thư mục cookies từ host vào containerxehopnet/geminiapi:1.0.1: Tên image Dockerdocker ps
docker logs gemini-api
API chạy tại: http://localhost:5006
curl http://localhost:5006/health
curl -X POST http://localhost:5006/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-flash",
"messages": [
{"role": "user", "content": "Xin chào, bạn là ai?"}
]
}'
curl -X POST http://localhost:5006/v1/images/generations \
-H "Content-Type: application/json" \
-d '{
"model": "gemini-2.5-flash-image",
"prompt": "một thành phố tương lai lúc hoàng hôn",
"n": 1
}'
curl -X POST http://localhost:5006/v1/images/generations \
-F "model=gemini-2.5-flash-image" \
-F "prompt=Phong cách như ảnh tham chiếu" \
-F "images=@/path/to/your/image.png"
/healthKiểm tra trạng thái API
Response:
{
"status": "healthy"
}
/v1/chat/completionsChat completion tương thích với OpenAI format
Request Body:
{
"model": "gemini-2.5-flash",
"messages": [
{"role": "user", "content": "Prompt của bạn"}
],
"temperature": 0.7,
"max_tokens": 1000
}
/v1/images/generationsTạo ảnh từ text hoặc từ ảnh tham chiếu
Text-to-Image (JSON):
{
"model": "gemini-2.5-flash-image",
"prompt": "Mô tả ảnh bạn muốn tạo",
"n": 1,
"size": "1024x1024"
}
Image-to-Image (Multipart):
model: gemini-2.5-flash-image
prompt: Mô tả
images: [file1.png, file2.png]
n: 1
Response trả về ảnh dạng base64:
{
"created": 1730000000,
"data": [
{"b64_json": "iVBORw0KGgoAAAANS..."}
]
}
Lưu ảnh trên Linux/macOS:
curl -s http://localhost:5006/v1/images/generations \
-H "Content-Type: application/json" \
-d '{"model":"gemini-2.5-flash-image","prompt":"test"}' | \
python3 -c "import sys, json, base64; data=json.load(sys.stdin); open('output.png','wb').write(base64.b64decode(data['data'][0]['b64_json'])); print('Saved output.png')"
# Xem logs
docker logs gemini-api
# Kiểm tra container đã stop
docker ps -a
# Restart container
docker restart gemini-api
docker logs gemini-api | grep -i "cookie"
Export cookies mới từ Google AI Studio (theo hướng dẫn ở trên)
Copy file cookies mới vào thư mục har_and_cookies
Restart container:
docker restart gemini-api
Nếu port 5006 đã bị chiếm, thay đổi port mapping:
Linux / macOS:
docker run -d \
--name gemini-api \
-p 8888:5006 \
-v $(pwd)/har_and_cookies:/app/kctapi/har_and_cookies \
xehopnet/geminiapi:1.0.1
Windows (PowerShell):
docker run -d `
--name gemini-api `
-p 8888:5006 `
-v "${PWD}\har_and_cookies:/app/kctapi/har_and_cookies" `
xehopnet/geminiapi:1.0.1
Synology NAS (SSH Terminal):
docker run -d \
--name gemini-api \
-p 8888:5006 \
-v /volume1/docker/bananaapi/kctapi/har_and_cookies:/app/kctapi/har_and_cookies \
xehopnet/geminiapi:1.0.1
Sau đó truy cập API tại: http://localhost:8888 (hoặc http://<synology-ip>:8888)
Linux / macOS:
# Stop và xóa container
docker stop gemini-api
docker rm gemini-api
# Hoặc chạy lại với --rm để tự động xóa khi stop
docker run --rm \
--name gemini-api \
-p 5006:5006 \
-v $(pwd)/har_and_cookies:/app/kctapi/har_and_cookies \
xehopnet/geminiapi:1.0.1
Windows (PowerShell):
# Stop và xóa container
docker stop gemini-api
docker rm gemini-api
# Hoặc chạy lại với --rm để tự động xóa khi stop
docker run --rm `
--name gemini-api `
-p 5006:5006 `
-v "${PWD}\har_and_cookies:/app/kctapi/har_and_cookies" `
xehopnet/geminiapi:1.0.1
Synology NAS (SSH Terminal):
# Stop và xóa container
docker stop gemini-api
docker rm gemini-api
# Hoặc chạy lại với --rm để tự động xóa khi stop
docker run --rm \
--name gemini-api \
-p 5006:5006 \
-v /volume1/docker/bananaapi/kctapi/har_and_cookies:/app/kctapi/har_and_cookies \
xehopnet/geminiapi:1.0.1
Hoặc dùng Docker GUI trên Synology DSM:
gemini-api--restart always)MIT License
Content type
Image
Digest
sha256:2b02bcf6d…
Size
94.1 MB
Last updated
11 months ago
docker pull xehopnet/geminiapi