简单的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/
