这篇是我自己折腾 ollama2api 的笔记:不走 Docker,直接在宿主机用 Python 虚拟环境跑起来,然后再做成 systemd 常驻服务。最后补一段 Nginx 反代(可选)。
写出来主要是怕自己过两个月忘了……照着这篇抄,基本就能复现。
先讲清楚:这个项目到底干啥的?
一句话:它是个 FastAPI 服务(入口 main.py),对外提供 OpenAI 兼容接口:
/v1/chat/completions/v1/models
后端连的是 Ollama(可以一个,也可以多个),还带管理后台(/admin)和健康检查(/health)。
不使用 Docker 的部署方式有哪些?
我实际用下来,核心就三段:
- 方式 A:本机/虚拟环境直接跑(
python + uvicorn)——先跑通最重要 - 方式 B:在 A 的基础上做成
systemd常驻服务——上线长期跑 - 方式 C(可选):Nginx 反代到域名 + 认证——需要外网访问后台时再上
方式 A:本机直接运行(最简单,适合先跑通)
1)准备 Python(要求 3.10+)
apt update -y
apt install -y python3 python3-venv python3-pip git
python3 --version
2)拉代码
cd /root
git clone https://github.com/xiaolajiaoyyds/ollama2api
cd ollama2api
3)创建虚拟环境并安装依赖
python3 -m venv venv
source venv/bin/activate
pip install -U pip
pip install -r requirements.txt
依赖都在 requirements.txt 里:fastapi、uvicorn、aiohttp、pydantic、pyyaml 等。项目在 Linux 下如果检测到 uvloop 会启用(Windows 就不会用)。
4)启动(前台跑,便于看日志)
默认端口是 8001。我习惯先只监听本机回环,安全一点:
uvicorn main:app --host 127.0.0.1 --port 8001
验证(本机):
curl -sS http://127.0.0.1:8001/health | jq .
curl -sS http://127.0.0.1:8001/v1/models | jq .
管理后台入口(本机):
http://127.0.0.1:8001/admin
(项目里根路径 / 会跳转到 /admin/login。)
4.1)管理员默认账号/密码是什么?(非常重要)
这个项目的管理员账号密码来自两处(按优先级):
- 环境变量:
ADMIN_USERNAME/ADMIN_PASSWORD - 首次启动写入的配置文件:
data/config.json
默认值(没改任何东西时):
- 账号:
admin - 密码:
changeme
建议:你只要能登进去第一件事就是改掉,别把默认密码放到公网环境里。
4.2)怎么修改管理员密码?
我常用两种方式,任选其一:
方式 A:直接改配置文件(最直观)
# 停服务(如果你是 systemd 常驻)
systemctl stop ollama2api
# 编辑配置
nano /root/ollama2api/data/config.json
# 找到并修改:
# "admin_username": "admin"
# "admin_password": "你的新密码"
# 再启动
systemctl start ollama2api
方式 B:用环境变量覆盖(适合写进 systemd)
前台临时跑可以这样(只对本次进程生效):
ADMIN_USERNAME=admin ADMIN_PASSWORD='你的强密码'
uvicorn main:app --host 127.0.0.1 --port 8001
如果你是 systemd,推荐在 service 里加:
Environment=ADMIN_USERNAME=admin
Environment=ADMIN_PASSWORD=你的强密码
5)怎么接入 Ollama(最直观的办法)
我一般不先搞什么扫描发现,直接在后台 /admin 里添加后端(backends):
- 同机:
http://127.0.0.1:11434 - 内网:
http://192.168.x.x:11434
加完再回到终端看 /v1/models 是否能看到模型就行。
方式 B:systemd 常驻(最推荐,掉了自动拉起)
1)先确认方式 A 跑通
确保下面三行能正常启动,访问 health 也能通:
cd /root/ollama2api
source venv/bin/activate
uvicorn main:app --host 127.0.0.1 --port 8001
确认 OK 后 Ctrl+C 退出。
2)写 systemd 服务文件
创建文件:
/etc/systemd/system/ollama2api.service
内容如下(整段复制):
[Unit]
Description=ollama2api (Ollama to OpenAI compatible API)
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
WorkingDirectory=/root/ollama2api
ExecStart=/root/ollama2api/venv/bin/python -m uvicorn main:app --host 127.0.0.1 --port 8001
Restart=always
RestartSec=2
# 日志(可选):也可以只用 journalctl
StandardOutput=append:/root/ollama2api/logs/stdout.log
StandardError=append:/root/ollama2api/logs/stderr.log
NoNewPrivileges=true
PrivateTmp=true
[Install]
WantedBy=multi-user.target
3)启动并设置开机自启
systemctl daemon-reload
systemctl enable --now ollama2api
systemctl status ollama2api --no-pager
ss -ltnp | grep 8001
日志查看:
journalctl -u ollama2api -n 100 --no-pager
# 或者看你指定的文件日志:
tail -n 50 /root/ollama2api/logs/stdout.log
tail -n 50 /root/ollama2api/logs/stderr.log
方式 C:反代到域名(可选,但建议加认证)
如果你要外网访问后台/接口,我的原则是:服务继续只监听 127.0.0.1:8001,外网只放 Nginx 的 80/443。
Nginx 反代示例:
location / {
auth_basic "ollama2api";
auth_basic_user_file /path/to/htpasswd;
proxy_pass http://127.0.0.1:8001;
}
常见问题(我自己最常遇到的)
- 端口冲突:
ss -ltnp | grep 8001看谁占了,改端口即可。 - /v1/models 为空:通常是还没在后台添加 Ollama 后端,或者 Ollama 地址填错/网络不通。
- 要不要装 masscan / xray?不做扫描、不走代理的话,都不需要。它们属于可选增强。
最后
这套跑通后,基本就是:ollama2api 把 Ollama 包装成 OpenAI API,然后你就可以拿它去接 OpenClaw / Cursor / 各种 OpenAI 兼容客户端了。
如果我后面又踩坑(比如证书、反代、鉴权、模型映射),我再补一篇续集。