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

Doc Map
引言
随着科技日新月异,网络通信愈发便捷,数据传输已渗透日常生活之中。然便捷之下,隐患亦潜。若无加密防护,私人文件与通信或为窥探之徒所乘,泄露之危随时可至。
古人有言:“防人之心不可无。”今之网络世界,尤当慎守隐私。是故,自建一套安全、可信赖之加密传输系统,已成当务之急。
本文将引导你使用 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
更新此服务。
🧪 常见问题排查
问题 | 可能原因 | 解决方案 |
---|---|---|
访问域名未跳转 HTTPS | Certbot 未设置强制跳转 | 确保选择“重定向所有 HTTP”或手动配置 |
证书申请失败 | 域名未正确解析 | 使用 ping secure.example.com 确认是否指向服务器 |
443端口访问失败 | 防火墙未开放 | 执行:sudo ufw allow 443 |
🧾 结语:用技术守护隐私,用自建赢得信任
在这个信息高速流通的时代,数据的价值日益凸显,而隐私泄露的风险也随之加剧。Enclosed 作为一款轻量却强大的加密传输工具,提供了端到端的安全保障,帮助我们更安心地分享文件与信息。
通过本教程,我们从零开始,使用 Docker Compose 部署了 Enclosed 服务,并结合 Nginx 与 Let’s Encrypt 成功启用了 HTTPS 加密访问,实现了真正意义上的“可控、可审计、安全传输”。
技术从来不是冷冰冰的命令与容器,而是我们保护自由、表达信任的方式。
如果你也认同“数据应由个人掌控”的理念,希望这篇教程能帮你迈出自建隐私服务的第一步。