海外云服务器搭建 Immich 自建照片相册完整教程(替代 Google 相册,2026 最新版)
Meta Description: 从零开始用海外云服务器搭建 Immich 自建照片相册,替代 Google 相册与 iCloud,涵盖内存门槛实测、Docker Compose 官方部署、Postgres 存储规划、Nginx 反向代理大文件上传与 WebSocket 透传、Let's Encrypt 强制 HTTPS、手机 App 自动备份、硬件转码与 ML 加速、数据库与媒体库自动备份,附服务器配置推荐表、服务商价格表与自建 vs 云相册成本对比。
> 关键词:Immich搭建教程、自建照片相册、Google相册替代方案、海外云服务器搭建相册、Immich Docker部署、Immich Nginx反向代理、手机照片自动备份、Immich硬件转码、私人云相册、家庭共享相册
前言
想给自己和家人做一个"手机拍完自动上传、多设备随时翻看、不按人头也不按容量收费"的私人相册,最快的方案就是在一台海外云服务器上用 Docker Compose 跑 Immich:官方 compose 文件一条 docker compose up -d 拉起四个容器(Immich 主服务、机器学习服务、自带向量扩展的 Postgres、Valkey 缓存),浏览器打开 2283 端口就能建账号,手机装官方 App 即可开启后台自动备份。整条链路半小时内可以走通,用户数不限。
Immich 是什么?一句话说清:它是目前最接近"自建版 Google 相册"的开源项目——不是网盘挂个相册目录,而是有时间线、地图视图、人脸识别、按"事物"语义搜索、Live Photo 与 RAW 支持、共享相册、多用户的完整相册系统。手机端有 Android / iOS 官方 App,桌面端是 Web,客户端覆盖完整,不需要你自己写前端。
它的硬件门槛很"偏科":CPU 不高、磁盘 IO 要求也不极端,卡点全在内存。官方给出的最低值是 6GB、推荐 8GB,CPU 最低 2 核、推荐 4 核;只有 4GB 内存的机器必须把机器学习功能关掉才能跑。这一点决定了选服务器时不能只看"几核几 G 便宜",本文第二节会把档位表算清楚。
本文给出可直接复制执行的完整命令,Ubuntu 22.04 与 CentOS 7 双系统覆盖,从买服务器、规划磁盘、装 Docker、拉官方 compose、配 Nginx 与证书,到手机 App 自动备份跑通,并附服务器配置推荐表、服务商价格表、自建 vs 云相册成本对比与 8 条常见问题。
> 🚀 还没有海外云服务器?通过 5.chengzicloud.cloud 选购阿里云/AWS/腾讯云国际版,享专属折扣和中文技术支持。
一、为什么用海外云服务器自建相册,而不是继续交云相册月费
理由一:订阅制是"按容量 + 按人头"双重计价,长期是笔稳定的支出。 商业云相册的定价模型很统一:免费额度只够体验(通常 5GB~15GB),超出后按容量档位月付,而要共享给家人往往还要买"家庭版"。一台 2核8G 的海外云服务器月费十几美元,用户数不限、共享相册不限、照片张数不限,只有磁盘容量需要按需加。对于"照片早已经几十万张"的家庭来说,自建方案的边际成本几乎为零。
理由二:照片是最私密的数据,放在自己机器上最有底气。 人脸识别、地理位置、家庭成员的日常轨迹——这些数据聚合起来比通讯录敏感得多。自建之后所有原图、缩略图、人脸特征向量、数据库全部落在你自己的 /mnt/data 目录里,数据主权在握;哪天不想用了,用官方 dump + 媒体库目录就能整体搬走,不存在"服务停服数据取不回来"的风险。
理由三:一家人多设备共享,不需要为每个成员单独付费。 Immich 支持多用户:管理员建账号,家人各自登录、各自有独立时间线,也可以把某些相册共享给全家人。给孩子、老人各装一个 App,设置好自动备份就不用再教他们手动传照片——这是自建相册最实用的一点。
理由四:功能已经不再是短板。 早期开源相册的通病是"能存不能找",而 Immich 的搜索能力建立在机器学习之上:可以用自然语言搜"海边的狗""红色汽车""去年的生日蛋糕",人脸识别自动聚合成人物相册,还有地图视图按拍摄地点浏览。这些原本是商业云相册的核心卖点,现在自建方案也能给。
二、Immich 的硬件要求:内存才是真正的门槛
选服务器之前先把官方要求看清楚,否则很容易买到一台"装得上但跑不动"的机器。
| 项目 | 最低要求 | 推荐配置 | 说明 |
|------|---------|---------|------|
| 操作系统 | Linux / *nix 64 位 | Ubuntu 22.04 / Debian 12 | 非 Linux 系统官方明确不推荐,Docker 体验很差 |
| 内存 | 6GB | 8GB | 4GB 必须关闭机器学习,否则上传时极易 OOM |
| CPU | 2 核 | 4 核 | 缩略图生成与转码是主要消耗 |
| CPU 架构 | amd64 / arm64 | — | v3 起 amd64 的 ML 容器要求 x86-64-v2(2012 年后的 CPU 基本都满足) |
| 系统盘 | 本地 SSD | NVMe SSD | Postgres 数据 1~3GB,绝不能放网络盘 |
| 媒体盘 | EXT4 / XFS / ZFS | 独立数据盘 | 需支持用户/组属主与权限 |
| 额外空间 | 原图体积 +10%~20% | +20% | 缩略图与转码产物会额外占用 |
| 软件依赖 | Docker Engine | + Compose v2 插件 | 只认 docker compose,v1 的 docker-compose 官方已弃用 |
几个容易被忽略的点值得单独强调:
第一,Postgres 必须落在本地 SSD 上。 官方文档明确写了数据库文件通常 1~3GB,且"绝不使用任何形式的网络共享"。如果你打算把 DB_DATA_LOCATION 指向 NAS 或对象存储挂载点,性能和稳定性都会出问题。如果机器用的不是 SSD,还要在 compose 里把 DB_STORAGE_TYPE 设为 HDD 让数据库走适配的配置。
第二,如果使用机器的 4GB 内存版本,必须关掉机器学习。 关的办法是删除 compose 文件里的 immich-machine-learning 服务段(并在必要时用 IMMICH_WORKERS_EXCLUDE 排除相关后台任务),代价是失去语义搜索与人脸识别——对很多人来说这两项恰恰是自建相册的理由,所以更建议直接上 8GB。
第三,v3 之后的镜像对 CPU 微架构有要求。 如果你的机器是 2012 年以前的老 U,或者虚拟化平台没透传 x86-64-v2 指令集,ML 容器会起不来;最后一个支持 x86-64-v1 的版本是 v2.7.5,但该版本已不再维护,还要和主服务镜像版本对齐。买机器前先确认为 amd64/arm64 且 CPU 不太老。
服务器配置档位表
| 档位 | 配置 | 适合规模 | 月费参考 | 说明 | |------|------|---------|---------|------| | 体验版 | 2核4G + 60G SSD | 1 人、照片 < 2 万张 | 约 $6~10 | 必须关闭机器学习 | | 推荐版 | 2核8G + 100G SSD | 3~5 人、照片 < 10 万张 | 约 $12~20 | 官方推荐基线,ML 可用 | | 进阶版 | 4核16G + 200G SSD | 家庭/小团队、照片 < 50 万张 | 约 $24~40 | 转码与索引流畅 | | 重度版 | 8核32G + 500G NVMe | 多人协作、视频为主 | 约 $60~120 | 可考虑挂 GPU 做硬件转码 |
存储容量估算表
| 内容 | 单张/每分钟占用 | 2 万张照片估算 | |------|----------------|---------------| | 手机照片(12MP JPEG/HEIC) | 约 2~5MB | 约 60~100GB | | 手机视频(1080p/4K) | 约 60~250MB / 分钟 | 视比例而定 | | 缩略图 + 转码产物 | 原始库的 10%~20% | 约 10~20GB | | Postgres 数据库 | 固定 1~3GB | 约 2GB | | 建议预留 | — | 120GB 起 |
服务商价格表
| 服务商 | 月付 | 年付(折扣后) | 数据中心 | 优点 | |--------|------|--------------|---------|------| | 阿里云国际版 ECS | $4.2 | $3.2/月 | 新加坡/香港/硅谷 | 中文面板、支持支付宝 | | AWS Lightsail | $3.5 | $3.5/月 | 全球 20+ 区域 | 新用户免费套餐、生态完善 | | 腾讯云国际版 CVM | $4.5 | $3.5/月 | 香港/新加坡/东京 | 低延迟到国内、微信支付 | | Vultr | $6.0 | $6.0/月 | 全球 32 个 | 按小时计费、随时销毁 | | DigitalOcean | $6.0 | $6.0/月 | 全球 14 个 | 文档最完善、社区教程多 |
> 💡 新手建议:选阿里云国际版或腾讯云国际版香港节点,延迟低、有中文面板,8GB 内存机型约 $12~20/月。通过 5.chengzicloud.cloud 购买还可享额外折扣。
Immich 自建 vs 商业云相册成本对比
| 方案 | 容量 | 年成本(参考) | 特点 | |------|------|--------------|------| | Immich 自建(2核8G + 200G SSD) | 200GB 起,可按需加盘 | 约 $150~240(服务器+存储) | 用户数不限、无按人头收费、数据自持 | | Google One 2TB | 2TB | 约 $100/年 | 家庭共享有成员数上限、需海外支付 | | iCloud+ 2TB | 2TB | 约 $120/年 | 仅 Apple 生态体验最佳 | | 群晖等 NAS + Immich | 自定盘位 | 硬件一次性投入 | 长期最省,但要占宽带与电费 |
这里要说一句实话:如果你的照片只有几十 GB、也不介意数据在云厂商手里,商业云相册的年费其实更便宜,自建省不下钱。Immich 的真正优势在于"用户数不限 + 数据自持 + 功能自主",它适合的是照片量已经上百 GB、家庭成员多、或者对隐私有明确要求的人。想清楚这一点再动手,工程才不会白做。
> 🚀 通过 5.chengzicloud.cloud 购买以上平台均有额外折扣,点击首页查看最新优惠。
三、八步搭建 Immich(Ubuntu 22.04 / CentOS 7 双系统)
第一步:系统初始化与防火墙
Ubuntu 22.04 的命令如下:
`bash
// 更新系统并安装基础工具
apt update && apt upgrade -y
apt install -y curl wget vim ufw ca-certificates gnupg openssl
// 增加 2GB swap,缓解上传高峰期的内存抖动 fallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile none swap sw 0 0' >> /etc/fstab
// 防火墙只放行 SSH / HTTP / HTTPS,2283 端口绝不对公网开放
ufw allow 22/tcp
ufw allow 80/tcp
ufw allow 443/tcp
ufw enable
ufw status
`
CentOS 7 的命令如下:
`bash
yum update -y
yum install -y curl wget vim firewalld openssl
systemctl enable --now firewalld
firewall-cmd --permanent --add-service=ssh
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
`
需要提醒一句:CentOS 7 已于 2024 年 6 月 30 日进入 EOL,官方仓库不再更新,新部署建议直接用 Ubuntu 22.04 或 Debian 12。本文保留 CentOS 7 命令是为了兼容存量机器,下面的步骤会给出版本相关的坑。
第二步:规划存储目录
目录规划这件事,最省事的做法是:媒体库和数据库分家——媒体库放数据盘(越大越好、可以慢),数据库放系统盘的 SSD(容量小但要求快)。
`bash
mkdir -p /opt/immich
mkdir -p /mnt/data/immich/library
mkdir -p /var/lib/immich/postgres
mkdir -p /backup/immich
// 确认目录就位
ls -ld /opt/immich /mnt/data/immich/library /var/lib/immich/postgres /backup/immich
df -h
`
如果你的服务器带独立数据盘,先把盘挂到 /mnt/data:
`bash
// 查设备名,通常是 /dev/vdb 或 /dev/sdb
lsblk
// 格式化并挂载(首次执行,会清空该盘数据)
mkfs.ext4 /dev/vdb
mkdir -p /mnt/data
echo '/dev/vdb /mnt/data ext4 defaults 0 2' >> /etc/fstab
mount -a
df -h /mnt/data
`
第三步:安装 Docker 与 Compose v2 插件
Ubuntu 22.04 一条官方脚本即可:
`bash
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
docker version
docker compose version
`
CentOS 7 上要多做一步:get.docker.com 脚本给你的 Docker 版本偏旧,而且 Compose v2 插件往往不会被自动装上,需要手动补:
`bash
curl -fsSL https://get.docker.com | sh
systemctl enable --now docker
mkdir -p /usr/local/lib/docker/cli-plugins curl -SL "https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64" \ -o /usr/local/lib/docker/cli-plugins/docker-compose chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
docker compose version
`
如果你的机器是 arm64(比如甲骨文永久免费的 ARM 机型),把上面的 linux-x86_64 换成 linux-aarch64。注意 Immich 只认 docker compose 这个带空格的子命令,老教程里的 docker-compose(v1)官方已经弃用,照抄会报错。
第四步:拉取官方 compose 文件并生成随机密码
Immich 官方不提供"一键安装二进制",也没有非 Docker 的安装路径——所有安装方式(Compose、Kubernetes、Portainer、Unraid、TrueNAS)本质都是同一套容器编排。所以我们直接取官方 release 里附带的 compose 文件,不要自己手写、也不要用 main 分支的版本(main 上的 compose 可能和最新 release 不兼容)。
`bash
cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml wget -O example.env https://github.com/immich-app/immich/releases/latest/download/example.env cp example.env .env
// 改存储路径与时区 sed -i "s|^UPLOAD_LOCATION=.*|UPLOAD_LOCATION=/mnt/data/immich/library|" .env sed -i "s|^DB_DATA_LOCATION=.*|DB_DATA_LOCATION=/var/lib/immich/postgres|" .env sed -i "s|^# TZ=Etc/UTC|TZ=Asia/Shanghai|" .env
// 生成随机数据库密码(只允许字母和数字) sed -i "s|^DB_PASSWORD=.*|DB_PASSWORD=$(openssl rand -hex 16)|" .env
// 追加 Nginx 反代所需的可信代理设置 echo 'IMMICH_TRUSTED_PROXIES=127.0.0.1' >> .env
// 关键一步:把 2283 端口从"全网监听"改为"只监听本机" sed -i "s|2283:2283|127.0.0.1:2283:2283|" docker-compose.yml
cat .env
`
.env 里几个关键变量的含义如下:
| 变量 | 作用 | 注意点 |
|------|------|--------|
| UPLOAD_LOCATION | 媒体库根目录(原图+缩略图) | 建议挂独立数据盘 |
| DB_DATA_LOCATION | Postgres 数据目录 | 必须本地 SSD,不能是网络盘 |
| TZ | 容器时区 | 影响照片时间线显示,务必设置 |
| IMMICH_VERSION | 镜像版本 tag | 默认 v3,也可钉死到具体版本 |
| DB_PASSWORD | 数据库密码 | 只允许 A-Za-z0-9,不能有特殊字符或空格 |
| IMMICH_TRUSTED_PROXIES | 可信反向代理 IP | 设在 Nginx 后面时必须配,否则日志里全是容器 IP |
改完之后确认 compose 的端口绑定生效:
`bash
grep -n "ports" -A2 docker-compose.yml
`
输出里应该看到 '127.0.0.1:2283:2283'。如果还是 2283:2283,说明 2283 端口会对整个公网开放,务必改掉再启动——这是自建相册最常见的安全事故。
第五步:启动服务并确认健康
`bash
cd /opt/immich
docker compose pull
docker compose up -d
docker compose ps
`
四个容器分别是:immich_server(主服务与 API)、immich_machine_learning(机器学习推理)、immich_postgres(带向量扩展的 Postgres)、immich_redis(Valkey 缓存)。首次启动时数据库要执行迁移,前 1~2 分钟服务会短暂不可用,跟着日志看进度:
`bash
docker compose logs -f --tail=80 immich-server
`
看到服务开始监听端口后,在本机验证:
`bash
curl -I http://127.0.0.1:2283
docker compose logs immich-server | grep -i "listen\|ready" | tail -5
`
返回 HTTP 200 或 3xx 即说明服务已就绪。
第六步:Nginx 反向代理(大文件上传 + WebSocket 透传)
自建相册最典型的故障是"手机上传大视频到一半失败",根因几乎都是 Nginx 默认的 client_max_body_size 1m 把请求截断了。做相册反代,这一项必须放开。
先装 Nginx 并写配置文件:
`bash
apt update && apt install -y nginx
`
Ubuntu 用 nano /etc/nginx/sites-available/immich.conf 新建站点,CentOS 7 用 nano /etc/nginx/conf.d/immich.conf,写入以下内容(把 photos.example.com 换成你自己的域名):
`nginx
server {
listen 80;
server_name photos.example.com;
client_max_body_size 0;
location / {
proxy_pass http://127.0.0.1:2283;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_request_buffering off;
proxy_buffering off;
proxy_read_timeout 3600;
proxy_send_timeout 3600;
}
}
`
Ubuntu 还需要启用站点:
`bash
ln -sf /etc/nginx/sites-available/immich.conf /etc/nginx/sites-enabled/immich.conf
nginx -t && systemctl reload nginx
`
CentOS 7 上直接检查并重载:
`bash
nginx -t && systemctl reload nginx
`
这段配置里每一项都不是装饰:
| 配置项 | 为什么必须有 |
|--------|-------------|
| client_max_body_size 0 | 取消请求体上限,否则上传大视频必报 413 |
| proxy_request_buffering off | 边收边转,避免大文件先落盘再转发造成延迟与磁盘翻倍 |
| proxy_buffering off | 保证下载原图时流式返回 |
| Upgrade / Connection 透传 | Immich 的实时更新与上传进度走 WebSocket,不配会转圈 |
| proxy_read_timeout 3600 | 批量上传、大视频转码任务耗时长,默认 60 秒会中途断连 |
第七步:申请 Let's Encrypt 证书并强制 HTTPS
HTTPS 对 Immich 不是可选项:手机 App 依赖安全上下文,Web 端的部分加密接口也要求 HTTPS,用 IP 加端口裸奔会让 App 无法正常登录。
`bash
apt install -y certbot python3-certbot-nginx
certbot --nginx -d photos.example.com --redirect \
-m [email protected] --agree-tos --no-eff-email
`
CentOS 7 上如果没有 python3-certbot-nginx,先启用 EPEL 再装:
`bash
yum install -y epel-release
yum install -y certbot python2-certbot-nginx
certbot --nginx -d photos.example.com --redirect -m [email protected] --agree-tos --no-eff-email
`
证书装好后验证自动续期已就位:
`bash
systemctl list-timers | grep certbot
certbot renew --dry-run
`
第八步:初始化管理员、装手机 App、开启自动备份
浏览器打开 https://photos.example.com,用邮箱和密码注册第一个用户——这个账号就是管理员,注册完立刻到"管理"页面把公开注册关掉,之后由你手动给家人建账号。
把 .env 里的注册开关关掉并重启(防止陌生人注册):
`bash
cd /opt/immich
echo 'IMMICH_ALLOW_SETUP=false' >> .env
docker compose up -d
`
然后再处理手机端:
1. 应用商店搜索 Immich 安装官方 App(Android / iOS 都有)。
2. 填写服务器地址 https://photos.example.com,用刚建的账号登录。
3. 进"备份"设置,选择要备份的相册(建议只勾选"相机胶卷",避免把表情包和截图也传上去)。
4. 打开前台备份与后台备份。iOS 的后台备份由系统调度,需要保持 App 有定位权限并按系统提示授权,备份节奏不完全确定,插电连 Wi-Fi 时最容易跑。
5. 用管理员账号再给家人各建一个账号,让他们在自己的手机上重复第 1~4 步。
到此,一个"拍完自动上传、全家共享、无限用户"的私人相册就跑起来了。
四、进阶配置:硬件转码、ML 加速、外部库与自动备份
硬件转码(只对视频有意义)
Immich 支持 NVENC(NVIDIA)、Quick Sync(Intel)、RKMPP(Rockchip)、VAAPI(AMD/Intel/NVIDIA)四种加速后端。做法是下载官方 hwaccel.transcoding.yml 放到 compose 同目录,在 immich-server 服务下打开 extends 段并把 cpu 换成对应后端,再重新部署:
`bash
cd /opt/immich
wget -O hwaccel.transcoding.yml https://github.com/immich-app/immich/releases/latest/download/hwaccel.transcoding.yml
nano docker-compose.yml
docker compose up -d immich-server
`
四点必须提前知道:一是海外 VPS 绝大多数是纯 CPU 虚拟机,没有 /dev/dri 设备,硬件转码根本用不了,只有带核显的独服或支持 GPU 的机型才谈得上;二是官方明确说硬件转码产物更大、同参数下质量略低,属于"省 CPU 换体积";三是默认只加速编码,解码与色调映射仍走 CPU,要端到端加速得在视频转码设置里再打开硬件解码;四是 NVENC 需要装官方驱动与 NVIDIA Container Toolkit,Rockchip 平台还额外依赖 libmali 库。
用外部库挂载已有照片,避免重复拷贝
Immich 支持把服务器上已有的目录作为只读外部库挂进系统,不移动、不复制原文件,只建索引:
`bash
// 例如把 /mnt/data/old-photos 挂进容器只读
sed -i "s|- \${UPLOAD_LOCATION}:/data|- \${UPLOAD_LOCATION}:/data\n - /mnt/data/old-photos:/mnt/old-photos:ro|" docker-compose.yml
docker compose up -d immich-server
`
重启后在管理界面的"外部库"里添加 /mnt/old-photos 并触发扫描即可。这是从旧 NAS 或旧硬盘搬家时最省事的一步,比自己 rsync 再上传快一个数量级。
数据库与媒体库自动备份
相册系统里最不能丢的是数据库(人脸特征、相册归属、用户配置全在里面),媒体库反而相对好恢复。写一个备份脚本放到 /opt/immich/backup.sh:
`bash
#!/bin/bash
DATE=$(date +%F)
mkdir -p /backup/immich
// 导出整库(含角色与权限) docker exec -t immich_postgres pg_dumpall --clean --if-exists --username=postgres \ > /backup/immich/immich-db-$DATE.sql
// 增量同步媒体库到备份位置或对象存储挂载点 rsync -a --delete /mnt/data/immich/library/ /backup/immich/library/
// 只保留最近 14 天的数据库备份 find /backup/immich -name "immich-db-*.sql" -mtime +14 -delete
echo "backup done: $DATE"
`
赋权并挂进 crontab:
`bash
chmod +x /opt/immich/backup.sh
crontab -e
`
在 crontab 里加一行(每天凌晨 3 点执行):
`cron
0 3 * /opt/immich/backup.sh >> /var/log/immich-backup.log 2>&1
`
更稳的做法是把 /backup 直接挂在异地对象存储上(S3 / OSS / COS),或者用 rclone 每天同步一次到异地——备份体系和 Immich 无关,但务必做恢复演练,只有真的恢复成功过一次的备份才算备份。
> 🚀 需要更高配的机型来跑相册和转码?通过 5.chengzicloud.cloud 选购,享专属折扣。
五、安全加固清单
自建相册存的是全家人最私密的数据,下面八条建议逐条落实:
1. 2283 端口只绑 127.0.0.1,由 Nginx 对外提供 HTTPS,绝不用"IP:2283"直接访问。
2. 全程强制 HTTPS,证书用 Let's Encrypt 并确认自动续期生效。
3. 配置 IMMICH_TRUSTED_PROXIES=127.0.0.1,否则客户端真实 IP 会丢失,风控与日志都失真。
4. 注册第一个管理员后立刻设置 IMMICH_ALLOW_SETUP=false,防止陌生人自行注册。
5. 数据库密码用 openssl rand -hex 16 生成,且只使用字母数字(官方限制)。
6. 给 Nginx 加限速,用 limit_req 对登录接口做频率限制,并配 fail2ban 拦暴力破解。
7. .env 权限收到 600,因为里面有数据库密码:chmod 600 /opt/immich/.env。
8. 定期备份并演练恢复,数据库与媒体库都要覆盖,备份文件放异地。
六、常见问题 FAQ
Q1:只有 4GB 内存的机器能跑 Immich 吗?
能跑,但必须关闭机器学习功能——官方明确说明 4GB 内存可以在禁用 ML 的情况下运行。做法是删掉 compose 里的 immich-machine-learning 服务段并重启。代价是失去语义搜索和人脸识别,对家庭相册来说这两个功能恰好最值钱,所以更建议直接选 8GB 机型。
Q2:CentOS 7 能装吗?会不会遇到 glibc 问题? 能装,而且不会遇到 glibc 问题——因为 Immich 只支持 Docker 安装,所有依赖都封在容器镜像里,宿主机的 glibc 版本不参与。CentOS 7 上真正的坑是两点:一是系统已于 2024 年 6 月 EOL,仓库不再维护;二是 Docker 安装后 Compose v2 插件需要手动补装(见第三步)。新机器建议直接用 Ubuntu 22.04。
Q3:为什么 Immich 必须用 Docker,没有二进制安装包? 这是官方刻意的设计:Immich 由四个组件构成(主服务、机器学习、带向量扩展的 Postgres、Valkey 缓存),其中 Postgres 镜像是项目自己构建的(含 VectorChord / pgvecto.rs 向量扩展),手写原生安装几乎不可能和官方保持一致。官方提供了 Compose、Kubernetes、Portainer 等多种编排方式,本质都是同一套容器,用 Docker 不是妥协,而是唯一被支持的路径。
Q4:手机上传大视频时报 413,怎么解决?
这是 Nginx 默认的请求体上限(1MB)导致的。在站点配置的 server 段里加 client_max_body_size 0; 后 nginx -t && systemctl reload nginx 即可。同时建议把 proxy_request_buffering off 一起打开,避免大文件先完整落盘再转发。
Q5:Web 端能打开,但手机 App 一直转圈、连不上怎么办?
三个排查方向:一是必须用 HTTPS,用 IP 加端口是连不上的;二是检查 Nginx 是否透传了 WebSocket(Upgrade 与 Connection 两个头),缺了会让实时连接建立不起来;三是确认 App 里填的服务器地址不带端口号、不带多余路径,直接是 https://photos.example.com。
Q6:照片和数据库到底存在哪里?以后怎么迁移?
媒体库在 UPLOAD_LOCATION(本文是 /mnt/data/immich/library),数据库在 DB_DATA_LOCATION(本文是 /var/lib/immich/postgres)。迁移时最稳的做法是:新机器上按本文装好、先不要初始化,把旧机的媒体库 rsync 过去、用 pg_dumpall 导出的 SQL 恢复到新机的 Postgres 容器里,再启动主服务。官方还提供更省事的 dump 方式,跨大版本升级时务必用 dump 迁移,不要直接换目录。
Q7:Immich 和群晖 Photos、Google 相册比怎么样? 功能层面 Immich 已经追上了核心体验:时间线、地图、人脸、语义搜索、共享相册、多端 App 都有。它的短板在"零维护"——商业方案不用你管服务器、不用你操心备份和升级。Immich 换来的东西是:用户数不限、数据自持、功能演进由社区决定、付费完全自愿(官方购买页面明确写了不会设置任何付费墙)。如果你已经有闲置服务器或 NAS,Immich 几乎没有犹豫的必要。
Q8:用国内云服务器能装吗?
技术上可以,但三个现实问题会劝退你:一是带宽与流量成本,相册是重度上传下载场景,国内按固定带宽计费的模式下,几十 Mbps 带宽年费就上千元;二是镜像拉取,Immich 的镜像和依赖都在 ghcr.io,国内机器拉取经常超时;三是备案与对外访问,用域名提供服务通常涉及备案。海外服务器免备案、流量充足、拉镜像顺畅,是自建相册更省事的选择。
七、总结
用海外云服务器搭建 Immich,整条链路其实只有八件事:初始化系统与防火墙、规划媒体库与数据库目录、装 Docker 与 Compose v2、拉官方 compose 并改好 .env、把端口收敛到本机后启动、Nginx 反代(放开上传体积 + 透传 WebSocket)、上 Let's Encrypt 证书、初始化管理员并给家人开账号。一台 2核8G 的海外 VPS、月费十几美元、用户数不限,就得到了一个带人脸识别与语义搜索的私人相册。
真正需要你留意的只有四件事:内存不要低于 6GB、数据库必须落在本地 SSD、2283 端口绝不对公网开放、备份必须做且要演练恢复。其余都是复制粘贴的体力活。
从更大的角度看,Immich 这类自建服务的价值不只是"省订阅费",而是把一个长期被商业公司锁住的家庭数据资产搬回了自己手里:照片、位置、人物关系这些数据一旦沉淀了十年,迁移成本会高到让人只能忍受涨价。趁现在动手,把入口建在自己机器上,是笔很划算的投入。
> 🚀 还没有海外云服务器?通过 5.chengzicloud.cloud 选购阿里云/AWS/腾讯云国际版,享专属折扣和中文技术支持,今天就把自己的私人相册跑起来。
延伸阅读: - Docker + Portainer 容器管理平台搭建完整教程 - Nginx反向代理+Let's Encrypt免费SSL证书配置完整教程 - 服务器备份与容灾完整教程:快照+Rclone异地+数据库定时备份 - 海外云服务器搭建 Nextcloud 私有云盘完整教程 - frp 内网穿透搭建完整教程:让家里的 NAS 和安全内网对外可访问
> 本文由 5.chengzicloud.cloud 提供,点击访问首页了解更多海外云服务器部署方案和专属优惠。