上一篇 下一篇 分享链接 返回 返回顶部

用 Docker 搭一套私有 AI 编程环境:Ollama、Open WebUI、code-server 配置全整理

发布人:慈云数据-客服中心 发布时间:5小时前 阅读量:0

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 保存模型、配置、项目文件

部署完成后,你将获得:

  1. 一个可通过浏览器访问的 VS Code 开发环境;
  2. 一个可运行本地大模型的 Ollama 服务;
  3. 一个可视化 AI 对话界面 Open WebUI;
  4. 一个相对独立、可迁移、可备份的 AI 编程工作空间;
  5. 一套便于扩展到团队使用的 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

这里需要注意:

  1. CODE_SERVER_PASSWORD 一定要修改为强密码;
  2. 如果服务器开放公网访问,建议配合 HTTPS 和防火墙;
  3. 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 中已经下载好的模型。

如果模型没有显示,可以检查以下几点:

  1. Ollama 容器是否正常运行;
  2. Open WebUI 是否配置了正确的 OLLAMA_BASE_URL
  3. 模型是否已经成功拉取;
  4. 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 必须设置为强密码,不要使用 123456passwordadmin 等弱密码。

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

如果内存不足,建议:

  1. 使用更小的模型;
  2. 增加 Swap;
  3. 升级服务器配置;
  4. 避免同时运行多个大模型。

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 编程环境部署,核心能力包括:

  1. 使用 Ollama 在本地或服务器上运行代码大模型;
  2. 使用 Open WebUI 提供可视化 AI 对话界面;
  3. 使用 code-server 搭建浏览器版 VS Code 开发环境;
  4. 使用 Docker Compose 管理多个服务;
  5. 可选使用 Nginx 实现域名反向代理;
  6. 支持后续扩展 GPU 加速、HTTPS、团队账号、插件生态等能力。

这套方案最大的优势是:私有化、可控、易迁移、易扩展。对于个人开发者,它可以成为一个随时可用的 AI 编程工作台;对于团队,它可以作为内网 AI 编程助手的基础设施。

如果你是第一次部署,建议先使用 qwen2.5-coder:3bqwen2.5-coder:7b 进行验证,等整个流程跑通后,再根据硬件性能选择更大的模型。最终,你可以将它与 Git、CI/CD、代码审查、自动化测试等研发流程结合起来,逐步打造属于自己的 AI 原生开发环境。

目录结构
全文