跳過到頁腳內容
使用 IRONSECUREDOC

immich Docker Compose(開發者如何工作)

Immich Docker is the setup of Immich, an open-source, self-hosted photo, and video backup solution inside a Docker container. Docker is a lightweight and widely adopted platform for developing, distributing, and running applications with both physical and virtualized servers. Thanks to Docker, Immich can be easily installed on most systems and be operational with no complex configuration and headaches related to dependencies. This containerized approach to managing Immich makes it easier, allowing users to store, back up, and manage their media files securely.

Besides, Docker ensures consistency across different environments, and thus, users can easily move or scale their Immich instance with minimal hassle. This means Immich Docker would present the most efficient and seamless ways anybody hoping to self-host his/her media backup solution would have done using Docker.

Features of Immich

Immich Docker installs several out-of-the-box features that make deploying and managing the Immich photo and video backup solution much easier. This, in return, makes it pretty appealing for those who will self-host their media files securely and effectively. Among the main features of Immich Docker are the following:

Easy to deploy: Immich Docker has provided standard Docker images, making deployment easy. Besides, it keeps users away from dependent packages and complicated configurations; thus, users can immediately deploy Immich.

Cross-platform: Each Docker container makes sure the device can be run on most systems with Docker on Linux, macOS, and Windows OS. That makes the project highly portable across different environments.

Isolation: Besides, Immich services running in the Docker container would be kept isolated from other applications and services on the host machine. This would reduce conflicts, compatibility issues, and would definitely make the operating environment much more stable for Immich.

Generally, scalability is very easy, most of all when a lot of volumes of media data are involved with deployment for Immich Docker users. Since Docker is inherently scalable, upgrading or increasing resources can be really quite easy.

Security: The reason is that Docker containers introduce a layer of sandboxing away from the underlying system, giving extra security. Besides this, Immich self-hosting offers the possibility of allowing users full control over their data, and database storage location thus heightening privacy and security.

Automated Updates: Containers are relatively lightweight, easy to update, and maintenance-friendly; thus, users of Docker easily switch to newer features with the latest security patches with very few or no disruptions at all.

Backup and Restore: Immich Docker creates one source of truth when it comes to backing up media so one can restore photos and videos. Docker makes sure that all deployments have the same data.

Customizable: Immich is self-hosted, so users can modify it as per their requirements for more effective integration with other services and scaling options.

Community Support: It's an open-source project; therefore, the community provides continuous improvement, bug fixing, and support to its users.

Install Immich Docker

Prerequisites

  • Install Docker and Docker Compose on your system.
  • Ensure your machine has enough resources: 4GB or more RAM is recommended.

Clone Immich Repository

Download the docker-compose file from GitHub.

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

Configure Environment Variables

To alter it, make a copy of the sample environment file and docker-compose.yml files:

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

Open the .env file and set up variables (such as port, storage location, and database credentials). In most configurations, the default settings are sufficient.

# 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

Launch Immich

Use Docker Compose to start the Immich server:

docker-compose up -d
docker-compose up -d
SHELL

immich Docker Compose (How it Works for Developers): Figure 2 - Run Immich Server

This command pulls all required images and starts the necessary containers:

  • Backend
  • Frontend
  • Database (PostgreSQL)
  • Redis (for caching)
  • Machine Learning models (for features like facial recognition)

immich Docker Compose (How it Works for Developers): Figure 3 - Docker Compose Command

Access Immich on Your Browser

When all the files are downloaded, make sure to refresh the environment. Once the containers are running, open the browser and enter the URL below.

http://localhost:2283

Replace 2283 with the specified port if you have altered the port in the .env file.

Create or Log in Immich account

First-time use: when you first access the Immich URL, it will display the web UI.

immich Docker Compose (How it Works for Developers): Figure 4 - Immich

You will be asked to create an admin account.

immich Docker Compose (How it Works for Developers): Figure 5 - Admin Account

Fill in the required information, and Immich will walk you through the setup.

immich Docker Compose (How it Works for Developers): Figure 6 - Setup

Set Up Immich in the Web Interface

  • Settings: Access Immich's detailed settings via the admin dashboard.
  • Upload Media: Now upload some photos/videos for testing.
  • Explore Features: Enjoy other features such as face detection, object tagging, and more.

immich Docker Compose (How it Works for Developers): Figure 7 - Web Interface

Once set up, you'll be able to access Immich right from your browser and get started with managing your photo and video library.

What is IronSecureDoc?

IronSecureDoc is an advanced utility for document management and security, boasting robust encryption, advanced PDF manipulation, and digital signing. It provides companies and developers with document confidentiality and integrity, along with smooth access and, therefore, simplifies the processing of PDF documents. It can also be called an aggressive PDF API in cases when its features allow developers to programmatically create, upload, manipulate, and secure PDF files and documents.

immich Docker Compose (How it Works for Developers): Figure 8 - IronSecureDoc: The PDF Security and Compliance Server

Other than that, IronPDF is a PDF API allowing the creation of PDFs from any data input, adding and editing content with parameters such as text, images, and metadata. This includes the facility of merging several PDFs to compose files, splitting documents, and even annotating comments, highlights, or watermarks.

Among its security features are password protection, AES encryption, and certificate-based access controls that secure all sensitive information and data. Besides this, it allows digital signing to authenticate documents and nonrepudiation, a very important feature in industries like financial, medical, and legal. The audit trail functionality allows it to keep track of all activities performed on the documents for better compliance and accountability.

Install and Run IronSecureDoc

Pull the Docker image of IronSecureDoc from the repository below by running this command at the Command Prompt or an open terminal window.

docker pull ironsoftwareofficial/ironsecuredoc
docker pull ironsoftwareofficial/ironsecuredoc
SHELL

immich Docker Compose (How it Works for Developers): Figure 9 - Docker Image of IronSecureDoc

Use another command to start IronSecureDoc, an operating container.

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

The Docker run command above will start a container instance of the IronSecureDoc.

Download the Signature from Immich and add the signed PDF document

The REST API in IronSecureDoc is a modern web interface that enables developers to interact safely with the document management and PDF processing features of the software. Using RESTful principles, this API allows users to easily understand and standardize the integration of the functionalities of IronSecureDoc into their custom applications regardless of the technology stack used.

immich Docker Compose (How it Works for Developers): Figure 10 - REST API

Download the image from Immich

immich Docker Compose (How it Works for Developers): Figure 11 - Image

Below is a sample signature file that is uploaded to the 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

The code allows us to download the image from the Immich server. Make sure to generate an API key from the Immich server.

Upload Image to 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

Calling Immich and IronSecureDoc

The code below will help us integrate it.

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

Use IronSecureDoc's API to attach photos and apply digital signatures. Add the necessary API call in the IronSecureDocIntegration class to complete the document. Below is the sample PDF generated from the IronSecureDoc after adding the signature.

immich Docker Compose (How it Works for Developers): Figure 12 - PDF Output

Conclusion

While both Immich and IronSecureDoc do a great job in responding to specific needs, they serve different use cases best. Immich does self-hosted, feature-rich photo, and video management well, such as facial recognition, object detection, and streamlined organization of multimedia files. It is ideal for personal or small-scale media storage location management where one wants a solution tailored exactly to their needs.

IronSecureDoc is an organization-wide secure document and signing solution that integrates the fantastic benefits of advanced encryption with the simplicity of integrating workflow to allow security, scalability, and professional-grade document handling to come together.

Reliable and Compliant: Since it offers complete audit capabilities with strong security, it is reliable and compliant. Using the IronSecureDoc REST API, developers of web, mobile, and corporate systems can now easily integrate secure printing and efficient PDF format and handling with their applications. To learn more about the licensing of IronSecureDoc, check the licensing page. To learn more about the offerings from Iron Software, visit the Iron Suite page.

常見問題解答

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 提供進階的文檔安全和管理功能,適合組織工作流程。

Curtis Chau
技術作家

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

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