用 Docker 搭一套私有 AI 编程环境:Ollama、Open WebUI、code-server 配置全整理
AI编程 Docker部署教程|附配置文件
随着大模型能力的快速提升,“AI 编程”已经从简单的代码补全,逐渐发展为代码解释、单元测试生成、接口文档编写、项目重构、Bug 定位、自动化脚本生成等完整研发辅助能力。对于个人开发者或企业团队来说,如果希望更稳定、更私有、更可控地使用 AI 编程工具,采用 Docker 部署一套本地或服务器端的 AI 编程环境,是一个非常实用的方案。
本文将以 Docker + Ollama + Open WebUI + code-server 为核心,搭建一套可用于 AI 编程的私有化环境。部署完成后,你可以在浏览器中访问 VS Code Web 版进行开发,同时通过本地大模型或私有大模型进行代码问答、代码生成和辅助编程。
本文包含完整配置文件,适合在本地电脑、云服务器、内网服务器或团队开发机上部署。
一、整体方案介绍
本教程采用如下技术栈:
| 组件 | 作用 |
|---|---|
| Docker | 容器运行环境 |
| Docker Compose | 编排多个服务 |
| Ollama | 本地大模型运行服务 |
| Open WebUI | 大模型 Web 聊天界面 |
| code-server | 浏览器版 VS Code |
| Nginx | 反向代理,可选 |
| Git | 拉取项目代码 |
| 持久化 Volume | 保存模型、配置、项目文件 |
部署完成后,你将获得:
- 一个可通过浏览器访问的 VS Code 开发环境;
- 一个可运行本地大模型的 Ollama 服务;
- 一个可视化 AI 对话界面 Open WebUI;
- 一个相对独立、可迁移、可备份的 AI 编程工作空间;
- 一套便于扩展到团队使用的 Docker Compose 配置。
整体访问方式示例:
http://服务器IP:8080 # code-server,浏览器版 VS Code
http://服务器IP:3000 # Open WebUI,AI 对话界面
http://服务器IP:11434 # Ollama API 服务
如果你配置了域名和 Nginx,也可以改成:
https://code.example.com
https://ai.example.com
二、适用场景
这套方案适合以下场景:
1. 个人开发者本地 AI 编程
如果你的电脑配置较好,尤其是有 NVIDIA 显卡,可以在本机运行代码模型,例如:
- Qwen2.5-Coder
- DeepSeek-Coder
- CodeLlama
- StarCoder2
- Llama3 系列
你可以直接通过 Open WebUI 与模型交互,也可以在 code-server 中安装插件,实现更贴近 IDE 的 AI 编程体验。
2. 企业或团队内网部署
对于企业团队来说,代码安全是非常重要的问题。将 AI 编程服务部署在内网,可以避免将代码直接提交给公网 SaaS 服务。
你可以将内部代码库、开发环境、模型服务部署在同一台服务器或同一个内网环境中,使研发团队能够安全使用 AI 能力。
3. 云服务器开发环境
如果你经常更换设备,或者希望在 iPad、轻薄笔记本、远程桌面中编程,那么 code-server 是非常方便的。只要有浏览器,就可以进入统一开发环境。
三、服务器配置建议
不同模型对硬件要求差异较大。下面是一些建议配置:
基础配置
适合运行小模型或仅使用远程 API:
CPU:2 核以上
内存:4GB 以上
硬盘:40GB 以上
系统:Ubuntu 22.04 / Debian 12 / CentOS 7+
推荐配置
适合运行 7B 级别代码模型:
CPU:4 核以上
内存:16GB 以上
硬盘:100GB 以上
GPU:可选,建议 NVIDIA 显卡 8GB 显存以上
高性能配置
适合运行 14B、32B 等较大代码模型:
CPU:8 核以上
内存:32GB / 64GB 以上
硬盘:200GB 以上 SSD
GPU:NVIDIA 16GB / 24GB 显存以上
如果没有 GPU,也可以使用 CPU 模式运行小模型,但推理速度会慢一些。对于 AI 编程场景,建议优先选择参数规模适中、响应速度较快的模型。
四、安装 Docker 和 Docker Compose
以下命令以 Ubuntu 为例。
1. 更新系统依赖
sudo apt update
sudo apt upgrade -y
2. 安装必要工具
sudo apt install -y ca-certificates curl gnupg lsb-release
3. 安装 Docker
curl -fsSL https://get.docker.com | bash
安装完成后,查看 Docker 版本:
docker version
4. 设置 Docker 开机自启
sudo systemctl enable docker
sudo systemctl start docker
5. 将当前用户加入 Docker 用户组
sudo usermod -aG docker $USER
执行后建议重新登录终端,或者直接使用:
newgrp docker
6. 检查 Docker Compose
新版 Docker 已经内置 Compose 插件,可以执行:
docker compose version
如果能够看到版本号,说明安装成功。
五、准备项目目录
建议将所有配置文件统一放在一个目录中,方便管理、备份和迁移。
mkdir -p ~/ai-coding-docker
cd ~/ai-coding-docker
目录结构建议如下:
ai-coding-docker/
├── docker-compose.yml
├── .env
├── nginx/
│ └── default.conf
├── workspace/
│ └── projects/
└── README.md
其中:
docker-compose.yml:核心服务编排文件;.env:环境变量配置文件;nginx/default.conf:可选的反向代理配置;workspace/projects:代码项目存放目录;README.md:部署说明文档,可选。
六、编写环境变量配置文件
在项目目录下创建 .env 文件:
vim .env
写入以下内容:
# 基础配置
TZ=Asia/Shanghai
# code-server 配置
CODE_SERVER_PASSWORD=ChangeYourStrongPassword123
CODE_SERVER_PORT=8080
# Open WebUI 配置
OPEN_WEBUI_PORT=3000
# Ollama 配置
OLLAMA_PORT=11434
# 工作目录
WORKSPACE_DIR=./workspace
这里需要注意:
CODE_SERVER_PASSWORD一定要修改为强密码;- 如果服务器开放公网访问,建议配合 HTTPS 和防火墙;
WORKSPACE_DIR用于挂载工作空间,后续代码都会保存在这个目录中。
七、Docker Compose 配置文件
在项目目录中创建 docker-compose.yml:
vim docker-compose.yml
写入以下配置:
services:
ollama:
image: ollama/ollama:latest
container_name: ai-ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT}:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- TZ=${TZ}
networks:
- ai-coding-net
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: ai-open-webui
restart: unless-stopped
ports:
- "${OPEN_WEBUI_PORT}:8080"
volumes:
- open_webui_data:/app/backend/data
environment:
- TZ=${TZ}
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_AUTH=True
depends_on:
- ollama
networks:
- ai-coding-net
code-server:
image: codercom/code-server:latest
container_name: ai-code-server
restart: unless-stopped
ports:
- "${CODE_SERVER_PORT}:8080"
volumes:
- ${WORKSPACE_DIR}:/home/coder/workspace
- code_server_config:/home/coder/.config
environment:
- TZ=${TZ}
- PASSWORD=${CODE_SERVER_PASSWORD}
command: >
--bind-addr 0.0.0.0:8080
--auth password
/home/coder/workspace
networks:
- ai-coding-net
volumes:
ollama_data:
open_webui_data:
code_server_config:
networks:
ai-coding-net:
driver: bridge
这个配置中包含三个核心服务:
1. ollama
负责运行本地大模型。模型文件会保存在 Docker volume ollama_data 中,即使容器删除,模型数据也不会丢失。
2. open-webui
提供类似 ChatGPT 的网页聊天界面。它会通过内部网络访问 Ollama:
http://ollama:11434
这比直接使用宿主机 IP 更稳定。
3. code-server
提供浏览器版 VS Code。你可以在里面拉取 Git 仓库、编辑代码、运行命令、安装插件。
八、启动服务
在 docker-compose.yml 所在目录执行:
docker compose up -d
查看容器状态:
docker compose ps
如果看到三个服务都处于 running 状态,说明启动成功。
你也可以查看日志:
docker compose logs -f
查看指定服务日志:
docker compose logs -f ollama
docker compose logs -f open-webui
docker compose logs -f code-server
九、拉取代码模型
服务启动后,需要进入 Ollama 容器拉取模型。
1. 拉取 Qwen2.5-Coder 模型
docker exec -it ai-ollama ollama pull qwen2.5-coder:7b
如果机器配置较低,可以选择更小的模型:
docker exec -it ai-ollama ollama pull qwen2.5-coder:3b
如果机器配置较高,可以选择更大的模型:
docker exec -it ai-ollama ollama pull qwen2.5-coder:14b
2. 拉取 DeepSeek-Coder 模型
docker exec -it ai-ollama ollama pull deepseek-coder:6.7b
3. 查看已安装模型
docker exec -it ai-ollama ollama list
4. 测试模型运行
docker exec -it ai-ollama ollama run qwen2.5-coder:7b
输入一个问题,例如:
请用 Python 写一个读取 CSV 文件并统计每列缺失值数量的函数。
如果能够正常返回代码,说明模型运行正常。
十、访问 Open WebUI
打开浏览器访问:
http://服务器IP:3000
第一次访问时,Open WebUI 会要求创建管理员账号。创建完成后,进入界面即可选择 Ollama 中已经下载好的模型。
如果模型没有显示,可以检查以下几点:
- Ollama 容器是否正常运行;
- Open WebUI 是否配置了正确的
OLLAMA_BASE_URL; - 模型是否已经成功拉取;
- Open WebUI 日志是否有连接错误。
查看日志:
docker compose logs -f open-webui
十一、访问 code-server
打开浏览器访问:
http://服务器IP:8080
输入 .env 中配置的密码:
CODE_SERVER_PASSWORD=ChangeYourStrongPassword123
登录后,你会看到一个浏览器版 VS Code。默认打开目录为:
/home/coder/workspace
对应宿主机上的目录是:
~/ai-coding-docker/workspace
你可以在宿主机中看到项目文件:
ls ~/ai-coding-docker/workspace
在 code-server 终端中,也可以执行:
cd /home/coder/workspace
mkdir projects
cd projects
git clone https://github.com/yourname/your-project.git
十二、在 code-server 中安装常用插件
进入 code-server 后,建议安装以下插件:
| 插件 | 用途 |
|---|---|
| Python | Python 开发 |
| Pylance | Python 类型检查 |
| ESLint | JavaScript / TypeScript 检查 |
| Prettier | 代码格式化 |
| Docker | Docker 文件支持 |
| GitLens | Git 增强 |
| Continue | AI 编程插件 |
| Cline / Roo Code | AI Agent 编程辅助 |
| Markdown All in One | Markdown 写作增强 |
其中,Continue 可以连接本地 Ollama,让你在 VS Code 中直接使用 AI 编程能力。
十三、Continue 插件连接 Ollama 配置
如果你安装了 Continue 插件,可以在 code-server 中配置它连接 Ollama。
Continue 配置文件通常位于:
~/.continue/config.json
在 code-server 容器中,对应路径可能是:
/home/coder/.continue/config.json
可以写入如下配置:
{
"models": [
{
"title": "Qwen2.5 Coder 7B",
"provider": "ollama",
"model": "qwen2.5-coder:7b",
"apiBase": "http://ollama:11434"
},
{
"title": "DeepSeek Coder 6.7B",
"provider": "ollama",
"model": "deepseek-coder:6.7b",
"apiBase": "http://ollama:11434"
}
],
"tabAutocompleteModel": {
"title": "Qwen2.5 Coder 7B Autocomplete",
"provider": "ollama",
"model": "qwen2.5-coder:7b",
"apiBase": "http://ollama:11434"
},
"allowAnonymousTelemetry": false
}
这里需要特别注意:
由于 code-server 和 Ollama 在同一个 Docker 网络 ai-coding-net 中,所以在容器内访问 Ollama 可以使用:
http://ollama:11434
如果你是在宿主机上的 VS Code 中访问 Ollama,则应使用:
http://localhost:11434
如果你是在其他机器上访问服务器的 Ollama,则应使用:
http://服务器IP:11434
十四、可选:配置 Nginx 反向代理
如果你希望通过域名访问,而不是使用端口号,可以增加 Nginx。
例如:
https://ai.example.com -> Open WebUI
https://code.example.com -> code-server
1. 创建 Nginx 配置目录
mkdir -p nginx
vim nginx/default.conf
写入以下内容:
server {
listen 80;
server_name ai.example.com;
client_max_body_size 100m;
location / {
proxy_pass http://open-webui:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name code.example.com;
client_max_body_size 100m;
location / {
proxy_pass http://code-server:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
2. 修改 docker-compose.yml,加入 Nginx 服务
可以在 services 下增加:
nginx:
image: nginx:stable-alpine
container_name: ai-nginx
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
depends_on:
- open-webui
- code-server
networks:
- ai-coding-net
完整加入后,重新启动:
docker compose up -d
如果你需要 HTTPS,可以配合 Certbot 或使用 Caddy 自动签发证书。对于生产环境,强烈建议启用 HTTPS。
十五、支持 NVIDIA GPU 加速
如果你的服务器有 NVIDIA 显卡,需要安装 NVIDIA Container Toolkit。
1. 检查显卡
nvidia-smi
如果能够看到显卡信息,说明驱动正常。
2. 安装 NVIDIA Container Toolkit
Ubuntu 示例:
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | \
sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg
curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \
sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \
sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt update
sudo apt install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
3. 修改 Ollama 服务配置
在 ollama 服务中增加 GPU 配置:
ollama:
image: ollama/ollama:latest
container_name: ai-ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT}:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- TZ=${TZ}
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=compute,utility
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all
capabilities: [gpu]
networks:
- ai-coding-net
然后重启:
docker compose down
docker compose up -d
测试 Ollama 是否使用 GPU,可以执行:
nvidia-smi
如果看到 Ollama 相关进程,说明 GPU 加速已生效。
十六、常用运维命令
1. 启动服务
docker compose up -d
2. 停止服务
docker compose down
3. 重启服务
docker compose restart
4. 查看容器
docker ps
5. 查看日志
docker compose logs -f
6. 更新镜像
docker compose pull
docker compose up -d
7. 删除未使用镜像
docker image prune -a
8. 查看 Docker 占用空间
docker system df
十七、数据备份与迁移
这套环境中比较重要的数据包括:
| 数据 | 位置 |
|---|---|
| Ollama 模型 | Docker volume:ollama_data |
| Open WebUI 数据 | Docker volume:open_webui_data |
| code-server 配置 | Docker volume:code_server_config |
| 项目代码 | ./workspace |
1. 备份工作目录
tar -zcvf workspace-backup.tar.gz ./workspace
2. 备份 Docker volume
可以使用临时容器备份:
docker run --rm \
-v ai-coding-docker_ollama_data:/data \
-v $(pwd):/backup \
alpine \
tar -zcvf /backup/ollama_data_backup.tar.gz /data
备份 Open WebUI:
docker run --rm \
-v ai-coding-docker_open_webui_data:/data \
-v $(pwd):/backup \
alpine \
tar -zcvf /backup/open_webui_data_backup.tar.gz /data
恢复时可以反向解压到对应 volume 中。
十八、安全建议
如果你的服务只在本地或内网使用,安全风险相对较低。但如果暴露到公网,请务必注意以下几点:
1. 修改默认密码
CODE_SERVER_PASSWORD 必须设置为强密码,不要使用 123456、password、admin 等弱密码。
2. 使用防火墙限制访问
例如只允许自己的 IP 访问:
sudo ufw allow from 你的IP to any port 8080
sudo ufw allow from 你的IP to any port 3000
sudo ufw enable
3. 启用 HTTPS
公网环境下不要裸奔 HTTP,尤其是 code-server 中可能包含代码、密钥、配置文件等敏感信息。
4. 不要直接暴露 Ollama API
Ollama 默认没有复杂认证机制,如果开放公网,别人可能直接调用你的模型接口,消耗你的计算资源。建议不要开放 11434 到公网,或者只允许内网访问。
5. 保护项目密钥
不要将 .env、云服务密钥、数据库密码直接提交到 Git 仓库。可以使用 .gitignore 忽略敏感文件。
十九、常见问题排查
1. Open WebUI 无法连接 Ollama
检查 Compose 配置中是否存在:
OLLAMA_BASE_URL=http://ollama:11434
检查容器是否在同一网络:
docker network inspect ai-coding-docker_ai-coding-net
2. code-server 登录失败
检查 .env 中的密码是否正确:
cat .env
重启 code-server:
docker compose restart code-server
3. 模型下载很慢
模型文件通常较大,7B 模型可能有数 GB。可以尝试:
docker exec -it ai-ollama ollama pull qwen2.5-coder:3b
先使用较小模型验证环境。
4. 服务器内存不足
可以通过以下命令查看内存:
free -h
如果内存不足,建议:
- 使用更小的模型;
- 增加 Swap;
- 升级服务器配置;
- 避免同时运行多个大模型。
5. 端口被占用
查看端口占用:
sudo lsof -i:8080
sudo lsof -i:3000
sudo lsof -i:11434
修改 .env 中端口后重启:
docker compose down
docker compose up -d
二十、完整配置文件汇总
.env
TZ=Asia/Shanghai
CODE_SERVER_PASSWORD=ChangeYourStrongPassword123
CODE_SERVER_PORT=8080
OPEN_WEBUI_PORT=3000
OLLAMA_PORT=11434
WORKSPACE_DIR=./workspace
docker-compose.yml
services:
ollama:
image: ollama/ollama:latest
container_name: ai-ollama
restart: unless-stopped
ports:
- "${OLLAMA_PORT}:11434"
volumes:
- ollama_data:/root/.ollama
environment:
- TZ=${TZ}
networks:
- ai-coding-net
open-webui:
image: ghcr.io/open-webui/open-webui:main
container_name: ai-open-webui
restart: unless-stopped
ports:
- "${OPEN_WEBUI_PORT}:8080"
volumes:
- open_webui_data:/app/backend/data
environment:
- TZ=${TZ}
- OLLAMA_BASE_URL=http://ollama:11434
- WEBUI_AUTH=True
depends_on:
- ollama
networks:
- ai-coding-net
code-server:
image: codercom/code-server:latest
container_name: ai-code-server
restart: unless-stopped
ports:
- "${CODE_SERVER_PORT}:8080"
volumes:
- ${WORKSPACE_DIR}:/home/coder/workspace
- code_server_config:/home/coder/.config
environment:
- TZ=${TZ}
- PASSWORD=${CODE_SERVER_PASSWORD}
command: >
--bind-addr 0.0.0.0:8080
--auth password
/home/coder/workspace
networks:
- ai-coding-net
volumes:
ollama_data:
open_webui_data:
code_server_config:
networks:
ai-coding-net:
driver: bridge
nginx/default.conf
server {
listen 80;
server_name ai.example.com;
client_max_body_size 100m;
location / {
proxy_pass http://open-webui:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80;
server_name code.example.com;
client_max_body_size 100m;
location / {
proxy_pass http://code-server:8080;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
二十一、总结
通过本文的配置,我们完成了一套基于 Docker 的 AI 编程环境部署,核心能力包括:
- 使用 Ollama 在本地或服务器上运行代码大模型;
- 使用 Open WebUI 提供可视化 AI 对话界面;
- 使用 code-server 搭建浏览器版 VS Code 开发环境;
- 使用 Docker Compose 管理多个服务;
- 可选使用 Nginx 实现域名反向代理;
- 支持后续扩展 GPU 加速、HTTPS、团队账号、插件生态等能力。
这套方案最大的优势是:私有化、可控、易迁移、易扩展。对于个人开发者,它可以成为一个随时可用的 AI 编程工作台;对于团队,它可以作为内网 AI 编程助手的基础设施。
如果你是第一次部署,建议先使用 qwen2.5-coder:3b 或 qwen2.5-coder:7b 进行验证,等整个流程跑通后,再根据硬件性能选择更大的模型。最终,你可以将它与 Git、CI/CD、代码审查、自动化测试等研发流程结合起来,逐步打造属于自己的 AI 原生开发环境。