跳過到頁腳內容
使用 IRONSECUREDOC

immich Docker Compose(對開發人員而言如何運作)

Immich Docker 是將 Immich(一個開源的、自架的照片和視訊備份解決方案)部署在 Docker 容器中的版本。 Docker 是一個輕量級且廣泛採用的平台,用於開發、分發和運行實體伺服器和虛擬伺服器上的應用程式。 由於 Docker,Immich 可以輕鬆安裝在大多數系統上,無需複雜的配置和與依賴項相關的麻煩即可運行。 Immich 的這種容器化管理方式使其更加便捷,使用戶能夠安全地儲存、備份和管理媒體檔案。

此外,Docker 確保了不同環境之間的一致性,因此使用者可以輕鬆地遷移或擴展他們的 Immich 實例,而無需太多麻煩。 這意味著 Immich Docker 將為任何希望使用 Docker 自行託管媒體備份解決方案的人提供最有效、最無縫的方式。

伊米奇的特徵

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 是自架的,因此用戶可以根據自己的需求進行修改,以便更有效地與其他服務整合和擴展。

社群支持:這是一個開源專案; 因此,社群會持續改進、修復漏洞並為用戶提供支援。

安裝 Immich Docker

先決條件

  • 在您的系統上安裝 Docker 和 Docker Compose。
  • 確保您的機器有足夠的資源:建議使用 4GB 或更多記憶體。

克隆 Immich 儲存庫

從 GitHub 下載 docker-compose 檔案。

git clone https://github.com/immich-app/immich.git
cd immich
git clone https://github.com/immich-app/immich.git
cd immich
SHELL

配置環境變數

若要進行修改,請複製範例環境檔案和 docker-compose.yml 檔案:

cp .env.example .env
cp .env.example .env
SHELL

開啟.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 -d
docker-compose up -d
SHELL

immich Docker Compose(開發者使用指南):圖 2 - 運行 Immich 伺服器

此命令會拉取所有必需的鏡像並啟動必要的容器:

  • 後端
  • 前端
  • 資料庫(PostgreSQL)
  • Redis(用於快取)
  • 機器學習模型(用於人臉辨識等功能)

! immich Docker Compose(開發者使用方法):圖 3 - Docker Compose 指令

透過瀏覽器存取 Immich

文件全部下載完畢後,請務必刷新環境。 容器運行後,打開瀏覽器並輸入以下網址。

http://localhost:2283

如果您已在.env檔案中更改了端口,請將2283替換為指定的端口。

建立或登入 Immich 帳戶

首次使用:當您首次造訪 Immich URL 時,將顯示 Web UI。

! immich Docker Compose(開發者使用方法):圖 4 - Immich

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

! immich Docker Compose(開發者使用指南):圖 5 - 管理員帳戶

填寫所需信息,Immich 將指導您完成設定。

! immich Docker Compose(開發者使用指南):圖 6 - 設置

在 Web 介面中設定 Immich

*設定:*透過管理面板存取 Immich 的詳細設定。 上傳媒體:**現在上傳一些照片/影片進行測試。 *探索功能:享受人臉偵測、物件標記等其他功能。

! immich Docker Compose(開發者使用指南):圖 7 - Web 介面

設定完成後,您就可以透過瀏覽器存取 Immich,並開始管理您的照片和影片庫。

IronSecureDoc是什麼?

IronSecureDoc是一款高級文件管理和安全實用程序,具有強大的加密、高級 PDF 處理和數位簽章功能。 它為公司和開發人員提供文件的保密性和完整性,以及流暢的訪問,從而簡化了 PDF 文件的處理。 如果其功能允許開發人員以程式設計方式建立、上傳、操作和保護 PDF 文件和文檔,則它也可以稱為激進的 PDF API。

! immich Docker Compose(開發者使用指南):圖 8 - IronSecureDoc:PDF 安全與合規伺服器

除此之外,IronPDF 也是一個 PDF API,允許從任何資料輸入建立 PDF,並新增和編輯包含文字、圖像和元資料等參數的內容。 這包括將多個 PDF 文件合併成一個文件、分割文檔,甚至添加註釋、高亮顯示或浮水印等功能。

其安全功能包括密碼保護、AES 加密和基於憑證的存取控制,可保護所有敏感資訊和資料。 除此之外,它還支援數位簽章來驗證文件的真實性,並具有不可否認性,這在金融、醫療和法律等行業中是一項非常重要的功能。 審計追蹤功能可以追蹤對文件執行的所有活動,從而更好地實現合規性和問責制。

安裝並執行 IronSecureDoc

從下面的儲存庫中拉取 IronSecureDoc 的 Docker 映像,方法是在命令提示字元或開啟的終端機視窗中執行以下命令。

docker pull ironsoftwareofficial/ironsecuredoc
docker pull ironsoftwareofficial/ironsecuredoc
SHELL

! immich Docker Compose(開發者使用方法):圖 9 - IronSecureDoc 的 Docker 映像

使用另一個指令啟動 IronSecureDoc,這是一個運作容器。

docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latest
docker container run --rm -p 8080:8080 -e IronSecureDoc_LicenseKey=<IRONSECUREDOC_LICENSE_KEY> -e ENVIRONMENT=Development -e HTTP_PORTS=8080 ironsoftwareofficial/ironsecuredoc:latest
SHELL

上面的 Docker 運行命令將啟動 IronSecureDoc 的容器實例。

從 Immich 下載簽名並新增已簽署的 PDF 文檔

IronSecureDoc 中的 REST API 是一個現代化的 Web 介面,可讓開發人員安全地與軟體的文件管理和 PDF 處理功能互動。 該API採用 RESTful 原則,使用戶能夠輕鬆理解和標準化 IronSecureDoc 的功能整合到其自訂應用程式中,而無需考慮所使用的技術堆疊。

! immich Docker Compose(開發者使用指南):圖 10 - REST API

從 Immich 下載圖片

! immich Docker Compose(開發者使用方法):圖 11 - 映像

以下是上傳到 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
$vbLabelText   $csharpLabel

該程式碼允許我們從 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
$vbLabelText   $csharpLabel

致電 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
$vbLabelText   $csharpLabel

使用 IronSecureDoc 的 API 來附加照片並套用數位簽章。 在IronSecureDocIntegration類別中新增必要的 API 呼叫以完成文件。 以下是使用 IronSecureDoc 新增簽章後產生的範例 PDF。

! immich Docker Compose(開發者使用指南):圖 12 - 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 API 執行數位簽章等動作,強化媒體與文件管理的整體功能。

IronSecureDoc 在文件安全方面提供哪些功能?

IronSecureDoc 提供強大的加密、密碼保護和進階 PDF 操作等功能,可確保高度的文件機密性和完整性。

在使用 Immich 的過程中,社區支援扮演什麼角色?

社群支援在使用 Immich 的過程中扮演關鍵的角色,為使用者提供資源、疑難排解協助和更新,進而提升此自助式媒體備份解決方案的可靠性。

開發人員如何從同時使用 Immich 和 IronSecureDoc 中獲益?

開發人員可以從同時使用 Immich 和 IronSecureDoc 中獲益,利用 Immich 的媒體管理功能和 IronSecureDoc 的文件安全功能,創建一個全面的數據處理解決方案。

Immich 與 IronSecureDoc 的主要差異為何?

主要差異在於 Immich 著重於個人使用的媒體管理與儲存,而 IronSecureDoc 則提供進階的文件安全與管理功能,適合組織工作流程。

Curtis Chau
技術作家

Curtis Chau 擁有卡爾頓大學計算機科學學士學位,專注於前端開發,擅長於 Node.js、TypeScript、JavaScript 和 React。Curtis 熱衷於創建直觀且美觀的用戶界面,喜歡使用現代框架並打造結構良好、視覺吸引人的手冊。

除了開發之外,Curtis 對物聯網 (IoT) 有著濃厚的興趣,探索將硬體和軟體結合的創新方式。在閒暇時間,他喜愛遊戲並構建 Discord 機器人,結合科技與創意的樂趣。