+ +
+ + + + + + + + +id (256bit)
和 key 256(bit)
。
+
+其中id
用于保存和提取密信, 在这之后这封密信将会被客户端使用AES算法的GCM模式和`key`进行加密然后发送至服务器,数据将会保存在服务器的内存中且永远不会被持久化到硬盘上,服务端永远不会得到密钥并且无法解读密信的内容。
+
+## 屏幕截图
+
+![screenshot](./design/Screens.png)
+
+## 环境变量
+
+| 变量名称 | 默认值 | 描述 |
+| ------------------ | ----------------- | ------------------------------------------------------------ |
+| `MEMCACHE` | `memcached:11211` | Memcached 连接 URL |
+| `SIZE_LIMIT` | `1 KiB` | 最大请求体(body)限制。有关支持的数值请查看 [字节单位](https://docs.rs/byte-unit/) |
+| `MAX_VIEWS` | `100` | 密信最多查看次数限制 |
+| ` MAX_EXPIRATION` | `360` | 密信最长过期时间限制(分钟) |
+| `ALLOW_ADVANCED` | `true` | 是否允许自定义设置,该项如果设为`false`,则不会显示自定义设置模块 |
+
+## 部署
+
+ℹ️ 加密鸽必须使用`https`,否则浏览器可能将不会支援加密鸽的加密算法。
+
+### Docker
+
+Docker是最简单的部署方式。这里是[官方镜像的地址](https://hub.docker.com/r/cupcakearmy/cryptgeon)。
+
+附:译者的[部署笔记](https://www.hash070.top/archives/cryptgeon-docker-deploy.html)
+
+```yaml
+# docker-compose.yml
+version: '3.7'
+
+services:
+ memcached:
+ image: memcached:1-alpine
+ entrypoint: memcached -m 128M -I 4M # 限制到最大 128 MB 内存占用,每个密信最大 4Mb 占用, 请根据自己的服务器内存的实际情况设置。
+
+ app:
+ image: cupcakearmy/cryptgeon:latest
+ depends_on:
+ - memcached
+ environment:
+ SIZE_LIMIT: 4M
+ ports:
+ - 80:5000
+```
+
+### NGINX 反向代理
+
+查看 [examples/nginx](https://github.com/cupcakearmy/cryptgeon/tree/main/examples/nginx) 目录。那里有几个示例反代配置文件模板,其中一个是带https配置的反代配置模板,你需要指定服务器的名称和证书才能生效。
+
+### Traefik 2
+
+假设:
+
+- 外部Docker代理网络 `proxy`
+- 证书解析器 `le`
+- 一个https入站点 `secure`
+- 域名 `example.org`
+
+```yaml
+version: '3.8'
+
+networks:
+ proxy:
+ external: true
+
+services:
+ memcached:
+ image: memcached:1-alpine
+ restart: unless-stopped
+ entrypoint: memcached -m 128M -I 4M # Limit to 128 MB Ram, 4M per entry, customize at free will.
+
+ app:
+ image: cupcakearmy/cryptgeon:latest
+ restart: unless-stopped
+ depends_on:
+ - memcached
+ networks:
+ - default
+ - proxy
+ labels:
+ - traefik.enable=true
+ - traefik.http.routers.cryptgeon.rule=Host(`example.org`)
+ - traefik.http.routers.cryptgeon.entrypoints=secure
+ - traefik.http.routers.cryptgeon.tls.certresolver=le
+```
+
+## 开发
+
+**环境要求**
+
+- `pnpm`: `>=6`
+- `node`: `>=14`
+- `rust`: edition `2021`
+
+**安装**
+
+```bash
+pnpm install
+pnpm --prefix frontend install
+
+# Also you need cargo watch if you don't already have it installed.
+# https://lib.rs/crates/cargo-watch
+cargo install cargo-watch
+```
+
+**运行**
+
+确保你的Docker正在运行
+
+> If you are on `macOS` you might need to disable AirPlay Receiver as it uses port 5000 (So stupid...)
+> https://developer.apple.com/forums/thread/682332
+
+```bash
+pnpm run dev
+```
+
+在根目录执行 `pnpm run dev` 会开启下列服务:
+
+- 一个 memcache docker 容器
+- 无热重载的 rust 后端
+- 可热重载的客户端
+
+你可以通过1234端口进入该应用,即 [localhost:1234](http://localhost:1234).
+
+###### Attributions
+
+本项目所使用的图标由www.flaticon.com的freepik制作
+
diff --git a/design/Github_zh-CN.png b/design/Github_zh-CN.png
new file mode 100644
index 0000000..20c121c
Binary files /dev/null and b/design/Github_zh-CN.png differ