在 Linux 上用 Docker Compose 安装 Olares:从环境准备、GPU 配置到激活与容器管理的完整指南
在 Linux 上用 Docker Compose 安装 Olares:从环境准备、GPU 配置到激活与容器管理的完整指南
本文是基于 Terminus 仓库官方文档编写的实操指南,讲解如何在 Ubuntu 22.04–25.04 或 Debian 12/13 主机上,通过 Docker Compose 以容器化方式部署开源个人云操作系统 Olares。读完本文,你将掌握完整的安装链路:准备目录与编写 docker-compose.yaml、可选配置 GPU 驱动与 NVIDIA Container Toolkit、可选配置镜像加速、通过环境变量启动容器并验证运行状态,最后借助 LarePass 完成激活、登录,并学会 Olares 容器的日常管理与安全收尾。
安装前必读:系统要求与前置条件
在动手之前,请先确认设备满足 Olares 的系统要求。官方在 install-olares.md 中给出的自托管 Linux 硬件基线如下:
| 项目 | 要求 |
|---|---|
| CPU | 4 核及以上 |
| 内存 | 8 GB 及以上 |
| 存储 | SSD 至少 150 GB 可用空间 |
:::warning SSD 是硬性要求 安装到 HDD(机械硬盘)会直接失败,务必使用 SSD。 :::
此外还需要满足以下软件与硬件前置条件:
- 操作系统:Ubuntu 22.04–25.04 或 Debian 12/13。官方注明这些版本已验证可用,其他版本"可能"也能工作,但视环境可能需要调整(见 reusables.md 中的版本兼容性说明)。
- Docker 与 Docker Compose:系统中需要已安装并运行 Docker Engine 与 Docker Compose(v2 插件形式或独立二进制均可)。
- LarePass:手机端必须先安装 LarePass。它是完成 Olares 首次设置与激活的必要工具,因为激活流程依赖 LarePass 在局域网内发现并配置设备(reusables.md 中明确标注"Required to finish setup and activate Olares")。
- 宿主机 IP 地址:Olares 设备的局域网 IP。可用如下命令确认:
ip r
找到以 default via 开头的行,它会显示默认网关以及当前使用的网络接口,据此即可确定主机的局域网 IP。
第一步:创建配置目录与 docker-compose.yaml
创建独立目录存放 Olares 的编排文件,本文沿用官方示例目录名 olares-config:
mkdir ~/olares-config
cd ~/olares-config
在目录内新建 docker-compose.yaml。仓库在 code-snippets/docker-compose.yaml 与 code-snippets/docker-compose-GPU.yaml 中提供了两套官方模板,按是否启用 GPU 选择其一。
无 GPU 的标准版本
services:
olares:
image: beclab/olares:${VERSION}
privileged: true
volumes:
- oic-data:/var
ports:
- "80:80"
- "443:443"
- "30180:30180"
- "18088:18088"
- "41641:41641/udp"
environment:
- OLARES_HOST_IP=${HOST_IP}
olaresd-proxy:
image: beclab/olaresd:proxy-v0.1.0
network_mode: host
depends_on:
olares:
condition: service_started
volumes:
oic-data:
启用 GPU 的版本
services:
olares:
image: beclab/olares:${VERSION}
privileged: true
volumes:
- oic-data:/var
ports:
- "80:80"
- "443:443"
- "30180:30180"
- "18088:18088"
- "41641:41641/udp"
environment:
- OLARES_HOST_IP=${HOST_IP}
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
olaresd-proxy:
image: beclab/olaresd:proxy-v0.1.0
network_mode: host
depends_on:
olares:
condition: service_started
volumes:
oic-data:
关键字段与端口解读
对照模板逐项理解各字段的作用,有助于后续排障:
image: beclab/olares:${VERSION}:${VERSION}是 compose 插值变量,由启动命令中的环境变量注入,用于指定镜像版本。privileged: true:Olares 主容器以特权模式运行。从 compose 结构可以推断,Olares 需要在内层启动自己的容器运行时(如 k3s)来编排内部应用,特权模式是必要的。volumes: oic-data:/var:命名卷oic-data挂载到容器内/var,Olares 的系统与应用数据都持久化在此卷中,卸载容器时只要保留卷即可不丢数据。environment: OLARES_HOST_IP=${HOST_IP}:把宿主机 IP 注入容器环境变量。${HOST_IP}同样是 compose 插值变量,由启动命令环境提供(详见下文启动一节)。- 端口映射:
80:80、443:443:HTTP/HTTPS 服务入口,对应 Olares 桌面与各应用的 Web 访问。30180:30180:激活向导(Wizard)的本地访问端口。官方 CLI 激活文档中的示例 Wizard URL 即为http://192.168.31.127:30180(见 activate-olares-using-cli.md)。18088:18088:olaresd-proxy服务使用的端口。该端口在 daemon/cmd/mdns_agent/main.go 中被硬编码(port := 18088),是局域网服务发现(mDNS)agent 的监听口。41641:41641/udp:UDP 端口映射。从端口类型与仓库内置 headscale(WireGuard 控制面)组件可以推断,该端口服务于 VPN/Overlay 隧道通信。
olaresd-proxy服务:镜像beclab/olaresd:proxy-v0.1.0,使用network_mode: host直接占用宿主机网络。其底层是mdns-agent二进制(构建方式见 daemon/docker/Dockerfile.agent),负责在局域网内广播_terminus._tcp服务,使 LarePass 能够"发现附近的 Olares"。因为 mDNS 需要直接访问局域网接口,所以该容器不走桥接网络;同时它通过depends_on等待olares主容器启动完成。
可选:配置 Docker 镜像源加速拉取
Olares 主镜像较大(首次拉取通常耗时较长,官方示例中 olares 镜像拉取用了数分钟),国内网络环境建议配置 Olares 官方镜像加速器。仓库提供了现成的配置模板 code-snippets/docker-daemon.json:
{
"registry-mirrors": [
"https://mirrors.olares.cn"
],
"features": {
"containerd-snapshotter": false
}
}
配置步骤:
- 打开 Docker 守护进程配置文件
/etc/docker/daemon.json(如不存在则新建)。 - 将上述内容写入该文件。其中
registry-mirrors指定镜像加速地址;features.containerd-snapshotter显式关闭 containerd snapshotter 特性,避免与镜像加速行为冲突。 - 重启 Docker 使配置生效:
sudo systemctl restart docker
- 验证配置是否生效:
docker info
若输出中出现以下内容,说明镜像源配置成功:
Registry Mirrors:
https://mirrors.olares.cn/
可选:为 GPU 设备安装依赖
安装 Olares 本身不强制要求 GPU,但绝大多数 AI 应用都需要 GPU 才能运行,且目前仅支持 NVIDIA GPU(install-olares.md 与 gpu-requirements.md 均明确说明)。硬件要求如下:
- 架构:Turing 或更新(GTX 16xx、RTX 20xx/30xx/40xx/50xx 系列及更新)。更早架构的 GPU 无法被 Olares 识别,依赖 GPU 的 AI 应用将无法运行。
- 显存:推荐 8 GB 及以上;即使 GPU 架构受支持,显存过小也会阻止许多 AI 应用运行。
不确定自己的 GPU 是否受支持时,可运行:
lspci | grep -i nvidia
示例输出:
3b:00.0 VGA compatible controller: NVIDIA Corporation AD102 [GeForce RTX 4090] (rev a1)
对照输出中的代码名前缀判断架构归属:
| 代码名前缀 | 架构 | 是否支持 |
|---|---|---|
| GB | Blackwell | ✓ |
| AD | Ada Lovelace | ✓ |
| GA | Ampere | ✓ |
| TU | Turing | ✓ |
| GP | Pascal | ✗ |
| GM | Maxwell | ✗ |
确认 GPU 受支持后,按以下两步安装依赖。
1. 安装 NVIDIA 驱动
curl -o /tmp/keyring.deb -L https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb && \
sudo dpkg -i --force-all /tmp/keyring.deb
sudo apt update
sudo apt install nvidia-kernel-open-590
sudo apt install nvidia-driver-590
2. 安装 NVIDIA Container Toolkit
先配置官方软件源:
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/stable/deb/nvidia-container-toolkit.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 sed -i -e '/experimental/ s/^#//g' /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get update
然后安装 Toolkit、为 Docker 配置 nvidia runtime 并重启 Docker:
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker
3. 验证 GPU 可用性
sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi
安装成功时,输出应与下面类似(以 RTX 4070、驱动 590.44、CUDA 13.1 为例):
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 590.44 Driver Version: 590.44 CUDA Version: 13.1 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 NVIDIA GeForce RTX 4070 ... Off | 00000000:01:00.0 Off | N/A |
| N/A 41C P8 1W / 80W | 32MiB / 8188MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
只有通过了这个验证,docker-compose-GPU.yaml 中 deploy.resources.reservations.devices 的 GPU 声明才能真正生效。
启动容器:设置环境变量并执行 docker compose up
在 olares-config 目录下,执行以下命令设置环境变量并后台启动全部服务:
VERSION=<olares version> OLARES_HOST_IP=<host ip> docker compose up -d
两个环境变量的含义:
VERSION=<olares version>:指定 Olares 镜像版本,会被 compose 读取并填充到beclab/olares:${VERSION}的镜像标签中。把<olares version>替换为实际版本号,例如1.11.5或1.12.5。OLARES_HOST_IP=<host ip>:指定 Linux 主机的 IP 地址,用于注入容器环境变量,让 Olares 内部服务正确绑定宿主机网络。把<host ip>替换为前面ip r查到的实际地址。
:::info 关于 compose 插值变量
仓库模板中容器环境变量写作 OLARES_HOST_IP=${HOST_IP},即它读取的是 compose 插值变量 HOST_IP。如果容器内发现主机 IP 未正确注入,可在启动命令中一并设置 HOST_IP(与 OLARES_HOST_IP 同值),例如:
VERSION=<olares version> HOST_IP=<host ip> OLARES_HOST_IP=<host ip> docker compose up -d
:::
首次执行时 Docker 会拉取镜像,命令输出大致如下,可以看到全部 20 个镜像层按顺序拉取完成:
[+] Running 20/20
✔ olaresd-proxy Pulled 67.8s
✔ 688513194d7a Pull complete 6.8s
✔ bfb59b82a9b6 Pull complete 6.9s
✔ efa9d1d5d3a2 Pull complete 9.5s
✔ a62778643d56 Pull complete 9.6s
✔ 7c12895b777b Pull complete 9.6s
✔ 3214acf345c0 Pull complete 13.6s
✔ 5664b15f108b Pull complete 14.1s
✔ 0bab15eea81d Pull complete 14.2s
✔ 4aa0ea1413d3 Pull complete 15.0s
✔ da7816fa955e Pull complete 15.1s
✔ 9aee425378d2 Pull complete 15.1s
✔ 701c983262e9 Pull complete 36.2s
✔ 221438ca359c Pull complete 36.3s
✔ f3d0ed3b32e0 Pull complete 36.4s
✔ 70d5c1f325f6 Pull complete 43.2s
✔ olares Pulled 5863.6s
✔ 2d5815038f40 Pull complete 5759.0s
✔ 13788179ee16 Pull complete 5831.6s
✔ 5a9b10c3302f Pull complete 5831.7s
随后用 docker ps 确认容器运行状态:
docker ps
正常时输出类似:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
28e86c473750 beclab/olaresd:proxy-v0.1.0 "/mdns-agent" About a minute ago Up About a minute olares-olaresd-proxy-1
5fd68a8709ad beclab/olares:1.11.5 "/usr/local/bin/entr…" 2 minutes ago Up About a minute 0.0.0.0:80->80/tcp... olares-olares-1
注意两个容器各司其职:
olares-olares-1:Olares 主容器,命令为/usr/local/bin/entr…,占用 80/443 等端口。olares-olaresd-proxy-1:mDNS 服务发现代理容器,命令为/mdns-agent,无端口映射(因为它使用宿主机网络)。
关于后者,源码层面可以印证其作用:mdns-agent 通过 zeroconf 在局域网注册 _terminus._tcp 服务(实例名 olaresd),并将注册 IP 与网络接口变化时自动重启广播(见 daemon/internel/mdns/server.go)。这正是 LarePass "发现附近的 Olares" 的底层机制,也是该容器必须使用 network_mode: host 的原因。
激活 Olares:通过 LarePass 完成首次设置
容器启动后,需要借助手机上的 LarePass 完成激活(完整流程见 install-and-activate-olares.md)。
:::warning 同一网络要求 为避免激活失败,请确保手机与 Olares 设备连接在同一网络下。 :::
-
打开 LarePass。如果你还没有 Olares ID,点击 Create an account(创建账户)并按提示操作。Olares ID 由本地名和域名组成,例如
alice123@olares.com中的alice123是本地名、olares.com是域名(详见 create-olares-id.md)。 -
在激活页面点击 Discover nearby Olares(发现附近的 Olares),LarePass 会列出同一网络中检测到的 Olares 实例(这正是上一步
olaresd-proxy的 mDNS 广播在工作): -
选择你的 Olares 实例,点击 Install now(立即安装)。
-
安装完成后点击 Activate now(立即激活)。
-
在弹出的 Select a reverse proxy(选择反向代理)对话框中,选择地理位置更近的节点,安装程序会据此为 Olares 配置 HTTPS 证书与 DNS。
:::tip 说明
- 该设置之后可在 Olares 的 更改反向代理 页面随时修改。反向代理本质是 Olares 与公网之间的安全网关:无公网 IP 时,可通过 Olares Tunnel(官方多地区节点)或 Self-built FRP(自建 FRP 服务器)对外暴露服务。
- 如果 Olares 设备本身连接了公网 IP,此步会自动跳过。 :::
-
选择 Olares 的系统语言。目前支持英语、简体中文、德语、西班牙语、意大利语、法语和日语。
:::info 注意 该选择不会改变 LarePass 应用的语言,后续激活步骤仍以 LarePass 当前语言显示;激活后 Olares Desktop 将使用这里选择的语言。 :::
-
按屏幕提示为 Olares 设置登录密码,然后点击 Complete(完成)。
激活完成后,LarePass 会显示 Olares 设备的桌面地址,形如 https://desktop.marvin123.olares.com。
登录 Olares:桌面地址与双重验证
激活完成后即可登录(流程见 log-in-to-olares.md):
-
在浏览器中打开 Olares 桌面地址,按任意键继续。
-
在登录页输入你的 Olares 登录密码:
-
系统会要求完成双重验证(2FA),二选一:
- Confirm on LarePass(在 LarePass 中确认):在手机上打开登录通知,点击 Confirm。
- Enter the code manually(手动输入验证码):在登录页选择 Verify using one time password from LarePass,然后从 LarePass 获取 6 位一次性密码——手机端路径为 Settings > My Olares 卡片并点击验证器,桌面端则在 Vault 列表第一项中查看。
:::info 提示 验证码是时效性的,请在过期前输入。 :::
登录成功后即进入 Olares 桌面,安装与激活流程至此全部完成。
管理 Olares 容器生命周期
日常管理中,可通过 Docker 命令控制 Olares 容器(操作参考 manage-olares-container.md)。
停止容器
docker stop oic
重新启动已停止的容器
docker start oic
完全卸载
彻底移除容器及其关联数据:
docker stop oic
docker rm oic
docker volume rm oic-data
:::info 容器名以实际输出为准
官方 docker ps 示例中,compose 实际生成的容器名为 olares-olares-1、数据卷名为 olares-config_oic-data(compose 会自动以目录名/项目名为卷与容器名加前缀)。上面的 oic、oic-data 是文档示例名。执行管理命令前,请先用 docker ps 与 docker volume ls 确认实际名称,并据此替换。
:::
安装后的必做事项与故障排查
保护你的 Olares ID
激活完成后,最重要的一步是备份 Olares ID 的助记词(mnemonic phrase)。助记词是一串 12 个单词,是恢复 Olares ID 的唯一途径——在去中心化系统中,丢失助记词意味着永久失去数字身份(DID)与 Olares ID,且无法访问 Vault 中的数据。完整备份流程(设置本地密码、查看并离线记录、验证排列)见 备份助记词。
遇到问题怎么办
如果在安装、激活过程中遇到问题,建议:
- 提交 GitHub Issue,并附上你的平台、安装方式与错误详情(官方排障提示见 reusables.md 的安装排障小节)。
- 若需要从头重试,可先停止并清理容器(参考上文"完全卸载"小节),再重新执行
docker compose up -d;检查docker compose ps与容器日志定位具体故障。
安装完成后还能做什么
- 局域网内可使用
http://desktop.<username>.olares.local之类的.local域名直接访问 Olares(详见 local-access.md,以及仓库中 intranet DNS 对.olares.local域名的 mDNS 应答实现 daemon/internel/intranet/dns.go)。 - 如需在不同安装路径(ISO 镜像、一键脚本、其他平台)间对比,可参考 install-olares.md 的安装方法总览。
至此,你已经完成了 Olares 在 Linux 上的容器化部署、GPU 可选配置、激活登录与日常运维的全部环节。把这套流程与仓库中的 compose 模板、mDNS 源码相互印证,就能在遇到问题时快速定位是网络发现、镜像拉取还是端口映射环节出了问题。


