Linux服务器部署指南:基于Ollama和MySQL的大模型API服务搭建

云信安装大师
90
AI 质量分
11 5 月, 2025
4 分钟阅读
0 阅读

Linux服务器部署指南:基于Ollama和MySQL的大模型API服务搭建

引言

在当今AI技术快速发展的时代,大模型API服务已成为许多应用的核心组件。本文将指导你如何在Linux服务器上部署一个完整的基于Ollama和MySQL的大模型API服务。Ollama是一个轻量级的模型运行框架,而MySQL则用于存储和管理相关数据。

准备工作

环境要求

  • Linux服务器(推荐Ubuntu 20.04/22.04 LTS)
  • 至少16GB内存(大模型运行需要较多资源)
  • 50GB以上可用磁盘空间
  • Python 3.8+
  • Docker(可选,用于容器化部署)

前置知识

  • 基本的Linux命令行操作
  • Python基础
  • MySQL基础

详细步骤

1. 系统环境准备

首先更新系统并安装必要的依赖:

代码片段
# 更新系统包列表
sudo apt update && sudo apt upgrade -y

# 安装基础依赖
sudo apt install -y python3-pip python3-dev build-essential libssl-dev libffi-dev python3-setuptools git curl wget

# 安装MySQL客户端和服务器
sudo apt install -y mysql-server mysql-client libmysqlclient-dev

# 启动MySQL服务并设置开机启动
sudo systemctl start mysql
sudo systemctl enable mysql

2. MySQL数据库配置

代码片段
# 安全配置MySQL(设置root密码等)
sudo mysql_secure_installation

# 登录MySQL(使用上一步设置的密码)
sudo mysql -u root -p

# MySQL命令行中创建数据库和用户
CREATE DATABASE ollama_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'ollama_user'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON ollama_db.* TO 'ollama_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

注意事项
1. your_strong_password应替换为强密码
2. 生产环境中应考虑使用更安全的远程连接方式或连接池

3. Ollama安装与配置

代码片段
# 下载并安装Ollama(以Linux版本为例)
curl -fsSL https://ollama.com/install.sh | sh

# Ollama服务管理(启动/停止/重启)
sudo systemctl start ollama
sudo systemctl enable ollama

# 下载一个大模型(以Llama2为例)
ollama pull llama2:7b-chat-q4_0

# 验证模型是否可用
ollama run llama2:7b-chat-q4_0 "Hello, how are you?"

常见问题解决
– GPU加速问题:确保安装了NVIDIA驱动和CUDA工具包(如果有NVIDIA GPU)
– OOM错误:尝试更小的模型或增加服务器内存

4. API服务搭建(使用FastAPI)

创建一个Python虚拟环境并安装依赖:

代码片段
mkdir ollama_api && cd ollama_api
python3 -m venv venv
source venv/bin/activate

pip install fastapi uvicorn[standard] sqlalchemy pymysql requests python-dotenv ollama

创建项目结构:

代码片段
.
├── app.py            # FastAPI主应用文件
├── database.py       # MySQL连接配置
├── models.py         # SQLAlchemy数据模型 
├── .env              # 环境变量文件 
└── requirements.txt  

app.py示例代码:

代码片段
from fastapi import FastAPI, HTTPException, Depends, status, Request, Response, Query, Body, Header, APIRouter, Form, File, UploadFile 
from fastapi.responses import JSONResponse 
from fastapi.middleware.cors import CORSMiddleware 
import uvicorn 
import os 
from dotenv import load_dotenv 
import ollama 
import logging 
from typing import Optional 

load_dotenv() 

app = FastAPI(title="Ollama API Service", version="1.0")

# CORS配置 (可根据需要调整)
app.add_middleware(
    CORSMiddleware,
    allow_origins=["*"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"],
)

@app.get("/")
async def root():
    return {"message": "Ollama API Service is running"}

@app.post("/api/chat")
async def chat_completion(
    prompt: str = Body(..., description="用户输入的提示词"),
    model: str = Body("llama2:7b-chat-q4_0", description="使用的模型名称"),
    temperature: float = Body(0.7, description="生成文本的随机性"),
):
    try:
        response = ollama.generate(
            model=model,
            prompt=prompt,
            options={'temperature': temperature}
        )
        return {
            "response": response['response'],
            "model": model,
            "prompt": prompt,
            "status": "success"
        }
    except Exception as e:
        logging.error(f"Error in chat completion: {str(e)}")
        raise HTTPException(status_code=500, detail=str(e))

if __name__ == "__main__":
    uvicorn.run(app="app:app", host="0.0.0.0", port=8000, reload=True)

database.py示例代码:

代码片段
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import sessionmaker 

SQLALCHEMY_DATABASE_URL = "mysql+pymysql://ollama_user:your_strong_password@localhost/ollama_db"

engine = create_engine(SQLALCHEMY_DATABASE_URL)
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

def get_db():
    db = SessionLocal()
    try:
        yield db 
    finally:
        db.close()

5. API服务测试与部署

启动开发服务器:

代码片段
uvicorn app:app --reload --host 0.0.0.0 --port 8000

测试API端点:

代码片段
curl -X POST "http://localhost:8000/api/chat" \
-H "Content-Type: application/json" \
-d '{"prompt":"Explain quantum computing in simple terms", "model":"llama2:7b-chat-q4_0"}'

生产环境部署建议使用Gunicorn + Uvicorn:

代码片段
pip install gunicorn 

gunicorn -w 4 -k uvicorn.workers.UvicornWorker app:app --bind :8000 --timeout 120 --access-logfile -

Nginx反向代理配置(可选)

对于生产环境,建议添加Nginx作为反向代理:

代码片段
sudo apt install -y nginx 

sudo nano /etc/nginx/sites-available/ollama_api.conf 

添加以下内容:

代码片段
server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # WebSocket支持 (如果API需要)
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # Gzip压缩 (提高传输效率)
        gzip on;
        gzip_types text/plain application/json;

        # Timeout设置 (根据需求调整)
        proxy_read_timeout 300s;
    }
}

启用配置并重启Nginx:

代码片段
sudo ln -s /etc/nginx/sites-available/ollama_api.conf /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx 

HTTPS安全加固(可选)

使用Let’s Encrypt免费SSL证书:

代码片段
sudo apt install certbot python3-certbot-nginx 

sudo certbot --nginx -d your_domain.com 

# Certbot会自动修改Nginx配置并重启服务 

#设置自动续期 (每月自动检查) 
echo "15 * * * * root /usr/bin/certbot renew --quiet" | sudo tee /etc/cron.d/certbot_renewal > /dev/null 

MySQL性能优化建议(高级)

对于高并发场景,可以调整MySQL配置:

代码片段
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf 

[mysqld]
innodb_buffer_pool_size = size_in_bytes   #通常设置为可用内存的50%-70%
innodb_log_file_size = size_in_bytes     #通常设置为buffer pool的25%
max_connections = number                 #根据预期并发量设置(默认151)

#修改后需要重启MySQL服务 
sudo systemctl restart mysql 

API服务监控与日志管理

建议添加日志记录和基本监控:

  1. 日志记录:修改app.py添加日志记录功能
  2. 进程管理:使用Supervisor或Systemd管理进程
  3. 监控:Prometheus + Grafana组合

Docker容器化部署方案(可选)

创建Dockerfile:

代码片段
FROM python:3.9-slim 

WORKDIR /app 

COPY requirements.txt . 
RUN pip install --no-cache-dir -r requirements.txt 

COPY . . 

EXPOSE  8000 

CMD ["gunicorn", "-w", "4", "-k", "uvicorn.workers.UvicornWorker", "--bind", ":8000", "--timeout", "120", "--access-logfile", "-", "app:app"]  

构建并运行容器:

代码片段
docker build -t ollama-api .  

docker run -d --name ollam-api-container \  
           -p  8000:8000 \  
           --restart always \  
           ollam-api  

API文档生成与测试

FastAPI自带Swagger UI文档界面,访问:

代码片段
http://your_server_ip_or_domain/docs  
http://your_server_ip_or_domain/redoc  

总结

本文详细介绍了在Linux服务器上部署基于Ollam和MySQL的大模型AP服务的完整流程,关键步骤包括:

1️⃣ 系统环境和依赖准备
2️⃣ MySQL数据库的安装与配置
3️⃣ Ollam模型的下载与测试
4️⃣ FastAP服务的搭建与优化
5️⃣ 生产环境的部署建议

通过这套方案,你可以快速搭建起一个稳定、高效的大语言模型AP服务平台。根据实际需求,可以进一步扩展功能如:

✅ 用户认证系统
✅ 请求限流保护
✅ 更复杂的对话历史管理
✅ 多模态支持

希望这篇指南能帮助你顺利搭建自己的大语言模型AP服务平台!

原创 高质量