Moon FM是一个好用的国产泛用型播客客户端。美中不足的是,只提供了利用CouchDB数据库进行跨平台同步的能力,需要用户懂代码才能进行配置。

原作者的说明文档 提供了普通程序安装的方式,本文在此基础上介绍使用Docker安装CouchDB服务提供给MoonFM应用同步的方法。

安装

使用Docker Compose安装,请预先安装dockerDocker 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进行配置,用户名和密码为配置密码。

  1. 通过网页管理端把Couchdb配置为couch_peruser模式 (该模式下couchdb会为每个_users数据库中的每个新用户创建一个数据库). 点击Add Option菜单,新增如下配置。
"couch_peruser":
    "database_prefix":"userdb",
    "delete_dbs":"false",
    "enable":"true"
  1. 创建_users数据库,也可以使用可视化界面操作
curl -X PUT http://COUCHDB_USER:COUCHDB_PASSWORD@yourip:5984/_users \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
  1. 创建用户 用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

  1. 禁止匿名创建用户。 可参考配置说明,在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方式进行访问,提升安全性。