我已经部署了普通的 CouchDB Docker 容器,在 DigitalOcean 的 App Platform 上标记“最新”。
我使用环境变量设置了管理员用户,并且我成功地能够在 https 端口 443 上卷曲到数据库服务器,而不是作为原始安装的 5984。然后我按照 docker 文档中的概述创建了系统数据库。
Fauxton UI 的初始加载有效(使用 _utils),但在 UI 级别登录失败。登录表单提交带有名称/密码的表单,CouchDB 回复:
{
"ok":true,
"name":"couchadmin",
"roles":[
"_admin"
]
}
出现一个提示“您已登录”,AuthSession cookie 已设置,但 Fauxton 不允许我访问任何功能,只是再次重定向到登录页面。
我想念什么?
更新
再次检查网络选项卡,还有更多事情发生:
_session
,结果如上_session
,结果:{"ok":true,"userCtx":{"name":null,"roles":[]},"info":{"authentication_handlers":["cookie","default"]}}
名称和角色为空。然后 GET 重复最后一次,得到相同的结果
** 更新 2 **
当我查询
_session?basic=true
时,我得到了正确的答复:
{
ok: true,
userCtx: {
name: "couchadmin",
roles: [
"_admin",
"user",
"admin"
]
},
info: {
authentication_handlers: [
"cookie",
"default"
],
authenticated: "cookie"
}
}
看起来会话 cookie 已经被吃掉了。
在您的第一个 POST 到 _SESSION 中,您可以检查您收到的响应标头以及它是否包含会话 cookie 吗?
事实证明,cookie 是在 DigitalOcean App 平台内部的某个地方被吃掉的。我重新部署了 CouchDB Droplet 而不是应用程序,一切都按预期工作。 这也解决了(尚未解决的)存储持久性的需求。应用程序是表皮的,而液滴则通过附加的块存储保留数据(仍然需要备份)。
这对我有帮助:
local.ini
中创建 /home/couchdb/etc
文件(请参阅下面的示例)-v ~/couchdb/etc:/opt/couchdb/etc/local.d
添加到 docker run
命令来启动容器(请参阅下面的示例)admin
是您的管理员用户名adminpassword
是你的密码(启动容器时会被Couch DB加密)
[chttpd]
authentication_handlers = {chttpd_auth, cookie_authentication_handler}, {chttpd_auth, default_authentication_handler}
[admins]
admin = adminpassword
docker run -d -p 5984:5984 -e COUCHDB_USER=admin -e COUCHDB_PASSWORD=PASSWORD -v ~/couchdb/etc:/opt/couchdb/etc/local.d --name couchdb couchdb:3.3.3