简单的Web云存储解决方案bewCloud
简介
什么是 bewCloud ?
bewCloud
是一个简化版的自托管云存储解决方案,作为Nextcloud
和ownCloud
的替代品,使用TypeScript
和Deno
构建,基于Fresh
框架。该平台旨在为用户提供简单易用的文件存储和共享功能。
主要特点
- 自托管:用户可以在自己的服务器上安装和运行
bewCloud
,确保数据隐私和安全。 - 简化的用户界面:提供直观的文件管理和共享界面,易于使用。
- Docker 支持:通过
Docker
和Docker Compose
进行快速部署,简化设置过程。 - 灵活的文件共享:支持通过符号链接实现文件共享,灵活性高。
- 开源:遵循
AGPL-3.0
许可证,允许用户自由使用和修改代码。
应用场景
- 个人云存储:用户可以建立自己的云存储服务,管理和备份个人文件。
- 小型团队协作:适合小型企业或团队使用,便于文件共享和协作。
- 开发者使用:开发者可以在本地环境中使用
bewCloud
进行测试和开发。
bewCloud
提供了一种轻量级的方式来实现云存储功能,非常适合希望自托管解决方案的用户和小型团队。
安装
在群晖上以 Docker 方式安装。
本文写作时,
latest
版本对应为v1.5.6
;
采用 docker-compose
安装,
env.txt
将下面的内容保存为 env.txt
,
1 | PORT=8000 |
变量名 (Variable Name) | 示例值 (Example Value) | 描述 (Description) |
---|---|---|
网络与基础 URL (Network & Base URL) | ||
PORT |
8000 |
应用程序(后端服务)监听的容器端口号。 |
BASE_URL |
"http://192.168.0.197:8562" |
应用程序可公开访问的基础 URL。用于生成绝对链接、API 端点、重定向等。请确保这是用户和前端访问后端的正确地址。 |
数据库 (PostgreSQL) | ||
POSTGRESQL_HOST |
"postgresql" |
PostgreSQL 数据库服务器的主机名或 IP 地址。在 Docker 环境中,这通常是 PostgreSQL 服务(容器)的名称。 |
POSTGRESQL_USER |
"postgres" |
用于连接 PostgreSQL 数据库的用户名。 |
POSTGRESQL_PASSWORD |
"fake" |
用于连接 PostgreSQL 数据库的密码。 极其重要:请使用强密码替换 "fake" ,并确保安全。 |
POSTGRESQL_DBNAME |
"bewcloud" |
要连接的 PostgreSQL 数据库的名称。 |
POSTGRESQL_PORT |
5432 |
PostgreSQL 数据库服务器监听的端口号。5432 是 PostgreSQL 的默认端口。 |
POSTGRESQL_CAFILE |
"" (空字符串) |
(可选) 指向 CA 证书文件的路径,用于验证数据库服务器的 SSL 证书。如果为空或未设置,可能不进行 SSL 验证或使用系统默认设置。 |
安全与认证 (Security & Auth) | ||
JWT_SECRET |
"fake" |
用于签发和验证 JSON Web Tokens (JWT) 的密钥。JWT 通常用于用户会话管理和 API 认证。极其重要:必须是一个长而随机的、保密的字符串。请替换 "fake" 。 |
PASSWORD_SALT |
"fake" |
用于密码哈希的盐值 (Salt)。在哈希用户密码前添加此盐值,以增加安全性,防止彩虹表攻击。极其重要:必须是一个保密的字符串。请替换 "fake" 。 |
邮件服务 (Email Service) | ||
BREVO_API_KEY |
"fake" |
Brevo (原 Sendinblue) 服务的 API 密钥。如果 CONFIG_ENABLE_EMAILS 设置为 true ,则需要此密钥来发送邮件(如注册验证邮件)。请保密。请替换 "fake" 。 |
应用配置 (Application Configuration) | ||
CONFIG_ALLOW_SIGNUPS |
"false" |
是否允许新用户注册账户。"true" 允许注册,"false" 禁止注册。 |
CONFIG_ENABLED_APPS |
"news,notes,photos,expenses" |
以逗号分隔的、要启用的可选应用程序模块列表。根据注释,dashboard 和 files 模块是核心功能,不能被禁用。这里启用了新闻、笔记、照片和费用模块。 |
CONFIG_FILES_ROOT_PATH |
"data-files" |
用户上传文件存储的根目录路径。这通常是相对于应用程序工作目录或存储卷的路径。 |
CONFIG_ENABLE_EMAILS |
"false" |
是否启用邮件功能。如果设置为 "true" ,通常会启用如注册时的邮箱验证等功能,并且需要配置邮件服务(如此处的 BREVO_API_KEY )。 |
CONFIG_ENABLE_FOREVER_SIGNUP |
"true" |
如果设置为 "true" ,新注册的用户账户将被设置为一个非常长的有效期(示例中提到的是 100 年),实际上等同于永久有效。 |
CONFIG_ALLOWED_COOKIE_DOMAINS |
(可选) 以逗号分隔的域名列表。除了 BASE_URL 的域名外,还允许在这些域名下设置和读取会话 Cookie。用于多域名访问同一个应用实例的场景。 |
|
CONFIG_SKIP_COOKIE_DOMAIN_SECURITY |
(可选) 如果设置为 "true" ,则放宽对 Cookie 域名的严格检查。这可能在某些反向代理设置(如 Cloudflare Tunnel)下是必需的,但会略微降低安全性。 |
|
自定义与帮助 (Customization & Help) | ||
CUSTOM_TITLE |
(可选) 自定义应用程序的标题,会显示在浏览器标签页或 UI 界面中。如果未设置,将使用默认标题。 | |
CUSTOM_DESCRIPTION |
(可选) 自定义应用程序的描述信息,可能用于 HTML meta 标签等。 | |
HELP_EMAIL |
"help@bewcloud.com" |
显示在应用程序“需要帮助”或支持相关区域的联系邮箱地址。如果留空,这些帮助部分可能会被禁用或隐藏。 |
特别需要说明的是:
理论上只要修改
BASE_URL
即可,其中IP
为群晖主机的IP
,端口为容器对外暴露的本地端口;即使禁用了注册 (
CONFIG_ALLOW_SIGNUPS=“false”
),第一个注册的用户,也会正常工作,并成为管理员;
docker-compose.yml
将下面的内容保存为 docker-compose.yml
1 | services: |
然后依次执行下面的命令,千万不要遗漏了
1 | # 新建文件夹 bewcloud 和 子目录 |
关键说明
这里有两个关键步骤,需要单独说明一下
目录权限
如果没有执行下面这个命令
1 | # 解决容器中上传文件时的权限相关问题 |
在打开 Files
时会报错,因为 1993
是 Deno
的 Docker
镜像的默认用户 ID
而正常应该是这样的
数据库初始化
别忘了第一次运行需要初始化数据库
1 | # 初始化/更新数据库(仅在第一次和任何更新时执行) |
否则注册用户时会报错
PostgresError: relation "bewcloud_users" does not exist
而初始化之后就不会有问题了
运行
在浏览器中输入 http://群晖IP:8562
就能看到注册界面
第一次,需要点
signup
先注册账号
登录成功之后的主界面
News
支持 feeds
订阅
还是以老苏的博客为例,https://laosu.tech/atom.xml
添加成功后
点 View articles
查看文章
Files
bewCloud
不止有网页版,还支持 WebDAV
不过 WebDAV
用 RaiDrive
测试并没有成功,从 issues#32
看,作者似乎并未实现完整的 WebDAV
协议,因此可能有些客户端可以,有些则不行
客户端
bewCloud
官方提供桌面和移动客户端
- 桌面同步客户端:使用
Tauri
通过Rust
构建,支持Windows
、macOS
、Linux
平台
- 移动版客户端:使用
Flutter
通过Dart
构建,支持iOS
和Android
其他
bewCloud
除了前面介绍的新闻(News
),和文件(Files
)外,还支持照片(Photos
)和 笔记(Notes
)
甚至还包括了预算和费用 (Budgets & Expenses
)
只是现在的货币还不支持 RMB
参考文档
bewcloud/bewcloud: A simpler alternative to Nextcloud and ownCloud, built with TypeScript and Deno using Fresh. 🦕 🍋
地址:https://github.com/bewcloud/bewcloudbewcloud/bewcloud-desktop: Desktop Sync client for bewCloud built with Rust using Tauri. 😎 ♾️
地址:https://github.com/bewcloud/bewcloud-desktopbewcloud/bewcloud-mobile: Mobile client for bewCloud built with Dart using Flutter. 🏎️💨
地址:https://github.com/bewcloud/bewcloud-mobilebewCloud is a modern and simpler alternative to Nextcloud and ownCloud written in TypeScript
地址:https://bewcloud.com/