企业网站模板免费下载企业网站模板,wordpress 网站图标,php网站验证码,下载小程序安装1. 项目结构
my_project/
│
├── app/
│ ├── main.py # FastAPI应用的入口
│ ├── services/ # 包含服务逻辑
│ │ └── ollama_service.py
│ ├── models/ # 定义数据模型
│ │ └── response.py
│ ├─…1. 项目结构
my_project/
│
├── app/
│ ├── main.py # FastAPI应用的入口
│ ├── services/ # 包含服务逻辑
│ │ └── ollama_service.py
│ ├── models/ # 定义数据模型
│ │ └── response.py
│ ├── utils/ # 工具类帮助类
│ │ └── file_utils.py
│ └── Dockerfile # 用于构建应用的 Dockerfile
│
├── docker-compose.yml # Docker Compose 配置
└── requirements.txt # Python依赖2. 代码实现
2.1 app/main.py — FastAPI 应用入口
from fastapi import FastAPI, File, UploadFile
from fastapi.responses import JSONResponse
from app.services.ollama_service import get_image_response
from app.utils.file_utils import save_temp_image, remove_temp_imageapp FastAPI()app.post(/upload-image/)
async def upload_image(file: UploadFile File(...)):try:# 保存上传的图片为临时文件tmp_path await save_temp_image(file)# 调用 Ollama 服务处理图片response await get_image_response(tmp_path)# 删除临时文件await remove_temp_image(tmp_path)return JSONResponse(content{response: response}, status_code200)except Exception as e:return JSONResponse(content{error: str(e)}, status_code500)2.2 app/services/ollama_service.py — 处理 Ollama 服务
import ollamaasync def get_image_response(image_path: str):调用 Ollama API 获取图像分析结果response ollama.chat(modelllama3.2-vision,messages[{role: user,content: What is in this image?,images: [image_path]}])return response2.3 app/utils/file_utils.py — 文件操作工具类
import os
from tempfile import NamedTemporaryFile
from fastapi import UploadFileasync def save_temp_image(file: UploadFile):保存上传的图片为临时文件with NamedTemporaryFile(deleteFalse, suffix.jpg) as tmp:tmp.write(await file.read())tmp_path tmp.namereturn tmp_pathasync def remove_temp_image(file_path: str):删除临时文件if os.path.exists(file_path):os.remove(file_path)2.4 app/Dockerfile — Docker 文件
# 使用官方 Python 镜像作为基础镜像
FROM python:3.9-slim# 设置工作目录
WORKDIR /app# 复制本地的 requirements.txt 并安装依赖
COPY requirements.txt /app/requirements.txt
RUN pip install --no-cache-dir -r requirements.txt# 复制本地代码到容器内
COPY ./app /app# 启动 FastAPI 应用
CMD [uvicorn, main:app, --host, 0.0.0.0, --port, 8000, --reload]2.5 requirements.txt — Python 依赖
fastapi
uvicorn
ollama
python-multipart2.6 docker-compose.yml — Docker Compose 配置
version: 3.8services:app:build: ./appcontainer_name: fastapi-ollamaports:- 8000:8000volumes:- ./app:/appenvironment:- OLLAMA_API_KEYyour_ollama_api_key # 如果需要设置 Ollama API 密钥depends_on:- ollama_api # 仅在有需要调用 Ollama 服务的情况下3. 部署流程 构建 Docker 镜像 在项目根目录下运行以下命令来构建 Docker 镜像 docker-compose build启动应用 使用 Docker Compose 启动服务 docker-compose up这会启动 FastAPI 应用并且在浏览器访问 http://localhost:8000 可以看到 FastAPI 服务正在运行。 访问上传接口 使用 Postman 或者任何 HTTP 客户端向 http://localhost:8000/upload-image/ 发送 POST 请求上传图像文件并查看返回的 ollama 结果。
4. 结论
通过这个结构和 Docker Compose 部署方式项目分层清晰确保了每个模块的职责单一。main.py 处理 FastAPI 的路由ollama_service.py 负责与 Ollama 的交互file_utils.py 负责文件操作并且整个项目通过 Docker Compose 可以非常方便地部署和管理。
确保在需要调用 Ollama 服务时有正确的 API 密钥和配置。如果 Ollama 服务本身也需要容器化你可以在 docker-compose.yml 文件中添加相应的服务配置。