保姆级教程:用Docker和cpolar在Ubuntu上部署Immich相册,实现永久免费内网穿透

📅 发布时间:2026/7/3 14:56:52 👁️ 浏览次数:
保姆级教程:用Docker和cpolar在Ubuntu上部署Immich相册,实现永久免费内网穿透
从零构建私有云相册Immich深度部署与永久远程访问实战你是否厌倦了将珍贵的家庭照片和视频托付给第三方云服务数据隐私的担忧、逐年上涨的订阅费用以及功能上的种种限制让越来越多的技术爱好者将目光投向了自托管方案。今天我们就来深入探讨如何基于Immich—— 这款被誉为“自托管版 Google Photos”的开源神器在 Ubuntu 服务器上构建一个完全属于你自己的、功能强大且隐私安全的个人媒体库。更重要的是我们将彻底解决自托管服务“养在深闺人未识”的痛点通过一种稳定、可靠且完全免费的方式实现从世界任何角落安全、高速地访问你的家庭相册。这不仅仅是一次简单的软件安装更是一套涵盖 Docker 容器化部署、服务配置优化以及关键的网络穿透与域名固化技术的完整解决方案。无论你是希望为家庭打造一个永久的数字记忆仓库还是作为开发者探索现代自托管应用架构这篇文章都将为你提供详尽的、可落地的操作指南。1. 基石构建Ubuntu 系统准备与 Docker 引擎部署在开始搭建 Immich 之前确保你的 Ubuntu 服务器可以是物理机、虚拟机或云主机处于最佳状态是成功的第一步。我们假设你使用的是 Ubuntu 22.04 LTS 或更新版本这是一个长期支持版本能提供稳定的基础环境。首先更新系统包列表并升级现有软件包是一个好习惯。打开终端执行sudo apt update sudo apt upgrade -y升级完成后建议重启系统以确保所有更新生效。接下来我们将安装 Docker。虽然 Ubuntu 仓库提供了 Docker 包但为了获得最新版本和官方支持我们采用 Docker 官方提供的安装脚本。这个脚本会自动检测你的系统并配置稳定的仓库。注意在生产环境中建议查阅 Docker 官方文档根据你的具体 Ubuntu 版本选择最合适的安装方式。对于大多数个人用户使用官方脚本是最快捷的。运行以下命令下载并执行安装脚本curl -fsSL https://get.docker.com -o get-docker.sh sudo sh get-docker.sh安装过程可能需要几分钟。完成后我们需要将当前用户添加到docker组这样就不必每次运行 Docker 命令都加上sudo。sudo usermod -aG docker $USER重要执行此命令后你需要完全注销并重新登录或者启动一个新的 shell 会话用户组更改才会生效。验证 Docker 是否安装成功且可以无sudo运行docker --version docker run hello-world如果看到 Docker 版本信息和 “Hello from Docker!” 的欢迎消息说明 Docker 引擎已准备就绪。为了进一步提升体验我们还可以安装 Docker Compose一个用于定义和运行多容器 Docker 应用程序的工具。虽然 Immich 的安装脚本会处理这些但提前安装有助于后续的其他管理。sudo apt install docker-compose-plugin -y验证安装docker compose version。至此我们的基础设施层已经搭建完毕。一个稳定、高效的 Docker 环境是 Immich 流畅运行的保障。2. 核心部署一键安装与深度配置 ImmichImmich 的官方团队极大地简化了部署流程提供了一个非常便捷的安装脚本。这并不意味着我们只能知其然而不知其所以然。让我们在运行脚本的同时深入理解它背后为我们构建了怎样的服务架构。在终端中运行官方安装命令curl -o- https://raw.githubusercontent.com/immich-app/immich/main/install.sh | sudo bash这个脚本执行了几个关键操作下载编排文件从 GitHub 仓库获取docker-compose.yml和.env文件。docker-compose.yml定义了 Immich 应用所需的所有容器如 Web 前端、后端 API、数据库、机器学习服务、反向代理等及其关系。.env文件则包含了可配置的环境变量如密钥、数据库密码等。启动服务栈脚本会执行docker compose up -d以守护进程模式启动所有定义的服务。安装完成后你可以在浏览器中输入http://你的服务器IP:2283来访问 Immich 的 Web 界面。首次访问你会看到一个清新的注册页面。然而对于追求长期稳定和性能调优的用户直接使用默认配置可能不够。安装脚本创建的docker-compose.yml和.env文件通常位于/opt/immich-app或/immich目录下具体路径脚本会有提示。我们有必要对这些文件进行一些审视和调整。首先找到.env文件它包含了敏感信息和重要配置。使用文本编辑器如nano打开它sudo nano /opt/immich-app/.env你会看到类似以下的内容部分值已被脚本自动生成# 数据库配置 DB_HOSTNAMEimmich_postgres DB_PORT5432 DB_USERNAMEpostgres DB_PASSWORD一个随机密码 DB_DATABASE_NAMEimmich # Redis 配置 REDIS_HOSTNAMEimmich_redis # 上传文件存储路径 UPLOAD_LOCATION/path/to/your/photos这里有几个关键点需要你主动配置UPLOAD_LOCATION这是 Immich 存储上传媒体文件的绝对路径。务必将其修改为你规划好的、拥有足够磁盘空间的位置例如/mnt/bigdisk/immich/library。确保该目录存在且 Docker 容器有读写权限通常sudo chmod -R 777 /mnt/bigdisk/immich或更精细的权限设置。备份你的.env文件特别是自动生成的数据库密码一旦丢失将无法连接至数据库。建议将其备份到安全的地方。接下来查看docker-compose.yml了解服务构成。Immich 默认包含以下核心服务服务名称作用说明immich-server后端 API 服务处理所有业务逻辑如图片上传、分析、搜索等。immich-web前端 Web 界面提供用户交互的网页应用。immich-machine-learning机器学习服务负责面孔识别、物体识别、图像分类等 AI 功能。这是资源消耗大户。postgres数据库存储用户、元数据、相册结构等信息。redis缓存与消息队列提升应用性能处理后台任务。proxy(Nginx)反向代理处理外部请求提供 HTTPS 终止等在配置公网访问时尤为重要。如果你的服务器资源尤其是内存有限可以考虑对immich-machine-learning服务进行资源限制。在docker-compose.yml中找到该服务定义添加deploy部分services: immich-machine-learning: ... deploy: resources: limits: memory: 2G # 根据你的服务器内存调整例如限制为 2GB reservations: memory: 1G修改完配置后需要重启 Immich 服务以使更改生效cd /opt/immich-app # 进入你的 Immich 目录 docker compose down docker compose up -d现在再次访问 Web 界面完成注册并登录你就可以开始体验一个功能完整、完全私有的 Google Photos 替代品了。其界面直观支持时间线、地图视图、人脸相册、智能搜索等高级功能。3. 内网穿透的本质与 cpolar 的优雅集成在本地局域网内访问 Immich 一切顺利但如何让身处公司、旅途中或父母家的设备也能安全地连接到你家里的服务器呢这就是“内网穿透”要解决的问题。其核心原理是在公网互联网上建立一个“中转服务器”你的家庭服务器主动与这个中转服务器保持一个持久的、加密的连接隧道。当外部设备想要访问你的 Immich 时请求先到达中转服务器然后通过这条已建立的隧道被转发到你的家庭服务器最后响应再沿原路返回。市面上有多种内网穿透工具如cpolar、frp、ngrok 等。它们各有特点而 cpolar 对于个人用户非常友好提供了免费的、可固定域名的隧道服务需实名认证这正是我们实现“永久免费稳定访问”的关键。在 Ubuntu 服务器上安装 cpolar 非常简单使用其提供的一键安装脚本sudo curl -L https://www.cpolar.com/static/downloads/install-release-cpolar.sh | sudo bash安装完成后设置 cpolar 开机自启并立即启动服务sudo systemctl enable cpolar sudo systemctl start cpolar检查服务状态确认运行正常sudo systemctl status cpolarcpolar 启动后会在本地启动一个 Web 管理界面通常位于http://localhost:9200。你需要在浏览器中访问服务器的这个地址如果是从远程桌面操作服务器就是localhost如果通过 SSH 连接则需要通过 SSH 隧道或将服务绑定到0.0.0.0这里假设你在服务器本地操作。首次访问管理界面你需要用 cpolar 官网的账号登录。如果没有账号需要先去其官网注册。登录后我们就可以开始创建穿透隧道了。4. 从临时测试到永久稳固配置固定二级子域名在 cpolar 的管理界面中找到“隧道管理” - “创建隧道”。隧道名称起一个易于识别的名字如immich-photos。协议选择HTTP后续我们可以配置 HTTPS。本地地址填写2283这是 Immich Web 服务默认的端口。域名类型这里我们先选择“随机域名”地区选择“China VIP”或离你最近的地域。点击“创建”后cpolar 会立即生成一个随机的公网 URL例如https://abcd1234.cpolar.top。此时你已经在公网上获得了一个可以访问你本地 Immich 的地址将这个地址复制到手机或另一台电脑的浏览器中你应该能成功看到 Immich 的登录界面。但是这个随机域名存在一个重大缺陷它默认每 24 小时变化一次。这对于临时演示或测试没问题但对于想要长期、稳定使用的个人相册服务来说是不可接受的。想象一下每次想给家人分享链接都需要重新获取一个新地址。解决之道在于 cpolar 提供的“保留二级子域名”功能。以下是将其变为固定地址的步骤预留域名登录 cpolar 官网的控制台注意是官网不是本地 9200 的管理界面。找到“预留” - “保留二级子域名”。选择一个你心仪的子域名前缀例如myfamilyphotos地区同样选择“China VIP”点击“保留”。如果该前缀未被占用你会成功获得一个固定的域名myfamilyphotos.cpolar.cn注意域名后缀可能与随机域名不同。配置隧道回到 cpolar 本地管理界面 (localhost:9200)进入“隧道管理” - “隧道列表”找到你刚刚创建的immich-photos隧道点击“编辑”。更新配置域名类型从“随机域名”改为“二级子域名”。Sub Domain填写你刚刚保留成功的子域名前缀即myfamilyphotos。地区与预留时保持一致。点击“更新”。cpolar 会重新配置隧道。稍等片刻刷新隧道列表你会发现公网地址已经变成了固定的https://myfamilyphotos.cpolar.cn。至此你已经拥有了一个长期稳定的公网访问入口。只要你的 cpolar 客户端保持运行且预留的域名没有手动释放这个地址就会一直有效。你可以将这个链接添加到浏览器的书签或在 Immich 的手机 App 设置中将其配置为服务器地址实现随时随地备份和浏览照片。5. 安全加固与性能优化进阶指南拥有了固定访问地址我们还需要关注安全和体验。默认的 HTTP 连接和基础配置仍有优化空间。1. 启用 HTTPS 加密cpolar 的免费域名通常自带由 cpolar 签发的 HTTPS 证书访问时已经是https://开头。但为了获得更好的浏览器信任避免“连接不安全”提示你可以考虑使用自有域名如果你拥有一个自己的域名可以在 cpolar 官网配置“自定义域名”并为其配置 Let‘s Encrypt 的免费 SSL 证书实现完全受浏览器信任的 HTTPS 访问。在 Immich 反向代理中配置 SSL如果你熟悉 Nginx 配置可以修改 Immich 的proxy服务配置直接加载你的 SSL 证书和私钥实现端到端的 HTTPS。2. Immich 应用层安全强密码策略为你的 Immich 管理员账户设置一个复杂且唯一的密码。启用双重验证 (2FA)在 Immich 的用户设置中强烈建议启用双重认证为账户增加一层强有力的保护。定期备份定期备份两个关键部分数据库使用docker exec命令导出 PostgreSQL 数据库。docker exec immich_postgres pg_dump -U postgres immich /your/backup/path/immich_backup_$(date %Y%m%d).sql媒体库直接备份你设置的UPLOAD_LOCATION目录下的所有文件。3. 性能与资源监控Immich 的机器学习服务是资源消耗的主要来源。你可以使用以下 Docker 命令来监控容器状态docker stats # 查看所有容器的实时资源占用CPU、内存、网络 docker compose logs -f immich-machine-learning # 查看机器学习服务的日志观察识别任务是否正常如果服务器内存紧张可以如前所述在docker-compose.yml中为immich-machine-learning服务设置明确的内存限制防止其耗尽系统资源导致主机不稳定。4. 手机 App 的配置Immich 提供了优秀的 iOS 和 Android 客户端。在手机 App 中添加服务器时就填入我们固定的公网地址https://myfamilyphotos.cpolar.cn并开启“后台备份”功能。这样手机上新拍摄的照片和视频就能在连接 Wi-Fi 时或按你设置的规则自动、静默地备份到你的私有服务器上体验与商业云盘无异但数据完全掌握在自己手中。整个体系搭建完成后你收获的不仅仅是一个相册应用而是一套完整的、自主可控的个人数据管理基础设施。它随着你的需求成长不受制于任何公司的政策变更。当你在深夜浏览多年来的家庭照片所有的流量都在你的服务器与设备之间直接加密传输那种对隐私的完全掌控感是任何付费服务都无法给予的。