返回文档

环境变量

Storage UI 的所有服务端配置都来自环境变量。存储凭据只保留在服务端,不会被打包进浏览器代码。

本地开发时,复制示例文件并编辑:

cp .env.example .env.local

部署到托管平台(Vercel、Docker 等)时,在该平台的环境变量设置里配置相同的变量。

应用设置

变量默认值说明
NEXT_PUBLIC_APP_URLlocalhost:3000应用的公开访问地址。
NEXT_PUBLIC_BASE_PATH(根路径)从子路径提供服务,如 /drive,并会把 / 重定向到该路径。
NEXT_PUBLIC_ASSET_PREFIX(无)仅当静态资源由独立域名提供时才需要设置。

认证

同时设置用户名和密码即可开启内置登录页;任一为空则应用保持开放访问。

AUTH_USERNAME=admin
AUTH_PASSWORD=change-me
AUTH_SECRET=a-long-random-string
变量是否必需说明
AUTH_USERNAME登录时必需登录用户名。
AUTH_PASSWORD登录时必需登录密码。
AUTH_SECRET推荐用于签名会话 Cookie。不设置时会用密码作为签名密钥,因此改密码会让所有人退出登录。

会话有效期为 7 天。登录页还可以再加一层人机验证,见下方 Turnstile

存储连接

每个连接是一组带编号的变量,从 STORAGE_1_*STORAGE_50_*。用户仍可在界面中运行时添加更多连接。一组变量具体用到哪些,取决于它的服务商。S3 及各种兼容服务共用一套,WebDAV 用另一套。

S3 及兼容服务

当一个连接的 BUCKETACCESS_KEY_IDSECRET_ACCESS_KEY 都已设置后即会加载(部分服务商还需 REGIONENDPOINT,见下)。

变量是否必需说明
STORAGE_n_BUCKET必需存储桶名称。
STORAGE_n_ACCESS_KEY_ID必需Access Key ID(腾讯云 SecretId、B2 keyID)。
STORAGE_n_SECRET_ACCESS_KEY必需Secret Access Key(腾讯云 SecretKey、B2 application key)。
STORAGE_n_PROVIDER否(s3存储服务商,见下方列表。
STORAGE_n_NAME侧边栏显示名称,默认使用桶名。
STORAGE_n_REGION视服务商alibabatencentbackblaze-b2 必需;r2 忽略;S3 默认 auto
STORAGE_n_ENDPOINT视服务商minio 必需;其他 S3 兼容服务商可选覆盖。
STORAGE_n_ACCOUNT_ID仅 R2Cloudflare 账户 ID(R2 据此推导 endpoint)。
STORAGE_n_FORCE_PATH_STYLE路径风格寻址。minio 默认 true,其他默认 false
STORAGE_n_PUBLIC_BASE_URL用于文件链接的公开或 CDN 地址。
STORAGE_n_READ_ONLY设为 true 时禁用该桶的所有修改操作。

支持的服务商有 s3r2alibabatencentbackblaze-b2minios3-compatible

务必填写真实 region。

STORAGE_1_PROVIDER=s3
STORAGE_1_NAME=Production
STORAGE_1_BUCKET=my-bucket
STORAGE_1_REGION=us-east-1
STORAGE_1_ACCESS_KEY_ID=...
STORAGE_1_SECRET_ACCESS_KEY=...

WebDAV

适用于 Nextcloud、ownCloud、Apache mod_dav 以及大多数 NAS。没有桶的概念,只有 ENDPOINT 是必需的。

STORAGE_8_PROVIDER=webdav
STORAGE_8_NAME=Nextcloud
STORAGE_8_ENDPOINT=https://cloud.example.com/remote.php/dav/files/alice
STORAGE_8_USERNAME=alice
STORAGE_8_PASSWORD=...
STORAGE_8_ROOT=/Photos
变量是否必需说明
STORAGE_n_PROVIDER必需固定填 webdav
STORAGE_n_ENDPOINT必需WebDAV collection 地址。
STORAGE_n_USERNAME用户名,未设置时回退到 ACCESS_KEY_ID
STORAGE_n_PASSWORD密码,未设置时回退到 SECRET_ACCESS_KEY
STORAGE_n_AUTH_TYPE认证方式,见下方说明。
STORAGE_n_ROOT只浏览服务器上的该目录,默认为 collection 根目录。
STORAGE_n_NAME侧边栏显示名称,默认使用服务器地址。
STORAGE_n_PUBLIC_BASE_URL用于文件链接的公开地址,见下方说明。
STORAGE_n_READ_ONLY设为 true 时禁用该连接的所有修改操作。

AUTH_TYPE 可填 password(设置了用户名时的默认值)、basic(与 password 是同一种方式的另一个名字)、digestauto(先匿名尝试,再按服务器返回的挑战方式重试)、none。填了无法识别的值会被忽略并输出警告。

与 S3 系服务商有两点不同。

  • WebDAV 始终经由本应用的服务端中转,不受设置里「直接从浏览器请求」开关的影响,因此服务端需要能访问该 WebDAV 主机。地址在内网时参见下方的 内网地址
  • 不设置 PUBLIC_BASE_URL 时,文件内容由服务端流式转发,而不是走签名直链。如果有一个指向同一批文件的公开 HTTP 地址,填进去即可获得直接预览链接。

内网地址

变量默认值说明
ALLOW_PRIVATE_ENDPOINTSfalse允许界面中添加的连接指向内网地址。

生产环境下,用户在界面中添加的连接不允许指向内网地址,因为服务端会代用户去请求该地址。被拦截的包括 localhost*.local*.internal,以及环回、链路本地、运营商级 NAT 网段和 10.0.0.0/8172.16.0.0/12192.168.0.0/16 这几个私有网段。

ALLOW_PRIVATE_ENDPOINTS=true

确实需要连接局域网 NAS 或同一网络内其他容器时再打开。有两种情况本来就不受影响。

  • STORAGE_n_* 连接是部署者自己配的,不做该校验,因此只用环境变量配置存储桶的自托管部署无需设置这一项。
  • 本地开发不受限制,只有以 NODE_ENV=production 运行时才会生效。

Turnstile

为登录页添加 Cloudflare Turnstile 人机验证。先在 Cloudflare 控制台创建一个 Widget,然后同时设置两个密钥。

TURNSTILE_SITE_KEY=0x4AAAAAAA...
TURNSTILE_SECRET_KEY=0x4AAAAAAA...
变量是否必需说明
TURNSTILE_SITE_KEY验证时必需Widget 的 Site Key,会下发到浏览器,非机密。
TURNSTILE_SECRET_KEY验证时必需Widget 的 Secret Key,仅在服务端使用。

两个都设置时验证才会生效;只设置其中一个时验证保持关闭,并会在日志中输出警告。该验证作用于登录页,因此未配置 AUTH_USERNAMEAUTH_PASSWORD 时不会生效。

两个密钥都在运行时读取,不参与构建,因此同一个 Docker 镜像可以配任意一组密钥,更换后重启即可生效。