跳至页脚内容
使用 IRONSECUREDOC

immich Docker Compose(开发者工具如何工作)

Immich Docker 是将 Immich 安装在 Docker 容器中的一种 开源、自托管的照片和视频备份解决方案。 Docker 是一个轻量级且被广泛采用的平台,用于在物理和虚拟服务器上开发、分发和运行应用程序。 得益于 Docker,Immich 可以轻松安装在大多数系统上,无需复杂配置,也无需担心与依赖项相关的问题。 这种容器化的 Immich 管理方法让用户更加轻松地安全存储、备份和管理媒体文件。

此外,Docker 可确保不同环境的一致性,因此用户可以轻松移动或扩展他们的 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 是自托管的,因此用户可以根据自己的要求进行修改,以便更有效地与其他服务集成并实现扩展选项。

社区支持: 这是一个开源项目; 因此,社区为其用户提供持续改进、错误修复和支持。

安装 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 处理功能进行交互。 使用 RESTful 原则,此 API 允许用户轻松理解并标准化 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提供高级的文档安全和管理功能,适用于组织工作流程。

Curtis Chau
技术作家

Curtis Chau 拥有卡尔顿大学的计算机科学学士学位,专注于前端开发,精通 Node.js、TypeScript、JavaScript 和 React。他热衷于打造直观且美观的用户界面,喜欢使用现代框架并创建结构良好、视觉吸引力强的手册。

除了开发之外,Curtis 对物联网 (IoT) 有浓厚的兴趣,探索将硬件和软件集成的新方法。在空闲时间,他喜欢玩游戏和构建 Discord 机器人,将他对技术的热爱与创造力相结合。