自從google相片不在提供無限空間上傳後,就開始在想要怎麼備份照片。我是沒特別愛拍人照,但我習慣用手機記錄我去過的地方。而那時候還沒出現這麼好用的軟體,我也繼續使用google提供的15G空間。如今發現了immich,他可以說是完完全全的滿足我要的需求。
其操作方式跟功能幾乎跟google相片差不多外,從某種角度,我還覺得還比google相片好用,就是它可以直接指定外部存放相片的路徑。可透過網頁瀏覽也可以透過app(Android|iOS)。
有時間軸索引照片、頭像索引照片、地區索引照片,還有我最愛的從地圖直接看你在那裡有拍過照(不過要記得開啟手機的定位才會寫入經緯度到Exif)
透過官方的步驟我是安裝不起來,以下是我安裝過程遇到的問題與解法
1.前面步驟與官方一樣
建立新目錄放置所有immich的docker組態與immich環境設定
mkdir ./immich-app cd ./immich-app
下載docker的設定檔
wget -O docker-compose.yml https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
下載immich-app的設定檔
wget -O .env https://github.com/immich-app/immich/releases/latest/download/example.env
2. 重新命名example.env成.env
3. 改成docker-compose
官方是使用docker compose up -d來運行,但我的docker卻沒有compose參數
因此改用docker-compose來執行,以下是安裝方式
sudo apt-get update sudo apt install docker-compose
4. 安裝好後運行出現以下錯誤
docker-compose up -d ERROR: In file './docker-compose.yml', service 'name' must be a mapping not a string.
原來是版本的問題
docker-compose --version docker-compose version 1.25.0, build unknown
移除舊版本(如果有):
sudo rm /usr/local/bin/docker-compose
下載最新版本:
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
設置可執行權限:
sudo chmod +x /usr/local/bin/docker-compose
5. 再執行一次,還是出現以下錯誤
docker-compose up -d [+] Running 0/0 ⠋ Container immich_redis Creating 0.1s ⠋ Container immich_postgres Creating 0.1s ⠋ Container immich_machine_learning Creating 0.1s can't set healthcheck.start_interval as feature require Docker Engine v25 or later
這個錯誤提示是由於你的 Docker 引擎版本太舊,無法支持 healthcheck.start_interval 配置。start_interval 是在 Docker 引擎 1.29 版本之後引入的,而你的版本低於此版本
如果你暫時無法升級 Docker 引擎,你可以移除 start_interval 配置,Docker 仍然可以運行 healthcheck,但不會有 start_interval 的延遲設置。
從 docker-compose.yml 文件中移除或注釋掉 start_interval
這裡我稍微講一下docker-compose.yml和.env需要注意的地方
以下是docker-compose.yml的部分內容
services: immich-server: container_name: immich_server image: ghcr.io/immich-app/immich-server:${IMMICH_VERSION:-release} # 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}:/usr/src/app/upload - /etc/localtime:/etc/localtime:ro - /yourpath/photos:/yourpath/photos:ro env_file: - .env ports: - '2283:2283' depends_on: - redis - database restart: always healthcheck: disable: false
其中要有一個觀念就是,docker是一個容器,要跑的東西都會是在docker,所以會有mapping的關係
volumes:是設定你硬碟路徑,Immich提供很好用的直接掃描外部硬碟上的既有像片。
因此加入的- /yourpath/photos:/yourpath/photos:ro,左邊紅色的部分是主機上的實體路徑,右邊綠色的部分是掛載到docker容器裡的路徑,而且設定成ro唯讀。
同理ports:的設定抑是如此,- '2283:2283',左邊紅色的部分是主機上的實體port,因此如果你主機上2283 port已經被占用的話,可以考慮將紅色的地方改成其他port,而右邊綠色則是docker裡Immich的預設port,可以不用更改。
以下是.env的部分內容
# You can find documentation for all the supported env variables at https://immich.app/docs/install/environment-variables # The location where your uploaded files are stored UPLOAD_LOCATION=./library # The location where your database files are stored DB_DATA_LOCATION=./postgres
這個檔案原則上是不用做任何修改,主要是要注意UPLOAD_LOCATION=./library是你相片如果是透過上傳的方式,就會存放在這裡。包含掃描指定路徑照片所產生的thumbs也是。若怕預設的地方空間太小,可以另外指定到其他硬碟路徑。DB_DATA_LOCATION=./postgres則是Immich的使用者一些設定存放的地方,也會隨著你相片變多而增大,但原則上是不會太大,差不多就幾百MB左右。
最後如果要停用Immich只要到放置docker-compose.yml的目錄下docker-compose down指令即可。
[2024.10.29更新]使用 Apache 作為反向代理來為 Immich 配置 HTTPS
以前都是用google相片的空間來貼我blog的圖片或旅遊的照片。現在自然就要轉到Immich了,好在Immich也有提供一樣的功能,建立分享鏈結允許知道鏈結的人查看照片。
但這時如果是使用SSL憑證的連接方式,會出現如下錯誤
這時候你就要幫你的憑證,憑證申請方式請參閱-設定Apache VirtualHost加入Let's Encrypt SSL
以下是申請完後要做反向代理的apache conf設定
<VirtualHost *:80> ServerName your.domain.com.tw # 將所有 HTTP 請求重定向到 HTTPS RewriteEngine On RewriteCond %{HTTPS} off RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301] </VirtualHost> <VirtualHost *:443> ServerName your.domain.com.tw # 設定 SSL 證書路徑 SSLEngine on SSLCertificateFile /etc/letsencrypt/live/your.domain.com.tw/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/your.domain.com.tw/privkey.pem # 設定反向代理到 Immich 服務 ProxyPreserveHost On ProxyPass / http://localhost:2283/ ProxyPassReverse / http://localhost:2283/ </VirtualHost>
這樣就大功告成囉~之後連自己的相簿也不用在後面加port號,直接就用443 port就可以導到2283 port囉!!
Place your comment