使用DockerCompose搭建Enclosed加密传输服务

Cover image for 使用DockerCompose搭建Enclosed加密传输服务
Doc Map
  1. 引言
  2. 介绍
    1. 特点
    2. 应用场景
    3. 工作原理
  3. 搭建
    1. 为何使用 Docker Compose 搭建
    2. 部署前的准备
    3. 开始搭建
    4. 🔐 为 Enclosed 配置 HTTPS 加密访问(基于 Nginx + Let’s Encrypt)
      1. 🧪 常见问题排查
  4. 🧾 结语:用技术守护隐私,用自建赢得信任

引言

随着科技日新月异,网络通信愈发便捷,数据传输已渗透日常生活之中。然便捷之下,隐患亦潜。若无加密防护,私人文件与通信或为窥探之徒所乘,泄露之危随时可至。

古人有言:“防人之心不可无。”今之网络世界,尤当慎守隐私。是故,自建一套安全、可信赖之加密传输系统,已成当务之急。

本文将引导你使用 Docker Compose 搭建 Enclosed —— 一款轻量、安全、开源的加密传输服务,助你在数字洪流中守住私域之门。

介绍

Enclosed 是一个简约的网络应用程序,旨在发送私密且安全的笔记。

所有笔记皆采用端到端加密,服务器与存储对内容一无所知,真正实现“知而不见”。 用户可自定义访问密码、设定生效时限(TTL),亦可启用 阅后即焚 机制,保障隐私万无一失。

本服务基于Enclosed搭建,支持自部署。若不便自建,可前往原创作者的官网体验官方版本。博主亦尝自建服务供测试之用,惟因资源或安全等因素,暂无法向公众开放,敬请谅解。

特点

  • 端到端加密 :您的笔记在客户端加密,使用 AES-GCM 和使用 PBKDF2 派生的 256 位密钥。
  • 文件附件 :与您的笔记安全地共享文件。
  • Zero Knowledge :服务器无法访问笔记或文件的内容。
  • 可配置的安全选项 :设置密码、到期时间,并选择阅读笔记后自毁。
  • 简约的用户界面 :简单直观的用户界面,可快速共享笔记。
  • i18n 支持 :提供多种语言。
  • 身份验证 :可选电子邮件/密码身份验证来创建笔记。
  • 黑暗模式 :适合深夜分享笔记的黑暗主题。
  • 响应式设计 :适用于所有设备,从台式机到手机。
  • 开源 :源代码可在 Apache 2.0 许可下使用。
  • 自托管 :运行 Enclosed 实例以进行私人笔记共享。
  • CLI :用于从终端创建笔记的命令行界面。
  • 对环境的影响非常小 :该应用程序和文档在 websitecarbon.com 上被评为 A+

应用场景

  • 安全分享文件给他人
  • 内网传输,远程通信加密
  • 博主自用、团队私密资料交换

工作原理

用户在客户端创建笔记,填写内容并可选择设置密码。系统在客户端生成一个基础密钥(base key),即使不设置密码也能保证加密安全。然后,通过将基础密钥和可选密码结合,使用 PBKDF2+SHA-256 算法派生出主密钥(master key)。接着,使用 AES-GCM 加密算法,用主密钥对笔记内容进行加密。

加密后的笔记连同一些元数据(如有效期TTL、是否密码保护、是否阅后即焚)一起发送到服务器。服务器负责存储加密笔记,并分配一个唯一ID。系统生成一个包含笔记ID和基础密钥(作为URL的哈希片段)的链接,发送给指定接收者。由于哈希片段不会发送到服务器,这样能最大限度地保证安全性。

接收者打开链接后,客户端根据笔记ID从服务器获取加密内容和元数据,同时从URL哈希片段中提取基础密钥。若笔记设置了密码,接收者需输入密码。客户端再用输入的密码和基础密钥通过 PBKDF2+SHA-256 派生出主密钥,并用它解密笔记,最终呈现给接收者。

整个流程确保笔记在传输和存储过程中均为加密状态,只有拥有正确链接和密码(如有)的人才能解密阅读,实现端到端的安全保护。

搭建

今日,博主将引导大家一步步通过 Docker Compose 搭建这款安全、简洁的传输服务(当然,官方还提供了命令行工具—CLI方式,博主这里暂不演示,感兴趣的朋友可自行查阅官方文档了解详细步骤。)

为何使用 Docker Compose 搭建

  • 易部署:无需安装依赖,跨平台运行
  • 易管理:通过 docker-compose up/down 快速启停
  • 易扩展:可与 Nginx、TLS、自定义脚本配合使用

部署前的准备

  • 📋 环境要求

    • 一台支持 Docker 的服务器(推荐 Linux)
    • 安装 Docker 和 Docker Compose
    • 域名
    • CloudFlare 账号
  • 🌐 网络要求

    • 确保开放相应端口(默认 8080)
  • 📁 目录结构建议:

enclosed/
├── docker-compose.yml
└── data/            # 文件数据挂载目录

开始搭建

更新系统

sudo apt update && sudo apt upgrade -y

安装 Docker(官方推荐方式)

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

添加当前用户到 docker 组(避免每次使用 sudo)

sudo usermod -aG docker $USER
newgrp docker

WARNING

重新登录终端后生效

安装 Docker Compose(v2 推荐)

sudo apt install docker-compose-plugin -y

确认是否安装成功:

docker compose version

创建项目目录并进入

mkdir -p ~/enclosed && cd ~/enclosed

编写 docker-compose.yml

vi docker-compose.yml

WARNING

确保安装了 vim 编辑器(亦可使用其他熟悉的编辑工具)

i 进入编辑模式,粘贴以下内容:

version: '3'

services:
  enclosed:
    image: enclosedproject/enclosed:latest
    container_name: enclosed
    ports:
      - "8080:8080"
    volumes:
      - ./data:/app/data
    restart: unless-stopped

ESC 退出编辑模式,按 wq 保存退出编辑器

开放防火墙端口,如果你启用了防火墙(如 UFW),请开放 8080 端口:

sudo ufw allow 8080/tcp

启动 Enclosed 服务

docker compose up -d

查看容器状态:

docker ps

访问服务

http://<你的服务器IP>:8080

至此,你已经成功搭建了属于自己的 Enclosed 加密传输服务,界面已经可以正常访问。

IMPORTANT

但请务必注意:此类服务涉及敏感信息的传输,必须通过 HTTPS(SSL 证书)进行加密保护,否则数据在传输过程中可能被窃听或篡改。 稍后,我将带大家继续完成 SSL 证书配置,让服务真正做到“端到端、安全不可见”。现在,我们先来解决一些部署过程中常见的问题和错误排查方法,帮助你顺利稳定运行服务。

问题描述可能原因解决方案
端口被占用,服务启动失败其他程序占用了 8080 端口使用 lsof -i :8080 查看并结束占用进程,或修改 docker-compose.yml 中的端口映射,例如 8090:8080
服务无法访问- Docker 未运行
- 防火墙未开放端口
- 容器内部错误
- 确保 Docker 正常运行:systemctl status docker
- 检查防火墙规则:sudo ufw allow 8080/tcp
- 查看容器日志:docker logs enclosed
页面样式错乱或加载失败资源加载异常或浏览器插件阻拦尝试换浏览器或无痕模式访问,清除缓存,确保网络通畅
上传失败或页面卡顿服务带宽限制或资源过大降低文件大小测试,确认服务器带宽是否满足需求

大家根据上述表格检查即可

🔐 为 Enclosed 配置 HTTPS 加密访问(基于 Nginx + Let’s Encrypt)

🧾 预备条件

条件描述
✅ 已成功部署 Enclosed本地或服务器运行在 Docker 容器中,监听 8080 端口
✅ 拥有一个域名secure.example.com,已解析到你的服务器 IP
✅ 开放防火墙端口确保 80 (HTTP)443 (HTTPS) 已对外开放
✅ 服务器使用 Linux 系统推荐 Ubuntu / Debian

安装 Nginx 和 Certbot

sudo apt update
sudo apt install nginx -y
sudo apt install certbot python3-certbot-nginx -y

为域名配置 Nginx 反向代理

sudo vi /etc/nginx/sites-available/enclosed

添加以下内容(请将 secure.example.com 替换为你的域名):

server {
    listen 80;
    server_name secure.example.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

保存并退出,然后启用配置并测试:

sudo ln -s /etc/nginx/sites-available/enclosed /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

申请 Let’s Encrypt 免费证书

使用 Certbot 自动申请 HTTPS 证书并配置 Nginx:

sudo certbot --nginx
  • 按提示选择你的域名(如 secure.example.com)
  • 选择「重定向所有 HTTP 到 HTTPS」选项(推荐) 成功后,Certbot 会自动修改你的 Nginx 配置,并启用 443 端口。

CAUTION

确保你的服务器443端口没有被占用

验证 HTTPS 是否启用成功

https://secure.example.com

NOTE

你应该可以看到 Enclosed 的页面,地址栏显示 🔒 安全锁标志。

设置证书自动续期(可选)

NOTE

Certbot 默认已安装定时任务自动续期,你也可以手动测试:

sudo certbot renew --dry-run

🧩 完整的 HTTPS Nginx 配置示例(带证书)

NOTE

仅供参考,Certbot 会自动生成如下配置:

server {
    listen 80;
    server_name secure.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name secure.example.com;

    ssl_certificate /etc/letsencrypt/live/secure.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/secure.example.com/privkey.pem;

    location / {
        proxy_pass http://localhost:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

TIP

之后可以使用

cd ~/enclosed
docker compose pull

更新此服务。

🧪 常见问题排查
问题可能原因解决方案
访问域名未跳转 HTTPSCertbot 未设置强制跳转确保选择“重定向所有 HTTP”或手动配置
证书申请失败域名未正确解析使用 ping secure.example.com 确认是否指向服务器
443端口访问失败防火墙未开放执行:sudo ufw allow 443

🧾 结语:用技术守护隐私,用自建赢得信任

在这个信息高速流通的时代,数据的价值日益凸显,而隐私泄露的风险也随之加剧。Enclosed 作为一款轻量却强大的加密传输工具,提供了端到端的安全保障,帮助我们更安心地分享文件与信息。

通过本教程,我们从零开始,使用 Docker Compose 部署了 Enclosed 服务,并结合 Nginx 与 Let’s Encrypt 成功启用了 HTTPS 加密访问,实现了真正意义上的“可控、可审计、安全传输”。

技术从来不是冷冰冰的命令与容器,而是我们保护自由、表达信任的方式。

如果你也认同“数据应由个人掌控”的理念,希望这篇教程能帮你迈出自建隐私服务的第一步。