简介
rhomb
是一个自托管的跨平台的云笔记平台。
rhomb
由Rust
+Svelte
构成,采用虚拟路由和 js 动态加载。
开发这个应用主要是想拥有自己的数据,并且可以跨平台同步。
项目开始于 21 年 10 月,最早采用了Python
作为后端,Semantic UI
作为前端,但是面临相应速度慢,服务器内存占用多的问题。
从 22 年 3 月开始,我用Rust
重写了后端,用Svelte
重写了前端,一直在完善功能中。
目前在Ubuntu
+ARM
服务器上运行时,占用的内存仅为 9.4M,CPU (RK3328
) 占用为 0.3%。
最近完成了服务器端的 AES 加密功能,可以安全地开放自托管版本。
v1.0.0 特性:
- 渐进式网页应用
- 服务器端加密
- 支持多用户
- 支持 Markdown
- 支持图片上传和自动清理
- 支持思维导图
- 支持看板
- 单一可执行文件
- 自动备份
- 显示文档修改时间
- 代码高亮
Katex
公式编辑- 自定义文字颜色
- 支持二次验证
- 页面分享
- …
当然功能没有Notion
,Wolai
之类的应用完善,但是作为小团队或个人已经可以使用。
安装
根据平台选择对应可执行文件。
平台 | 下载地址 |
---|---|
Windows | 链接 |
Linux x64 | 链接 |
Linux ARM | 链接 |
没有 Mac 版本,交叉编译太麻烦了。
不过一般也不用 Mac 做服务器吧。
下载
这里以Ubuntu 20.04 LTS
和ARM64
架构为例。
- 新建文件夹
rhomb-rs
mkdir rhomb-rs
- 进入文件夹
cd rhomb-rs
-
下载可执行文件到文件夹
-
给可执行文件执行权限
sudo chmod +x ./rhomb-rs
配置
- 使用
openssl
生成随机数
openssl rand -base64 32
- 创建
Rocket.toml
配置文件
[default.limits]
# 限制了数据传输大小
form = "20 MiB"
json = "100 MiB"
data-form = "20 MiB"
[release]
address = "0.0.0.0"
# 可以自行修改端口
port = 8100
# 注意用上一步生成的随机数替换 secret_key
secret_key = "NDtjBmZ5+cljDtLzbNwS2RcWhVShoC1Ki2mUMyg+r4g="
workers = 2
[global.databases]
rhomb = { url = "rhomb.db" }
- 再使用
openssl
生成随机数
openssl rand -hex 8
- 创建
.env
环境文件
APP_KEY=0b3e065b347e3a4f
用上一步生成的随机数替换这里的
APP_KEY
运行
./rhomb-rs
运行之后可以看到rhomb.db
数据库文件和upload
文件夹被创建。
运行成功后会显示网页地址。
初始管理员用户名和密码都为admin
。
管理员可以在左上角点击选项的
管理
中添加新用户。 管理员登录后请立即修改密码。 密码更改的功能已经更新。
守护进程
可以使用systemd
管理进程和开机自启动。
- 在
/etc/systemd/system/
中创建rhomb.service
文件
[Unit]
Description=Rocket instance to serve rhomb
After=network.target
[Service]
User=root
WorkingDirectory=/path to rhomb-rs folder
ExecStart=/path to rhomb-rs
[Install]
WantedBy=multi-user.target
- 启动程序
sudo systemctl start rhomb
- 开机启动
sudo systemctl enable rhomb
- 查看状态
sudo systemctl status rhomb
- 停止运行
sudo systemctl stop rhomb
反向代理
由于rhomb
没有内置HTTPS
。并且因为rhomb
采用服务器端加密,在网络传输时的安全性需要依赖HTTPS
。
所以在反向代理中使用HTTPS
是十分必要的。
这里以Nginx
为例
server {
listen 443 ssl;
server_name rhomb.example.com;
ssl_certificate /path to crt;
ssl_certificate_key /path to key;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Remote-Host $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://localhost:8100;
}
}
server {
listen 80;
server_name rhomb.example.com;
return 301 https://rhomb.example.com$request_uri;
}
需要内网穿透的可以参考rathole 使用教程。
其他
有任何功能建议或问题都可以联系我。