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

用 Docker 搭一个自己的 AI 编程工作台:Ollama、WebUI、Code Server 配置全给你

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

AI编程 Docker部署教程|附配置文件

随着大模型能力的快速提升,越来越多开发者开始把 AI 融入日常编程流程:代码生成、Bug 排查、接口文档编写、单元测试生成、代码解释、项目重构等场景都可以借助 AI 提效。如果你希望在自己的服务器、NAS、云主机或本地电脑上搭建一套可长期使用的“AI 编程环境”,Docker 是非常推荐的部署方式。

本文将以 Docker + Docker Compose 为核心,介绍如何部署一套适合 AI 编程使用的环境。教程会覆盖基础环境准备、目录规划、配置文件编写、容器启动、模型配置、反向代理、常见问题排查等内容,并附上完整可用的配置文件。

本文适合以下读者:

  • 想在本地或服务器上部署 AI 编程工具的开发者;
  • 希望使用 Docker 管理 AI 服务的个人用户;
  • 想搭建私有化 AI 编程助手的团队;
  • 希望降低环境配置成本、快速迁移部署的运维或后端工程师。

一、整体方案说明

本文采用一个相对通用、稳定且易扩展的方案:

  • Ollama:用于在本地运行大语言模型;
  • Open WebUI:提供网页端聊天界面,可连接 Ollama;
  • Code Server:浏览器版 VS Code,用于在线写代码;
  • Docker Compose:统一编排多个服务;
  • Nginx 可选:用于反向代理、绑定域名和 HTTPS。

部署完成后,你可以通过浏览器访问:

  • http://服务器IP:3000:进入 Open WebUI,与 AI 模型对话;
  • http://服务器IP:8080:进入 Code Server,在线编写代码;
  • Ollama 服务会在容器内部提供模型推理能力。

如果你只是个人使用,可以直接通过端口访问;如果你准备长期使用,建议配置域名和 HTTPS。


二、部署前准备

1. 服务器配置建议

AI 编程场景对硬件有一定要求,尤其是运行本地模型时。下面是推荐配置:

使用场景 CPU 内存 磁盘 GPU
轻量测试 2 核 4GB 20GB 非必须
日常开发 4 核 8GB 50GB 可选
运行 7B 模型 4 核以上 16GB 100GB 建议
运行更大模型 8 核以上 32GB+ 200GB+ 强烈建议

如果你的服务器没有 GPU,也可以使用 CPU 推理,只是速度会慢一些。对于代码场景,可以优先选择较小但效果不错的代码模型。


2. 系统环境

本文以 Ubuntu 22.04 为例,其他 Linux 发行版也类似。

查看系统版本:

cat /etc/os-release

更新软件包:

sudo apt update
sudo apt upgrade -y

安装常用工具:

sudo apt install -y curl wget git vim unzip ca-certificates gnupg lsb-release

三、安装 Docker 和 Docker Compose

如果你已经安装了 Docker,可以跳过本节。

1. 安装 Docker

执行以下命令安装 Docker:

curl -fsSL https://get.docker.com | bash

启动 Docker 并设置开机自启:

sudo systemctl enable docker
sudo systemctl start docker

查看 Docker 版本:

docker version

2. 安装 Docker Compose

现在 Docker 官方已经将 Compose 作为插件集成到 Docker 中,你可以使用如下命令查看:

docker compose version

如果提示不存在,可以安装:

sudo apt install -y docker-compose-plugin

3. 配置当前用户免 sudo

如果你不希望每次执行 Docker 命令都加 sudo,可以执行:

sudo usermod -aG docker $USER

然后退出当前终端重新登录,验证:

docker ps

四、项目目录规划

建议将所有配置文件和数据统一放在一个目录中,例如:

mkdir -p ~/ai-coding-docker
cd ~/ai-coding-docker

目录结构如下:

ai-coding-docker/
├── docker-compose.yml
├── .env
├── nginx/
│   └── default.conf
├── data/
│   ├── ollama/
│   ├── open-webui/
│   └── code-server/
└── workspace/

说明:

  • docker-compose.yml:核心编排文件;
  • .env:环境变量配置文件;
  • nginx/default.conf:可选的反向代理配置;
  • data/ollama:Ollama 模型和数据;
  • data/open-webui:Open WebUI 数据;
  • data/code-server:Code Server 配置;
  • workspace:代码工作区。

创建目录:

mkdir -p nginx data/ollama data/open-webui data/code-server workspace

五、编写环境变量配置文件

在项目根目录创建 .env 文件:

vim .env

写入以下内容:

# Open WebUI 端口
OPEN_WEBUI_PORT=3000

# Code Server 端口
CODE_SERVER_PORT=8080

# Code Server 登录密码
CODE_SERVER_PASSWORD=ChangeYourStrongPassword

# 时区
TZ=Asia/Shanghai

# Ollama 模型数据目录
OLLAMA_MODELS=/root/.ollama

建议将 CODE_SERVER_PASSWORD 修改为强密码,例如包含大小写字母、数字和特殊字符。


六、编写 Docker Compose 配置文件

在项目根目录创建 docker-compose.yml

vim docker-compose.yml

写入以下内容:

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ai-ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    environment:
      - TZ=${TZ}
    volumes:
      - ./data/ollama:/root/.ollama
    networks:
      - ai-network

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: ai-open-webui
    restart: unless-stopped
    depends_on:
      - ollama
    ports:
      - "${OPEN_WEBUI_PORT}:8080"
    environment:
      - TZ=${TZ}
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_AUTH=true
    volumes:
      - ./data/open-webui:/app/backend/data
    networks:
      - ai-network

  code-server:
    image: lscr.io/linuxserver/code-server:latest
    container_name: ai-code-server
    restart: unless-stopped
    ports:
      - "${CODE_SERVER_PORT}:8443"
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
      - PASSWORD=${CODE_SERVER_PASSWORD}
      - DEFAULT_WORKSPACE=/config/workspace
    volumes:
      - ./data/code-server:/config
      - ./workspace:/config/workspace
    networks:
      - ai-network

networks:
  ai-network:
    driver: bridge

这个配置文件中包含三个核心服务:

  1. ollama:本地模型运行服务;
  2. open-webui:AI 聊天界面;
  3. code-server:浏览器版 VS Code。

七、启动服务

在项目目录下执行:

docker compose up -d

查看容器状态:

docker compose ps

如果看到类似结果,说明服务已经启动:

NAME             IMAGE                                  STATUS
ai-ollama        ollama/ollama:latest                   Up
ai-open-webui    ghcr.io/open-webui/open-webui:main      Up
ai-code-server   lscr.io/linuxserver/code-server:latest Up

查看日志:

docker compose logs -f

只查看某个服务日志:

docker compose logs -f open-webui

八、下载并运行 AI 编程模型

Ollama 容器启动后,还需要下载模型。可以进入容器执行:

docker exec -it ai-ollama bash

然后拉取模型,例如:

ollama pull qwen2.5-coder:7b

或者:

ollama pull deepseek-coder:6.7b

如果你的机器配置较低,可以选择更小的模型:

ollama pull qwen2.5-coder:1.5b

模型下载完成后测试运行:

ollama run qwen2.5-coder:7b

输入:

请用 Python 写一个快速排序函数,并解释时间复杂度。

如果模型正常返回代码和解释,说明 Ollama 工作正常。

退出模型对话可以输入:

/bye

退出容器:

exit

九、访问 Open WebUI

打开浏览器访问:

http://服务器IP:3000

第一次进入时需要注册管理员账号。注册完成后,Open WebUI 会自动连接 Docker 网络中的 Ollama 服务。

如果没有看到模型,可以进入 Open WebUI 的设置页面,确认 Ollama 地址是否为:

http://ollama:11434

如果你是从宿主机访问 Ollama,则地址通常是:

http://服务器IP:11434

但在 Docker Compose 内部服务之间通信,推荐使用服务名,也就是:

http://ollama:11434

十、访问 Code Server

浏览器访问:

http://服务器IP:8080

输入 .env 文件中配置的密码:

ChangeYourStrongPassword

登录后,你会看到一个类似 VS Code 的界面。默认工作区为:

/config/workspace

它实际映射到宿主机的:

~/ai-coding-docker/workspace

因此,你在浏览器里创建的代码文件,会保存在服务器本地目录中。


十一、在 Code Server 中接入 AI 编程能力

部署好 Code Server 后,可以通过安装插件的方式使用 AI 编程能力。常见方式有以下几种。

1. 使用 Continue 插件

Continue 是一个开源 AI 编程助手插件,可以连接 OpenAI、Ollama 等模型服务。

在 Code Server 中打开扩展市场,搜索:

Continue

如果无法直接从扩展市场安装,可以在宿主机下载 .vsix 文件后上传安装。

Continue 配置文件通常位于:

~/.continue/config.json

在 Code Server 容器中,实际路径可能是:

/config/.continue/config.json

可以创建配置:

{
  "models": [
    {
      "title": "Qwen2.5 Coder 7B",
      "provider": "ollama",
      "model": "qwen2.5-coder:7b",
      "apiBase": "http://ollama:11434"
    }
  ],
  "tabAutocompleteModel": {
    "title": "Qwen2.5 Coder 7B",
    "provider": "ollama",
    "model": "qwen2.5-coder:7b",
    "apiBase": "http://ollama:11434"
  }
}

不过需要注意:Code Server 和 Ollama 在同一个 Docker 网络中时,插件是否能直接访问 http://ollama:11434,取决于插件运行环境。如果插件运行在浏览器端,可能无法解析 Docker 内部域名。更稳妥的做法是使用宿主机 IP:

{
  "models": [
    {
      "title": "Qwen2.5 Coder 7B",
      "provider": "ollama",
      "model": "qwen2.5-coder:7b",
      "apiBase": "http://服务器IP:11434"
    }
  ]
}

如果你不希望暴露 11434 端口,可以通过 Nginx 反向代理或只允许内网访问。


十二、可选:添加 Nginx 反向代理

如果你希望通过域名访问,例如:

  • https://ai.example.com 访问 Open WebUI;
  • https://code.example.com 访问 Code Server;

可以使用 Nginx 进行反向代理。

1. 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:8443;
        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

可以在原有 Compose 文件中增加:

  nginx:
    image: nginx:latest
    container_name: ai-nginx
    restart: unless-stopped
    depends_on:
      - open-webui
      - code-server
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    networks:
      - ai-network

完整文件中需要保持 networks 一致。

3. 配置 HTTPS

生产环境建议使用 HTTPS。你可以选择:

  • 使用宝塔面板申请证书;
  • 使用 Nginx Proxy Manager;
  • 使用 Certbot;
  • 使用云厂商负载均衡 HTTPS 证书。

如果你更偏向 Docker 化管理,推荐使用 Nginx Proxy Manager,图形化配置更简单。


十三、带 GPU 的 Ollama 配置

如果你的服务器有 NVIDIA GPU,并且已经安装好显卡驱动和 NVIDIA Container Toolkit,可以让 Ollama 使用 GPU 加速。

1. 安装 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

验证 GPU 是否可用:

nvidia-smi

2. 修改 Ollama 服务配置

docker-compose.ymlollama 服务中加入:

    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]

如果你的 Docker Compose 版本支持,也可以使用:

    gpus: all

示例:

  ollama:
    image: ollama/ollama:latest
    container_name: ai-ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    environment:
      - TZ=${TZ}
    volumes:
      - ./data/ollama:/root/.ollama
    gpus: all
    networks:
      - ai-network

重启服务:

docker compose down
docker compose up -d

查看 Ollama 日志:

docker logs -f ai-ollama

十四、常用运维命令

1. 启动服务

docker compose up -d

2. 停止服务

docker compose down

3. 重启服务

docker compose restart

4. 查看容器状态

docker compose ps

5. 查看实时日志

docker compose logs -f

6. 更新镜像

docker compose pull
docker compose up -d

7. 查看磁盘占用

docker system df

8. 清理无用镜像

docker image prune -a

注意:清理镜像前请确认没有误删仍需使用的镜像。


十五、数据备份与迁移

由于本文将核心数据都挂载到了宿主机目录,所以备份非常方便。主要需要备份:

data/
workspace/
docker-compose.yml
.env
nginx/

可以执行:

tar -czvf ai-coding-backup.tar.gz \
data workspace docker-compose.yml .env nginx

迁移到新服务器后,只需要安装 Docker,然后解压文件:

tar -xzvf ai-coding-backup.tar.gz
docker compose up -d

如果模型文件较大,备份包也会比较大。你也可以只备份配置和工作区,模型在新机器上重新拉取。


十六、安全建议

AI 编程环境通常会保存代码、密钥、接口文档等敏感内容,因此安全配置非常重要。

1. 不要使用弱密码

尤其是 Code Server,如果暴露到公网,必须使用强密码。不要使用:

123456
password
admin

建议使用随机密码生成器生成复杂密码。

2. 限制端口访问

如果你不希望所有人访问服务,可以使用防火墙限制 IP:

sudo ufw allow from 你的IP to any port 3000
sudo ufw allow from 你的IP to any port 8080
sudo ufw enable

3. 尽量使用 HTTPS

HTTP 明文传输存在被窃听风险。公网环境建议配置 HTTPS,尤其是 Code Server。

4. 不要把密钥直接提交到代码仓库

即使 AI 编程助手部署在私有环境中,也不要把数据库密码、云平台 Access Key、Token 等敏感信息写入代码仓库。

5. 定期更新镜像

建议定期执行:

docker compose pull
docker compose up -d

保持服务版本较新,降低安全风险。


十七、常见问题排查

问题 1:Open WebUI 无法连接 Ollama

检查容器是否正常:

docker compose ps

检查 Ollama 日志:

docker logs -f ai-ollama

确认 Open WebUI 环境变量:

OLLAMA_BASE_URL=http://ollama:11434

如果你修改过服务名,需要同步修改连接地址。


问题 2:模型下载速度很慢

模型文件通常较大,下载速度受网络影响。可以尝试:

  • 更换网络环境;
  • 使用服务器所在区域更好的线路;
  • 先在本地下载后迁移模型目录;
  • 选择体积较小的模型。

问题 3:Code Server 登录后空白

可以查看日志:

docker logs -f ai-code-server

确认端口是否映射正确:

ports:
  - "8080:8443"

如果使用 Nginx 代理,需要确认 WebSocket 相关头部已经配置:

proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";

问题 4:容器启动后自动退出

执行:

docker compose logs 服务名

例如:

docker compose logs code-server

常见原因包括:

  • 端口被占用;
  • 挂载目录权限不足;
  • 环境变量写错;
  • 镜像拉取不完整;
  • 服务器内存不足。

查看端口占用:

sudo lsof -i:3000
sudo lsof -i:8080
sudo lsof -i:11434

问题 5:模型运行很慢

如果使用 CPU 推理,大模型响应慢是正常现象。可以尝试:

  • 使用更小的模型,例如 qwen2.5-coder:1.5b
  • 增加内存;
  • 使用带 GPU 的服务器;
  • 减少上下文长度;
  • 避免同时多人调用。

十八、推荐模型选择

AI 编程场景建议优先选择代码能力较强的模型。以下是一些常见选择:

模型 适合场景 硬件要求
qwen2.5-coder:1.5b 轻量代码补全、简单解释
qwen2.5-coder:7b 日常开发、代码生成、Bug 排查
deepseek-coder:6.7b 代码生成、算法题、解释代码
codellama:7b 通用代码任务
qwen2.5-coder:14b 更复杂项目理解 较高

如果是个人服务器,建议从 qwen2.5-coder:7b 开始。如果机器配置较低,可以使用 1.5b 或其他小模型进行测试。


十九、完整 docker-compose.yml 示例

下面给出一个包含 Nginx 的完整版本,你可以根据需要使用。

services:
  ollama:
    image: ollama/ollama:latest
    container_name: ai-ollama
    restart: unless-stopped
    ports:
      - "11434:11434"
    environment:
      - TZ=${TZ}
    volumes:
      - ./data/ollama:/root/.ollama
    networks:
      - ai-network

  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    container_name: ai-open-webui
    restart: unless-stopped
    depends_on:
      - ollama
    ports:
      - "${OPEN_WEBUI_PORT}:8080"
    environment:
      - TZ=${TZ}
      - OLLAMA_BASE_URL=http://ollama:11434
      - WEBUI_AUTH=true
    volumes:
      - ./data/open-webui:/app/backend/data
    networks:
      - ai-network

  code-server:
    image: lscr.io/linuxserver/code-server:latest
    container_name: ai-code-server
    restart: unless-stopped
    ports:
      - "${CODE_SERVER_PORT}:8443"
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=${TZ}
      - PASSWORD=${CODE_SERVER_PASSWORD}
      - DEFAULT_WORKSPACE=/config/workspace
    volumes:
      - ./data/code-server:/config
      - ./workspace:/config/workspace
    networks:
      - ai-network

  nginx:
    image: nginx:latest
    container_name: ai-nginx
    restart: unless-stopped
    depends_on:
      - open-webui
      - code-server
    ports:
      - "80:80"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    networks:
      - ai-network

networks:
  ai-network:
    driver: bridge

二十、总结

通过本文的配置,你已经可以使用 Docker 快速部署一套完整的 AI 编程环境。它具备以下能力:

  • 使用 Ollama 在本地运行代码大模型;
  • 使用 Open WebUI 通过网页与 AI 对话;
  • 使用 Code Server 在浏览器中编写代码;
  • 使用 Docker Compose 统一管理服务;
  • 支持后续扩展 Nginx、HTTPS、GPU 加速和更多插件。

这套方案的优点是结构清晰、部署简单、迁移方便,并且数据都保存在宿主机目录中,后期维护成本较低。对于个人开发者来说,它可以成为一个长期可用的私有 AI 编程工作台;对于小团队来说,也可以作为内部研发辅助平台的基础版本。

如果你是第一次部署,建议先不配置 Nginx 和 HTTPS,直接用 IP 加端口完成测试。确认 Ollama、Open WebUI、Code Server 都能正常运行后,再逐步增加域名、反向代理、安全策略和 GPU 加速。这样可以减少排错成本,也更容易定位问题。

目录结构
全文