Moon FM是一个好用的国产泛用型播客客户端。美中不足的是,只提供了利用CouchDB数据库进行跨平台同步的能力,需要用户懂代码才能进行配置。
原作者的说明文档 提供了普通程序安装的方式,本文在此基础上介绍使用Docker安装CouchDB服务提供给MoonFM应用同步的方法。
安装
使用Docker Compose安装,请预先安装docker和Docker Compose软件。
配置文件非常简单,如需自定义配置,新建local.ini文件
version: '3'
services:
couchserver:
image: couchdb
restart: always
ports:
- "127.0.0.1:5984:5984"
environment:
- COUCHDB_USER=yourname
- COUCHDB_PASSWORD=yourpassword
volumes:
- ./dbdata:/opt/couchdb/data
- ./local.ini:/opt/couchdb/etc/local.d/local.ini
使用docker compose up启动调试。docker compose up -d后台启动。docker compose down关闭。
其中ports设置为5984:5984,则外部用户都可以访问。如果设置为127.0.0.1:5984:5984, 则仅本机可以访问,便于后续https加密。建议安装时先设定为5984:5984,调试成功后再修改为仅本机可访问。
配置
启动成功后,可以访问对应地址http://yourip:5984/_utils进行配置,用户名和密码为配置密码。
- 通过网页管理端把
Couchdb配置为couch_peruser模式 (该模式下couchdb会为每个_users数据库中的每个新用户创建一个数据库). 点击Add Option菜单,新增如下配置。
"couch_peruser":
"database_prefix":"userdb",
"delete_dbs":"false",
"enable":"true"
- 创建
_users数据库,也可以使用可视化界面操作
curl -X PUT http://COUCHDB_USER:COUCHDB_PASSWORD@yourip:5984/_users \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
- 创建用户
用
couchdb管理员账户,创建一个用户名为flame密码为pass的用户
curl -X PUT http://yourip:5984/_users/org.couchdb.user:flame \
-u COUCHDB_USER:COUCHDB_PASSWORD \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"name": "flame", "password": "pass", "roles": [], "type": "user"}'
用户flame创建后,Couchdb同时为这个用户创建了一个数据库userdb8d606e(数据库名是前缀userdb加用户名的加密字符串)
那么这个用户的同步地址就是http://flame:pass@yourip:5984/userdb8d606e
- 禁止匿名创建用户。
可参考配置说明,在
local.ini中增加对应配置。
[chttpd_auth]
require_valid_user = true
[chttpd]
require_valid_user = true
反向代理
可以使用nginx进行反向代理,仅允许以域名方式访问。由于同步的时候会做一些批量操作,可能单个请求数据量比较大, 为避免413 – Request Entity Too Large报错,需要把client_max_body_size设置为比较大一点的值,比如client_max_body_size 20M;
Docker Compose配置127.0.0.1:5984:5984, 申请https证书后,部分nginx配置如下
client_max_body_size 20M;
server {
server_name youradmin.com;
listen 443 ssl;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_session_cache shared:SSL:1m;
ssl_certificate cloudflare.pem; #对应密钥
ssl_certificate_key cloudflare.key; #对应密钥
location / {
proxy_pass http://localhost:5984/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_buffering off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
}
}
配置后便可仅使用域名https方式进行访问,提升安全性。