个人主页 + 导航页 + 笔记 + 短链接 + 文件分享
此仓库使用 monorepo 管理前后端:前端位于 web/,使用 Vue + TS + PrimeVue + Tailwind CSS 构建;后端位于 server/,使用 Spring Boot + Kotlin + Jimmer ORM 构建。
- 首页个人信息与横幅展示
- 所有内容可编辑
- 允许完全隐藏
- 导航页的外链展示与跳转
- 账号密码登录
- 在主页单击名字,账号密码输入框会弹出
- 云笔记模块
- 支持 Markdown 语法
- 支持所见即所得编辑
- 自带图床服务
- 支持分享密码与纯文本直链
- 短链服务
- 统计
- 文件
- 存储
- 分享
- 直链下载
- 鉴权
- 全局暗色模式支持
or
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
-
下载
.env文件和docker-compose.yml文件mkdir uniboard cd uniboard wget https://github.com/Coooolfan/UniBoard/releases/latest/download/docker-compose.yml wget https://github.com/Coooolfan/UniBoard/releases/latest/download/example.env -
按照需要修改
.env文件和docker-compose.yml-
docker-compose.yml:默认只暴露8888端口(文件第6行),通过此端口向外暴露所有服务,如果您需要对uniboard配置反向代理,只需代理此端口即可。 -
.env:按照提示修改即可,切记要修改POSTGRES_PASSWORD的值,不要使用默认值! -
修改完成后复制
example.env为.env文件,供docker compose服务调取cp example.env .env
-
-
使用
docker compose命令启动服务docker compose up -d
-
使用浏览器访问站点,默认为
8888端口,如果您在本机部署,访问http://localhost:8888即可
Uniboard程序本身不提供ssl相关功能,直接暴露8888端口不是一个好的选择。
考虑到不同环境下Nginx的配置可能并不相同,下文仅提供思路和必要配置。
-
创建对应站点的conf文件
-
编辑监听的server_name, ssl相关内容
-
配置反向代理
client_max_body_size 0; # 设置最大包大小为无上限 location / { proxy_pass http://127.0.0.1:8888; proxy_set_header Host $host; # 保留代理之前的host proxy_set_header X-Real-IP $remote_addr; # 保留代理之前的真实客户端ip proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header HTTP_X_FORWARDED_FOR $remote_addr; # 在多级代理的情况下,记录每次代理之前的客户端真实ip proxy_set_header X-Forwarded-Proto $scheme; # 表示客户端真实的协议(http还是https) proxy_redirect default; # 指定修改被代理服务器返回的响应头中的location头域跟refresh头域数值 proxy_buffering off; # 禁用缓存,确保始终从后端获取最新内容 }
-
让Nginx重新加载配置
nginx -s reload
Caution
0.3.0 版本与以前版本完全不兼容,重写了整个后端服务。当您尝试“升级”到 0.3.0 及以上版本时,需要删除原所有内容,从0开始。
程序会尝试兼容旧版本的数据库。在跨多个版本升级时,建议先浏览 Releases 或者 更新说明页面,查看每个版本的更新内容,以及可能的数据库变更和破坏性更新。
不建议使用各种自动升级工具。
如果您使用上述的 Docker Compose 方式部署,可以通过以下命令升级并重启:
docker compose pull && docker compose up -d可见:https://uniboard.apifox.cn/
-
获取笔记纯文本内容
GET /api/note/<int:note_id>?pw=<str:password>:匿名获取笔记纯文本内容。笔记密码为空时表示私有;密码长度需大于8才有效。笔记不存在、私有、密码无效或密码错误时均返回404。
-
上传文件
POST /api/file-record/files:上传文件,使用multipart/form-data格式,其中insert为文件记录信息,file为二进制文件。返回新增成功的FileRecord对象,包含服务端生成的shareCode字段。(此方法需要鉴权) -
编辑文件信息
PUT /api/file-record/<int:file_id>:编辑文件信息,参数为文件记录更新对象,返回修改成功的FileRecord对象。(此方法需要鉴权) -
获取文件列表
GET /api/file-record?pageIndex=<int:page_index>&pageSize=<int:page_size>:分页获取文件列表,返回FileRecord对象分页结果。(此方法需要鉴权) -
获取文件下载直链
POST /api/file-record/direct-link:获取文件下载直链,参数为文件记录ID,返回一个UUID。使用5中的API,替换<str:UUID>为UUID即可。获取的地址在5分钟后会失效。(此方法需要鉴权,对所有文件可用) -
使用API直接下载文件
-
此API不需要鉴权,对于无效密码或者UUID均返回404。(wget下载时需要加上
--content-disposition参数) -
GET /file/<str:UUID>/:使用此API直接下载文件,UUID为4中返回的UUID。此API不需要鉴权,对所有文件有效。 -
GET /file/<str:share_code>/?pw=<str:password>:使用此API直接下载非私有文件,share_code为文件的shareCode字段,password即为文件设置的密码,密码参数可选。 -
部分客户端默认不支持使用content-disposition设定文件名,您可以在路径最后加上文件名来为这些客户端提供文件名。比如
localhost/file/UUID/文件名或者localhost/file/share_code/文件名。其中文件名不参与任何服务端的逻辑,仅用于客户端显性显示文件名。对于密码保护的文件,需要在路径中加上?pw=文件密码。例如localhost/file/i2S3/sky.png?pw=123456,这样可以直接下载share_code为i2S3的文件并显性地告知客户端文件名为sky.png,其中密码为123456。
-
cd web
yarn install
yarn devcd server
./gradlew bootRun











