部署实战4 min read0 views

Immich 部署教程:用 Docker 搭一套自建 Google Photos

从零把 Immich 部署到一台 2 核 4GB 服务器:官方 Compose、数据库密码、Nginx 反代、HTTPS、手机后台备份,以及升级与备份要点。

Immich 部署教程:用 Docker 搭一套自建 Google Photos

Immich 是目前最像 Google Photos 的开源自托管相册:手机自动备份、时间线、人脸识别、语义搜索、共享相册一应俱全。这篇教程用官方 Docker Compose 在一台 2 核 4GB 的服务器上把它跑起来,并接上域名和 HTTPS。

一、准备条件

  • 一台 Linux 服务器(Ubuntu 22.04 / Debian 12 均可),建议 2 核 4GB 起,照片存独立数据盘。
  • 已安装 Docker 与 Docker Compose 插件:docker --version、docker compose version 能正常输出。
  • 一个域名(例如 photos.example.com)并已解析到服务器;手机 App 后台备份需要 HTTPS。
  • 放行 2283(测试)与 80/443(正式)。

二、镜像与组件

组件镜像作用
immich-serverghcr.io/immich-app/immich-server:releaseWeb 与 API,端口 2283
immich-machine-learningghcr.io/immich-app/immich-machine-learning:release人脸、物体、CLIP 模型推理
databaseghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0PostgreSQL + 向量扩展
redisdocker.io/valkey/valkey:9任务队列缓存

不要用 main 分支的 Compose 文件,版本必须和 Release 对齐。官方每次发版都会附带对应版本的 docker-compose.yml 与 example.env。

三、下载官方 Compose 并配置

mkdir -p /opt/immich && cd /opt/immich
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env

编辑 .env,至少改这三项:

# 照片与视频的存放目录,换成你的数据盘
UPLOAD_LOCATION=/data/immich/library

# 数据库文件目录
DB_DATA_LOCATION=/data/immich/postgres

# 数据库密码,自己生成一个强密码
DB_PASSWORD=请替换成随机强密码

# 时区
TZ=Asia/Shanghai

docker-compose.yml 保持官方原样即可,核心服务长这样(节选):

services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
    volumes:
      - ${UPLOAD_LOCATION}:/data
      - /etc/localtime:/etc/localtime:ro
    env_file: [.env]
    ports:
      - '2283:2283'
    depends_on: [redis, database]
    restart: always

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
    volumes:
      - model-cache:/cache
    env_file: [.env]
    restart: always

  redis:
    image: docker.io/valkey/valkey:9
    restart: always

  database:
    image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0
    environment:
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_USER: ${DB_USERNAME}
      POSTGRES_DB: ${DB_DATABASE_NAME}
    volumes:
      - ${DB_DATA_LOCATION}:/var/lib/postgresql/data
    restart: always

启动:

docker compose up -d
docker compose ps
docker compose logs -f immich-server

看到 Immich Server is listening on ... 2283 就成功了。此时访问 http://服务器IP:2283 就能打开。

四、反向代理与 HTTPS

Immich 必须通过 HTTPS 才能让手机 App 稳定后台上传。Nginx 示例:

server {
    listen 80;
    server_name photos.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name photos.example.com;

    ssl_certificate     /etc/letsencrypt/live/photos.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/photos.example.com/privkey.pem;

    # 视频上传必须放开,否则大文件会 413
    client_max_body_size 50000M;

    location / {
        proxy_pass http://127.0.0.1:2283;
        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;

        # WebSocket
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";

        # 大文件直传,不落 Nginx 临时盘
        proxy_request_buffering off;
        proxy_read_timeout 600s;
        proxy_send_timeout 600s;
    }
}

证书用 certbot 申请:certbot --nginx -d photos.example.com。

五、首次初始化

  1. 打开 https://photos.example.com,注册第一个账号,这个账号就是管理员。
  2. 进入「管理 → 设置 → 用户管理」,把「允许注册」关掉,改为管理员手动邀请家人。
  3. 手机安装 Immich App,服务器地址填 https://photos.example.com,登录后在「备份」里选择要同步的相册。
  4. 照片量大时,先让手机在 Wi-Fi 与充电状态下跑一晚;服务端会排队生成缩略图和 AI 索引。
Immich 照片网格
Immich 的照片时间线与检索界面

六、备份、升级与迁移

  • 备份:两样东西最关键 —— UPLOAD_LOCATION 里的原图,以及数据库。数据库用 docker compose exec -t database pg_dumpall -U postgres > backup.sql 导出,建议每天定时。
  • 升级:先看 Release Notes 有没有破坏性变更,然后 docker compose pull && docker compose up -d。跨大版本(例如 1.x → 2.x)必须按官方升级说明逐步来。
  • 迁移:在新机器上还原 UPLOAD_LOCATION 与数据库,再启动同一版本的 Compose 即可。

七、常见问题

上传大视频报 413? Nginx 的 client_max_body_size 没放开,改成 50000M 并 reload。

机器学习容器内存占用高? 属于正常现象,模型常驻约 1GB。内存不足可在 Compose 里给 immich-machine-learning 加 mem_limit: 2g,或关掉部分智能功能。

手机 App 一直显示「服务器不可用」? 检查是否用了 HTTPS、证书是否可信、X-Forwarded-Proto 是否传给后端。

八、小结

Immich 是「家庭相册」场景里功能最完整的选择,代价是对服务器和运维有一点要求。如果你想跳过折腾,我们也提供已实测的部署服务:环境安装、Compose 编排、HTTPS、手机端连通性一起交付,¥99 起,48 小时内完成。

相关阅读:《2026 年开源家庭相册怎么选》 · PhotoPrism 部署教程 · ChronoFrame 部署教程

MORE / 03

Keep reading

ChronoFrame Docker Deployment: A One-Command Self-Hosted Portfolio
部署实战

ChronoFrame Docker Deployment: A One-Command Self-Hosted Portfolio

2026.11.14 · 3 min read

Piwigo Docker Deployment: The Veteran Open-Source Family Gallery
部署实战

Piwigo Docker Deployment: The Veteran Open-Source Family Gallery

2026.11.14 · 3 min read

Lychee Docker Deployment: A Beautiful Family Photo Album
部署实战

Lychee Docker Deployment: A Beautiful Family Photo Album

2026.11.14 · 3 min read

StarCode

Discover and share great open-source projects. We serve developers and carry the spirit of the internet forward.

Contact

WeChat / advertising: ITcloub (please mention StarCode)

Disclaimer: Resources on this site remain the property of their original authors and are for learning and exchange only. For copyright concerns, contact us via About us → Copyright complaints.

Powered by Nuxt · Deployed on Cloudflare