韌館-LearnHouse

樹梅派Ubuntu 21.04安裝immich異常排除與使用設定

自從google相片不在提供無限空間上傳後,就開始在想要怎麼備份照片。我是沒特別愛拍人照,但我習慣用手機記錄我去過的地方。而那時候還沒出現這麼好用的軟體,我也繼續使用google提供的15G空間。如今發現了immich,他可以說是完完全全的滿足我要的需求。

其操作方式跟功能幾乎跟google相片差不多外,從某種角度,我還覺得還比google相片好用,就是它可以直接指定外部存放相片的路徑。可透過網頁瀏覽也可以透過app(AndroidiOS)。

有時間軸索引照片、頭像索引照片、地區索引照片,還有我最愛的從地圖直接看你在那裡有拍過照(不過要記得開啟手機的定位才會寫入經緯度到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囉!!

2024年10 月 posted by admin in 程式&軟體 and have No Comments

Place your comment

Please fill your data and comment below.
名稱:
信箱:
網站:
您的評論: