因為需求,需要保存活動相片。
Immich 相片影片管理系統是個很不錯的解決方案。軟體介面與操作習慣都和 Google 相簿相差不遠。目前被許多人視為 Google Photos 的最佳替代選擇。而且使用者除了使用網頁管理相片外,也可透過下載行動裝置的 APP 來管理相片影片。

Immich 系統架設目前支援多種方式,我選擇使用 Docker。
建置步驟如下:
- 建立 docker目標資料夾,並切換到該資料夾
- 下載官方 docker-compose.yml
- 下載範例環境變數檔
- 編輯 .env 檔案
- 編輯 docker.compose.yaml 檔案
- 啟動 docker
- 完成初始化
mkdir /usr/local/www/docker-site/immich-app;
cd /usr/local/www/docker-site/immich-app
wget 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
# 照片與影片儲存位置(建議用絕對路徑,並確保有足夠空間)
UPLOAD_LOCATION=/mnt/your-drive/immich/library
# 資料庫儲存位置(⚠️ 必須是本地 SSD,不可放在 NAS)
DB_DATA_LOCATION=/mnt/your-ssd/immich/postgres
# 設定時區(台灣請設 Asia/Taipei)
TZ=Asia/Taipei
# Immich 版本,建議固定為 v3 或指定版本號
IMMICH_VERSION=v3
# 資料庫密碼(請改成隨機強密碼,只能用 A-Z、a-z、0-9,不能有特殊符號或空格)
DB_PASSWORD=YourStrongPassword123
# 以下通常不用改
DB_USERNAME=postgres
DB_DATABASE_NAME=immich
# 讓 Immich 知道它運行在反向代理後面
#IMMICH_TRUSTED_PROXIES=192.168.1.0/24,10.0.0.0/8
IMMICH_TRUSTED_PROXIES=127.0.0.1
##沒設 TRUSTED_PROXIES:任何人說「我是幫別人傳話的」,警衛都相信,容易被騙(IP 偽造)
##設了 TRUSTED_PROXIES:警衛只相信「這幾個人」傳來的話,而且會去讀他們附帶的「真正訪客名單」
name: immich
services:
immich-server:
container_name: immich_server
image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release}
## 取消註解可啟用硬體加速影片轉碼,支援 nvenc(NVIDIA)、quicksync(Intel)、rkmpp(Rockchip)、vaapi(AMD/Intel)等。
# extends:
# file: hwaccel.transcoding.yml
# service: cpu # set to one of [nvenc, quicksync, rkmpp, vaapi, vaapi-wsl] for accelerated transcoding
volumes:
# Do not edit the next line. If you want to change the media storage location on your system, edit the value of UPLOAD_LOCATION in the .env file
- ${UPLOAD_LOCATION}:/data
- /etc/localtime:/etc/localtime:ro
env_file:
- .env
## 對內對外皆是跑 2283 埠
ports:
- '2283:2283'
depends_on:
- redis
- database
restart: always
healthcheck:
disable: false
## AI 模型服務,這是負責人臉辨識、CLIP 圖片搜尋、OCR 文字辨識的獨立服務。
immich-machine-learning:
container_name: immich_machine_learning
# For hardware acceleration, add one of -[armnn, cuda, rocm, openvino, rknn] to the image tag.
# Example tag: ${IMMICH_VERSION:-release}-cuda
image: ghcr.io/immich-app/immich-machine-learning:${IMMICH_VERSION:-release}
# extends: # uncomment this section for hardware acceleration - see https://docs.immich.app/features/ml-hardware-acceleration
# file: hwaccel.ml.yml
# service: cpu # set to one of [armnn, cuda, rocm, openvino, openvino-wsl, rknn] for accelerated inference - use the -wsl version for WSL2 where applicable
volumes:
- model-cache:/cache
env_file:
- .env
restart: always
healthcheck:
disable: false
## — 快取資料庫
redis:
container_name: immich_redis
image: docker.io/valkey/valkey:9@sha256:8e8d64b405ce18f41b8e5ee20aa4687a8ed0022d1298f2ce31cdcf3a76e09411
healthcheck:
test: redis-cli ping || exit 1
restart: always
## PostgresSQL 資料庫
database:
container_name: immich_postgres
image: ghcr.io/immich-app/postgres:14-vectorchord0.4.3-pgvectors0.2.0@sha256:bcf63357191b76a916ae5eb93464d65c07511da41e3bf7a8416db519b40b1c23
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
POSTGRES_INITDB_ARGS: '--data-checksums'
# Uncomment the DB_STORAGE_TYPE: 'HDD' var if your database isn't stored on SSDs
# DB_STORAGE_TYPE: 'HDD'
volumes:
# Do not edit the next line. If you want to change the database storage location on your system, edit the value of DB_DATA_LOCATION in the .env file
- ${DB_DATA_LOCATION}:/var/lib/postgresql/data
shm_size: 128mb
restart: always
healthcheck:
disable: false
volumes:
model-cache:
docker compose up -d
若想要停止此服務:
docker compose down
開啟瀏覽器,訪問 http://<你的伺服器IP>:2283
首次登入,第一個建立的便是 管理員帳號
登入後即可開始使用
網站轉址設置
雖然網頁相簿服務已設置完成,但由於提供Immich網路相簿系統的 Web Server (Apache2) 對外僅提供 443 埠通道,所以此服務必須要透過轉址,才能正常提供服務。
- 先啟用必須模組
- 建立 VirtualHost 設定檔
- 啟用與測試
sudo a2enmod proxy
sudo a2enmod proxy_http
# WebSocket 支援(即時通知需要)
sudo a2enmod proxy_wstunnel
# 若使用 HTTPS
sudo a2enmod ssl
# 標頭處理
sudo a2enmod headers
sudo systemctl restart apache2
建立與編修 /etc/apache2/sites-available/immich.conf
ServerName photos.yourdomain.com
# 強制轉 HTTPS(建議)
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}$1 [R=301,L]
ServerName photos.yourdomain.com
# SSL 憑證(Let's Encrypt 或自簽)
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/photos.yourdomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/photos.yourdomain.com/privkey.pem
# 安全標頭
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
# 反向代理到 Immich
ProxyPreserveHost On
ProxyPass / http://localhost:2283/
ProxyPassReverse / http://localhost:2283/
# WebSocket 支援(即時上傳進度、通知等)
RewriteEngine On
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteCond %{HTTP:Connection} upgrade [NC]
RewriteRule ^/?(.*) "ws://localhost:2283/$1" [P,L]
# 日誌
ErrorLog ${APACHE_LOG_DIR}/immich-error.log
CustomLog ${APACHE_LOG_DIR}/immich-access.log combined
# 其實只是 sudo ln -s /etc/apache2/sites-available/immich.conf /etc/apache2/sites-enabled/immich.conf
sudo a2ensite immich.conf
# 確認語法正確
sudo apache2ctl configtest
sudo systemctl reload apache2
匯入 Goole Drive 和 Google 相簿相片
若想將已存放在 Google 相簿 或 Google Drive 的相片匯入 Immich 網路相簿裡,不管是何者,整個歷程來說,會分成「匯出舊相片」與「匯入新相片」兩個動作。
- 匯出舊相片
- 下載相片批次上傳工具:immich-go
- 取得 immich 的 api-key
- 匯入 Google 相簿
- 匯入 Google Drive 的相片
- 如果照片很多(幾萬張以上),建議加上這些參數避免伺服器過載:
- –concurrent-tasks=4,同時上傳 4 個檔案,降低伺服器負擔
- –pause-immich-jobs=true,暫停 Immich 背景工作(縮圖、人臉辨識),匯入完再自動恢復
- –on-errors=continue,遇到錯誤繼續,不中斷整批匯入
- –session-tag,為這次匯入加上標籤,方便日後管理
若是 Google 相簿,可以利用Google takeout工具來匯出,可參看這一篇紀錄:利用 Google takeout 打包備份資料
若是 Google Drive 的相片,就以相片資料夾為單位進行下載,這些資料夾內相片會先進行壓縮,然後才會被下載。
以上兩種方式,下載回來的資料皆是 zip 壓縮檔,不必解開。
# 下載最新版(以 Linux amd64 為例)
wget https://github.com/simulot/immich-go/releases/latest/download/immich-go_Linux_x86_64.tar.gz
#解壓縮
tar -xzf immich-go_Linux_x86_64.tar.gz
#賦予檔案可執行屬性
chmod +x immich-go
登入Immich 網頁版後,點選右上角頭像 –> Account Settings –>左側選 API Keys → New API Key
複製產生的金鑰,然後存起來。
./immich-go upload from-google-photos \
--server=http://localhost:2283 \
--api-key=你的API金鑰 \
--manage-raw-jpeg=StackCoverRaw \
--manage-burst=Stack \
/path/to/takeout-001.zip \
/path/to/takeout-002.zip \
/path/to/takeout-003.zip
/path/to/takeout-*.zip
這個方法會完整保留:
✅ Google Photos 相簿名稱
✅ 收藏(Favorites)
✅ 拍攝日期與時間
✅ GPS 地理位置
✅ 照片描述
./immich-go upload from-folder \
--server=http://localhost:2283 \
--api-key=你的API金鑰 \
--folder-as-album=FOLDER ##會把每個子資料夾變成 Immich 的相簿 \
/path/to/下載的照片資料夾-001.zip \
/path/to/下載的照片資料夾-002.zip \
/path/to/下載的照片資料夾-003.zip \
/path/to/下載的照片資料夾-004.zip \
code> ./immich-go upload from-google-photos \ --server=http://localhost:2283 \ --api-key=你的API金鑰 \ --concurrent-tasks=4 \ --client-timeout=60m \ --pause-immich-jobs=true \ --on-errors=continue \ --session-tag \ /path/to/takeout-*.zip
參數說明:
備份與復原
資料庫備份,有兩種方法:
docker exec -t immich_postgres pg_dumpall -c -U postgres > immich_db_$(date +%Y%m%d).sql docker exec immich_postgres pg_dumpall -c -U postgres > /backup/immich/db/immich_$(date +\%Y\%m\%d).sql 資料庫復原,兩種作法
cat /backup/immich/db/immich_20260830.sql | docker exec -i immich_postgres psql -U postgres # 把備份檔複製進容器 # 進入容器執行復原 postgresql 資料庫觀念小技巧:
docker cp /backup/immich/db/immich_20260830.sql immich_postgres:/tmp/backup.sql
docker exec -i immich_postgres psql -U postgres -f /tmp/backup.sql
1. 備份 = pg_dumpall 匯出 SQL
2. 復原 = psql 讀入 SQL


