immich Docker Compose(開發者如何使用)
Immich Docker 是 Immich 設置的一部分,這是一種開源、自我託管的照片和影片備份解決方案,運行在 Docker 容器中。 Docker 是一個輕量級並廣泛採用的平台,用於開發、分發和運行應用程式,適用於實體和虛擬化伺服器。 由於 Docker 的存在,Immich 可以輕鬆安裝在大多數系統上,且無需繁瑣的配置,也不會有依賴性相關的困擾。 這種容器化的方法使得管理 Immich 更容易,讓使用者可以安全地儲存、備份和管理媒體文件。
此外,Docker 確保在不同的環境中保持一致性,使使用者可以輕鬆地移動或擴展其 Immich 實例,幾乎不會遇到麻煩。 這意味著任何希望自我託管他的媒體備份解決方案的人,使用 Docker 會變得最有效率且無縫。
Immich 的功能
Immich Docker 提供了多個開箱即用的功能,使得部署和管理 Immich 的照片和影片備份解決方案更加簡單。 這反過來使得那些將自我託管其媒體文件的人更容易且更有效地做到這一點。 Immich Docker 的主要功能之一包括以下內容:
易於部署: Immich Docker 提供了標準的 Docker 映像,使得部署變得簡單。 另外,它讓使用者遠離依賴套件和複雜配置; 因此,使用者可以立即部署 Immich。
跨平台: 每個 Docker 容器確保裝置可以在安裝了 Docker 的 Linux、macOS 和 Windows 操作系統的多數系統上運行。 這使得該專案在不同環境中具有高度的可移植性。
隔離: 此外,在 Docker 容器中運行的 Immich 服務將與主機上的其他應用程式和服務隔離。 這將減少衝突、相容性問題,並確保 Immich 的操作環境更加穩定。
通常來說,擴展性非常簡單,尤其是對於那些涉及大量媒體資料的 Immich Docker 使用者。 由於 Docker 本身具有可擴展性,升級或增加資源實際上非常容易。
安全性: 原因是 Docker 容器引入了一層沙箱,與底層系統分隔開,提供了額外的安全性。 此外,Immich 的自我託管提供了允許使用者完全控制其資料和資料庫儲存位置的可能性,從而提高隱私和安全。
自動更新: 容器相對輕量級,易於更新且易於維護; 因此,Docker 使用者可以輕鬆切換到包含最新安全補丁的新功能,幾乎沒有或完全沒有干擾。
備份和恢復: Immich Docker 在備份媒體時提供了一個事實來源,讓使用者恢復照片和影片。 Docker 確保所有部署都擁有相同的資料。
可定制化: Immich 是自我託管的,因此使用者可以根據其需求進行修改,以更有效地整合其他服務和規模選項。
社群支持: 這是一個開源項目; 因此,社群為其使用者提供持續的改進、bug 修復和支持。
安裝 Immich Docker
先決條件
- 在您的系統上安裝 Docker 和 Docker Compose。
- 確保您的機器擁有足夠的資源:推薦 4GB 或更多 RAM。
複製 Immich 儲存庫
從 GitHub 下載 docker-compose 文件。
git clone https://github.com/immich-app/immich.git
cd immichgit clone https://github.com/immich-app/immich.git
cd immich配置環境變數
要更改它,請製作範例環境文件和 docker-compose.yml 文件的副本:
cp .env.example .envcp .env.example .env打開 .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
# To set a timezone, uncomment the next line and change Etc/UTC to a TZ identifier from this list: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones#List
# TZ=Etc/UTC
# The Immich version to use. You can pin this to a specific version like "v1.71.0"
IMMICH_VERSION=release
# Connection secret for postgres. You should change it to a random password
# Please use only the characters `A-Za-z0-9`, without special characters or spaces
DB_PASSWORD=postgres
# The values below this line do not need to be changed
###################################################################################
DB_USERNAME=postgres
DB_DATABASE_NAME=postgres啟動 Immich
使用 Docker Compose 啟動 Immich 伺服器:
docker-compose up -ddocker-compose up -d
此命令下載所有需要的映像並啟動必要的容器:
- 後端
- 前端
- 資料庫(PostgreSQL)
- Redis(用於快取)
- 機器學習模型(如面部識別等功能)

在瀏覽器中存取 Immich
所有文件下載完畢後,確保刷新環境。 容器運行後,打開瀏覽器並輸入下面的 URL。
http://localhost:2283如果您在 .env 文件中更改了端口,請將 2283 替換為指定的端口。
建立或登錄 Immich 帳戶
第一次使用:首次存取 Immich URL 時,將顯示 Web UI。

您將被要求建立管理員帳戶。

填寫所需的資訊,Immich 將引導您完成設置。

在 Web 介面中設置 Immich
- 設置: 通過管理員儀表板存取 Immich 的詳細設置。
- 上傳媒體: 現在上傳一些照片/影片以進行測試。
- 探索功能: 享受其他功能,例如面部識別、物件標記等。

設置完成後,您將能夠直接從瀏覽器存取 Immich,並開始管理您的照片和影片庫。
T>## 什麼是IronSecureDoc?
IronSecureDoc 是一種高級文件管理和安全工具,擁有強大的加密、高級 PDF 操作和數位簽章功能。 它為公司和開發人員提供了文件的機密性和完整性,並允許流暢的存取,因此簡化了 PDF 文件的處理。 在其功能允許開發人員程式化地建立、上傳、操控和保護 PDF 文件和文件的情況下,它也可稱為一個進階的 PDF API。

除此之外,IronPDF 是一個 PDF API,允許從任何資料輸入建立 PDF,並使用參數如文字、圖像和元資料新增和編輯內容。 這包括合併多個 PDF 組合文件、分割文件,甚至標註評論、突出顯示或浮水印。
其安全功能包括密碼保護、AES 加密和基於證書的存取控制,這些都可保護所有敏感資訊和資料。 此外,它還允許數位簽章以驗證文件和不可撤銷性,這是金融、醫療和法律等行業中非常重要的功能。 審計追蹤功能可讓它保持對文件進行的所有活動的追蹤,以便更好地合規性和問責性。
T>### 安裝和運行IronSecureDoc
通過在命令提示符或打開的終端窗口運行此命令,從下方儲存庫中拉取 IronSecureDoc 的 Docker 映像。
docker pull ironsoftwareofficial/ironsecuredocdocker pull ironsoftwareofficial/ironsecuredoc
使用另一個命令啟動 IronSecureDoc,即運行中的容器。
docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latestdocker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latestT>上面的Docker run命令將會啟動一個IronSecureDoc的容器實例。
從 Immich 下載簽章並新增已簽署的 PDF 文件
IronSecureDoc 中的 REST API 是一個現代的 Web 介面,使開發人員可以安全地與該軟體的文件管理和 PDF 處理功能進行互動。 利用 RESTful 原則,此API 允許使用者輕鬆理解和標準化將 IronSecureDoc 功能整合到其自定義應用程式中,不論使用的技術堆棧。

從 Immich 下載圖像

下面是一個上傳到 Immich 的範例簽章文件。
using System;
using System.Net.Http;
using System.Threading.Tasks;
class ImmichIntegration
{
private static readonly HttpClient client = new HttpClient();
public async Task<string> GetImageFromImmich(string imageId, string immichBaseUrl, string apiKey)
{
// Add authorization header
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
// Make a GET request to the Immich server
var response = await client.GetAsync($"{immichBaseUrl}/api/media/{imageId}");
response.EnsureSuccessStatusCode();
// Read and return the response data
var responseData = await response.Content.ReadAsStringAsync();
Console.WriteLine("Image data retrieved successfully!");
return responseData; // Contains image metadata or downloadable URL
}
}using System;
using System.Net.Http;
using System.Threading.Tasks;
class ImmichIntegration
{
private static readonly HttpClient client = new HttpClient();
public async Task<string> GetImageFromImmich(string imageId, string immichBaseUrl, string apiKey)
{
// Add authorization header
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}");
// Make a GET request to the Immich server
var response = await client.GetAsync($"{immichBaseUrl}/api/media/{imageId}");
response.EnsureSuccessStatusCode();
// Read and return the response data
var responseData = await response.Content.ReadAsStringAsync();
Console.WriteLine("Image data retrieved successfully!");
return responseData; // Contains image metadata or downloadable URL
}
}Imports System
Imports System.Net.Http
Imports System.Threading.Tasks
Friend Class ImmichIntegration
Private Shared ReadOnly client As New HttpClient()
Public Async Function GetImageFromImmich(ByVal imageId As String, ByVal immichBaseUrl As String, ByVal apiKey As String) As Task(Of String)
' Add authorization header
client.DefaultRequestHeaders.Add("Authorization", $"Bearer {apiKey}")
' Make a GET request to the Immich server
Dim response = Await client.GetAsync($"{immichBaseUrl}/api/media/{imageId}")
response.EnsureSuccessStatusCode()
' Read and return the response data
Dim responseData = Await response.Content.ReadAsStringAsync()
Console.WriteLine("Image data retrieved successfully!")
Return responseData ' Contains image metadata or downloadable URL
End Function
End Class程式碼允許我們從 Immich 伺服器下載圖像。 請確保從 Immich 伺服器生成一個 API 金鑰。
將圖像上傳到 IronSecureDoc
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
class IronSecureDocIntegration
{
private static readonly HttpClient client = new HttpClient();
public async Task UploadImageToIronSecureDoc(string imagePath)
{
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:8080/v1/document-services/pdfs/sign?sign_specific_page=0&signature_image_x=100&signature_image_y=150&signature_image_w=300&signature_image_h=400&certificate_password=********&certificate_permissions=1");
// Set headers to simulate a browser request
request.Headers.Add("sec-ch-ua-platform", "\"Windows\"");
request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36");
request.Headers.Add("accept", "*/*");
request.Headers.Add("sec-ch-ua", "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"");
request.Headers.Add("sec-ch-ua-mobile", "?0");
request.Headers.Add("Sec-Fetch-Site", "same-origin");
request.Headers.Add("Sec-Fetch-Mode", "cors");
request.Headers.Add("Sec-Fetch-Dest", "empty");
request.Headers.Add("host", "localhost");
// Create and add image and certificate files to the request content
var content = new MultipartFormDataContent();
content.Add(new StreamContent(File.OpenRead(imagePath)), "signature_image_file", Path.GetFileName(imagePath));
content.Add(new StreamContent(File.OpenRead("IronsecureDoc.pfx")), "certificate_file", "IronsecureDoc.pfx");
content.Add(new StreamContent(File.OpenRead("Input.pdf")), "pdf_file", "Input.pdf");
request.Content = content;
// Send the request and ensure success
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
// Output the result of the PDF signing
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
class IronSecureDocIntegration
{
private static readonly HttpClient client = new HttpClient();
public async Task UploadImageToIronSecureDoc(string imagePath)
{
var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:8080/v1/document-services/pdfs/sign?sign_specific_page=0&signature_image_x=100&signature_image_y=150&signature_image_w=300&signature_image_h=400&certificate_password=********&certificate_permissions=1");
// Set headers to simulate a browser request
request.Headers.Add("sec-ch-ua-platform", "\"Windows\"");
request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36");
request.Headers.Add("accept", "*/*");
request.Headers.Add("sec-ch-ua", "\"Google Chrome\";v=\"131\", \"Chromium\";v=\"131\", \"Not_A Brand\";v=\"24\"");
request.Headers.Add("sec-ch-ua-mobile", "?0");
request.Headers.Add("Sec-Fetch-Site", "same-origin");
request.Headers.Add("Sec-Fetch-Mode", "cors");
request.Headers.Add("Sec-Fetch-Dest", "empty");
request.Headers.Add("host", "localhost");
// Create and add image and certificate files to the request content
var content = new MultipartFormDataContent();
content.Add(new StreamContent(File.OpenRead(imagePath)), "signature_image_file", Path.GetFileName(imagePath));
content.Add(new StreamContent(File.OpenRead("IronsecureDoc.pfx")), "certificate_file", "IronsecureDoc.pfx");
content.Add(new StreamContent(File.OpenRead("Input.pdf")), "pdf_file", "Input.pdf");
request.Content = content;
// Send the request and ensure success
var response = await client.SendAsync(request);
response.EnsureSuccessStatusCode();
// Output the result of the PDF signing
Console.WriteLine(await response.Content.ReadAsStringAsync());
}
}Imports System.IO
Imports System.Net.Http
Imports System.Threading.Tasks
Friend Class IronSecureDocIntegration
Private Shared ReadOnly client As New HttpClient()
Public Async Function UploadImageToIronSecureDoc(ByVal imagePath As String) As Task
Dim request = New HttpRequestMessage(HttpMethod.Post, "http://localhost:8080/v1/document-services/pdfs/sign?sign_specific_page=0&signature_image_x=100&signature_image_y=150&signature_image_w=300&signature_image_h=400&certificate_password=********&certificate_permissions=1")
' Set headers to simulate a browser request
request.Headers.Add("sec-ch-ua-platform", """Windows""")
request.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36")
request.Headers.Add("accept", "*/*")
request.Headers.Add("sec-ch-ua", """Google Chrome"";v=""131"", ""Chromium"";v=""131"", ""Not_A Brand"";v=""24""")
request.Headers.Add("sec-ch-ua-mobile", "?0")
request.Headers.Add("Sec-Fetch-Site", "same-origin")
request.Headers.Add("Sec-Fetch-Mode", "cors")
request.Headers.Add("Sec-Fetch-Dest", "empty")
request.Headers.Add("host", "localhost")
' Create and add image and certificate files to the request content
Dim content = New MultipartFormDataContent()
content.Add(New StreamContent(File.OpenRead(imagePath)), "signature_image_file", Path.GetFileName(imagePath))
content.Add(New StreamContent(File.OpenRead("IronsecureDoc.pfx")), "certificate_file", "IronsecureDoc.pfx")
content.Add(New StreamContent(File.OpenRead("Input.pdf")), "pdf_file", "Input.pdf")
request.Content = content
' Send the request and ensure success
Dim response = Await client.SendAsync(request)
response.EnsureSuccessStatusCode()
' Output the result of the PDF signing
Console.WriteLine(Await response.Content.ReadAsStringAsync())
End Function
End Class呼叫 Immich 和 IronSecureDoc
下面的程式碼將幫助我們進行整合。
using System.Threading.Tasks;
class Integration
{
public async Task IntegrateImmichWithIronSecureDoc(string immichImageId, string immichBaseUrl, string immichApiKey, string imagePath)
{
var immich = new ImmichIntegration();
var ironSecureDoc = new IronSecureDocIntegration();
// Step 1: Fetch image metadata or download from Immich
string imageData = await immich.GetImageFromImmich(immichImageId, immichBaseUrl, immichApiKey);
// Step 2: Optionally download the image locally using imageData URL (not shown here)
// Assume imagePath is the downloaded image file path
// Step 3: Upload the image to IronSecureDoc
await ironSecureDoc.UploadImageToIronSecureDoc(imagePath);
}
}using System.Threading.Tasks;
class Integration
{
public async Task IntegrateImmichWithIronSecureDoc(string immichImageId, string immichBaseUrl, string immichApiKey, string imagePath)
{
var immich = new ImmichIntegration();
var ironSecureDoc = new IronSecureDocIntegration();
// Step 1: Fetch image metadata or download from Immich
string imageData = await immich.GetImageFromImmich(immichImageId, immichBaseUrl, immichApiKey);
// Step 2: Optionally download the image locally using imageData URL (not shown here)
// Assume imagePath is the downloaded image file path
// Step 3: Upload the image to IronSecureDoc
await ironSecureDoc.UploadImageToIronSecureDoc(imagePath);
}
}Imports System.Threading.Tasks
Friend Class Integration
Public Async Function IntegrateImmichWithIronSecureDoc(ByVal immichImageId As String, ByVal immichBaseUrl As String, ByVal immichApiKey As String, ByVal imagePath As String) As Task
Dim immich = New ImmichIntegration()
Dim ironSecureDoc = New IronSecureDocIntegration()
' Step 1: Fetch image metadata or download from Immich
Dim imageData As String = Await immich.GetImageFromImmich(immichImageId, immichBaseUrl, immichApiKey)
' Step 2: Optionally download the image locally using imageData URL (not shown here)
' Assume imagePath is the downloaded image file path
' Step 3: Upload the image to IronSecureDoc
Await ironSecureDoc.UploadImageToIronSecureDoc(imagePath)
End Function
End Class使用 IronSecureDoc 的 API 附加照片和應用數位簽章。 在 IronSecureDocIntegration 類中新增必要的 API 呼叫以完成文件。 下面是從 IronSecureDoc 生成的範例 PDF,在新增簽章後生成的。

結論
雖然 Immich 和 IronSecureDoc 都在回應特定需求方面做得很好,但它們最適合不同的使用案例。Immich 提供了一個擁有豐富功能的自我託管照片和影片管理,如面部識別、物體檢測和多媒體文件的流暢組織。 它非常適合那些希望根據自己的需求定制解決方案的個人或小型媒體儲存管理。
IronSecureDoc 是一個適用於整個組織的安全文件和簽署解決方案,結合了先進加密的絕妙好處和簡單的工作流程整合,以便實現安全性、擴展性和專業級文件處理的結合。
可靠且合規:由於它提供了完整的審計能力和強大的安全性,因此它是可靠且合規的。 使用 IronSecureDoc REST API,Web、移動和企業系統的開發人員現在可以輕鬆將安全的列印和高效的 PDF 格式及處理整合到其應用程式中。 要了解有關 IronSecureDoc 授權的更多資訊,請查看授權頁面。 要了解有關 Iron Software 的產品資訊,請存取Iron Suite 頁面。
常見問題
Docker如何簡化Immich的部署?
Docker通過提供一個容器化的環境簡化了Immich的部署,允許在各種平台上進行簡單安裝和管理,無需複雜的配置或相依關係問題。
使用Immich進行媒體管理的好處是什麼?
Immich提供了自我託管、豐富的功能集(包括面部識別和物件標記)以及高度的客製化,允許更多的資料管理和儲存控制。
Docker如何提升Immich的安全性?
Docker通過將應用程式隔離在容器中提高了Immich的安全性,這樣可減少系統漏洞的風險,確保環境的一致性,從而保護媒體文件。
使用Docker Compose安裝Immich涉及哪些步驟?
要使用Docker Compose安裝Immich,您需要克隆Immich儲存庫、配置環境變數,並執行Docker Compose命令以啟動Immich伺服器。
IronSecureDoc如何利用Docker進行文件管理?
IronSecureDoc使用Docker促進無縫的部署和整合,允許在容器化設置內進行高階文件管理和安全性功能,如PDF操作和數位簽名。
Immich和IronSecureDoc可以整合以增強功能嗎?
可以,Immich可以與IronSecureDoc整合,以從Immich下載圖像並使用REST APIs進行數位簽名等操作,增強媒體和文件管理的整體功能。
IronSecureDoc為文件安全提供了哪些功能?
IronSecureDoc提供了強大的加密、密碼保護和先進的PDF操作功能,確保文件的機密性和完整性。
社群支援在使用Immich中扮演什麼角色?
社群支援在使用Immich中扮演著至關重要的角色,提供使用者資源、故障排除幫助和更新,提高這套自我託管媒體備份解決方案的可靠性。
開發者使用Immich和IronSecureDoc能有什麼好處?
開發者可以通過利用Immich的媒體管理能力和IronSecureDoc的文件安全特性,創造出一個全面的資料處理解決方案,從中受益。
Immich和IronSecureDoc之間的主要區別是什麼?
主要區別在於Immich專注於個人使用的媒體管理和儲存,而IronSecureDoc則提供先進的文件安全和管理功能,適合組織工作流程。








