简介

rhomb

rhomb是一个自托管的跨平台的云笔记平台。

rhombRust+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公式编辑
  • 自定义文字颜色
  • 支持二次验证
  • 页面分享

当然功能没有NotionWolai之类的应用完善,但是作为小团队或个人已经可以使用。

安装

根据平台选择对应可执行文件。

平台下载地址
Windows链接
Linux x64链接
Linux ARM链接

没有 Mac 版本,交叉编译太麻烦了。

不过一般也不用 Mac 做服务器吧。

下载

这里以Ubuntu 20.04 LTSARM64架构为例。

  • 新建文件夹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 使用教程

其他

有任何功能建议或问题都可以联系我。