本地书仓 在 storage/localStore
中可以集中存放管理本地书籍,开启访问权限的用户可以在 页面-浏览书仓
中选择批量导入到自己的书架进行阅读。
自定义样式 页面还会加载应用目录下的 reader-assets/reader.css
这个CSS样式文件,在这个文件中可以自定义页面样式。
自定义样式可能需要配合 !important
来设定属性
接口服务配置 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 reader : app : storagePath : storage # 数据存储目录 showUI : false # 是否显示UI debug : false # 是否调试模式 packaged : false # 是否打包为客户端 secure : false # 是否需要登录鉴权,开启后将支持多用户模式 inviteCode : ” “ # 注册邀请码,为空时则开放注册,否则注册时需要输入邀请码 secureKey : ” “ # 管理密码,开启鉴权时,前端管理用户空间的管理密码 proxy : false # 是否使用代理 proxyType : ” HTTP “ # 代理类型 proxyHost : ” “ # 代理 Host proxyPort : ” “ # 代理 port proxyUsername : ” “ # 代理鉴权 用户名 proxyPassword : ” “ # 代理鉴权 密码 cacheChapterContent : false # 是否缓存章节内容 userLimit : 50 # 用户上限,最大 50 userBookLimit : 200 # 用户书籍上限,默认最大 200 server : port : 8080 # 监听端口 webUrl : http://localhost:${reader.server.port} # web链接
WebDAV同步配置
首先需要在阅读App里面配置 WebDAV备份
服务器地址: http://IP:端口/reader3/webdav/
如果开启了 reader.app.secure
选项,那么使用网页注册的用户名和密码登录,否则使用用户名 default
和 密码 123456
登录
然后在阅读App里面点击备份
在网页里面查看WebDAV文件,确认是否备份成功
备份成功之后
服务器会自动同步书籍阅读进度(暂不支持章节内阅读位置,也不会自动同步书架信息变更)
可以直接选择阅读App的备份文件进行恢复,这样会直接覆盖书源和书架信息
可以备份当前书源和书架信息到WebDAV,但是必须要先备份成功
需要通过恢复备份文件来同步书籍和书源信息
PS: 本地书源的书籍同步后无法打开,除非换源
客户端 Windows / MacOS / Linux 从 releases 下载对应平台安装包安装即可,需要安装java10以上环境
MacOS 版 storage
默认是 用户目录/.reader/storage
,其它版本 storage
默认是 程序目录/storage
配置文件 storage/windowConfig.json
包含图形界面和接口服务的相关配置,JSON格式,修改后,程序重启才会生效
请仔细检查配置内容,不支持注释,此处注释只是为了方便理解
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ”showUI“ : true , // 是否显示UI界面,默认为显示 ”debug“ : false , // 是否调试模式,默认为否 ”positionX“ : 0.0 , // 窗口位置 横坐标 ”positionY“ : 0.0 , // 窗口位置 纵坐标 ”width“ : 1280.0 , // 窗口大小 宽度 ”height“ : 800.0 , // 窗口大小 高度 ”rememberSize“ : true , // 改变窗口大小时,是否记住窗口大小,默认记住 ”rememberPosition“ : false , // 移动窗口时,是否记住窗口位置,默认不记住 ”setWindowPosition“ : false , // 启动时是否设置窗口位置,默认不设置,窗口默认居中 ”setWindowSize“ : true , // 启动时是否设置窗口大小,默认按照配置文件进行设置 ”serverConfig“ : { // 接口服务配置,此处配置会被 `serverPort|showUI|debug` 等覆盖 ”reader.app.secure“ : false , // 是否需要登录鉴权,开启后将支持多用户模式 ”reader.app.inviteCode“ : ” “ , // 注册邀请码,为空时则开放注册,否则注册时需要输入邀请码。仅多用户模式下有效 ”reader.app.secureKey“ : ” “ , // 管理密码,开启鉴权时,前端管理用户空间的管理密码。仅多用户模式下有效
手机端 使用docker版本或者服务器版本,访问web页面
可以添加为桌面应用
服务器版 从 releases 下载 reader-$version.jar
运行即可,需要安装java10以上环境
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 # 创建目录 mkdir reader3 cd reader3 # 下载 jar wget ” xxxx “ # 安装jdk10以上环境... # 运行 # 自用版 java -jar reader- $version .jar # 多用户版 java -jar reader- $version .jar --reader.app.secure=true --reader.app.secureKey=管理密码 --reader.app.inviteCode=注册邀请码 # web端 http://localhost:8080/ # 接口地址 http://localhost:8080/reader3/
Docker版 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 # 自行编译 # docker build -t reader:latest . # 使用环境变量覆盖服务配置,环境变量采用大写字母,不允许使用.-符号,采用下划线“_”取代点“.” 减号“-”直接删除 # docker run -d --restart=always --name=reader -e ”SPRING_PROFILES_ACTIVE=prod“ -v $(pwd)/logs:/logs -v $(pwd)/storage:/storage -p 8080:8080 reader:latest # 跨平台镜像 # 新建构建器 # docker buildx create --use --name mybuilder # 启动构建器 # docker buildx inspect mybuilder --bootstrap # 查看构建器及其所支持的cpu架构 # docker buildx ls # 构建跨平台镜像 # docker buildx build -t reader:latest --platform=linux/arm,linux/arm64,linux/amd64 . --push # 使用预编译的镜像 # 自用版(建议修改映射端口) docker run -d --restart=always --name=reader -e ” SPRING_PROFILES_ACTIVE=prod “ -v $( pwd ) /logs:/logs -v $( pwd ) /storage:/storage -p 8080:8080 hectorqin/reader # 多用户版(建议修改映射端口) docker run -d --restart=always --name=reader -v $( pwd ) /logs:/logs -v $( pwd ) /storage:/storage -p 8080:8080 hectorqin/reader java -jar /app/bin/reader.jar --spring.profiles.active=prod --reader.app.secure=true --reader.app.secureKey=管理密码 --reader.app.inviteCode=注册邀请码 # 多用户版 使用环境变量(建议修改映射端口) docker run -d --restart=always --name=reader -e ” SPRING_PROFILES_ACTIVE=prod “ -e ” READER_APP_SECURE=true “ -e ” READER_APP_SECUREKEY=管理密码 “ -e ” READER_APP_INVITECODE=注册邀请码 “ -v $( pwd ) /logs:/logs -v $( pwd ) /storage:/storage -p 8080:8080 hectorqin/reader # 更新docker镜像 # docker pull hectorqin/reader # :后面的端口修改为映射端口 # web端 http://localhost:8080/ # 接口地址 http://localhost:8080/reader3/ # 通过watchtower手动更新 docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtower --cleanup --run-once reader
Docker-Compose版(推荐) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 安装docker-compose # Debian/Ubuntu apt install docker-compose -y # CentOS curl -L ” https://github.com/docker/compose/releases/download/1.29.2/docker-compose- $( uname -s ) - $( uname -m ) “ -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose docker-compose --version # 下载项目里的 docker-compose.yaml wget https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yaml # 根据 docker-compose.yaml 里面的注释编辑所需配置 # 启动 docker-compose docker-compose up -d # 停止 docker-compose docker-compose stop # 查看实时日志 docker logs -f reader # 手动更新 docker-compose pull && docker-compose up -d
Nginx反向代理 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 # 此文件放入 conf.d目录下,一般可用 touch /etc/nginx/conf.d/reader.conf 创建 server { listen 80 ; server_name 域名; #开启ssl解除注释 #不使用宝塔获取证书脚本 https://github.com/Misaka-blog/acme-1key #listen 443 ssl; #ssl_certificate 证书.cer; #ssl_certificate_key 证书.key; #ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5; #ssl_prefer_server_ciphers on; #ssl_session_cache shared:SSL:10m; #ssl_session_timeout 10m; #if ($server_port !~ 443){ # rewrite ^(/.*)$ https://$host$1 permanent; #} #error_page 497 https://$host$request_uri; gzip on ; #开启gzip压缩 gzip_min_length 1k ; #设置对数据启用压缩的最少字节数 gzip_buffers 4 16k ; gzip_http_version 1.0 ; gzip_comp_level 6 ; #设置数据的压缩等级,等级为1-9,压缩比从小到大 gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml; #设置需要压缩的数据格式 gzip_vary on ; client_max_body_size 50m ; #允许上传50MB文件,上传本地书籍需要修改此项大小.如nginx主配置文件已添加,删除此行并修改主配置即可 location / { proxy_pass http://127.0.0.1:4396; #端口自行修改为映射端口 proxy_http_version 1.1 ; proxy_cache_bypass $http_upgrade ; proxy_set_header Upgrade $http_upgrade ; proxy_set_header Connection ”upgrade“ ; 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 X-Forwarded-Proto $scheme ; proxy_set_header X-Forwarded-Host $host ; proxy_set_header X-Forwarded-Port $server_port ; } }