云计算百科
云计算领域专业知识百科平台

终极攻略:通过 Docker 部署 WebUI 服务器,释放你的AI生产力!

哈喽,各位技术同好们!今天咱们来聊点硬核的,也是最近让我痴迷不已的——在 Ubuntu 下通过 Docker 部署 WebUI 服务器。想象一下,一个稳定、高效、可移植的 AI 绘画/生成平台,就在你的掌控之中!是不是想想都激动?

我最近在深度体验一些前沿技术,发现部署这类 WebUI 服务器,用 Docker 简直是神来之笔。它不仅简化了部署流程,还能让你的环境干净整洁,完全避免那些恼人的依赖冲突。所以,如果你也想轻松玩转 AI 生成,或者想给你的服务器加点新技能,那这篇教程你可千万别错过!

揭秘幕后英雄:Docker 与 WebUI 软件

在开始部署之前,咱们先花点时间认识一下这次的主角。理解它们,能让你在部署过程中更得心应手,遇到问题也能快速定位。

Docker:轻量级容器化技术的魔法师

Docker 是一种开源的应用容器引擎,它能让开发者将应用及其依赖项打包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上。你可以把 Docker 容器想象成一个独立的、迷你版的操作系统,里面包含了运行特定应用程序所需的一切(代码、运行时、系统工具、系统库等)。它的核心优势在于:环境隔离(避免“在我机器上能跑”的问题)、快速部署(容器启动速度远超虚拟机)、资源高效(与虚拟机相比,占用资源更少)、版本控制(轻松回滚或部署特定版本的应用)。对于 WebUI 这种依赖较多、环境复杂的应用来说,Docker 简直是天作之合,能让你告别繁琐的环境配置,一键部署!

WebUI:你的专属 AI 创作工坊

这里的 WebUI 泛指那些基于浏览器的用户界面,通常用于操作复杂的 AI 模型,比如 Stable Diffusion WebUI、ComfyUI 等。它们将原本需要命令行操作的 AI 模型,转化为直观易用的图形界面,让你能轻松调整参数、生成图像、视频甚至音频。通过 WebUI,即使是非专业人士也能体验到 AI 创作的乐趣。它们通常拥有丰富的社区插件和扩展,功能强大且持续迭代,是当前 AI 创作领域不可或缺的工具。这次我们选择 Docker 来部署 WebUI,正是为了充分发挥其便携、隔离的优势,让你的 AI 创作之路更加顺畅。


独家秘笈:Ubuntu 下 Docker 部署 WebUI 服务器的详细教程

好了,干货来了!以下是在 Ubuntu 系统上,一步步教你如何通过 Docker 部署 WebUI 服务器的详细教程。我会尽量把每个步骤都讲清楚,包括命令和配置文件的说明,确保你跟着走就能成功。

步骤 1:安装 Docker Engine

首先,你需要确保你的 Ubuntu 系统上已经安装了 Docker。如果没有,请按照以下步骤进行安装。这里我们推荐使用 Docker 官方的安装脚本,它能确保你安装的是最新稳定版本。

# 1. 更新包索引
sudo apt update

# 2. 安装必要的依赖项
sudo apt install ca-certificates curl gnupg lsb-release

# 3. 添加 Docker 的官方 GPG 密钥
sudo mkdir -m 0755 -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg –dearmor -o /etc/apt/keyrings/docker.gpg

# 4. 设置 Docker 仓库
echo \\
"deb [arch=$(dpkg –print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \\
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 5. 再次更新包索引,以便识别 Docker 仓库
sudo apt update

# 6. 安装 Docker Engine、Containerd 和 Docker Compose
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# 7. 验证 Docker 是否安装成功
sudo docker run hello-world

如果看到“Hello from Docker!”的欢迎信息,说明 Docker 已经成功安装并运行。

步骤 2:配置 Docker 非 root 用户权限(可选但强烈推荐)

默认情况下,运行 Docker 命令需要 sudo 权限。为了方便操作,并避免潜在的安全风险,你可以将当前用户添加到 docker 用户组,这样就可以无需 sudo 直接运行 Docker 命令了。

# 1. 将当前用户添加到 docker 用户组
sudo usermod -aG docker $USER

# 2. 刷新用户组权限(或者注销并重新登录系统)
newgrp docker

# 3. 验证是否可以不使用 sudo 运行 Docker 命令
docker run hello-world

如果这次不加 sudo 也能看到欢迎信息,那么恭喜你,权限配置成功!

步骤 3:准备 WebUI 服务器的 Docker Compose 文件

为了方便管理 WebUI 服务,我们推荐使用 Docker Compose。它允许你通过一个 YAML 文件来定义和运行多容器 Docker 应用。

首先,创建一个目录来存放你的 WebUI 项目文件,并进入该目录:

mkdir ~/webui-server
cd ~/webui-server

然后,创建一个名为 docker-compose.yml 的文件。这个文件将定义你的 WebUI 服务的容器配置。以下是一个典型的 Stable Diffusion WebUI(automatic1111/stable-diffusion-webui)的 Docker Compose 示例,你可以根据你实际使用的 WebUI 镜像进行调整。

# docker-compose.yml
version: '3.8' # Docker Compose 文件版本,建议使用最新稳定版

services:
webui:
image: lnyctea/stable-diffusion-webui-docker:latest # 使用的 Docker 镜像,这里以 Stable Diffusion WebUI 为例
container_name: stable-diffusion-webui # 容器名称,方便识别和管理
ports:
– "7860:7860" # 端口映射,将容器内部的 7860 端口映射到宿主机的 7860 端口
volumes:
– ./data:/app/data # 数据卷挂载,将宿主机的 ./data 目录挂载到容器内部的 /app/data 目录
# 这里可以根据需要挂载更多的目录,例如:
# – ./models:/app/stable-diffusion-webui/models # 挂载模型文件
# – ./extensions:/app/stable-diffusion-webui/extensions # 挂载扩展
environment:
# 设置环境变量,根据 WebUI 镜像的要求进行配置
# 例如,Stable Diffusion WebUI 可能需要这些变量:
– CLI_ARGS="–xformers –theme dark –no-half-vae" # WebUI 启动参数
# –xformers: 启用 xformers 优化,提升显存效率和速度
# –theme dark: 使用暗色主题
# –no-half-vae: 禁用 VAE 半精度计算,解决某些显卡兼容性问题
– CUDA_VISIBLE_DEVICES=0 # 指定使用的 GPU 设备,0 表示第一块 GPU
deploy:
resources:
reservations:
devices:
– driver: nvidia
count: all # 使用所有 NVIDIA GPU
capabilities: [gpu] # 声明使用 GPU 能力
restart: unless-stopped # 容器退出后总是重启,除非手动停止

配置文件参数详解:
  • version: '3.8':指定 Docker Compose 文件的版本。建议使用最新稳定版本,以支持更多功能。
  • services::定义你要运行的服务。这里我们只有一个服务,命名为 webui。
  • image: lnyctea/stable-diffusion-webui-docker:latest:指定用于创建容器的 Docker 镜像。
    • lnyctea/stable-diffusion-webui-docker 是 Docker Hub 上的一个公共镜像,包含了 Stable Diffusion WebUI。
    • :latest 表示使用最新版本。你也可以指定具体的版本号,例如 :v1.0.0。
    • 重要提示: 如果你需要特定的 WebUI 版本或具有特定功能的镜像,请访问 Docker Hub 或相关项目页面查找适合你的镜像。对于 ComfyUI,你可能需要 comfyui/comfyui 或其他社区提供的镜像。
  • container_name: stable-diffusion-webui:为你的容器指定一个易于识别的名称。
  • ports::端口映射配置。
    • "7860:7860":将宿主机的 7860 端口映射到容器内部的 7860 端口。WebUI 通常默认监听 7860 端口。你可以根据实际情况修改宿主机端口(冒号左侧的数字),例如 "8080:7860"。
  • volumes::数据卷挂载配置。这是非常关键的部分,它允许你将宿主机上的目录挂载到容器内部,从而实现数据持久化和方便管理。
    • – ./data:/app/data:这是一个示例,表示将当前目录下的 data 文件夹(宿主机)挂载到容器内部的 /app/data 目录。WebUI 通常会把模型、输出图片等放在容器内的特定目录,通过挂载数据卷,即使容器被删除,你的数据也不会丢失。
    • 你可能还需要挂载其他目录,例如:
      • – ./models:/app/stable-diffusion-webui/models:挂载 Stable Diffusion 模型。
      • – ./extensions:/app/stable-diffusion-webui/extensions:挂载 WebUI 扩展。
      • 注意: 挂载路径取决于你所使用的 WebUI 镜像的具体结构,请查阅相应镜像的文档。
  • environment::设置容器内部的环境变量。
    • – CLI_ARGS="–xformers –theme dark –no-half-vae":这是 WebUI 启动时可以传递的命令行参数。
      • –xformers:如果你的系统支持 xformers 并且显存不足,启用它可以显著提高生成速度和效率。
      • –theme dark:将 WebUI 界面设置为暗色主题。
      • –no-half-vae:在某些情况下可以解决生成图片模糊的问题,尤其是在旧显卡上。
      • 你还可以添加其他参数,例如 –listen 允许外部访问(默认只监听本地),–gradio-queue 启用 Gradio 队列等。
    • – CUDA_VISIBLE_DEVICES=0:指定容器内部可见的 GPU 设备。0 表示使用第一块 GPU。如果你有多块 GPU,可以指定不同的索引,或者使用 all 来暴露所有 GPU。
  • deploy::部署相关的配置,主要用于 GPU 隔离和资源调度。
    • resources::定义容器的资源限制。
    • reservations::预留资源。
    • devices::指定要使用的设备。
      • – driver: nvidia:指定设备驱动为 NVIDIA。
      • count: all:使用所有可用的 NVIDIA GPU。你也可以指定具体数量,例如 count: 1。
      • capabilities: [gpu]:声明容器需要 GPU 能力。
  • restart: unless-stopped:设置容器的重启策略。
    • unless-stopped 表示容器退出时总是重启,除非被手动停止。这可以确保你的 WebUI 服务在系统重启后也能自动恢复。
步骤 4:拉取 WebUI 镜像并启动服务

在创建好 docker-compose.yml 文件后,我们就可以使用 Docker Compose 来启动 WebUI 服务了。

# 1. 在 docker-compose.yml 所在的目录中运行以下命令
docker compose pull # 拉取 Docker 镜像,如果本地没有的话

# 2. 启动 WebUI 服务
docker compose up -d # 以后台模式启动服务

  • docker compose pull:这个命令会根据 docker-compose.yml 文件中定义的 image,从 Docker Hub(或其他镜像仓库)拉取所需的 Docker 镜像。如果镜像已经存在于本地,它会检查是否有更新。
  • docker compose up -d:这个命令会根据 docker-compose.yml 文件创建并启动服务。
    • -d 参数表示在后台(detached mode)运行容器,这样你就可以关闭终端而不影响服务的运行。

如果一切顺利,你会看到 Docker 正在创建和启动容器的输出信息。

步骤 5:访问 WebUI 界面

当容器成功启动后,你就可以通过浏览器访问 WebUI 界面了。

  • 打开你的浏览器,在地址栏输入:http://localhost:7860
  • 如果你是在远程服务器上部署,并且防火墙允许端口访问,那么将 localhost 替换为你的服务器 IP 地址:http://你的服务器IP地址:7860

通常,WebUI 在第一次启动时会下载一些模型文件和依赖,这可能需要一些时间,具体取决于你的网络速度。请耐心等待,直到界面加载完成。

步骤 6:管理 WebUI 服务

学会了启动,管理服务同样重要。

  • 查看运行中的容器:

    docker ps

    这个命令会列出所有正在运行的 Docker 容器,你可以看到 stable-diffusion-webui 容器的状态。

  • 查看容器日志:

    docker compose logs -f webui

    这个命令可以实时查看 webui 服务的日志输出,对于排查问题非常有用。

  • 停止 WebUI 服务:

    docker compose stop webui

    这个命令会停止 webui 服务容器,但不会删除它。

  • 启动已停止的 WebUI 服务:

    docker compose start webui

  • 停止并删除 WebUI 服务(慎用):

    docker compose down

    这个命令会停止并删除 docker-compose.yml 中定义的所有服务容器、网络和卷(如果它们不是外部创建的)。注意: 如果你的数据卷是挂载的本地目录,数据不会被删除。

  • 更新 WebUI 镜像: 当你需要更新 WebUI 版本时,可以先拉取最新镜像,然后重新创建容器。 Bash

    docker compose pull # 拉取最新镜像
    docker compose up -d –build –force-recreate # 强制重新创建容器

    –build:如果你的 Dockerfile 有改动,可以重建镜像。 –force-recreate:强制重新创建容器,即使没有配置更改。

步骤 7:Troubleshooting (故障排除)

部署过程中可能会遇到一些问题,别担心,我们来逐一排查:

  • 端口被占用: 如果出现 Bind for 0.0.0.0:7860 failed: port is already allocated 错误,说明宿主机的 7860 端口被其他程序占用了。你可以修改 docker-compose.yml 中 ports 的宿主机端口,例如 8080:7860。
  • 网络问题: 确保你的服务器有正常的网络连接,能够访问 Docker Hub 下载镜像。
  • GPU 驱动问题: 如果你在使用 NVIDIA GPU,但 WebUI 容器无法识别 GPU,这通常是 NVIDIA 驱动或 Docker NVIDIA Runtime 的问题。
    • 确保你的 NVIDIA 驱动已经正确安装,并且版本与你的 CUDA 版本兼容。
    • 确保你安装了 nvidia-container-toolkit。你可以通过以下命令安装: Bash

      distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \\
      && curl -fsSL https://nvidia.github.com/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-get update
      sudo apt-get install -y nvidia-container-toolkit
      sudo systemctl restart docker

    • 检查 docker-compose.yml 中的 deploy 部分是否正确配置,确保 driver: nvidia 和 capabilities: [gpu] 存在。
    • 你可以通过 docker run –rm –gpus all nvidia/cuda:12.1.0-base nvidia-smi 命令来测试 Docker 是否能正确访问你的 GPU。
  • 镜像版本问题: 某些 WebUI 镜像可能不兼容最新的 GPU 驱动或 CUDA 版本。尝试切换到不同的镜像版本,或者查找社区推荐的稳定镜像。
  • 内存/显存不足: AI 模型通常需要大量的内存和显存。如果你的服务器资源不足,WebUI 可能会崩溃或运行缓慢。检查你的服务器配置,考虑升级硬件或使用更轻量级的模型。
  • WebUI 自身配置问题: 如果 WebUI 启动后界面空白或报错,很可能是 WebUI 自身的配置问题,例如模型路径不正确、插件冲突等。查看容器日志 (docker compose logs -f webui),根据报错信息进行排查。

尾声:持续学习,提升你的职业竞争力

你看,通过 Docker 部署 WebUI 服务器,是不是比你想象的要简单得多?一旦掌握了 Docker 的精髓,你就能轻松驾驭各种复杂的应用部署,彻底告别环境配置的噩梦。

持续关注我,每天学习几个实用的设计与开发的小技巧,一段时间之后你会发现自己的技巧有所提升,一段时间过后就能持续提高自己的职业竞争力。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 终极攻略:通过 Docker 部署 WebUI 服务器,释放你的AI生产力!
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!