前阵子写了一个 Cloudflare Worker 版的同步书影音记录,个人觉得对于个人博客来说已经足够了,但可能一些同学介意 Cloudflare 的网络问题,于是我构建了一个 Docker 镜像,适合有国内服务器的同学使用。
首先需要安装 Docker 和 Docker compose,根据你的服务器自行寻找安装方法。
构建
创建一个docker-compose.yml
文件,示例
version: '3' services: douban-docker: image: fatesinger/douban:latest container_name: douban-docker volumes: - assets:/app/static environment: MONGO_URI: mongodb://mongo:27017/fatesinger DBID: 54529369 DOMAIN: https://node.wpista.com depends_on: - mongo ports: - 8000:3000 networks: - shared-network mongo: image: mongo:4.4.29 container_name: mongo restart: "always" volumes: # Persist mongodb data - database:/data/db ports: - "27017:27017" networks: - shared-network volumes: assets: driver: local name: assets database: driver: local name: mongodb_data networks: shared-network:
Nignx 配置
反向代理接口
server { listen 80; server_name example.com; location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE-HOST $remote_addr; } }
运行
docker-compose up -d
不使用 docker 启动服务
根据.env.example
创建.env
文件
使用pm2
git clone git@github.com:bigfa/douban.git cd douban npm install npm run build npm install pm2 -g pm2 start dist/index.js --name douban --watch
自动同步
添加定时任务,每半小时同步一次。
*/30 * * * * curl -—silent "http://localhost:8000/sync" >/dev/null 2>&1
配置参数
MONGO_URI
DBID 你的豆瓣 ID
DOMAIN 绑定的域名
API_BASE 接口base url,建议单独绑定二级域名,如绑定二级目录静态文件需单独处理。
本地开发
根据.env.example
创建.env
文件
git clone git@github.com:bigfa/douban.git cd douban npm install npm run dev
需要本地有 mongodb 服务
接口
对外提供了 3 个接口,标记条目列表、单个条目信息、本地化条目封面。
- 条目列表
/list
,支持两个参数 type 和 paged,type 为条目类型,status 为状态类型,paged 为页码,get 请求。 - 单个条目为
/:type/:id
,type
为类型,id
为条目id
。 - 本地化封面接口无序主动调用,在调用上面两个接口时会根据具体情况自动调用。
- 同步接口
/sync
,初始化和定时任务使用。
前端展示
和以前一样,强烈建议使用本人全家桶,如果想自行调用则可以参考主题目录下 assets/ts/db.ts
和样式assets/scss/modules/_db.scss
的文件。或者直接用 worker 接口自行开发。
db.ts
已经被我封装成一个类,调用方法。
new Douban({ baseAPI: '', // api container: ".db--container", // 容器名 });
现在html
只需要如下结构
<div class="db--container"></div>
我自己测试了一阵子,使用上没啥大问题,比较稳定,偶尔有一直图片下载失败手动调用下接口重新下载即可。
你这输出的不是就是技术吗。
@1900 这是因为最近有学习需求
0% connecting to “https://download.docker.com/xxxx”
@不亦乐乎 docker hub已经被墙了
@不亦乐乎 换一下代理就行了
学习
@老孙 docker日志提示`sync 404`
@老孙 是不是你加base url了😂
不错的自动同步实例。
这个和之前的wp插件有什么区别吗?
@見面有花嗎 不明白无视就可以
@bigfa 搭建了一下,wp插件会抓取到的未知电视剧在douban-docker里直接就无了啊