Skip to content

🚀 使用 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 算法)防止数据腐损,支持快照挂载、保留策略设置和服务器模式集中管理。

⚙️ 部署前准备

  1. 环境要求

    • 已安装 DockerDocker Compose
    • 系统内存:建议 1GB 以上。
    • 磁盘空间:确保有足够空间存放备份数据和缓存。
  2. 环境检查 在终端中执行以下命令,确认 Docker 环境正常: bash docker --version docker-compose --version

  3. 创建项目目录 建议创建一个独立的目录来管理 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,建议使用强密码并安全存储。

🚀 启动与验证

  1. 启动服务docker-compose.yml 文件所在目录执行: bash docker-compose up -d 此命令会拉取镜像并在后台启动容器。

  2. 检查服务状态 bash docker-compose ps 如果看到 Kopia 容器的状态为 Up,说明服务已成功启动。

  3. 查看实时日志(可选) 如果遇到问题,可以通过以下命令查看容器日志来排查: bash docker-compose logs -f kopia

  4. 访问 Web 界面 打开浏览器,访问 http://你的服务器IP:51515

    • 如果一切正常,你将看到 Kopia 的 Web UI 登录界面。
    • 使用 command 中设置的 --server-username--server-password (在你的配置中是 admin227) 登录。

⚙️ 基础配置与使用

成功登录 Web UI 后,你可以开始配置存储库和创建备份策略。以下流程也大致适用于 Kopia 的 CLI 和桌面 GUI。

  1. 初始化存储库 (Repository)

    • 首次使用,你需要创建一个存储库来保存备份数据。
    • 在 Web UI 中,通常会有引导流程。你需要:
      • 选择存储后端:例如 "Filesystem" (本地文件系统) 并指定路径,此路径应是你通过 volumes 映射到容器内的目录,例如 /repository
      • 设置存储库密码:此密码应已通过 KOPIA_PASSWORD 环境变量设置,Web UI 可能不会要求再次输入,但进行关键操作时会验证。
  2. 连接至存储库

    • 存储库初始化后,下次启动或访问时可能需要"连接"到已存在的存储库。
    • 在 Web UI 中选择相应的存储后端和路径,并提供 KOPIA_PASSWORD 密码即可连接。
  3. 创建备份策略 (Policy) 和快照 (Snapshot)

    • 定义策略:在 "Policies" 部分,你可以设置备份策略,包括:
      • 备份频率与保留规则:例如每小时备份、保留最近7天的快照等。
      • 排除规则:指定不需要备份的文件类型或目录。
      • 压缩与加密设置:选择压缩算法和加密参数(通常保持默认即可)。
    • 创建快照:在 "Snapshots" 部分,选择你要备份的目录(这些目录应是你通过 volumes 映射到容器内的,例如 /mnt/10t),然后手动创建快照。Kopia 默认会进行增量备份。
  4. 浏览与恢复数据

    • 在 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 的部署,为你的数据建立起一道可靠的安全防线!