🚀 使用 Docker Compose 部署 Kopia
🚀 使用 Docker Compose 部署 Kopia
Kopia 是一款采用 Go 语言编写的开源备份工具,支持跨平台运行。它通过增量备份、数据去重和压缩技术,高效节省存储空间,并采用 AES-256 等强加密算法为数据提供端到端保护。Kopia 支持将数据备份到多种存储后端,包括本地存储、云存储(如 S3、Google Cloud Storage)及 SFTP 服务器等。
📦 项目简介
Kopia 的核心优势在于其高效、安全与灵活。它不会镜像整个磁盘,而是允许用户选择备份重要的文件和目录。其去重和压缩技术能显著减少存储占用,而"零知识"加密架构确保了数据在传输和存储过程中的绝对安全,你的密码不会泄露给第三方。
主要功能亮点: * 🔒 强加密与安全性:支持 AES-256 或 ChaCha20 算法对文件内容和路径进行加密,采用"零知识"架构。 * 🗜️ 高效存储:支持增量备份,仅备份文件变化部分。通过全局数据去重和压缩(支持 zstd、pgzip 等算法),有效节省存储空间。 * 🌐 多存储支持:兼容本地存储、S3、Google Cloud Storage、Azure Blob、Backblaze B2、SFTP、WebDAV 等多种存储后端。 * 💻 灵活的访问方式:除了 Docker 服务端,也提供命令行 (CLI) 和图形化桌面客户端 (KopiaUI),方便不同用户操作。 * 🔧 高级功能:内置数据错误校正功能(Reed-Solomon 算法)防止数据腐损,支持快照挂载、保留策略设置和服务器模式集中管理。
⚙️ 部署前准备
-
环境要求
- 已安装 Docker 和 Docker Compose。
- 系统内存:建议 1GB 以上。
- 磁盘空间:确保有足够空间存放备份数据和缓存。
-
环境检查 在终端中执行以下命令,确认 Docker 环境正常:
bash docker --version docker-compose --version -
创建项目目录 建议创建一个独立的目录来管理 Kopia 的所有文件。
bash mkdir -p /opt/docker/kopia cd /opt/docker/kopia
🛠️ 配置 Docker Compose
基于你提供的配置,这里是对 docker-compose.yml 文件的解读和优化说明。
#version: '3.7'
services:
kopia:
image: kopia/kopia:latest # 官方最新镜像(稳定更新,兼容性好)
hostname: Hostname # 容器主机名(默认即可,无需修改)
container_name: Kopia # 容器名称,便于管理
restart: unless-stopped # 容器退出后自动重启(除非手动停止,确保备份不中断)
privileged: true # 授予特权模式(解决目录权限问题,新手建议开启)
ports:
- 51515:51515 # 端口映射:主机 51515 → 容器 51515(Web UI 访问端口)
# Setup the server that provides the web gui
command: # 启动命令:配置 Web UI 服务
- server
- start
- --disable-csrf-token-checks # 禁用 CSRF 校验(简化新手操作,生产环境可开启)
- --insecure # 允许 HTTP 访问(无需配置 HTTPS,适合内网使用)
- --address=0.0.0.0:51515 # 监听所有网卡,支持外部访问
- --server-username=admin # Web UI 登录用户名(配置中指定,不可随意修改)
- --server-password=227 # Web UI 登录密码(配置中指定,建议后续修改为强密码)
environment:
# Set repository password
KOPIA_PASSWORD: "Clxr20" # 存储库加密密码(核心!丢失后无法恢复数据,务必牢记)
USER: "admin" # 存储库关联用户(与 Web UI 用户名一致)
# 注:不建议添加 PUID/PGID(低权限易导致目录访问失败,配置中已标注)
#不建议上权限
#PUID=1000
#PGID=1000
# 卷挂载:所有涉及的目录必须映射,否则数据丢失或功能异常
volumes: # 备份过程中用到的所有文件都需要持久化挂载至容器内部
# Mount local folders needed by kopia:装载 kopia 所需的本地文件夹
- ./config:/app/config # 配置目录:保存 Web UI 设置、备份策略
#- ./cache:/app/cache
- /mnt/10t/cache/kopia/cache:/app/cache # 缓存目录:优化备份速度,减少重复计算
- ./logs:/app/logs # 日志目录:记录备份/恢复过程,排查问题用
# Mount local folders to snapshot:将本地文件夹挂载到快照
- ./data:/data:ro # 测试源数据目录:ro 表示只读(避免容器修改源数据)
# Mount repository location:挂载存储库位置
- ./repository:/repository # 存储库目录:备份数据实际存放位置(核心目录)
# Mount path for browsing mounted snaphots:用于浏览已挂载的 snaphot 的挂载路径
#- ./shared:/tmp:shared
#共享目录设在 /mnt/10t/cache/kopia 机械盘解压挂载的文件,先确保打得开,频次很低耗电也少的。
- /mnt/10t/cache/kopia/shared:/tmp:shared # 快照共享目录:恢复时临时挂载用
#还原时的解压路径
#- /mnt/10t/cache/kopia/app:/app/cache # 恢复解压目录:避免临时空间不足
#挂载机械磁盘*2
- /mnt/10t:/mnt/10t # 挂载大容量磁盘1:需备份的媒体/数据目录
- /mnt/10t-2:/mnt/10t-2 # 挂载大容量磁盘2:需备份的额外目录
#networks:
#default:
#external:
#name: docker_Network
关键配置说明:
| 配置项 | 说明与建议 |
|---|---|
privileged: true |
授予容器特权模式,可能有助于解决某些挂载或权限问题,但会带来安全风险,请根据实际情况判断是否需要。 |
ports |
51515:51515 将容器内的 51515 端口(Web UI)映射到主机的相同端口。你可按需修改主机端口。 |
command |
- -insecure 参数会启用非安全模式,方便测试,但在生产环境中应格外谨慎,并确保网络环境安全。- -server-username 和 - -server-password 为 Web UI 的登录凭证。 |
environment |
KOPIA_PASSWORD 是加密存储库的密码,一旦丢失,备份数据将无法恢复,请务必妥善保管。 |
volumes |
./config:/app/config 和 ./repository:/repository 用于持久化存储 Kopia 的配置、策略以及最重要的存储库数据,务必确保此配置。其他卷挂载了你需要备份的目录和缓存、日志等目录。 |
注意:关于
--insecure参数,它简化了连接过程,但生产环境建议配置更安全的前端代理(如 Nginx)并设置 HTTPS。同时,务必妥善保管KOPIA_PASSWORD和--server-password,建议使用强密码并安全存储。
🚀 启动与验证
-
启动服务 在
docker-compose.yml文件所在目录执行:bash docker-compose up -d此命令会拉取镜像并在后台启动容器。 -
检查服务状态
bash docker-compose ps如果看到Kopia容器的状态为Up,说明服务已成功启动。 -
查看实时日志(可选) 如果遇到问题,可以通过以下命令查看容器日志来排查:
bash docker-compose logs -f kopia -
访问 Web 界面 打开浏览器,访问
http://你的服务器IP:51515。- 如果一切正常,你将看到 Kopia 的 Web UI 登录界面。
- 使用
command中设置的--server-username和--server-password(在你的配置中是admin和227) 登录。
⚙️ 基础配置与使用
成功登录 Web UI 后,你可以开始配置存储库和创建备份策略。以下流程也大致适用于 Kopia 的 CLI 和桌面 GUI。
-
初始化存储库 (Repository)
- 首次使用,你需要创建一个存储库来保存备份数据。
- 在 Web UI 中,通常会有引导流程。你需要:
- 选择存储后端:例如 "Filesystem" (本地文件系统) 并指定路径,此路径应是你通过
volumes映射到容器内的目录,例如/repository。 - 设置存储库密码:此密码应已通过
KOPIA_PASSWORD环境变量设置,Web UI 可能不会要求再次输入,但进行关键操作时会验证。
- 选择存储后端:例如 "Filesystem" (本地文件系统) 并指定路径,此路径应是你通过
-
连接至存储库
- 存储库初始化后,下次启动或访问时可能需要"连接"到已存在的存储库。
- 在 Web UI 中选择相应的存储后端和路径,并提供
KOPIA_PASSWORD密码即可连接。
-
创建备份策略 (Policy) 和快照 (Snapshot)
- 定义策略:在 "Policies" 部分,你可以设置备份策略,包括:
- 备份频率与保留规则:例如每小时备份、保留最近7天的快照等。
- 排除规则:指定不需要备份的文件类型或目录。
- 压缩与加密设置:选择压缩算法和加密参数(通常保持默认即可)。
- 创建快照:在 "Snapshots" 部分,选择你要备份的目录(这些目录应是你通过
volumes映射到容器内的,例如/mnt/10t),然后手动创建快照。Kopia 默认会进行增量备份。
- 定义策略:在 "Policies" 部分,你可以设置备份策略,包括:
-
浏览与恢复数据
- 在 Web UI 的 "Snapshots" 部分,你可以浏览历史快照,查看文件内容。
- 可以选择恢复整个快照,或者只恢复单个文件或目录。
🔒 维护与管理
-
服务管理:
- 停止服务:
docker-compose down - 重启服务:
docker-compose restart - 查看服务状态:
docker-compose ps
- 停止服务:
-
数据备份:
- 定期备份你的
docker-compose.yml文件,以及通过volumes持久化的./config和./repository目录。./repository目录包含了所有加密后的备份数据本身,而./config包含了配置和策略,两者都至关重要。
- 定期备份你的
-
版本更新: Kopia 活跃更新,建议留意版本更新。
bash # 进入 docker-compose.yml 所在目录 docker-compose down docker-compose pull # 拉取最新镜像 docker-compose up -d # 可选:清理无用镜像 docker image prune注意:更新前,特别是大版本更新时,建议备份./config和./repository目录。有时版本升级可能会引入兼容性变更(例如认证机制升级),请关注官方更新日志。 -
存储库维护: Kopia 会自动或手动执行维护任务以优化存储。如果遇到维护任务在只读仓库失败的问题(例如连接 SFTP 只读仓库时),可以通过命令
kopia maintenance set --disable-quick --disable-full显式禁用维护任务。
🐛 常见问题排查 (FAQ)
| 问题现象 | 可能原因与解决方法 |
|---|---|
无法访问 Web 界面 (http://IP:51515) |
1. 检查防火墙/安全组是否放行了 51515 端口。 2. 确认容器是否正常运行: docker-compose ps。3. 查看容器日志: docker-compose logs kopia。 |
| 存储库连接失败或密码错误 | 1. 确认 KOPIA_PASSWORD 环境变量设置是否正确,这是解密存储库的关键。2. 检查存储库路径(例如 /repository)在容器内是否可访问。3. 如果是从旧版本升级后出现认证问题,可能需要检查版本兼容性,或参照官方文档处理认证哈希格式变更。 |
| 备份或恢复过程中出现权限错误 | 1. 检查 volumes 中映射的宿主机目录(尤其是待备份目录和缓存目录)是否对容器内进程有适当的读写权限。2. 考虑是否需要 privileged: true,或尝试调整宿主机目录的权限。 |
| 存储空间不足 | 1. 检查缓存目录(例如 /mnt/10t/cache/kopia/cache)和存储库所在磁盘空间。2. 调整备份策略,设置合理的保留规则,删除过时快照。 |
| Web UI 连接或操作异常 | 1. 确保在 command 中正确设置了 --server-username 和 --server-password。2. 检查是否因 --disable-csrf-token-checks 和 --insecure 设置导致浏览器安全策略问题,生产环境建议通过反向代理配置 HTTPS。 |
💡 提示:定期进行恢复测试,从备份中尝试恢复少量文件,这是验证备份有效性的最重要环节!
希望这份教程能帮助你顺利完成 Kopia 的部署,为你的数据建立起一道可靠的安全防线!