标签归档: Home-NAS

开源好用的电子书管理服务Talebook(Calibre网络版)安装使用指南

今天是世界读书日,介绍一款已经用过一段时间的在线电子书管理、阅读服务。Talebook是一个开源的Calibre WEB外壳,源项目地址是:Github项目,我为了方便自己开发,在自己的代码托管服务上放了一份源码,方便存放自己的开发过程代码。也经常将自己用稳定了的特性或者修改的Bug提交MR推送到原作者的项目中。我主要会根据自己的需要开发一些特性和修复我认为比较关键的bug。代码地址为:自用Talebook地址Docker镜像地址。增加了一个限制单个IP地址下载书籍的数量限制特性,用来防止爬虫大并发爬取书籍,导致站点不可用。另外还增加了一些统计信息和界面修改等,具体的差异点可以对比两个代码工程的获取。我也会持续跟进源项目的新特性,实时合并,也继续推送自己的修改到源项目。

更新记录列表:

  1. 支持限制单个IP地址下载数量;
  2. 支持随机推荐和最新书籍推荐手动刷新;
  3. 支持个人阅读、访问、下载和推送记录,也支持一键清除,优化历史记录页面;
  4. 新增“我的收藏”功能;
  5. 上传成功的图书即从upload目录删除,避免书籍被保存两份,浪费空间;
  6. 导入页面,在删除导入记录的同时,也删除上传到uploads目录的图书。

跟原项目一样,我也基于仓库代码生成了镜像,推送到了dockerhub有了Docker镜像,安装使用起来非常方便:

docker run -d --name calibre \
-p 127.0.0.1:12579:80 \
-v /media/c2/docker/calibre/data:/data \
-E TZ="Asia/Shanghai" \
shentar/talebook:latest

我这里将容器内的80端口映射到本机的内部随机端口,然后再在宿主机上面使用Nginx反向代理对外提供HTTPS服务。反向代理时,需要注意一些配置:

server {
    listen 6870 ssl http2;
    server_name book.codefine.site;
    index index.html index.htm index.php default.html default.htm default.php;
    root /any/local/path/;
    
    ssl_certificate ***********;
    ssl_certificate_key ***********;
    
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    
    client_max_body_size 500M; 
    
    location / {
        proxy_pass http://127.0.0.1:12579/;
        proxy_set_header Host $http_host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header X-Scheme $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $http_connection;
    }
 
    access_log on;
}

注意这些Header必须正确设置,否则可能无法正常打开主页。 剩下的就是从网页打开宿主机的6870端口即可访问,我的宿主机是有域名的因此,我的站点的地址就是:https://book.codefine.site:6870,首次打开时,会做一些必要的配置,如私人模式还是多用户模式。admin账号和密码设置等。完成后就可以愉快的使用talebook存取电子书籍了。 对于网络下载的各种电子书文件,元信息可能都不准确,因此需要从豆瓣等刮削元信息。开源社区有一个现成的刮削服务,douban-api-rs:源码地址为:https://github.com/cxfksword/douban-api-rs,这个也提供Docker的安装方式,不过作者并没有在Dockerhub上面放镜像。而是在Github自己的镜像服务上面托管镜像。如果是命令行安装,只需要执行如下命令即可:

docker run -d \
--name=douban-api-rs \
--restart=always \
-p 172.17.0.1:8080:80
ghcr.io/cxfksword/douban-api-rs:latest

如果是群晖等NAS服务,则需要自行配置新的镜像源才能拉去到该镜像。具体笔者没有使用过,需要自行探索。 然后到Talebook的高级配置项目中配置即可:

image

我这里之所以选择使用172.17.0.1作为监听地址,是因为这个地址是我的docker服务的网络的虚拟网关,宿主机也能访问这个IP地址。这样,在Talebook内部就能用这个地址与豆瓣刮削服务通信。上传电子书之后,只要设置正确的书籍名字即可进行全量元数据的抓取了。豆瓣网站不再提供书籍的标签(Tag)了,因此Talebook服务端做了从作者、标题和书籍摘要中匹配Tag的实现,准确率还行。 感谢Talebook作者贡献这么好的开源项目,并且多年来还在积极维护。这个项目也让我初步接触到Vue.js、Node.js、Python3 Tornado等生态,开发WEB项目,使用这些组件,效率极高。什么时候有精力可以把jAlbum的前端好好用这些写一下。

| 1 分2 分3 分4 分5 分 (5.00- 2票) Loading ... Loading ... | 归档目录:WEB网络, 建站技术, 数码硬件, 移动互联 | 同时打有标签:, , , , |

Home NAS 音乐服务解决方案

之前写过使用《使用Emby + Picard管理音乐》的方案,Emby有一个问题,在划词搜索方面,必须前缀或者整词完整匹配,对于港台音乐名和元数据多是繁体字,用简体搜索时,无法匹配,一直希望能够模糊匹配,发现airsonic-advance这方面没问题,完美解决搜索问题。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:数码硬件, 移动互联, 软件应用 | 同时打有标签:, , , |

Home-Server磁盘降温记

由于内存不足,Home-Server上面运行的虚拟Windows主机经常宕机,就想着给Home-Server更换一根16GB内存。小机箱内部空间狭小,部件接合紧密,拆机时把机箱风扇给扯断了。费了老大的劲儿,内存条是装上去了,开机也能识别,但是少了个风扇。

5d230042c5a9454.jpg_e1080 (图片源于网络)

当天晚上,重新还原各个部件到机箱内部,后来太晚了,机箱就没有封盖,准备第二天早上再弄,心想少一个机箱风扇应该也没多大事。结果,第二天早上,准备关机装机箱盖,运行了一晚的服务器,发现磁盘烫手,都有开水的温度了。不对劲,赶紧安装hddtemp检查磁盘温度,发现竟然达到70多度。这样太危险了,影响磁盘寿命,赶紧某宝下单一个宣称4K转速20元包邮的机箱风扇(最终实际能跑到3100转,但是已经够用了。)。历经3天,快递终于到了。装到机箱后,默认是自动调速模式,声音大的有点像置身机房,这样放在家里,肯定难以接受。研究了半天,将/sys/class/hwmon/hwmon2/pwm1_enable置为1,然后设置/sys/class/hwmon/hwmon2/pwm1的值尽可能小,以降低转速,发现最小转速就是1500多,再小风扇就停止转动。1500转,声音小多了,噪音可以接受了,温度也还正常。

在这个过程中,还研究了一下使用Grafana监控磁盘温度的方法,Prometheus官方提供的node-exporter没有提供hddtemp相关的功能,找了半天,也没有人提供能用的基于hddtemp的监控exporter,于是写了一个循环运行的Shell脚本+PushGateWay实现了一个磁盘温度的exporter。

经过一番折腾,磁盘温度降到能接受的40度左右的范围了,对比效果见下面的监控图。在没有风扇的时候,发现不仅磁盘温度非常高,磁盘温度还会将CPU温度拉高。把磁盘挪开,则CPU温度在正常范围。SAS盘温度高真不虚。这次拆装机颠覆了我对磁盘温度的认识。之前一直认为磁盘运转过程中不需要风扇,机箱风扇是给整个机箱内部的除CPU外的部件散热,但重点不是磁盘,没想到在小机箱里面磁盘是发热量的大头。

image
| 1 分2 分3 分4 分5 分 (5.00- 2票) Loading ... Loading ... | 归档目录:数码硬件, 软件应用 | 同时打有标签:, , , , |

介绍一个照片管理工具:PhotoPrism

最近发现一个跟jAlbum功能高度一致的相册工具,PhotoPrism,安装步骤不复杂,这里不作介绍。准备拿来跟jAlbum对比一下。看了官网的Demo,发现跟我之前做jAlbum时预想的功能完全一致:照片分类、人脸识别、照片日历还有照片打Tag,最重要的是,我一直不会做的界面,这个工具的要好用很多。赶紧docker安装试用了一下,挂载Home Server下的图片目录,在照片比较少时,完成加载很快,但是照片一但多了,就很慢。下面从各个维度对比一下,以打分的方式比较 :-)

比较项 jAlbum PhotoPrism
人脸识别 借助于第三方系统,识别精确特别是人脸对比方面精准。
5分
使用Pigo,All In One的方式,识别准确率较低。
3分
图片场景识别 不支持 支持识别图片场景,自动打标签,准确率不高
3分
备份照片到远端 支持对象存储(华为OBS和Amazon S3)
4分
使用Webdav协议备份。某些云盘支持WebDAV,因此可以网云盘备份照片。
4分
视频管理 支持
4分
支持,支持从照片中抽帧并做图片分析。
4分
界面 简陋
2分
界面精美,动态页面非常好用,支持编辑元数据,指定人像名字,编辑人像。
5分
客户端 浏览器 浏览器,有准备推出手机端的应用。
自动识别新增文件 支持
4分
需要手动点击分析图片文件按钮。
2分
支持上传照片 不支持 支持
支持自动备份手机照片 不支持 不支持
访问安全 支持简单的发放Token方式,支持Https 支持单账号登录。
照片分享 不支持 支持
功能定制 支持通过服务端参数定制很少的页面行为。
2分
支持在界面配置各种功能。
5分
性能 流畅
4分
页面响应明显卡顿。
2分
技术栈 Java、少量JS、处理EXIF信息、FFmpeg、SQLite。
更多依赖第三方服务。
Golang、Vue.js、SQLite、处理EXIF信息、FFmpeg、WebDAV。
All In One,几乎不依赖第三方
开发规模 个人玩具 ^_^,16年基本完成,后面没在大规模开发。 形成规模的开源社区,多人协作开发,正在商业化的路上。18年开始在Github开源,具体开始时间不详。
| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:WEB网络, 数码硬件 | 同时打有标签:, , , |

自制一个动态域名解析系统

之前一直用路由器自带的动态域名解析(Dynamic DNS,DDNS)系统,一般路由器自行提供一个,或者直接对接花生壳。路由器自带的几乎不能登录,花生壳也是经常性的退出登录,或者直接把域名解析为127.0.0.2,遇到好几次了,难以忍受。仔细研究了一下百度云的域名服务,希望找到一个能够通过远程调用设置A记录的入口。找到了这个介绍链接:更新域名记录,使用百度云的域名解析服务的API可以实现对域名解析的各种远程操作。首先在《HomeNAS IP地址变化》中介绍了如何获取本机真实IP的方法,然后当监控到IP发生变化时,调用API设置A记录即可。本来想使用Python SDK简单写几行脚本直接运行起来就好,结果百度云域名服务的Python SDK以及给出的几行样例代码漏洞百出,没法实际运行起来。只能做个Java Jar包供命令行调用了。这样终于搞定了一个可以长时间稳定运行的DDNS实现,一个完美的花生壳替代品。

先列举所有主域名的解析配置,找到需要修改的那一项,然后使用列举得到的ID设置新的IP地址即可。详细代码参见如下工程:https://git.codefine.site:3000/Shentar/setdomain2

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:WEB网络, 移动互联 | 同时打有标签:, |

HomeNAS IP变化规律

成都电信分配给个人的家用宽带IP地址定期更新,本来是用来快速发现变化后的IP地址的一个任务,解决IP地址变化后需要15分钟才能登录的问题,结果让发现了IP地址变化的规律。每隔6天,在每天中午11点20后的一个小时内更新IP地址。不知道是只针对特定账号的任务还是所有人同一时刻变更。

阅读全文 »

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:WEB网络, 实用脚本, 移动互联 | 同时打有标签:, |

分享一个追最新外语电影的RSS

国内的Torrent分享网站越来越少了,无意中发现https://www.demonoid.is/可以下载到最新的高清/超清电影。但是有点比较讨厌,就是弹窗有点过份,不是我白嫖了种子还不愿支持广告,真是弹窗太过三俗刺眼,难以忍受。于是试着分析了网页内容,自己抓取电影种子文件链接,并添加Google搜索IMDB的链接,制作了RSS订阅链接。本来还想找一下有没有类似的Torrent分享站点,发现demonoid是与海盗湾齐名的,之前排名前几的站点已经都无法打开了,只剩这一个,切用且珍惜吧  :-) 源站地址:链接,经过抓取清洗和加工后生成的RSS链接为:https://photo.codefine.site:12524/rssfactory/demonoid-movies,只抓取了1080P及其以上质量的电影。 https://www.demonoid.is/

订阅后的呈现效果:

 image

同时也制作了HTML版的独立网页:

https://movie.codefine.site:12524/

movie list.

电影详情页,包含两个torrent下载地址,IMDB和豆瓣搜索链接。

movie detail.

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:WEB网络, 数码硬件, 移动互联, 软件应用 | 同时打有标签:, |

安装 FileRun,HomeNAS 秒变网盘

HomeNAS上面虽然可以使用SFTP、WebDAV和NAS等协议分享文件,但是在易用性上面还是不如网盘的短连接+简单密码的方式好用。一直想找一个类似网盘的HTTP短连接分享的系统。EMBY的分享按钮似乎不能正常工作,更别谈使用带密码校验的功能了。之前Windows系统的Everything,只支持单个账户登录。

集中搜索了一下类网盘的解决方案,发现NextCloud、H5AI和FileRun都有类似功能,首先安装了NextCloud,发现其只能管理新上传的文件,所有文件必须进入了NextCloud的数据库才能被管理起来,NextCloud提供了命令行工具,扫描指定目录的所有文件和目录加入到其数据库中,但是每次目录有变化都需要重新扫描,不是太友好。直接放弃。

H5AI就没有尝试,主要发现该软件多年未更新。

最后FileRun,从软件的主页上面就看到了不需要导入文件的介绍:

FIleRun

使用docker镜像安装,网上其他资料都是介绍的使用docker-compose安装的,这里我本机已经有mysql的容器在运行了,因此直接使用docker run启动FileRun容器:

docker run -d \
--name filerun \
-p 8080:80 \
-v /opt/filerun/html:/var/www/html \
-v /media:/user-files \
-e FR_DB_HOST=yourdbhostip \
-e FR_DB_PORT=3306 \
-e FR_DB_NAME=filerun \
-e FR_DB_USER=filerun \
-e FR_DB_PASS='yourdbpasswrod' \
-e APACHE_RUN_USER=www-data \
-e APACHE_RUN_USER_ID=33 \
-e APACHE_RUN_GROUP=www-data \
-e APACHE_RUN_GROUP_ID=33 \
afian/filerun

其中/media是HomeNAS希望被管理的文件的根目录。使用superuser:superuser登录后,修改默认密码,完美呈现出media目录的所有文件。所有的文件相关操作均可在FileRun的WEB客户端上面操作。也能使用链接分享文件或者目录。访问分享链接的客户能在页面上一键打包下载所有文件,也能单个下载某个文件。

image

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:WEB网络, 移动互联 | 同时打有标签:, , , |

使用Emby + Picard管理音乐

最近把NAS上面累积下来的音乐都整理了一下,用emby建了一个音乐集。emby自带musicbrainz的插件,能从这个强大的音乐库中搜索MP3的元数据信息。然后从多个维度对音乐进行分类呈现。但是有个问题,很多MP3经过各个二道贩子编辑后,关键元数据信息都跟音乐本身没有任何关联了,因此自动搜索出来的元数据匹配存在一些问题,甚至有的MP3文件经过转码后,只剩下音乐本身,tag元数据全部丢失。只能人工填写,一两千个文件,逐一搜索排查可想而知难度有多大。找到了picard这个工具,可以自行匹配,然后没有匹配的再人工搜索,这样极大提高了准确率。比emby自动但是做了的错误的匹配要好的多。经过picard处理后的音乐文件再导入到emby中,就能准确识别歌手,专辑等信息,进而补充下载专辑唱片封面图等。

难得的是,picard在Win、Linux和Mac平台都能使用。对于Ubuntu 20,使用官方给出的命令很快就能安装成功:

sudo add-apt-repository ppa:musicbrainz-developers/stable
sudo apt-get update
sudo apt install picard

软件界面截图:
picard

导入/emby的效果:
emby

| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:数码硬件, 移动互联, 软件应用, 软件技术 | 同时打有标签:, , |

docker本地安装tiny tiny rss记录

# 启动mariadb 10.0.38
docker run --name mariadb -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD='password' \
-d mariadb:10.0.38

# 安装docker php 5.6
docker run -p 9000:9000 --name php \
-v /opt/codefine.site/:/opt/codefine.site/ \
-v /opt/codefine:/opt/codefine \
-v /media/c2/php//conf:/usr/local/etc/php \
-v /media/c2/php/logs:/phplogs \
-v /opt/phpmyadmin:/opt/phpmyadmin  \
-d php6:latest

# 安装php插件。借助于内部家里的内部梯子。懒得设置debian镜像。
export http_proxy=http://22.22.22.14:10080
apt update
apt install libxml2-dev
apt install libxml2
apt install libcurl3
apt install libcurl4-gnutls-dev
ln -s x86_64-linux-gnu/curl curl
apt-get install -y libfreetype6-dev libjpeg62-turbo-dev libpng-dev

docker-php-ext-configure gd --with-freetype --with-jpeg
docker-php-ext-install -j$(nproc) gd
docker-php-ext-install mysql
docker-php-ext-install mysqli
docker-php-ext-install intl
docker-php-ext-install pdo
docker-php-ext-install pdo_mysql
docker-php-ext-install fileinfo
docker-php-ext-install xml
docker-php-ext-install mbstring
docker-php-ext-install json
docker-php-ext-install opcache

docker-php-ext-enable intl
docker-php-ext-enable pdo
docker-php-ext-enable pdo_mysql
docker-php-ext-enable fileinfo
docker-php-ext-enable xml
docker-php-ext-enable mbstring
docker-php-ext-enable json
docker-php-ext-enable opcache
docker-php-ext-enable mysql
docker-php-ext-enable mysqli
docker-php-ext-enable gd

# 生成新的镜像。
docker save -o php.tar php
docker load -i php.tar
# 重新run一个新的container。

# nginx
cat /etc/nginx/sites-enabled/ttrss
server {
	listen 12345 ssl;
	root /opt/codefine.site/;
	index index.php index.html index.htm;
	server_name photo.codefine.site;
	ssl_certificate     /path/of/server/file.pem;
	ssl_certificate_key /path/of/server/key/file.pem;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

	location / {
		try_files $uri $uri/ =404;
	}

	location ~ \.php$ {
		include snippets/fastcgi-php.conf;
		fastcgi_pass   127.0.0.1:9000;
	}
}
| 1 分2 分3 分4 分5 分 (5.00- 1票) Loading ... Loading ... | 归档目录:移动互联, 软件应用, 软件技术 | 同时打有标签:, , |
返回顶部