From f2fb4855790116c209ffac59a04f0f58357849cf Mon Sep 17 00:00:00 2001 From: hectorqin Date: Thu, 1 Sep 2022 11:34:21 +0800 Subject: [PATCH 01/43] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E8=BF=9C?= =?UTF-8?q?=E7=A8=8BWebView=E9=95=9C=E5=83=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 2 +- docker-compose.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc.md b/doc.md index ae480096..9d5edfbb 100644 --- a/doc.md +++ b/doc.md @@ -269,7 +269,7 @@ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock containrrr/watchtow # 使用 remote-webview 功能 # 1.创建 remote-webview 容器 -docker run -d --network host --restart=always scrapinghub/splash +docker run -d --network host --restart=always hectorqin/remote-webview # 2.重建 reader 容器 reader使用宿主机网络:--network host reader添加环境变量:-e "READER_APP_REMOTEWEBVIEWAPI=http://localhost:8050" diff --git a/docker-compose.yaml b/docker-compose.yaml index 3722bf65..3a549eef 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -30,7 +30,7 @@ services: - READER_APP_SECUREKEY=adminpwd #管理员密码 建议修改 - READER_APP_INVITECODE=registercode #注册邀请码 建议修改,如不需要可注释或删除 # remote-webview: - # image: scrapinghub/splash + # image: hectorqin/remote-webview # container_name: remote-webview #容器名 可自行修改 # restart: always # ports: From 2279d9eb400e64c67f9c8a569a77d0c42545eeae Mon Sep 17 00:00:00 2001 From: hectorqin Date: Thu, 8 Sep 2022 12:45:15 +0800 Subject: [PATCH 02/43] =?UTF-8?q?Docker=E9=BB=98=E8=AE=A4=E4=BD=BF?= =?UTF-8?q?=E7=94=A8=E9=97=AD=E6=BA=90=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 33 +-------------------------------- Dockerfile.source | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 32 deletions(-) create mode 100644 Dockerfile.source diff --git a/Dockerfile b/Dockerfile index 2a3c1b1e..27e9e4f2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,39 +1,8 @@ -FROM node:lts-alpine3.14 AS build-web -ADD . /app -WORKDIR /app/web -# Build web -RUN yarn && yarn build - -# Build jar -FROM gradle:6.1.1-jdk8 AS build-env -ADD --chown=gradle:gradle . /app -WORKDIR /app -COPY --from=build-web /app/web/dist /app/src/main/resources/web -RUN \ - rm src/main/java/com/htmake/reader/ReaderUIApplication.kt; \ - gradle -b cli.gradle assemble --info; \ - mv ./build/libs/*.jar ./build/libs/reader.jar - -FROM amazoncorretto:8u332-alpine3.14-jre -# Install base packages -RUN \ - # apk update; \ - # apk upgrade; \ - # Add CA certs tini tzdata - apk add --no-cache ca-certificates tini tzdata; \ - update-ca-certificates; \ - # Clean APK cache - rm -rf /var/cache/apk/*; +FROM hectorqin/reader # 时区 ENV TZ=Asia/Shanghai -#RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ -# && echo Asia/Shanghai > /etc/timdezone \ -# && dpkg-reconfigure -f noninteractive tzdata - EXPOSE 8080 ENTRYPOINT ["/sbin/tini", "--"] -# COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas -COPY --from=build-env /app/build/libs/reader.jar /app/bin/reader.jar CMD ["java", "-jar", "/app/bin/reader.jar" ] diff --git a/Dockerfile.source b/Dockerfile.source new file mode 100644 index 00000000..2a3c1b1e --- /dev/null +++ b/Dockerfile.source @@ -0,0 +1,39 @@ +FROM node:lts-alpine3.14 AS build-web +ADD . /app +WORKDIR /app/web +# Build web +RUN yarn && yarn build + +# Build jar +FROM gradle:6.1.1-jdk8 AS build-env +ADD --chown=gradle:gradle . /app +WORKDIR /app +COPY --from=build-web /app/web/dist /app/src/main/resources/web +RUN \ + rm src/main/java/com/htmake/reader/ReaderUIApplication.kt; \ + gradle -b cli.gradle assemble --info; \ + mv ./build/libs/*.jar ./build/libs/reader.jar + +FROM amazoncorretto:8u332-alpine3.14-jre +# Install base packages +RUN \ + # apk update; \ + # apk upgrade; \ + # Add CA certs tini tzdata + apk add --no-cache ca-certificates tini tzdata; \ + update-ca-certificates; \ + # Clean APK cache + rm -rf /var/cache/apk/*; + +# 时区 +ENV TZ=Asia/Shanghai + +#RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ +# && echo Asia/Shanghai > /etc/timdezone \ +# && dpkg-reconfigure -f noninteractive tzdata + +EXPOSE 8080 +ENTRYPOINT ["/sbin/tini", "--"] +# COPY --from=hengyunabc/arthas:latest /opt/arthas /opt/arthas +COPY --from=build-env /app/build/libs/reader.jar /app/bin/reader.jar +CMD ["java", "-jar", "/app/bin/reader.jar" ] From 7e505c206cd85d026ae7fe9423002218e2c5eaf6 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Thu, 8 Sep 2022 15:37:25 +0800 Subject: [PATCH 03/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9README?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 28b506ed..82518236 100644 --- a/README.md +++ b/README.md @@ -59,12 +59,12 @@ - [x] 并发搜索书籍来源 - [x] WebDav同步 - [x] 导入本地书籍,支持epub -- [x] 阅读3核心兼容。已最大可能兼容,不支持使用webview,不支持使用cookie、cache及调用原生java等高级Javascript功能 +- [x] 阅读3核心兼容。已最大可能兼容,支持使用webview,支持使用javascript。 - [x] 支持RSS订阅 ## 问题 -- 部分使用了 `Javascript` 的书源可能会报错,不支持 `cookie` 和 `cache` 功能 +- 部分使用了 `Javascript` 的书源可能会报错,如调用原生java等高级Javascript功能 - `webview` 功能需要另外部署接口,不支持 `sourceRegex` 匹配资源响应 - 不支持书源登录功能 From 41cd1f4f19c139229e8a4448d9b6fe8856a97f73 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Mon, 31 Oct 2022 10:32:40 +0800 Subject: [PATCH 04/43] =?UTF-8?q?ci:=20=E6=B5=8B=E8=AF=95=20railway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 2 +- README.md | 4 ++++ nixpacks.toml | 2 ++ 3 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 nixpacks.toml diff --git a/LICENSE b/LICENSE index f288702d..6c3aca48 100644 --- a/LICENSE +++ b/LICENSE @@ -652,7 +652,7 @@ Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - Copyright (C) + Reader Copyright (C) 2022 hectorqin This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. diff --git a/README.md b/README.md index 82518236..45eb57d6 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,10 @@ ![](imgs/mpcode.png) +> 注意❗️ +> +> Reader 完整源码仅开放到 v2.5.4,新版本当前仅开放部分开源源码,见 https://github.com/hectorqin/reader-legado. +
免责声明(Disclaimer) 阅读是一款提供网络文学搜索的工具,为广大网络文学爱好者提供一种方便、快捷舒适的试读体验。 diff --git a/nixpacks.toml b/nixpacks.toml new file mode 100644 index 00000000..eb4d0d87 --- /dev/null +++ b/nixpacks.toml @@ -0,0 +1,2 @@ +[start] + runImage = 'hectorqin/reader' \ No newline at end of file From 7cc2bf4620dbc4c2e0a1de3653aa438599e54342 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Mon, 31 Oct 2022 10:40:42 +0800 Subject: [PATCH 05/43] =?UTF-8?q?ci:=20=E6=B5=8B=E8=AF=95railway?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nixpacks.toml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nixpacks.toml b/nixpacks.toml index eb4d0d87..cf35bb24 100644 --- a/nixpacks.toml +++ b/nixpacks.toml @@ -1,2 +1,7 @@ +[phases.build] +cmds = ['railway run'] + [start] - runImage = 'hectorqin/reader' \ No newline at end of file +runImage = 'hectorqin/reader' +onlyIncludeFiles = ['Dockerfile'] +cmd = ['/sbin/tini --'] \ No newline at end of file From bc8315a88527b0c5b5468f94c913f7d5eeea7efe Mon Sep 17 00:00:00 2001 From: hectorqin Date: Wed, 2 Nov 2022 12:25:24 +0800 Subject: [PATCH 06/43] =?UTF-8?q?ci:=20=E4=BF=AE=E6=94=B9CI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- nixpacks.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixpacks.toml b/nixpacks.toml index cf35bb24..750ac456 100644 --- a/nixpacks.toml +++ b/nixpacks.toml @@ -4,4 +4,4 @@ cmds = ['railway run'] [start] runImage = 'hectorqin/reader' onlyIncludeFiles = ['Dockerfile'] -cmd = ['/sbin/tini --'] \ No newline at end of file +cmd = '/sbin/tini --' \ No newline at end of file From c1aae0e3754aa3e63a378f129bab916ceabf07dc Mon Sep 17 00:00:00 2001 From: NZESupB Date: Tue, 15 Nov 2022 10:08:32 +0800 Subject: [PATCH 07/43] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E9=83=A8=E7=BD=B2?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 37 ++++++++++--- docker-compose.yaml | 7 ++- docker-compose.yml | 54 +++++++++++++++++++ reader.sh | 128 ++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 215 insertions(+), 11 deletions(-) create mode 100644 docker-compose.yml create mode 100644 reader.sh diff --git a/doc.md b/doc.md index 9d5edfbb..140ff8fa 100644 --- a/doc.md +++ b/doc.md @@ -278,18 +278,23 @@ reader添加环境变量:-e "READER_APP_REMOTEWEBVIEWAPI=http://localhost:8050 ### Docker-Compose版(推荐) -```bash -#安装docker-compose +```shell +#腾讯云,阿里云,华为云,甲骨文等服务器提供商需在控制台面板手动关闭防火墙并放行端口 +#安装docker 及 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 +yum install docker -y +curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/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 +wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yaml # 根据 docker-compose.yaml 里面的注释编辑所需配置 +vim docker-compose.yaml +# 保存 +esc +:wq # 启动 docker-compose docker-compose up -d @@ -303,10 +308,28 @@ docker logs -f reader docker-compose pull && docker-compose up -d ``` -## Nginx反向代理 +### 通过脚本一键部署 + +```shell +bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) +``` + +## Nginx反向代理(如果有域名可以考虑80端口复用) + +```shell +# 此教程仅限非宝塔等各种面板使用 +# Debian/Ubuntu +apt install nginx -y +# CentOS +yum install nginx -y +vim /etc/nginx/conf.d/reader.conf +将下面代码复制进reader.conf后,修改域名输入 +esc +:wq +保持即可 +``` ```nginx -# 此文件放入 conf.d目录下,一般可用 touch /etc/nginx/conf.d/reader.conf 创建 server { listen 80; server_name 域名; diff --git a/docker-compose.yaml b/docker-compose.yaml index 3a549eef..f57dd05c 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,10 +1,9 @@ version: '3.1' services: # reader 在线阅读 -# 第三方在线演示(服务器位于日本):[https://reader.nxnow.top](https://reader.nxnow.top) 测试账号/密码分别为guest/guest123,也可自行创建账号添加书源,不定期删除长期未登录账号 -# 源仓库书源 : yckceo.com/yuedu/shuyuan/index.html -# 阅读官方书源 : https://www.legado.top/blog/book-source -# 喵公子书源 : http://shuyuan.miaogongzi.net/shuyuan/1623355431.json +# 公开服务器(服务器位于日本):[https://reader.nxnow.top](https://reader.nxnow.top) 测试账号/密码分别为guest/guest123,也可自行创建账号添加书源,不定期删除长期未登录账号(2周) +# 阅读官方书源 : [https://legado.pages.dev](https://legado.pages.dev) 或者 [http://legado.git.llc](https://legado.pages.dev) 点击打开连接,添加远程书源即可 +# 公众号汇总 : [https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A](https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A) # 手动更新方式 : docker-compose pull && docker-compose up -d reader: image: hectorqin/reader diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..c4cd3f4e --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,54 @@ +version: '3.1' +services: +# reader 在线阅读 +# 公开服务器(服务器位于日本):[https://reader.nxnow.top](https://reader.nxnow.top) 测试账号/密码分别为guest/guest123,也可自行创建账号添加书源,不定期删除长期未登录账号(2周) +# 阅读官方书源 : [https://legado.pages.dev](https://legado.pages.dev) 或者 [http://legado.git.llc](https://legado.pages.dev) 点击打开连接,添加远程书源即可 +# 公众号汇总 : [https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A](https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A) +# 手动更新方式 : 在此文件所在的目录下执行 docker-compose pull && docker-compose up -d +# Debian 10+/Ubuntu18+ 一键安装命令 浏览器打开ip:4396即可,国内服务器需手动放行映射端口(默认为4396 +# cd /home && wget https://raw.nxnow.top/NZESupB/Profile/main/dockercompose/reader/docker-compose.yml && apt update && apt install docker-compose -y && docker-compose up -d +# CentOS7+ 一键安装命令 (未测试) +# cd /home && wget https://raw.nxnow.top/NZESupB/Profile/main/dockercompose/reader/docker-compose.yml && yum update && yum install docker && curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose && docker-compose up -d + reader: + #image: hectorqin/reader # 普通镜像 + image: hectorqin/reader:openj9-latest # Openj9镜像,arm64架构或小内存机器优先使用 + container_name: reader #容器名 可自行修改 + restart: always + ports: + - 4396:8080 #4396端口映射可自行修改,8080请勿修改 + volumes: + - /home/reader/logs:/logs #log映射目录 /home/reader/logs 映射目录可自行修改 + - /home/reader/storage:/storage #数据映射目录 /home/reader/storage 映射目录可自行修改 + environment: + - SPRING_PROFILES_ACTIVE=prod + #- READER_APP_USERLIMIT=50 #用户上限,默认且最大值为50 + - READER_APP_USERBOOKLIMIT=200 #用户书籍上限,默认200 + - READER_APP_CACHECHAPTERCONTENT=true #开启缓存章节内容 + - READER_APP_REMOTEWEBVIEWAPI=http://readerwebview:8050 #启用webview(若下方readerwebview容器不开启需注释此行 + # ↓多用户模式配置↓ + - READER_APP_SECURE=true #开启登录鉴权,开启后将支持多用户模式 + - READER_APP_SECUREKEY=adminpwd #管理员密码 建议修改 + - READER_APP_INVITECODE=registercode #注册邀请码 建议修改,如不需要可注释或删除 +# 如需支持webview书源,打开(占用较大,不需要可加 # 注释) + readerwebview: + image: hectorqin/remote-webview + container_name: readerwebview + restart: always + environment: + - TZ=Asia/Shanghai +# 自动更新docker镜像 + watchtower: + image: containrrr/watchtower + container_name: watchtower + restart: always + environment: + - TZ=Asia/Shanghai + volumes: + - /var/run/docker.sock:/var/run/docker.sock + command: reader readerwebview watchtower --cleanup --schedule "0 0 4 * * *" + # 仅更新reader与watchtower容器,如需其他自行添加 '容器名' ,如:reader watchtower nginx + # --cleanup 更新后清理旧版本镜像 + # --schedule 自动检测更新 crontab定时(限定6位crontab) 此处代表凌晨4点整 +volumes: + reader: + readerwebview: \ No newline at end of file diff --git a/reader.sh b/reader.sh new file mode 100644 index 00000000..ec414d21 --- /dev/null +++ b/reader.sh @@ -0,0 +1,128 @@ +#!/bin/bash + +red='\033[0;31m' +green="\033[32m" +yellow='\033[0;33m' +plain='\033[0m' + +file_dir="" +remotePort="" + +# CheckRoot +if [[ $EUID -ne 0 ]]; then + echo "请使用root用户登录!" 1>&2 + exit 1 +fi + +# CheckSystem +if [[ -f /etc/redhat-release ]]; then + release="centos" +elif cat /etc/issue | grep -q -E -i "debian"; then + release="debian" +elif cat /etc/issue | grep -q -E -i "ubuntu"; then + release="ubuntu" +elif cat /etc/issue | grep -q -E -i "centos|red hat|redhat"; then + release="centos" +elif cat /proc/version | grep -q -E -i "debian"; then + release="debian" +elif cat /proc/version | grep -q -E -i "ubuntu"; then + release="ubuntu" +elif cat /proc/version | grep -q -E -i "centos|red hat|redhat"; then + release="centos" +fi +bit=$(uname -m) + if test "$bit" != "x86_64"; then + bit="arm64" + else bit="amd64" +fi + +os_version="" + +# os version +if [[ -f /etc/os-release ]]; then + os_version=$(awk -F'[= ."]' '/VERSION_ID/{print $3}' /etc/os-release) +fi +if [[ -z "$os_version" && -f /etc/lsb-release ]]; then + os_version=$(awk -F'[= ."]+' '/DISTRIB_RELEASE/{print $2}' /etc/lsb-release) +fi + +if [[ x"${release}" == x"centos" ]]; then + if [[ ${os_version} -le 6 ]]; then + echo -e "${red}请使用 CentOS 7 或更高版本的系统!${plain}\n" && exit 1 + fi +elif [[ x"${release}" == x"ubuntu" ]]; then + if [[ ${os_version} -lt 16 ]]; then + echo -e "${red}请使用 Ubuntu 16 或更高版本的系统!${plain}\n" && exit 1 + fi +elif [[ x"${release}" == x"debian" ]]; then + if [[ ${os_version} -lt 9 ]]; then + echo -e "${red}请使用 Debian 9 或更高版本的系统!${plain}\n" && exit 1 + fi +fi + +install_dockercompose() { + if [[ x"${release}" == x"centos" ]]; then + yum update && yum install wget curl docker -y + curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose + else + apt update && apt install wget curl docker-compose -y + fi +} + +install_reader() { + mkdir ${orgin_file_dir} + cd ${orgin_file_dir} + rm docker-compose* + wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yml + sed -i "s/\/home\/reader/${file_dir}/" docker-compose.yml + sed -i "s/4396/${remotePort}/" docker-compose.yml + # 多用户 + # 远程webview + docker-compose up -d +} + +getRemotePort () { + echo "请输入部署端口,例如 4396" + read -p "不填默认为4396: " remotePort + if [[ -z "$remotePort" ]];then + remotePort="4396" + fi + if [ "$remotePort" -gt 0 ] 2>/dev/null;then + if [[ $remotePort -lt 0 || $remotePort -gt 65535 ]];then + echo -e "端口号不正确,请输入0-65535" + getRemotePort + exit 0 + fi + else + echo -e "端口号不正确,请输入0-65535" + getRemotePort + exit 0 + fi +} + + +getfileDir () { + echo -e "${green} 请输入数据存放目录,例如 /home/reader : ${plain}" + read -p "不填默认为/home/reader: " file_dir + if [[ -z "$file_dir" ]];then + file_dir="/home/reader" + fi + orgin_file_dir=$file_dir + file_dir=${file_dir//\//\\\/} +} + +Server_IP='' +getIpaddr () { + Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1` +} + +echo -e "${green}开始安装${plain}" +install_dockercompose +getfileDir +getRemotePort +install_reader +getIpaddr +echo -e "${green}初步部署完成,国内服务器请在控制台打开端口${remotePort}${plain}" +echo -e "${green}浏览器打开网页${plain} http://${Server_IP}:${remotePort}" +echo -e "${green}如需修改其他配置请前往${orgin_file_dir}根据注释修改docker-compose.yml文件后${plain}" +echo -e "${green}通过命令docker-compose up -d 重启即可${plain}" \ No newline at end of file From bdd6fc3beeef99d6d012698c147967ed31869245 Mon Sep 17 00:00:00 2001 From: NZESupB Date: Tue, 15 Nov 2022 10:11:32 +0800 Subject: [PATCH 08/43] update cdn --- reader.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reader.sh b/reader.sh index ec414d21..b32f3b35 100644 --- a/reader.sh +++ b/reader.sh @@ -63,7 +63,7 @@ fi install_dockercompose() { if [[ x"${release}" == x"centos" ]]; then yum update && yum install wget curl docker -y - curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose + curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose else apt update && apt install wget curl docker-compose -y fi From 05b88d81f1cee5e97fe82ff6c21abcce68c906ab Mon Sep 17 00:00:00 2001 From: NZESupB Date: Tue, 15 Nov 2022 10:12:16 +0800 Subject: [PATCH 09/43] add cdn --- reader.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reader.sh b/reader.sh index b32f3b35..983d9807 100644 --- a/reader.sh +++ b/reader.sh @@ -63,7 +63,7 @@ fi install_dockercompose() { if [[ x"${release}" == x"centos" ]]; then yum update && yum install wget curl docker -y - curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose + curl -L "https://ghproxy.com/https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose else apt update && apt install wget curl docker-compose -y fi @@ -125,4 +125,4 @@ getIpaddr echo -e "${green}初步部署完成,国内服务器请在控制台打开端口${remotePort}${plain}" echo -e "${green}浏览器打开网页${plain} http://${Server_IP}:${remotePort}" echo -e "${green}如需修改其他配置请前往${orgin_file_dir}根据注释修改docker-compose.yml文件后${plain}" -echo -e "${green}通过命令docker-compose up -d 重启即可${plain}" \ No newline at end of file +echo -e "${green}通过命令docker-compose up -d 重启即可${plain}" From ed397891cf57cc1438430651e4ffdc539842fad1 Mon Sep 17 00:00:00 2001 From: NZESupB Date: Tue, 15 Nov 2022 16:41:16 +0800 Subject: [PATCH 10/43] Update reader.sh --- reader.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reader.sh b/reader.sh index 983d9807..5a7a1232 100644 --- a/reader.sh +++ b/reader.sh @@ -63,7 +63,7 @@ fi install_dockercompose() { if [[ x"${release}" == x"centos" ]]; then yum update && yum install wget curl docker -y - curl -L "https://ghproxy.com/https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose + curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose else apt update && apt install wget curl docker-compose -y fi From 2348b8d82cd3ba24977e93c161b680daa7608420 Mon Sep 17 00:00:00 2001 From: NZESupB Date: Wed, 16 Nov 2022 10:35:57 +0800 Subject: [PATCH 11/43] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E8=84=9A=E6=9C=AC,?= =?UTF-8?q?=E4=BF=AE=E6=94=B9CentOS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 12 +++++--- docker-compose.yml | 4 --- reader.sh | 68 ++++++++++++++++++++++++++++++++++++++++++---- 3 files changed, 70 insertions(+), 14 deletions(-) diff --git a/doc.md b/doc.md index 140ff8fa..3c6cfc79 100644 --- a/doc.md +++ b/doc.md @@ -15,6 +15,7 @@ - [服务器版](#服务器版) - [Docker版](#docker版) - [Docker-Compose版(推荐)](#docker-compose版推荐) + - [脚本部署(CentOS&甲骨文非Ubuntu可能不支持)](#通过脚本一键部署) - [Nginx反向代理](#nginx反向代理) - [开发编译](#开发编译) - [编译脚本](#编译脚本) @@ -283,10 +284,9 @@ reader添加环境变量:-e "READER_APP_REMOTEWEBVIEWAPI=http://localhost:8050 #安装docker 及 docker-compose #Debian/Ubuntu apt install docker-compose -y -#CentOS -yum install docker -y -curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose -chmod +x /usr/local/bin/docker-compose +#CentOS 建议修改为Debian/Ubuntu,或者网上搜索Docker/Docker-compose安装教程 +curl -fsSL https://get.docker.com | bash -s docker #国外服务器 +curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #国内服务器 # 下载项目里的 docker-compose.yaml wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yaml @@ -304,6 +304,9 @@ docker-compose stop # 查看实时日志 docker logs -f reader +# 自行导入远程书源(打开链接后复制网址导入即可) +https://legado.pages.dev + # 手动更新 docker-compose pull && docker-compose up -d ``` @@ -311,6 +314,7 @@ docker-compose pull && docker-compose up -d ### 通过脚本一键部署 ```shell +# 此脚本对甲骨文非Ubuntu以及CentOS支持程度极低。此两系统建议网上手动搜索 bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) ``` diff --git a/docker-compose.yml b/docker-compose.yml index c4cd3f4e..7b022d14 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,10 +5,6 @@ services: # 阅读官方书源 : [https://legado.pages.dev](https://legado.pages.dev) 或者 [http://legado.git.llc](https://legado.pages.dev) 点击打开连接,添加远程书源即可 # 公众号汇总 : [https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A](https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A) # 手动更新方式 : 在此文件所在的目录下执行 docker-compose pull && docker-compose up -d -# Debian 10+/Ubuntu18+ 一键安装命令 浏览器打开ip:4396即可,国内服务器需手动放行映射端口(默认为4396 -# cd /home && wget https://raw.nxnow.top/NZESupB/Profile/main/dockercompose/reader/docker-compose.yml && apt update && apt install docker-compose -y && docker-compose up -d -# CentOS7+ 一键安装命令 (未测试) -# cd /home && wget https://raw.nxnow.top/NZESupB/Profile/main/dockercompose/reader/docker-compose.yml && yum update && yum install docker && curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose && docker-compose up -d reader: #image: hectorqin/reader # 普通镜像 image: hectorqin/reader:openj9-latest # Openj9镜像,arm64架构或小内存机器优先使用 diff --git a/reader.sh b/reader.sh index 5a7a1232..e7a8e619 100644 --- a/reader.sh +++ b/reader.sh @@ -7,6 +7,11 @@ plain='\033[0m' file_dir="" remotePort="" +isMultiUser="" +adminPassword="" +registerCode="" +strTrue="true" +dockerImages="" # CheckRoot if [[ $EUID -ne 0 ]]; then @@ -62,7 +67,8 @@ fi install_dockercompose() { if [[ x"${release}" == x"centos" ]]; then - yum update && yum install wget curl docker -y + yum update -y && yum install wget curl docker -y + systemctl restart docker curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose else apt update && apt install wget curl docker-compose -y @@ -70,13 +76,21 @@ install_dockercompose() { } install_reader() { - mkdir ${orgin_file_dir} + mkdir -p ${orgin_file_dir}/storage/data/default cd ${orgin_file_dir} rm docker-compose* - wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yml + wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yaml + echo -e "${green} 正在下载默认书源 ${plain}" + wget https://legado.pages.dev/sy-yc.json -O storage/data/default/bookSource.json + echo -e "${green} 正在配置docker变量 ${plain}" sed -i "s/\/home\/reader/${file_dir}/" docker-compose.yml sed -i "s/4396/${remotePort}/" docker-compose.yml + sed -i "s/openj9-latest/${dockerImages}/" docker-compose.yml # 多用户 + sed -i "s/READER_APP_SECURE\=true/READER_APP_SECURE\=${isMultiUser}/" docker-compose.yml + sed -i "s/adminpwd/${adminPassword}/" docker-compose.yml + sed -i "s/registercode/${registerCode}/" docker-compose.yml + echo -e "${green} 准备启动 ${plain}" # 远程webview docker-compose up -d } @@ -103,7 +117,7 @@ getRemotePort () { getfileDir () { echo -e "${green} 请输入数据存放目录,例如 /home/reader : ${plain}" - read -p "不填默认为/home/reader: " file_dir + read -p "不填默认为/home/reader : " file_dir if [[ -z "$file_dir" ]];then file_dir="/home/reader" fi @@ -111,18 +125,60 @@ getfileDir () { file_dir=${file_dir//\//\\\/} } +getMultiUser () { + echo -e "${green} 是否需要开启多用户 : ${plain}" + read -p "填0不开启,不填开启 : " isMultiUser + if [[ -z "$isMultiUser" ]];then + isMultiUser="true" + else + isMultiUser="false" + fi +} + +getPwdOrCode () { + echo -e "${green} 请输入管理密码,用于加载用户空间 : ${plain}" + read -p "建议修改此参数,默认为adminpwd : " adminPassword + if [[ -z "$adminPassword" ]];then + adminPassword="adminpwd" + fi + echo -e "${green} 请输入邀请码,用于注册使用 : ${plain}" + read -p "不填默认为空 : " registerCode + if [[ -z "$registerCode" ]];then + registerCode="" + fi +} + +getDockerImages () { + echo -e "${green} 请输入需要的镜像 arm或者小内存(1G)机器建议openj9,其余建议基础镜像 : ${plain}" + read -p "不输入为基础镜像,输入其他值为openj9 : " dockerImages + if [[ -z "$dockerImages" ]];then + dockerImages="latest" + else + dockerImages="openj9-latest" + fi +} + Server_IP='' getIpaddr () { Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1` } echo -e "${green}开始安装${plain}" +echo -e "${green}甲骨文系统可能需要手动安装docker,本脚本仅测试CentOS7,Ubuntu20+,Debian10+${plain}" +echo -e "${green}建议放弃CentOS,此脚本不对该系统继续适配,不会写${plain}" install_dockercompose getfileDir getRemotePort +getMultiUser +if [ $isMultiUser == "true" ]; then + getPwdOrCode +fi +getDockerImages install_reader getIpaddr + echo -e "${green}初步部署完成,国内服务器请在控制台打开端口${remotePort}${plain}" echo -e "${green}浏览器打开网页${plain} http://${Server_IP}:${remotePort}" -echo -e "${green}如需修改其他配置请前往${orgin_file_dir}根据注释修改docker-compose.yml文件后${plain}" -echo -e "${green}通过命令docker-compose up -d 重启即可${plain}" +echo -e "${green}如需修改其他配置请前往 cd${orgin_file_dir} 根据注释修改 vim docker-compose.yml文件后${plain}" +echo -e "${green}先自行学习vim用法,否者建议使用sftp或WindTerm等ssh自带sftp的软件直接打开编辑${plain}" +echo -e "${green}通过命令docker-compose up -d 重启即可${plain}" \ No newline at end of file From f29c42f93c91059a348796373a6e2a6918bfe4b2 Mon Sep 17 00:00:00 2001 From: NZESupB Date: Wed, 16 Nov 2022 11:53:04 +0800 Subject: [PATCH 12/43] update shell --- doc.md | 6 +++--- reader.sh | 55 ++++++++++++++++++++++++++++++++++++++++++++++++------- 2 files changed, 51 insertions(+), 10 deletions(-) diff --git a/doc.md b/doc.md index 3c6cfc79..4a0c6919 100644 --- a/doc.md +++ b/doc.md @@ -15,7 +15,7 @@ - [服务器版](#服务器版) - [Docker版](#docker版) - [Docker-Compose版(推荐)](#docker-compose版推荐) - - [脚本部署(CentOS&甲骨文非Ubuntu可能不支持)](#通过脚本一键部署) + - [脚本部署(甲骨文非Ubuntu可能不支持)](#通过脚本一键部署) - [Nginx反向代理](#nginx反向代理) - [开发编译](#开发编译) - [编译脚本](#编译脚本) @@ -284,7 +284,7 @@ reader添加环境变量:-e "READER_APP_REMOTEWEBVIEWAPI=http://localhost:8050 #安装docker 及 docker-compose #Debian/Ubuntu apt install docker-compose -y -#CentOS 建议修改为Debian/Ubuntu,或者网上搜索Docker/Docker-compose安装教程 +#CentOS curl -fsSL https://get.docker.com | bash -s docker #国外服务器 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #国内服务器 @@ -314,7 +314,7 @@ docker-compose pull && docker-compose up -d ### 通过脚本一键部署 ```shell -# 此脚本对甲骨文非Ubuntu以及CentOS支持程度极低。此两系统建议网上手动搜索 +# 此脚本对甲骨文非Ubuntu系统,CentOS9可能不兼容。建议网上手动搜索 bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) ``` diff --git a/reader.sh b/reader.sh index e7a8e619..505a5338 100644 --- a/reader.sh +++ b/reader.sh @@ -67,8 +67,14 @@ fi install_dockercompose() { if [[ x"${release}" == x"centos" ]]; then - yum update -y && yum install wget curl docker -y - systemctl restart docker + yum install wget curl -y + yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine -y + yum install -y yum-utils device-mapper-persistent-data lvm2 -yaml + yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo + yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y + yum install docker-ce-20.10.18 -y + systemctl start docker + systemctl enable docker curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose else apt update && apt install wget curl docker-compose -y @@ -79,7 +85,7 @@ install_reader() { mkdir -p ${orgin_file_dir}/storage/data/default cd ${orgin_file_dir} rm docker-compose* - wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yaml + wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yml echo -e "${green} 正在下载默认书源 ${plain}" wget https://legado.pages.dev/sy-yc.json -O storage/data/default/bookSource.json echo -e "${green} 正在配置docker变量 ${plain}" @@ -159,13 +165,43 @@ getDockerImages () { } Server_IP='' +Public_IP='' getIpaddr () { - Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1` + # Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1` + Server_IP=$(hostname -I | awk -F " " '{printf $1}') + Public_IP=$(curl http://pv.sohu.com/cityjson 2>> /dev/null | awk -F '"' '{print $4}') + # hosts=("checkip.amazonaws.com" "api.ipify.org" "ifconfig.me/ip" "icanhazip.com" "ipinfo.io/ip" "ipecho.net/plain" "checkipv4.dedyn.io") + + # CURL=`which curl` + # DIG=`which dig` + + # Public_IP=$($DIG +short myip.opendns.com @resolver1.opendns.com A) + + # if [ ! $? -eq 0 ] || [ -z "$Public_IP" ] || [[ ! $Public_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + # echo "Unable to get your public IP address by OpenDNS service, try to another way." + # count=${#hosts[@]} + + # while [ -z "$Public_IP" ] && [[ $count -ne 0 ]]; do + # selectedhost=${hosts[ $RANDOM % ${#hosts[@]} ]} + # Public_IP=$($CURL -4s https://$selectedhost | grep '[^[:blank:]]') && { + # if [ -n "$Public_IP" ] && [[ $Public_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + # break + # else + # Public_IP="" + # count=$(expr $count - 1) + # echo "The host $selectedhost returned an invalid IP address." + # fi + # } || { + # Public_IP="" + # count=$(expr $count - 1) + # echo "The host $selectedhost did not respond." + # } + # done + # fi } echo -e "${green}开始安装${plain}" -echo -e "${green}甲骨文系统可能需要手动安装docker,本脚本仅测试CentOS7,Ubuntu20+,Debian10+${plain}" -echo -e "${green}建议放弃CentOS,此脚本不对该系统继续适配,不会写${plain}" +echo -e "${green}甲骨文系统可能需要手动安装docker,本脚本仅测试CentOS7,8,Ubuntu20+,Debian10+${plain}" install_dockercompose getfileDir getRemotePort @@ -178,7 +214,12 @@ install_reader getIpaddr echo -e "${green}初步部署完成,国内服务器请在控制台打开端口${remotePort}${plain}" -echo -e "${green}浏览器打开网页${plain} http://${Server_IP}:${remotePort}" +if [ $Server_IP == $Public_IP ];then + echo -e "${green}网址:${plain} http://${Server_IP}:${remotePort}" +else + echo -e "${green}网址:${plain} http://${Public_IP}:${remotePort}" +fi + echo -e "${green}如需修改其他配置请前往 cd${orgin_file_dir} 根据注释修改 vim docker-compose.yml文件后${plain}" echo -e "${green}先自行学习vim用法,否者建议使用sftp或WindTerm等ssh自带sftp的软件直接打开编辑${plain}" echo -e "${green}通过命令docker-compose up -d 重启即可${plain}" \ No newline at end of file From 481f7e82f40b4d64b7d46b01e95c8e3d419e99a6 Mon Sep 17 00:00:00 2001 From: NZESupB Date: Wed, 16 Nov 2022 15:02:02 +0800 Subject: [PATCH 13/43] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E5=A4=9A=E4=BD=99?= =?UTF-8?q?=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reader.sh | 33 ++------------------------------- 1 file changed, 2 insertions(+), 31 deletions(-) diff --git a/reader.sh b/reader.sh index 505a5338..ba345dd0 100644 --- a/reader.sh +++ b/reader.sh @@ -72,7 +72,6 @@ install_dockercompose() { yum install -y yum-utils device-mapper-persistent-data lvm2 -yaml yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y - yum install docker-ce-20.10.18 -y systemctl start docker systemctl enable docker curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose @@ -167,37 +166,8 @@ getDockerImages () { Server_IP='' Public_IP='' getIpaddr () { - # Server_IP=`ip addr | grep 'state UP' -A2 | grep inet | egrep -v '(127.0.0.1|inet6|docker)' | awk '{print $2}' | tr -d "addr:" | head -n 1 | cut -d / -f1` Server_IP=$(hostname -I | awk -F " " '{printf $1}') Public_IP=$(curl http://pv.sohu.com/cityjson 2>> /dev/null | awk -F '"' '{print $4}') - # hosts=("checkip.amazonaws.com" "api.ipify.org" "ifconfig.me/ip" "icanhazip.com" "ipinfo.io/ip" "ipecho.net/plain" "checkipv4.dedyn.io") - - # CURL=`which curl` - # DIG=`which dig` - - # Public_IP=$($DIG +short myip.opendns.com @resolver1.opendns.com A) - - # if [ ! $? -eq 0 ] || [ -z "$Public_IP" ] || [[ ! $Public_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - # echo "Unable to get your public IP address by OpenDNS service, try to another way." - # count=${#hosts[@]} - - # while [ -z "$Public_IP" ] && [[ $count -ne 0 ]]; do - # selectedhost=${hosts[ $RANDOM % ${#hosts[@]} ]} - # Public_IP=$($CURL -4s https://$selectedhost | grep '[^[:blank:]]') && { - # if [ -n "$Public_IP" ] && [[ $Public_IP =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - # break - # else - # Public_IP="" - # count=$(expr $count - 1) - # echo "The host $selectedhost returned an invalid IP address." - # fi - # } || { - # Public_IP="" - # count=$(expr $count - 1) - # echo "The host $selectedhost did not respond." - # } - # done - # fi } echo -e "${green}开始安装${plain}" @@ -217,7 +187,8 @@ echo -e "${green}初步部署完成,国内服务器请在控制台打开端口${ if [ $Server_IP == $Public_IP ];then echo -e "${green}网址:${plain} http://${Server_IP}:${remotePort}" else - echo -e "${green}网址:${plain} http://${Public_IP}:${remotePort}" + echo -e "${green}网址:${plain} http://${Server_IP}:${remotePort}" + echo -e "http://${Public_IP}:${remotePort}" fi echo -e "${green}如需修改其他配置请前往 cd${orgin_file_dir} 根据注释修改 vim docker-compose.yml文件后${plain}" From ab1944e5e001d3e52c927d703997c1b1e31bfd2e Mon Sep 17 00:00:00 2001 From: NZESupB Date: Thu, 17 Nov 2022 08:40:26 +0800 Subject: [PATCH 14/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9ssl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/doc.md b/doc.md index 4a0c6919..a4c5f9c2 100644 --- a/doc.md +++ b/doc.md @@ -321,7 +321,7 @@ bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubus ## Nginx反向代理(如果有域名可以考虑80端口复用) ```shell -# 此教程仅限非宝塔等各种面板使用 +# 宝塔等各种面板不适用下列教程 # Debian/Ubuntu apt install nginx -y # CentOS @@ -338,7 +338,8 @@ server { listen 80; server_name 域名; #开启ssl解除注释 - #不使用宝塔获取证书脚本 https://github.com/Misaka-blog/acme-1key + # SSL证书获取 + # https://github.com/acmesh-official/acme.sh/wiki/%E8%AF%B4%E6%98%8E #listen 443 ssl; #ssl_certificate 证书.cer; #ssl_certificate_key 证书.key; From 9e0333a3df89bc23be6a3eeaf4505e3a4f4a819d Mon Sep 17 00:00:00 2001 From: NZESupB Date: Thu, 17 Nov 2022 17:03:55 +0800 Subject: [PATCH 15/43] =?UTF-8?q?=E5=A2=9E=E5=8A=A0curl?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/doc.md b/doc.md index a4c5f9c2..c1bd4551 100644 --- a/doc.md +++ b/doc.md @@ -315,7 +315,12 @@ docker-compose pull && docker-compose up -d ```shell # 此脚本对甲骨文非Ubuntu系统,CentOS9可能不兼容。建议网上手动搜索 +#curl +bash <(curl -L -s https://ghproxy.com/https://raw.githubusercontent.com/NZESupB/reader/master/reader.sh) + +#wget bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) + ``` ## Nginx反向代理(如果有域名可以考虑80端口复用) From 3e0bf63921e470a0bb8ed7b8b5a27fdc8241bffc Mon Sep 17 00:00:00 2001 From: NZESupB Date: Thu, 17 Nov 2022 17:12:39 +0800 Subject: [PATCH 16/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc.md b/doc.md index c1bd4551..76fdefde 100644 --- a/doc.md +++ b/doc.md @@ -316,7 +316,7 @@ docker-compose pull && docker-compose up -d ```shell # 此脚本对甲骨文非Ubuntu系统,CentOS9可能不兼容。建议网上手动搜索 #curl -bash <(curl -L -s https://ghproxy.com/https://raw.githubusercontent.com/NZESupB/reader/master/reader.sh) +bash <(curl -L -s https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) #wget bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) From 33cdf24557546f87cb7c0913a2f26b0e9aabfee2 Mon Sep 17 00:00:00 2001 From: NZESupB Date: Thu, 17 Nov 2022 17:24:18 +0800 Subject: [PATCH 17/43] =?UTF-8?q?=E5=A2=9E=E5=8A=A0restart=E5=91=BD?= =?UTF-8?q?=E4=BB=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reader.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/reader.sh b/reader.sh index ba345dd0..8374a625 100644 --- a/reader.sh +++ b/reader.sh @@ -73,6 +73,7 @@ install_dockercompose() { yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y systemctl start docker + systemctl restart docker systemctl enable docker curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose else From a9f62b7e76fd2606b2013431bac31d9fe55bfb26 Mon Sep 17 00:00:00 2001 From: NZESupB Date: Thu, 17 Nov 2022 18:09:52 +0800 Subject: [PATCH 18/43] =?UTF-8?q?=E9=83=A8=E5=88=86=E6=96=87=E6=9C=AC?= =?UTF-8?q?=E6=8F=90=E7=A4=BA=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reader.sh | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/reader.sh b/reader.sh index 8374a625..bbe8d96c 100644 --- a/reader.sh +++ b/reader.sh @@ -68,15 +68,20 @@ fi install_dockercompose() { if [[ x"${release}" == x"centos" ]]; then yum install wget curl -y + echo -e "${green} 正在移除CentOS遗留无效Docker文件 ${plain}" yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine -y - yum install -y yum-utils device-mapper-persistent-data lvm2 -yaml + echo -e "${green} 正在安装Docker ${plain}" + yum install yum-utils device-mapper-persistent-data lvm2 -y yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin -y + echo -e "${green} 正在启动Docker ${plain}" systemctl start docker systemctl restart docker systemctl enable docker + echo -e "${green} 正在安装docker-compose ${plain}" curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose else + echo -e "${green} 正在安装docker-compose ${plain}" apt update && apt install wget curl docker-compose -y fi } @@ -86,7 +91,7 @@ install_reader() { cd ${orgin_file_dir} rm docker-compose* wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yml - echo -e "${green} 正在下载默认书源 ${plain}" + echo -e "${green} 正在配置默认书源 ${plain}" wget https://legado.pages.dev/sy-yc.json -O storage/data/default/bookSource.json echo -e "${green} 正在配置docker变量 ${plain}" sed -i "s/\/home\/reader/${file_dir}/" docker-compose.yml @@ -109,12 +114,12 @@ getRemotePort () { fi if [ "$remotePort" -gt 0 ] 2>/dev/null;then if [[ $remotePort -lt 0 || $remotePort -gt 65535 ]];then - echo -e "端口号不正确,请输入0-65535" + echo -e "${red} 端口号不正确,请输入0-65535${plain}" getRemotePort exit 0 fi else - echo -e "端口号不正确,请输入0-65535" + echo -e "${red} 端口号不正确,请输入0-65535${plain}" getRemotePort exit 0 fi @@ -171,8 +176,8 @@ getIpaddr () { Public_IP=$(curl http://pv.sohu.com/cityjson 2>> /dev/null | awk -F '"' '{print $4}') } -echo -e "${green}开始安装${plain}" -echo -e "${green}甲骨文系统可能需要手动安装docker,本脚本仅测试CentOS7,8,Ubuntu20+,Debian10+${plain}" +echo -e "${green}准备部署reader${plain}" +echo -e "${green}甲骨文官方系统可能并不适用此脚本,本脚本仅测试CentOS7,8,Ubuntu20+,Debian10+${plain}" install_dockercompose getfileDir getRemotePort @@ -184,14 +189,14 @@ getDockerImages install_reader getIpaddr -echo -e "${green}初步部署完成,国内服务器请在控制台打开端口${remotePort}${plain}" +echo -e "${green}初步部署完成,已配置默认书源,国内服务器等有控制台面板的服务器厂商请手动在控制台打开reader所需的端口${remotePort}${plain}" if [ $Server_IP == $Public_IP ];then echo -e "${green}网址:${plain} http://${Server_IP}:${remotePort}" else - echo -e "${green}网址:${plain} http://${Server_IP}:${remotePort}" - echo -e "http://${Public_IP}:${remotePort}" + echo -e "${green}内网网址:${plain} http://${Server_IP}:${remotePort}" + echo -e "${green}公网网址:${plain} http://${Public_IP}:${remotePort}" fi echo -e "${green}如需修改其他配置请前往 cd${orgin_file_dir} 根据注释修改 vim docker-compose.yml文件后${plain}" echo -e "${green}先自行学习vim用法,否者建议使用sftp或WindTerm等ssh自带sftp的软件直接打开编辑${plain}" -echo -e "${green}通过命令docker-compose up -d 重启即可${plain}" \ No newline at end of file +echo -e "${green}修改后前往 cd${orgin_file_dir} 后通过命令docker-compose up -d 重启即可${plain}" \ No newline at end of file From e90858edb637b83c13571cb61ea169bffe453cbd Mon Sep 17 00:00:00 2001 From: Wulu Date: Wed, 15 Mar 2023 22:07:47 +0800 Subject: [PATCH 19/43] =?UTF-8?q?fix:=20=E4=BF=AE=E6=94=B9=E9=94=99?= =?UTF-8?q?=E5=88=AB=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reader.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reader.sh b/reader.sh index bbe8d96c..c7c3f3da 100644 --- a/reader.sh +++ b/reader.sh @@ -198,5 +198,5 @@ else fi echo -e "${green}如需修改其他配置请前往 cd${orgin_file_dir} 根据注释修改 vim docker-compose.yml文件后${plain}" -echo -e "${green}先自行学习vim用法,否者建议使用sftp或WindTerm等ssh自带sftp的软件直接打开编辑${plain}" -echo -e "${green}修改后前往 cd${orgin_file_dir} 后通过命令docker-compose up -d 重启即可${plain}" \ No newline at end of file +echo -e "${green}先自行学习vim用法,否则建议使用sftp或WindTerm等ssh自带sftp的软件直接打开编辑${plain}" +echo -e "${green}修改后前往 cd${orgin_file_dir} 后通过命令docker-compose up -d 重启即可${plain}" From 54fb3bd314276fb5f1874d1ecbfa330721efaa5e Mon Sep 17 00:00:00 2001 From: hectorqin Date: Thu, 6 Jul 2023 12:44:32 +0800 Subject: [PATCH 20/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=95=99=E7=A8=8B,?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=E4=B9=A6=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 +++- doc.md | 44 ++++++++++++++++++++++++++++++++++++-------- docker-compose.yaml | 4 ++-- docker-compose.yml | 6 +++--- reader.sh | 12 ++++++++++-- 5 files changed, 54 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 45eb57d6..55463ea0 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@
功能说明 书源管理
- 书架管理
+- 书架布局
- 搜索
- 书海
- 看书
@@ -43,12 +44,13 @@ - 支持漫画
- 支持音频
- 书源失效检测
-- 导入本地TXT、EPUB、UMD格式的书籍
+- 导入本地TXT、EPUB、UMD、PDF格式的书籍
- 书籍分组
- RSS订阅
- 定时更新书架
- 并发搜书
- 本地书仓
+- 支持kindle阅读
## 下载与安装 diff --git a/doc.md b/doc.md index 76fdefde..0b75b691 100644 --- a/doc.md +++ b/doc.md @@ -4,6 +4,9 @@ - [免责声明(Disclaimer)](#免责声明disclaimer) - [数据存储](#数据存储) - [本地书仓](#本地书仓) + - [阅读页面地址](#阅读页面地址) + - [全功能web端](#全功能web端) + - [适配kindle的 `simple-web`](#适配kindle的-simple-web) - [自定义阅读主题](#自定义阅读主题) - [自定义样式](#自定义样式) - [接口服务配置](#接口服务配置) @@ -15,8 +18,8 @@ - [服务器版](#服务器版) - [Docker版](#docker版) - [Docker-Compose版(推荐)](#docker-compose版推荐) - - [脚本部署(甲骨文非Ubuntu可能不支持)](#通过脚本一键部署) - - [Nginx反向代理](#nginx反向代理) + - [通过脚本一键部署](#通过脚本一键部署) + - [Nginx反向代理(如果有域名可以考虑80端口复用)](#nginx反向代理如果有域名可以考虑80端口复用) - [开发编译](#开发编译) - [编译脚本](#编译脚本) - [编译前端](#编译前端) @@ -89,6 +92,18 @@ storage 在 `storage/localStore` 中可以集中存放管理本地书籍,开启访问权限的用户可以在 `页面-浏览书仓` 中选择批量导入到自己的书架进行阅读。 +## 阅读页面地址 + +### 全功能web端 + +`http://ip:端口/` + +### 适配kindle的 `simple-web` + +`http://ip:端口/simple-web` + +> 注意,需要另外购买授权才能使用,加入TG群了解详情 + ## 自定义阅读主题 书架页面仅支持白天模式和黑夜模式。 @@ -111,7 +126,7 @@ storage ```yml reader: app: - storagePath: storage # 数据存储目录 + workDir: "" # 工作目录 showUI: false # 是否显示UI debug: false # 是否调试模式 packaged: false # 是否打包为客户端 @@ -125,8 +140,21 @@ reader: proxyUsername: "" # 代理鉴权 用户名 proxyPassword: "" # 代理鉴权 密码 cacheChapterContent: false # 是否缓存章节内容 - userLimit: 50 # 用户上限,最大 50 - userBookLimit: 200 # 用户书籍上限,默认最大 200 + # userBookLimit: 200 # 用户书籍上限,默认最大 200 !! v3.0.5版本开始弃用这个选项 + debugLog: false # 是否打开调试日志 + autoClearInactiveUser: 0 # 是否自动清理不活跃用户,为0不清理,大于0为清理超过 autoClearInactiveUser 天未登录的用户 + mongoUri: "" # mongodb uri 用于备份数据 + mongoDbName: "reader" # mongodb 数据库名称 + shelfUpdateInteval: 10 # 书架自动更新间隔时间,单位分钟,必须是10的倍数 + userLimit: 15 # 用户上限,最大 15 + remoteWebviewApi: "" # remote-webview 地址 + defaultUserEnableWebdav: true # 新用户是否默认启用webdav + defaultUserEnableLocalStore: true # 新用户是否默认启用localStore + defaultUserEnableBookSource: true # 新用户是否默认可编辑书源,如果为false,则只能使用默认书源,不能新增/修改/删除 + defaultUserEnableRssSource: true # 新用户是否默认可编辑RSS源 + defaultUserBookSourceLimit: 100 # 新用户默认书源上限 + defaultUserBookLimit: 200 # 新用户默认书籍上限 + autoBackupUserData: false # 是否自动备份用户数据 server: port: 8080 # 监听端口 @@ -305,7 +333,7 @@ docker-compose stop docker logs -f reader # 自行导入远程书源(打开链接后复制网址导入即可) -https://legado.pages.dev +https://legado.aoaostar.com/ # 手动更新 docker-compose pull && docker-compose up -d @@ -315,10 +343,10 @@ docker-compose pull && docker-compose up -d ```shell # 此脚本对甲骨文非Ubuntu系统,CentOS9可能不兼容。建议网上手动搜索 -#curl +#curl bash <(curl -L -s https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) -#wget +#wget bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) ``` diff --git a/docker-compose.yaml b/docker-compose.yaml index f57dd05c..5616ac57 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,8 +2,8 @@ version: '3.1' services: # reader 在线阅读 # 公开服务器(服务器位于日本):[https://reader.nxnow.top](https://reader.nxnow.top) 测试账号/密码分别为guest/guest123,也可自行创建账号添加书源,不定期删除长期未登录账号(2周) -# 阅读官方书源 : [https://legado.pages.dev](https://legado.pages.dev) 或者 [http://legado.git.llc](https://legado.pages.dev) 点击打开连接,添加远程书源即可 -# 公众号汇总 : [https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A](https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A) +# 书源集合 : [https://legado.aoaostar.com/](https://legado.aoaostar.com/) 点击打开连接,添加远程书源即可 +# 公众号汇总 : [https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MzMyMDgyMA==&action=getalbum&album_id=2397535253763801090#wechat_redirect](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MzMyMDgyMA==&action=getalbum&album_id=2397535253763801090#wechat_redirect) # 手动更新方式 : docker-compose pull && docker-compose up -d reader: image: hectorqin/reader diff --git a/docker-compose.yml b/docker-compose.yml index 7b022d14..4365420f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,9 +2,9 @@ version: '3.1' services: # reader 在线阅读 # 公开服务器(服务器位于日本):[https://reader.nxnow.top](https://reader.nxnow.top) 测试账号/密码分别为guest/guest123,也可自行创建账号添加书源,不定期删除长期未登录账号(2周) -# 阅读官方书源 : [https://legado.pages.dev](https://legado.pages.dev) 或者 [http://legado.git.llc](https://legado.pages.dev) 点击打开连接,添加远程书源即可 -# 公众号汇总 : [https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A](https://mp.weixin.qq.com/s/5t8nfSnRfHjJNAvT76fA_A) -# 手动更新方式 : 在此文件所在的目录下执行 docker-compose pull && docker-compose up -d +# 书源集合 : [https://legado.aoaostar.com/](https://legado.aoaostar.com/) 点击打开连接,添加远程书源即可 +# 公众号汇总 : [https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MzMyMDgyMA==&action=getalbum&album_id=2397535253763801090#wechat_redirect](https://mp.weixin.qq.com/mp/appmsgalbum?__biz=MjM5MzMyMDgyMA==&action=getalbum&album_id=2397535253763801090#wechat_redirect) +# 手动更新方式 : docker-compose pull && docker-compose up -d reader: #image: hectorqin/reader # 普通镜像 image: hectorqin/reader:openj9-latest # Openj9镜像,arm64架构或小内存机器优先使用 diff --git a/reader.sh b/reader.sh index c7c3f3da..356b8cf4 100644 --- a/reader.sh +++ b/reader.sh @@ -67,7 +67,7 @@ fi install_dockercompose() { if [[ x"${release}" == x"centos" ]]; then - yum install wget curl -y + yum install wget curl -y echo -e "${green} 正在移除CentOS遗留无效Docker文件 ${plain}" yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine -y echo -e "${green} 正在安装Docker ${plain}" @@ -92,7 +92,15 @@ install_reader() { rm docker-compose* wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yml echo -e "${green} 正在配置默认书源 ${plain}" - wget https://legado.pages.dev/sy-yc.json -O storage/data/default/bookSource.json + wget https://jihulab.com/aoaostar/legado/-/raw/release/cache/6c35d84798ddbf4aad3fe3f0fd6cec53dd788be8.json -O storage/data/default/bookSource.json + # 判断是否合法json + local first_character=$(head -c 1 "storage/data/default/bookSource.json") + if [[ x"$first_character" == x"[" ]] then + # + else + echo -e "${red} 书源错误,已为您删除,请自行导入书源 ${plain}" + echo "[]" > storage/data/default/bookSource.json + fi echo -e "${green} 正在配置docker变量 ${plain}" sed -i "s/\/home\/reader/${file_dir}/" docker-compose.yml sed -i "s/4396/${remotePort}/" docker-compose.yml From d2432dbe23a8b0026595ecfbab90624daf13822c Mon Sep 17 00:00:00 2001 From: hectorqin Date: Mon, 10 Jul 2023 10:25:39 +0800 Subject: [PATCH 21/43] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 1 + 1 file changed, 1 insertion(+) diff --git a/doc.md b/doc.md index 0b75b691..9de7772d 100644 --- a/doc.md +++ b/doc.md @@ -158,6 +158,7 @@ reader: server: port: 8080 # 监听端口 + contextPath: "" # 二级目录,为空则不使用二级目录 webUrl: http://localhost:${reader.server.port} # web链接 ``` From ed98a9db107676431165edd52043ada035d0afb6 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Wed, 2 Aug 2023 09:51:06 +0800 Subject: [PATCH 22/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3,?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=9C=8D=E5=8A=A1=E5=99=A8=E7=89=88=E6=9C=AC?= =?UTF-8?q?=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 6 +- doc.md | 38 +++----- server/bin/shutdown.cmd | 24 +++++ server/bin/shutdown.sh | 28 ++++++ server/bin/startup.cmd | 96 +++++++++++++++++++ server/bin/startup.sh | 142 +++++++++++++++++++++++++++++ server/conf/application.properties | 57 ++++++++++++ 7 files changed, 367 insertions(+), 24 deletions(-) create mode 100755 server/bin/shutdown.cmd create mode 100755 server/bin/shutdown.sh create mode 100755 server/bin/startup.cmd create mode 100755 server/bin/startup.sh create mode 100644 server/conf/application.properties diff --git a/.gitignore b/.gitignore index 3b01c67f..af89e5f1 100644 --- a/.gitignore +++ b/.gitignore @@ -45,4 +45,8 @@ out /reader-assets /.lh/ -/simple-web/ \ No newline at end of file +/simple-web/ + +/server/logs +/server/storage +/server/target \ No newline at end of file diff --git a/doc.md b/doc.md index 9de7772d..f70754eb 100644 --- a/doc.md +++ b/doc.md @@ -127,20 +127,10 @@ storage reader: app: workDir: "" # 工作目录 - showUI: false # 是否显示UI - debug: false # 是否调试模式 - packaged: false # 是否打包为客户端 secure: false # 是否需要登录鉴权,开启后将支持多用户模式 inviteCode: "" # 注册邀请码,为空时则开放注册,否则注册时需要输入邀请码 secureKey: "" # 管理密码,开启鉴权时,前端管理用户空间的管理密码 - proxy: false # 是否使用代理 - proxyType: "HTTP" # 代理类型 - proxyHost: "" # 代理 Host - proxyPort: "" # 代理 port - proxyUsername: "" # 代理鉴权 用户名 - proxyPassword: "" # 代理鉴权 密码 cacheChapterContent: false # 是否缓存章节内容 - # userBookLimit: 200 # 用户书籍上限,默认最大 200 !! v3.0.5版本开始弃用这个选项 debugLog: false # 是否打开调试日志 autoClearInactiveUser: 0 # 是否自动清理不活跃用户,为0不清理,大于0为清理超过 autoClearInactiveUser 天未登录的用户 mongoUri: "" # mongodb uri 用于备份数据 @@ -190,7 +180,7 @@ reader: ### Windows / MacOS / Linux -从 [releases](https://github.com/hectorqin/reader/releases) 下载对应平台安装包安装即可,需要安装java10以上环境 +从 [releases](https://github.com/hectorqin/reader/releases) 下载对应平台安装包安装即可,需要安装java8及以上环境 MacOS 版 `storage` 默认是 `用户目录/.reader/storage`,其它版本 `storage` 默认是 `程序目录/storage` @@ -231,25 +221,27 @@ MacOS 版 `storage` 默认是 `用户目录/.reader/storage`,其它版本 `sto ### 服务器版 -从 [releases](https://github.com/hectorqin/reader/releases) 下载 `reader-$version.jar` 运行即可,需要安装java10以上环境 +从 [releases](https://github.com/hectorqin/reader/releases) 下载 `reader-server-$version.zip` 解压后运行即可,需要安装java8及以上环境 ```bash -# 创建目录 -mkdir reader3 -cd reader3 - -# 下载 jar -wget "xxxx" - # 安装jdk10以上环境... +# 解压文件 +unzip reader-server-$version.zip + # 运行 +cd reader-server-$version + +./bin/startup.sh +# windows 上直接点击 bin/startup.cmd 文件,直接点击运行会运行单用户模式 -# 自用版 -java -jar reader-$version.jar +# startup 脚本支持以下选项,并且这些选项无法在配置文件修改,只能使用命令行参数修改 +# -m single|multi 选择单用户/多用户模式,默认单用户 +# -s reader-xx 选择 jar 文件名(不含.jar后缀),默认使用target目录里最新的jar +# -i inviteCode 设置多用户模式下的邀请码,默认 reader666 +# -k secureKey 设置多用户模式下的管理密码,默认 readersk -# 多用户版 -java -jar reader-$version.jar --reader.app.secure=true --reader.app.secureKey=管理密码 --reader.app.inviteCode=注册邀请码 +# 注意!!!startup 脚本在单用户模式下 默认占用 256m 内存,在多用户模式下 默认占用 1g 内存,如果内存不够,请自行修改脚本 # web端 http://localhost:8080/ # 接口地址 http://localhost:8080/reader3/ diff --git a/server/bin/shutdown.cmd b/server/bin/shutdown.cmd new file mode 100755 index 00000000..0aa8b1b3 --- /dev/null +++ b/server/bin/shutdown.cmd @@ -0,0 +1,24 @@ +@echo off +rem Copyright 1999-2018 Alibaba Group Holding Ltd. +rem Licensed under the Apache License, Version 2.0 (the "License"); +rem you may not use this file except in compliance with the License. +rem You may obtain a copy of the License at +rem +rem http://www.apache.org/licenses/LICENSE-2.0 +rem +rem Unless required by applicable law or agreed to in writing, software +rem distributed under the License is distributed on an "AS IS" BASIS, +rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +rem See the License for the specific language governing permissions and +rem limitations under the License. +if not exist "%JAVA_HOME%\bin\jps.exe" echo "Please set the JAVA_HOME variable in your environment, We need jdk8 or later!\n请设置 JAVA_HOME 环境变量,需要jdk8及以上的java环境!" & EXIT /B 1 + +setlocal + +set "PATH=%JAVA_HOME%\bin;%PATH%" + +echo killing reader server + +for /f "tokens=1" %%i in ('jps -m ^| find "reader.server"') do ( taskkill /F /PID %%i ) + +echo Done! diff --git a/server/bin/shutdown.sh b/server/bin/shutdown.sh new file mode 100755 index 00000000..9ae95a5d --- /dev/null +++ b/server/bin/shutdown.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +# Copyright 1999-2018 Alibaba Group Holding Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +cd `dirname $0`/../target +target_dir=`pwd` + +pid=`ps ax | grep -i 'reader.server' | grep ${target_dir} | grep java | grep -v grep | awk '{print $1}'` +if [ -z "$pid" ] ; then + echo "No reader running." + exit -1; +fi + +echo "The reader(${pid}) is running..." + +kill ${pid} + +echo "Send shutdown request to reader(${pid}) OK" diff --git a/server/bin/startup.cmd b/server/bin/startup.cmd new file mode 100755 index 00000000..85ec35aa --- /dev/null +++ b/server/bin/startup.cmd @@ -0,0 +1,96 @@ +@echo off +rem Copyright 1999-2018 Alibaba Group Holding Ltd. +rem Licensed under the Apache License, Version 2.0 (the "License"); +rem you may not use this file except in compliance with the License. +rem You may obtain a copy of the License at +rem +rem http://www.apache.org/licenses/LICENSE-2.0 +rem +rem Unless required by applicable law or agreed to in writing, software +rem distributed under the License is distributed on an "AS IS" BASIS, +rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +rem See the License for the specific language governing permissions and +rem limitations under the License. +if not exist "%JAVA_HOME%\bin\java.exe" echo "请设置 JAVA_HOME 环境变量,需要jdk8及以上的java环境!" & EXIT /B 1 +set "JAVA=%JAVA_HOME%\bin\java.exe" + +setlocal enabledelayedexpansion + +set BASE_DIR=%~dp0 +rem added double quotation marks to avoid the issue caused by the folder names containing spaces. +rem removed the last 5 chars(which means \bin\) to get the base DIR. +set BASE_DIR="%BASE_DIR:~0,-5%" + +set CUSTOM_SEARCH_LOCATIONS=file:%BASE_DIR%/conf/ + +set SERVER=reader + +for /f "delims=" %%i in ('dir /b /o:-n %BASE_DIR%\target\reader*.jar') do set NEWEST_JAR=%%i + +if not "%NEWEST_JAR%"=="" ( + set SERVER=%NEWEST_JAR:.jar=% +) + +set SERVER %SERVER% +set MODE="single" +set INVITE_CODE="reader666" +set SECURE_KEY="readersk" +set MODE_INDEX=-1 +set INVITE_CODE_INDEX=-1 +set SERVER_INDEX=-1 +set SECURE_KEY_INDEX=-1 +set EMBEDDED_STORAGE="" + + +set i=0 +for %%a in (%*) do ( + if "%%a" == "-m" ( set /a MODE_INDEX=!i!+1 ) + if "%%a" == "-i" ( set /a INVITE_CODE_INDEX=!i!+1 ) + if "%%a" == "-s" ( set /a SERVER_INDEX=!i!+1 ) + if "%%a" == "-k" ( set /a SECURE_KEY_INDEX=!i!+1 ) + set /a i+=1 +) + +set i=0 +for %%a in (%*) do ( + if %MODE_INDEX% == !i! ( set MODE="%%a" ) + if %INVITE_CODE_INDEX% == !i! ( set INVITE_CODE="%%a" ) + if %SERVER_INDEX% == !i! (set SERVER="%%a") + if %SECURE_KEY_INDEX% == !i! (set SECURE_KEY="%%a") + set /a i+=1 +) + +rem if reader startup mode is single +if %MODE% == "single" ( + echo "Reader 将以单用户模式运行" + set "READER_JVM_OPTS=-Xms256m -Xmx256m -Xmn128m" +) + +rem if reader startup mode is multi-user +if not %MODE% == "single" ( + echo "Reader 将以多用户模式运行。邀请码:%INVITE_CODE%,管理员密码:%SECURE_KEY%" + set "READER_OPTS=-Dreader.app.secure=true -Dreader.app.inviteCode=%INVITE_CODE% -Dreader.app.secureKey=%SECURE_KEY%" + + set "READER_JVM_OPTS=-server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=160m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages" +) + +rem set reader options +@REM set "READER_OPTS=%READER_OPTS% -Dloader.path=%BASE_DIR%/plugins,%BASE_DIR%/plugins/health,%BASE_DIR%/plugins/cmdb,%BASE_DIR%/plugins/selector" +set "READER_OPTS=%READER_OPTS% -Dreader.app.workDir=%BASE_DIR%" +set "READER_OPTS=%READER_OPTS% -jar %BASE_DIR%\target\%SERVER%.jar" + +rem set reader spring config location +set "READER_CONFIG_OPTS=--spring.config.additional-location=%CUSTOM_SEARCH_LOCATIONS%" + +rem set reader log4j file location +@REM set "READER_LOG4J_OPTS=--logging.config=%BASE_DIR%/conf/reader-logback.xml" + + +set COMMAND="%JAVA%" %READER_JVM_OPTS% %READER_OPTS% %READER_CONFIG_OPTS% %READER_LOG4J_OPTS% reader.server %* + +echo %COMMAND% + +echo "Reader 正在启动中,你可以在 %BASE_DIR%\logs\start.out 查看日志" + +rem start reader command +%COMMAND% diff --git a/server/bin/startup.sh b/server/bin/startup.sh new file mode 100755 index 00000000..fa62cb74 --- /dev/null +++ b/server/bin/startup.sh @@ -0,0 +1,142 @@ +#!/bin/bash + +# Copyright 1999-2018 Alibaba Group Holding Ltd. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +cygwin=false +darwin=false +os400=false +case "`uname`" in +CYGWIN*) cygwin=true;; +Darwin*) darwin=true;; +OS400*) os400=true;; +esac +error_exit () +{ + echo "ERROR: $1 !!" + exit 1 +} +[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=$HOME/jdk/java +[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/usr/java +[ ! -e "$JAVA_HOME/bin/java" ] && JAVA_HOME=/opt/taobao/java +[ ! -e "$JAVA_HOME/bin/java" ] && unset JAVA_HOME + +if [ -z "$JAVA_HOME" ]; then + if $darwin; then + + if [ -x '/usr/libexec/java_home' ] ; then + export JAVA_HOME=`/usr/libexec/java_home` + + elif [ -d "/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" ]; then + export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home" + fi + else + JAVA_PATH=`dirname $(readlink -f $(which javac))` + if [ "x$JAVA_PATH" != "x" ]; then + export JAVA_HOME=`dirname $JAVA_PATH 2>/dev/null` + fi + fi + if [ -z "$JAVA_HOME" ]; then + error_exit "请设置 JAVA_HOME 环境变量,需要jdk8及以上的java环境!" + fi +fi + +export BASE_DIR=`cd $(dirname $0)/..; pwd` + +SERVER="reader" +NEWEST_JAR=$(ls $BASE_DIR/target | grep -EO 'reader.*\.jar' | sort -nr | head -1) +if [ -n "$NEWEST_JAR" ]; then + SERVER=${NEWEST_JAR/.jar/} +fi + +export SERVER +export MODE="single" +export INVITE_CODE="reader666" +export SECURE_KEY="readersk" +while getopts ":m:s:i:k:" opt +do + case $opt in + m) + MODE=$OPTARG;; + s) + SERVER=$OPTARG;; + i) + INVITE_CODE=$OPTARG;; + k) + SECURE_KEY=$OPTARG;; + ?) + echo "未知的参数: $opt" + exit 1;; + esac +done + +export JAVA_HOME +export JAVA="$JAVA_HOME/bin/java" +export CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/ + +#=========================================================================================== +# JVM Configuration +#=========================================================================================== +if [[ "${MODE}" == "single" ]]; then + JAVA_OPT="${JAVA_OPT} -Xms256m -Xmx256m -Xmn128m" +else + JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=160m" + JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof" + JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" + JAVA_OPT="${JAVA_OPT} -Dreader.app.secure=true -Dreader.app.inviteCode=${INVITE_CODE} -Dreader.app.secureKey=${SECURE_KEY}" +fi + +JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') +if [[ "$JAVA_MAJOR_VERSION" -ge "9" ]] ; then + JAVA_OPT="${JAVA_OPT} -Xlog:gc*:file=${BASE_DIR}/logs/reader_gc.log:time,tags:filecount=10,filesize=100m" +else + JAVA_OPT_EXT_FIX="-Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${JAVA_HOME}/lib/ext" + JAVA_OPT="${JAVA_OPT} -Xloggc:${BASE_DIR}/logs/reader_gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M" +fi + +# JAVA_OPT="${JAVA_OPT} -Dloader.path=${BASE_DIR}/plugins,${BASE_DIR}/plugins/health,${BASE_DIR}/plugins/cmdb,${BASE_DIR}/plugins/selector" +JAVA_OPT="${JAVA_OPT} -Dreader.app.workDir=${BASE_DIR}" +JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/${SERVER}.jar" +JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" +JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}" +# JAVA_OPT="${JAVA_OPT} --logging.config=${BASE_DIR}/conf/nacos-logback.xml" +JAVA_OPT="${JAVA_OPT} --server.max-http-header-size=524288" + +if [ ! -d "${BASE_DIR}/logs" ]; then + mkdir ${BASE_DIR}/logs +fi + +echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" + +if [[ "${MODE}" == "single" ]]; then + echo "Reader 将以单用户模式运行" +else + echo "Reader 将以多用户模式运行。邀请码:${INVITE_CODE},管理员密码:${SECURE_KEY}" +fi + +# check the start.out log output file +if [ ! -f "${BASE_DIR}/logs/start.out" ]; then + touch "${BASE_DIR}/logs/start.out" +else + mv ${BASE_DIR}/logs/start.out ${BASE_DIR}/logs/start-$(date +'%Y-%m-%d_%H_%M').out +fi +# start +echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" > ${BASE_DIR}/logs/start.out 2>&1 & + +if [[ "$JAVA_OPT_EXT_FIX" == "" ]]; then + nohup "$JAVA" ${JAVA_OPT} reader.server >> ${BASE_DIR}/logs/start.out 2>&1 & +else + nohup "$JAVA" "$JAVA_OPT_EXT_FIX" ${JAVA_OPT} reader.server >> ${BASE_DIR}/logs/start.out 2>&1 & +fi + +echo "Reader 正在启动中,你可以在 ${BASE_DIR}/logs/start.out 查看日志" diff --git a/server/conf/application.properties b/server/conf/application.properties new file mode 100644 index 00000000..885b1347 --- /dev/null +++ b/server/conf/application.properties @@ -0,0 +1,57 @@ +# 设置工作目录 +# reader.app.workDir=. + +# 是否多用户模式,会被启动脚本的参数覆盖,启动时使用 -m 1 选择多用户模式,否则运行单用户模式 +# reader.app.secure=false + +# 邀请码,会被启动脚本的参数覆盖,启动时使用 -i 邀请码 进行修改 +# reader.app.inviteCode= + +# 管理密码,会被启动脚本的参数覆盖,启动时使用 -k 管理密码 进行修改 +# reader.app.secureKey= + +# 书源代理可通过 header 设置 + +# 是否缓存章节内容 +reader.app.cacheChapterContent=true + +# 用户上限,免费版用户上限最大15 +reader.app.userLimit=15 + +# 是否开启书源调试日志 +reader.app.debugLog=false + +# 自动清理不活跃用户,单位天,0为不清理,大于0的数字为清理多少天未登录用户 +reader.app.autoClearInactiveUser=0 + +# mongodb数据备份,mongodb链接地址 +reader.app.mongoUri= +# mongodb数据备份,mongodb数据库名 +reader.app.mongoDbName=reader + +# 书架自动更新间隔,单位分钟 +reader.app.shelfUpdateInteval=10 + +# 远程webview接口地址,可通过部署 hectorqin/remote-webview 来设置,http://IP:8050 +reader.app.remoteWebviewApi= + +# 新用户默认是否启用 webdav +reader.app.defaultUserEnableWebdav=true +# 新用户是否默认启用 本地书仓 +reader.app.defaultUserEnableLocalStore=true +# 新用户是否默认启用 书源编辑 +reader.app.defaultUserEnableBookSource=true +# 新用户是否默认启用 RSS源编辑 +reader.app.defaultUserEnableRssSource=true +# 新用户是否默认书源数量上限 +reader.app.defaultUserBookSourceLimit=100 +# 新用户是否默认书籍数量上限 +reader.app.defaultUserBookLimit=200 + +# 是否自动备份用户数据 +reader.app.autoBackupUserData=false + +# reader服务监听端口 +reader.server.port=8080 +# reader接口目录 +reader.server.contextPath= \ No newline at end of file From bd341f3b7c893369465a53f912f91a11a2ee1b1e Mon Sep 17 00:00:00 2001 From: hectorqin Date: Wed, 2 Aug 2023 14:13:09 +0800 Subject: [PATCH 23/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=8F=8A=E5=90=AF=E5=8A=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 6 +-- server/bin/shutdown.cmd | 15 ++++++- server/bin/startup.cmd | 86 ++++++++++++++++++++++++++++++----------- server/bin/startup.sh | 42 +++++++++++++------- 4 files changed, 109 insertions(+), 40 deletions(-) diff --git a/doc.md b/doc.md index f70754eb..bde97395 100644 --- a/doc.md +++ b/doc.md @@ -236,10 +236,10 @@ cd reader-server-$version # windows 上直接点击 bin/startup.cmd 文件,直接点击运行会运行单用户模式 # startup 脚本支持以下选项,并且这些选项无法在配置文件修改,只能使用命令行参数修改 -# -m single|multi 选择单用户/多用户模式,默认单用户 +# -m single|multi 选择单用户/多用户模式,默认 以配置文件 conf/application.properties 为准 # -s reader-xx 选择 jar 文件名(不含.jar后缀),默认使用target目录里最新的jar -# -i inviteCode 设置多用户模式下的邀请码,默认 reader666 -# -k secureKey 设置多用户模式下的管理密码,默认 readersk +# -i inviteCode 设置多用户模式下的邀请码,默认 以配置文件 conf/application.properties 为准 +# -k secureKey 设置多用户模式下的管理密码,默认 以配置文件 conf/application.properties 为准 # 注意!!!startup 脚本在单用户模式下 默认占用 256m 内存,在多用户模式下 默认占用 1g 内存,如果内存不够,请自行修改脚本 diff --git a/server/bin/shutdown.cmd b/server/bin/shutdown.cmd index 0aa8b1b3..67c46e02 100755 --- a/server/bin/shutdown.cmd +++ b/server/bin/shutdown.cmd @@ -11,7 +11,20 @@ rem distributed under the License is distributed on an "AS IS" BASIS, rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. rem See the License for the specific language governing permissions and rem limitations under the License. -if not exist "%JAVA_HOME%\bin\jps.exe" echo "Please set the JAVA_HOME variable in your environment, We need jdk8 or later!\n请设置 JAVA_HOME 环境变量,需要jdk8及以上的java环境!" & EXIT /B 1 + +if not exist "%JAVA_HOME%\bin\java.exe" ( + rem find java_home from reg + for /f "tokens=2*" %%i in ('reg query "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /s ^| findstr "JavaHome"') do ( + set "JAVA_HOME=%%j" + ) +) +if exist "%JAVA_HOME%\bin\java.exe" ( + set "JAVA=%JAVA_HOME%\bin\java.exe" +) else ( + echo Please set the JAVA_HOME variable in your environment, We need jdk8 or later! + pause + EXIT /B 1 +) setlocal diff --git a/server/bin/startup.cmd b/server/bin/startup.cmd index 85ec35aa..c681f6c5 100755 --- a/server/bin/startup.cmd +++ b/server/bin/startup.cmd @@ -1,18 +1,39 @@ @echo off -rem Copyright 1999-2018 Alibaba Group Holding Ltd. -rem Licensed under the Apache License, Version 2.0 (the "License"); -rem you may not use this file except in compliance with the License. -rem You may obtain a copy of the License at -rem -rem http://www.apache.org/licenses/LICENSE-2.0 -rem -rem Unless required by applicable law or agreed to in writing, software -rem distributed under the License is distributed on an "AS IS" BASIS, -rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -rem See the License for the specific language governing permissions and -rem limitations under the License. -if not exist "%JAVA_HOME%\bin\java.exe" echo "请设置 JAVA_HOME 环境变量,需要jdk8及以上的java环境!" & EXIT /B 1 -set "JAVA=%JAVA_HOME%\bin\java.exe" +REM Copyright 1999-2018 Alibaba Group Holding Ltd. +REM Licensed under the Apache License, Version 2.0 (the "License"); +REM you may not use this file except in compliance with the License. +REM You may obtain a copy of the License at +REM +REM http://www.apache.org/licenses/LICENSE-2.0 +REM +REM Unless required by applicable law or agreed to in writing, software +REM distributed under the License is distributed on an "AS IS" BASIS, +REM WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +REM See the License for the specific language governing permissions and +REM limitations under the License. + +if not exist "%JAVA_HOME%\bin\java.exe" ( + rem find java_home from reg + for /f "tokens=2*" %%i in ('reg query "HKLM\SOFTWARE\JavaSoft\Java Runtime Environment" /s ^| findstr "JavaHome"') do ( + set "JAVA_HOME=%%j" + ) +) +if exist "%JAVA_HOME%\bin\java.exe" ( + set "JAVA=%JAVA_HOME%\bin\java.exe" +) else ( + rem check java command + for /f "usebackq delims=" %%i in (`where java`) do ( + set JAVA=%%i + ) + + if not "%JAVA%" == "" if exist "%JAVA%" ( + rem java path is exist + ) else ( + echo Please set the JAVA_HOME variable in your environment, We need jdk8 or later! + pause + EXIT /B 1 + ) +) setlocal enabledelayedexpansion @@ -31,10 +52,9 @@ if not "%NEWEST_JAR%"=="" ( set SERVER=%NEWEST_JAR:.jar=% ) -set SERVER %SERVER% set MODE="single" -set INVITE_CODE="reader666" -set SECURE_KEY="readersk" +set INVITE_CODE="" +set SECURE_KEY="" set MODE_INDEX=-1 set INVITE_CODE_INDEX=-1 set SERVER_INDEX=-1 @@ -61,22 +81,40 @@ for %%a in (%*) do ( ) rem if reader startup mode is single +if %MODE% == "" ( + echo The running mode of the Reader is determined by the configuration file conf/application.properties. Please note that there is currently no memory limit set for the JVM. +) + if %MODE% == "single" ( - echo "Reader 将以单用户模式运行" + echo The running mode of the Reader is determined by the configuration file conf/application.properties. Please note that the current memory limit is set to 256m. set "READER_JVM_OPTS=-Xms256m -Xmx256m -Xmn128m" ) rem if reader startup mode is multi-user -if not %MODE% == "single" ( - echo "Reader 将以多用户模式运行。邀请码:%INVITE_CODE%,管理员密码:%SECURE_KEY%" - set "READER_OPTS=-Dreader.app.secure=true -Dreader.app.inviteCode=%INVITE_CODE% -Dreader.app.secureKey=%SECURE_KEY%" +if not %MODE% == "" if not %MODE% == "single" ( + set READER_TIPS="" + set "READER_OPTS=-Dreader.app.secure=true" + if not "%INVITE_CODE%" == "" { + set "READER_OPTS=%READER_OPTS% -Dreader.app.inviteCode=%INVITE_CODE%" + set "READER_TIPS=%READER_TIPS% inviteCode: %INVITE_CODE%" + } + if not "%SECURE_KEY%" == "" { + set "READER_OPTS=%READER_OPTS% -Dreader.app.secureKey=%SECURE_KEY%" + set "READER_TIPS=%READER_TIPS% secureKey: %SECURE_KEY%" + } + if "%READER_TIPS%" == "" { + set "READER_TIPS=The invitation code and administrator password are determined by the configuration file conf\application.properties." + } + set "READER_TIPS=%READER_TIPS%. Please note that the current memory limit is set to 1g." + + echo The Reader will running in multi-user mode. %READER_TIPS% set "READER_JVM_OPTS=-server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=160m -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%BASE_DIR%\logs\java_heapdump.hprof -XX:-UseLargePages" ) rem set reader options @REM set "READER_OPTS=%READER_OPTS% -Dloader.path=%BASE_DIR%/plugins,%BASE_DIR%/plugins/health,%BASE_DIR%/plugins/cmdb,%BASE_DIR%/plugins/selector" -set "READER_OPTS=%READER_OPTS% -Dreader.app.workDir=%BASE_DIR%" +set "READER_OPTS=%READER_OPTS% -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dreader.app.workDir=%BASE_DIR%" set "READER_OPTS=%READER_OPTS% -jar %BASE_DIR%\target\%SERVER%.jar" rem set reader spring config location @@ -88,9 +126,11 @@ rem set reader log4j file location set COMMAND="%JAVA%" %READER_JVM_OPTS% %READER_OPTS% %READER_CONFIG_OPTS% %READER_LOG4J_OPTS% reader.server %* +echo Run command: echo %COMMAND% +echo -echo "Reader 正在启动中,你可以在 %BASE_DIR%\logs\start.out 查看日志" +echo Reader is starting, you can check the ${BASE_DIR}/logs/start.out rem start reader command %COMMAND% diff --git a/server/bin/startup.sh b/server/bin/startup.sh index fa62cb74..228ffadb 100755 --- a/server/bin/startup.sh +++ b/server/bin/startup.sh @@ -59,10 +59,9 @@ if [ -n "$NEWEST_JAR" ]; then SERVER=${NEWEST_JAR/.jar/} fi -export SERVER -export MODE="single" -export INVITE_CODE="reader666" -export SECURE_KEY="readersk" +MODE="" +INVITE_CODE="" +SECURE_KEY="" while getopts ":m:s:i:k:" opt do case $opt in @@ -87,13 +86,34 @@ export CUSTOM_SEARCH_LOCATIONS=file:${BASE_DIR}/conf/ #=========================================================================================== # JVM Configuration #=========================================================================================== -if [[ "${MODE}" == "single" ]]; then +if [[ "${MODE}" == "" ]]; then + echo "Reader 的运行模式以配置文件 conf/application.properties 为准。注意,当前未限制jvm内存" +elif [[ "${MODE}" == "single" ]]; then JAVA_OPT="${JAVA_OPT} -Xms256m -Xmx256m -Xmn128m" + JAVA_OPT="${JAVA_OPT} -Dreader.app.secure=false" + echo "Reader 将以单用户模式运行。注意,当前内存限制为256m" else JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=160m" JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${BASE_DIR}/logs/java_heapdump.hprof" JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages" - JAVA_OPT="${JAVA_OPT} -Dreader.app.secure=true -Dreader.app.inviteCode=${INVITE_CODE} -Dreader.app.secureKey=${SECURE_KEY}" + JAVA_OPT="${JAVA_OPT} -Dreader.app.secure=true" + + TIPS="" + if [[ "${INVITE_CODE}" != "" ]]; then + JAVA_OPT="${JAVA_OPT} -Dreader.app.inviteCode=${INVITE_CODE}" + TIPS="${TIPS} 邀请码:${INVITE_CODE}" + fi + + if [[ "${SECURE_KEY}" != "" ]]; then + JAVA_OPT="${JAVA_OPT} -Dreader.app.secureKey=${SECURE_KEY}" + TIPS="${TIPS} 管理员密码:${SECURE_KEY}" + fi + + if [[ "${TIPS}" == "" ]]; then + TIPS="邀请码和管理员密码以配置文件 conf/application.properties 为准" + fi + TIPS="${TIPS}。注意,当前内存限制为1g" + echo "Reader 将以多用户模式运行。${TIPS}" fi JAVA_MAJOR_VERSION=$($JAVA -version 2>&1 | sed -E -n 's/.* version "([0-9]*).*$/\1/p') @@ -105,7 +125,7 @@ else fi # JAVA_OPT="${JAVA_OPT} -Dloader.path=${BASE_DIR}/plugins,${BASE_DIR}/plugins/health,${BASE_DIR}/plugins/cmdb,${BASE_DIR}/plugins/selector" -JAVA_OPT="${JAVA_OPT} -Dreader.app.workDir=${BASE_DIR}" +JAVA_OPT="${JAVA_OPT} -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dreader.app.workDir=${BASE_DIR}" JAVA_OPT="${JAVA_OPT} -jar ${BASE_DIR}/target/${SERVER}.jar" JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}" JAVA_OPT="${JAVA_OPT} --spring.config.additional-location=${CUSTOM_SEARCH_LOCATIONS}" @@ -116,13 +136,9 @@ if [ ! -d "${BASE_DIR}/logs" ]; then mkdir ${BASE_DIR}/logs fi +echo "启动命令:" echo "$JAVA $JAVA_OPT_EXT_FIX ${JAVA_OPT}" - -if [[ "${MODE}" == "single" ]]; then - echo "Reader 将以单用户模式运行" -else - echo "Reader 将以多用户模式运行。邀请码:${INVITE_CODE},管理员密码:${SECURE_KEY}" -fi +echo # check the start.out log output file if [ ! -f "${BASE_DIR}/logs/start.out" ]; then From f03d3708dbd09a8fd8c01a19031c77e40d6a3300 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Wed, 2 Aug 2023 16:30:31 +0800 Subject: [PATCH 24/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= =?UTF-8?q?=E5=8F=8A=E5=90=AF=E5=8A=A8=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/bin/startup.cmd | 6 +++--- server/conf/application.properties | 15 ++++++--------- 2 files changed, 9 insertions(+), 12 deletions(-) diff --git a/server/bin/startup.cmd b/server/bin/startup.cmd index c681f6c5..dfb002bb 100755 --- a/server/bin/startup.cmd +++ b/server/bin/startup.cmd @@ -52,7 +52,7 @@ if not "%NEWEST_JAR%"=="" ( set SERVER=%NEWEST_JAR:.jar=% ) -set MODE="single" +set MODE="" set INVITE_CODE="" set SECURE_KEY="" set MODE_INDEX=-1 @@ -114,7 +114,7 @@ if not %MODE% == "" if not %MODE% == "single" ( rem set reader options @REM set "READER_OPTS=%READER_OPTS% -Dloader.path=%BASE_DIR%/plugins,%BASE_DIR%/plugins/health,%BASE_DIR%/plugins/cmdb,%BASE_DIR%/plugins/selector" -set "READER_OPTS=%READER_OPTS% -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dreader.app.workDir=%BASE_DIR%" +set "READER_OPTS=%READER_OPTS% -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8 -Dspring.profiles.active=prod -Dreader.app.workDir=%BASE_DIR%" set "READER_OPTS=%READER_OPTS% -jar %BASE_DIR%\target\%SERVER%.jar" rem set reader spring config location @@ -130,7 +130,7 @@ echo Run command: echo %COMMAND% echo -echo Reader is starting, you can check the ${BASE_DIR}/logs/start.out +echo Reader is starting, you can check the %BASE_DIR%\logs rem start reader command %COMMAND% diff --git a/server/conf/application.properties b/server/conf/application.properties index 885b1347..abb4cd6d 100644 --- a/server/conf/application.properties +++ b/server/conf/application.properties @@ -1,14 +1,11 @@ -# 设置工作目录 -# reader.app.workDir=. +# 是否多用户模式,如果启动 startup 脚本时使用了 -m 1 选择多用户模式,-m single 运行单用户模式,否则根据此处的参数选择模式 +reader.app.secure=true -# 是否多用户模式,会被启动脚本的参数覆盖,启动时使用 -m 1 选择多用户模式,否则运行单用户模式 -# reader.app.secure=false +# 邀请码,如果启动 startup 脚本时使用了参数 -i 邀请码,则会覆盖此处 +reader.app.inviteCode= -# 邀请码,会被启动脚本的参数覆盖,启动时使用 -i 邀请码 进行修改 -# reader.app.inviteCode= - -# 管理密码,会被启动脚本的参数覆盖,启动时使用 -k 管理密码 进行修改 -# reader.app.secureKey= +# 管理密码,如果启动 startup 脚本时使用了参数 -k 管理密码,则会覆盖此处 +reader.app.secureKey= # 书源代理可通过 header 设置 From 7abf3b3ccfae9d3ffba034e8068e89647442d264 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Wed, 2 Aug 2023 16:32:00 +0800 Subject: [PATCH 25/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc.md b/doc.md index bde97395..4b10a576 100644 --- a/doc.md +++ b/doc.md @@ -235,7 +235,7 @@ cd reader-server-$version ./bin/startup.sh # windows 上直接点击 bin/startup.cmd 文件,直接点击运行会运行单用户模式 -# startup 脚本支持以下选项,并且这些选项无法在配置文件修改,只能使用命令行参数修改 +# startup 脚本支持以下选项,这些选项如果使用命令行参数修改,则会覆盖配置文件的设置 # -m single|multi 选择单用户/多用户模式,默认 以配置文件 conf/application.properties 为准 # -s reader-xx 选择 jar 文件名(不含.jar后缀),默认使用target目录里最新的jar # -i inviteCode 设置多用户模式下的邀请码,默认 以配置文件 conf/application.properties 为准 From b494aa6424c405ad9109811d33259f3e82bd8542 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Wed, 2 Aug 2023 16:32:51 +0800 Subject: [PATCH 26/43] =?UTF-8?q?docs:=20=E4=BF=AE=E6=94=B9=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/doc.md b/doc.md index 4b10a576..de42130a 100644 --- a/doc.md +++ b/doc.md @@ -233,7 +233,7 @@ unzip reader-server-$version.zip cd reader-server-$version ./bin/startup.sh -# windows 上直接点击 bin/startup.cmd 文件,直接点击运行会运行单用户模式 +# windows 上直接点击 bin/startup.cmd 文件 # startup 脚本支持以下选项,这些选项如果使用命令行参数修改,则会覆盖配置文件的设置 # -m single|multi 选择单用户/多用户模式,默认 以配置文件 conf/application.properties 为准 From c546afcfba10f31e65650f929171506316aa99d2 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Thu, 10 Aug 2023 08:50:05 +0800 Subject: [PATCH 27/43] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=B8=80=E9=94=AE?= =?UTF-8?q?=E8=84=9A=E6=9C=ACbug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- reader.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reader.sh b/reader.sh index 356b8cf4..fb2dc977 100644 --- a/reader.sh +++ b/reader.sh @@ -95,8 +95,9 @@ install_reader() { wget https://jihulab.com/aoaostar/legado/-/raw/release/cache/6c35d84798ddbf4aad3fe3f0fd6cec53dd788be8.json -O storage/data/default/bookSource.json # 判断是否合法json local first_character=$(head -c 1 "storage/data/default/bookSource.json") - if [[ x"$first_character" == x"[" ]] then + if [[ x"$first_character" == x"[" ]]; then # + echo "" else echo -e "${red} 书源错误,已为您删除,请自行导入书源 ${plain}" echo "[]" > storage/data/default/bookSource.json From 0119b7a423dfc8341923a305de383048c1951782 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Fri, 11 Aug 2023 11:35:12 +0800 Subject: [PATCH 28/43] Update issue templates --- ...6\351\242\230\345\217\215\351\246\210-.md" | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 ".github/ISSUE_TEMPLATE/bug-report--\351\227\256\351\242\230\345\217\215\351\246\210-.md" diff --git "a/.github/ISSUE_TEMPLATE/bug-report--\351\227\256\351\242\230\345\217\215\351\246\210-.md" "b/.github/ISSUE_TEMPLATE/bug-report--\351\227\256\351\242\230\345\217\215\351\246\210-.md" new file mode 100644 index 00000000..bb7037a9 --- /dev/null +++ "b/.github/ISSUE_TEMPLATE/bug-report--\351\227\256\351\242\230\345\217\215\351\246\210-.md" @@ -0,0 +1,38 @@ +--- +name: Bug report (问题反馈) +about: 描述你在使用中遇到的问题(issue语言:1. 中文;2. 英文) +title: '' +labels: '' +assignees: '' + +--- + +**为避免无效问题和冗余问题,提问前请确认** +1. 你确定Google不能解决你的问题 +2. 你确定已有的issue不能解决你的问题 +3. 你确定issue的title按照格式如下:[tutorial-code]:description + +**Describe the bug 描述你遇到的问题** +A clear and concise description of what the bug is. 简洁有效的说明。 + +**To Reproduce 如何重现问题** +Steps to reproduce the behavior: 把你遇到的问题的发生步骤替换掉下面的内容: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior 期待修复的效果** +A clear and concise description of what you expected to happen. 简单描述。 + +**Screenshots 如有必要,可以截图说明** +If applicable, add screenshots to help explain your problem. + +**版本说明** + - OS: [e.g. win] 说明操作系统 + - Deploy Method 说明软件部署方式 + - Program Version 说明软件版本 + - Browser [e.g. chrome, safari] 说明终端、浏览器型号 + +**Additional context 其他说明** +Add any other context about the problem here. 添加你认为有必要的内容,否则不写。 From c47f870ecc55fa2345527b248111a33a5c9af45a Mon Sep 17 00:00:00 2001 From: hectorqin Date: Fri, 11 Aug 2023 11:36:28 +0800 Subject: [PATCH 29/43] =?UTF-8?q?Update=20bug-report--=E9=97=AE=E9=A2=98?= =?UTF-8?q?=E5=8F=8D=E9=A6=88-.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...eport--\351\227\256\351\242\230\345\217\215\351\246\210-.md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/.github/ISSUE_TEMPLATE/bug-report--\351\227\256\351\242\230\345\217\215\351\246\210-.md" "b/.github/ISSUE_TEMPLATE/bug-report--\351\227\256\351\242\230\345\217\215\351\246\210-.md" index bb7037a9..e6114dc2 100644 --- "a/.github/ISSUE_TEMPLATE/bug-report--\351\227\256\351\242\230\345\217\215\351\246\210-.md" +++ "b/.github/ISSUE_TEMPLATE/bug-report--\351\227\256\351\242\230\345\217\215\351\246\210-.md" @@ -10,7 +10,7 @@ assignees: '' **为避免无效问题和冗余问题,提问前请确认** 1. 你确定Google不能解决你的问题 2. 你确定已有的issue不能解决你的问题 -3. 你确定issue的title按照格式如下:[tutorial-code]:description +3. 你确定issue的title按照格式如下:[web/simple-web/server]:description **Describe the bug 描述你遇到的问题** A clear and concise description of what the bug is. 简洁有效的说明。 From fb2fdd8fc4eaa2ae65546d56a0043abe096ca669 Mon Sep 17 00:00:00 2001 From: hectorqin Date: Thu, 31 Aug 2023 15:56:05 +0800 Subject: [PATCH 30/43] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E6=97=A5=E5=BF=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- UPDATELOG.md | 477 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 477 insertions(+) create mode 100644 UPDATELOG.md diff --git a/UPDATELOG.md b/UPDATELOG.md new file mode 100644 index 00000000..329e1706 --- /dev/null +++ b/UPDATELOG.md @@ -0,0 +1,477 @@ +# Update Log + +## v3.2.6 + +### Features + +- 新增清除最近阅读功能 +- 新增编辑文章内容功能 +- 优化多个弹窗显示 +- 优化书源导入逻辑 +- 优化订阅同步逻辑 + +## v3.2.5 + +### Features + +- 新增simple-web书架排序 +- 优化文件读写锁 +- 开启连读优化后缓存后三段TTS + +### Bug Fixes + +- 修改simple-web书架搜索bug + +## v3.2.4 + +### Features + +- 修改服务器版本脚本 +- 去掉gc,优化文件读写锁 +- 测试 iOS 朗读 +- 修改接口请求默认超时时间为30秒 + +## v3.2.3 + +### Features + +- 新增直接添加书签 +- 新增simple-web页面设置 +- 添加定时gc逻辑 +- 优化simple-web页面 +- 新增服务器端脚本 + +### Bug Fixes + +- 修改后端链接状态bug + +## v3.2.2 + +### Features + +- 优化自动阅读 +- 优化书海,书源管理样式 +- 优化simple-web兼容性 +- 新增PC端设置提示 + +### Bug Fixes + +- 修复windows环境漫画路径问题 +- 修复往前翻页bug + +## v3.2.1 + +### Features + +- 新增kindle7天试用申请 +- 优化epub阅读位置记忆跳转 + +### Bug Fixes + +- 尝试修复PC端启动jvm参数bug + +## v3.2.0 + +### Features + +- 新增视频源支持 +- epub支持朗读和自动阅读,优化阅读界面 +- 新增simple-web搜索及RSS页面,优化simple-web页面样式 +- 修改epub导入兼容性 +- 新增书源管理搜索功能 +- 修改桌面端jvm启动参数 +- 新增书源订阅管理 +- 优化探索样式 +- 优化书源调试页面 + +### Bug Fixes + +- 修复epub书名包含+号时注入js失败问题 +- 修复simple-web分页组件 +- 修复remote-webview不能访问https问题 +- 修改封面上传后弹窗无法关闭的bug +- 修改上下滚动模式目录跳转bug + +## v3.1.1 + +### Features + +- 新增在线TTS朗读(Edge大声朗读) + +### Bug Fixes + +- 修复朗读bug + +## v3.1.0 + +### Features + +- 新增下载数据备份功能,新增自动备份功能。通过 --reader.app.autoBackupUserData=true 启用,每天23:50开始会自动备份用户数据到webdav目录 +- 延长kindle试用期至 2023-06-30,过期以后需要购买授权来使用kindle页面 +- 新增书籍设置pdf图片宽度选项 +- 新增朗读时跳过全标点段落,跳过段末标点符号 +- 新增更新错误分组排除不追更书籍 + +### Bug Fixes + +- 修复用户管理界面排序bug + +## v3.0.5 + +### Features + +- 去掉书籍上限启动参数 +- 延长kindle试用期 + +## v3.0.4 + +### Features + +- 新增封面代理设置 +- 优化文件并发读写加锁逻辑 +- 优化多源搜索 +- 延长kindle试用期 + +## v3.0.3 + +### Features + +- 新增章节请求超时设置 +- 新增simple—web搜索书架功能 +- 桌面端新增jvm配置 +- 尝试修复音频音量bug,尝试优化pwa +- 页面优化 +- 延长kindle试用期 + +### Bug Fixes + +- 修复simple-web端bug + +## v3.0.2 + +### Features + +- 支持pdf格式 +- 页面优化 +- 延长kindle试用期15天 + +### Bug Fixes + +- 修复用户默认书源bug +- simple-web兼容kindle + +## v3.0.1 + +### Features + +- 新增书架布局设置,新增分列布局 +- 修改书籍分组的字段类型,支持更多分组 +- 新增用户更多设置项 +- 优化simple-web分页逻辑 +- 优化simple-web兼容性 +- 优化音频音量设置 + +### Bug Fixes + +- 修复simple-web渲染器bug +- 修复删除书籍未刷新书架bug + +## v3.0.0 + +### Features + +- 新增epub iframe模式自定义字体支持 +- 新增simple-web端,支持kindle使用(限时免费) +- 新增授权管理,多用户版用户上限降低至 15(已超出的无法再注册,但可以继续使用) +- 新增用户管理、书籍管理、书签管理等分页排序过滤功能 +- 新增书源请求头设置 +- 新增书籍批量缓存操作 +- 新增contextPath设置项 +- 新增书架搜索作者及分类 +- 优化书籍信息页面 +- 优化阅读界面功能按钮 + +### Bug Fixes + +- 修复音频播放bug +- 修复调试书源跳转链接bug + +## v2.7.4 + +### Features + +- 新增一键导入本地书籍功能 +- 添加新增替换规则入口,优化替换逻辑 +- 新增更新错误内置分组 +- 优化日志跟踪 +- 优化音频时长获取逻辑 + +### Bug Fixes + +- 修复Windows环境webdav路径判断bug +- 尝试修复音频时长获取bug +- 修复书架刷新并发bug +- 修复书籍封面接口bug + +## v2.7.3 + +### Features + +- 新增书仓搜索及解析书籍功能 +- 修改语音库选择样式 +- 优化书源分组 +- 优化协程逻辑,拆分解析库和控制层库 +- 新增原文阅读模式,优化缓存判断逻辑 + +### Bug Fixes + +- 尝试修复自动切换主题bug + +## v2.7.2 + +### Features + +- 新增Epub解析模式, 支持简繁切换、左右翻页 +- 新增Epub iframe 模式左右翻页功能 +- 修改日志配置,仅保留7天 +- 新增书仓文件管理筛选功能 +- 修改简繁切换库,样式优化,感谢 [@terry3041](https://github.com/hectorqin/reader/pull/227) + +### Bug Fixes + +- 修复桌面端bug + +## v2.7.1 + +### Bug Fixes + +- 修复书仓下载bug +- 修复书籍追更选项设置bug + +## v2.7.0 + +### Features + +- 新增远程webview镜像,支持使用 `hectorqin/remote-webview` 镜像作为远程 `webview`,使用 --reader.app.remoteWebviewApi="http://0.0.0.0:8050" 启用。 +- 新增书源`cookie`,`cache`功能支持 +- 新增上下左右边距设置 + +## v2.6.4 + +### Features + +- 新增远程 `webview` 支持,目前仅支持 `scrapinghub/splash` 镜像作为远程 `webview`,使用 --reader.app.remoteWebviewApi="http://0.0.0.0:8050" 启用。 +- 优化听书逻辑 + +### Bug Fixes + +- 修复清理用户bug + +## v2.6.3 + +### Features + +- 新增清理不活跃用户功能,使用 --reader.app.autoClearInactiveUser=31 (不活跃天数) 启用 +- 优化书架更新逻辑 +- 新增书架更新间隔设置选项,使用 --reader.app.shelfUpdateInteval=10 (更新间隔分钟,必须是10的倍数) 启用 + +### Bug Fixes + +- 修复加入书架bug +- 修改CI +- 修复配置方案失效bug + +--- +## v2.6.2 + +### Features + +- 添加用户并发修改锁 + +### Bug Fixes + +- 修改CI + +--- +## v2.6.1 + +### Bug Fixes + +- 修改CI + +--- +## v2.6.0 + +### Bug Fixes + +- 修复本地书籍路径问题 + +--- +## v2.5.8 + +### Features + +- 测试CI + +--- + +## v2.5.7 + +### Features + +- 临时书籍使用临时缓存 +- 新增支持mongodb存放数据 + +--- + +## v2.5.6 + +### Bug Fixes + +- 修复书架路径bug + +--- + +## v2.5.5 + +### Features + +- 统一文件管理 +- 优化书籍内容使用缓存图片 + +### Bug Fixes + +- 修复书架绝对路径bug + +--- + +## v2.5.4 + +### Features + +- 新增分组排序功能 +- 新增朗读定时功能 +- 新增音频音量调整功能 + +### Bug Fixes + +- 修复书架更新并发bug +- 修复window环境问题 +- 修复书源调试bug +- 修复音频bug + +--- + +## v2.5.3 + +### Features + +- 新增 webdav 书仓功能,新增修改目录规则功能,优化本地书籍换源功能 + +--- + +## v2.5.2 + +### Bug Fixes + +- 修复jdk8编译依赖 + +--- + +## v2.5.1 + +### Features + +- 新增自定义字体功能,优化阅读设置功能,新增书签同步功能 + +--- + +## v2.5.0 + +### Features + +- 新增全文搜索功能,本地书籍生成封面优化,epub设置增强 +- 新增书签功能 + +--- + +## v2.4.1 + +### Features + +- 完善注册登录,新增删除用户书源和恢复默认书源功能,测试CI +- 新增本地书仓功能,新增自定义书籍封面功能,新增用户上限和用户书籍上限 +- 更新阅读内核 +- 新增清空书源功能,新增自动缓存下一章 +- 优化本地导入逻辑 +- 完成替换规则改版逻辑,新增配置方案设置功能,修复bug,优化页面 +- 新增上下滚动翻页模式,优化页面 +- 新增简繁转换功能,新增替换规则导入功能,新增设置默认书源功能,新增像素滚动自动翻页,兼容ie +- 新增书源调试功能,优化书海功能,优化缓存功能 +- 新增支持CBZ书籍,新增支持卷名,优化调试功能 +- 新增书籍管理功能,新增缓存及导出功能,优化书海功能 + +### Bug Fixes + +- 页面优化 +- bug修复 + +--- + +## v2.0.3 + +### Features + +- 更新阅读解析库 +- 优化多源搜索和书源搜索功能 +- 新增服务器缓存章节内容功能,优化阅读宽度设置 +- 迁移缓存到indexdb +- 新增简洁模式 + +### Bug Fixes + +- 修复书源分组搜索选择bug +- 页面优化 +- bug修复 + +--- + +## v1.9.4 + +### Features + +- 新增缓存管理,优化缓存逻辑 +- 新增页面模式设置 +- 新增自定义主题模式设置 +- 新增远程书源导入功能 +- 新增读取epub封面,优化导入逻辑,优化书源错误标记 +- 新增书源导出功能 +- 新增按分组搜索书源功能 +- 新增刷新章节内容功能 +- 新增翻页动画时长设置 + +### Bug Fixes + +- 修复iPad兼容问题 +- 修复精确搜索bug,优化json序列化 +- 页面优化 +- bug修复 + +--- + +## V1.8.0 + +### Features + +- 新增点击翻页和选择文字过滤关闭选项 +- 支持设置代理(待测试) +- 修复旧版本自动迁移bug +- 修复搜索bug +- 完善失败源标记和恢复逻辑 +- 优化ios pwa样式 +- 优化书籍标签显示 + +### Bug Fixes + +- 页面优化 +- bug修复 From d0e951cb50ec52b8ed2167590ff2ed23347afbc3 Mon Sep 17 00:00:00 2001 From: WangYang Date: Fri, 10 Nov 2023 19:13:29 +0800 Subject: [PATCH 31/43] =?UTF-8?q?fix:=20=E6=9B=B4=E6=96=B0=E4=BB=A3?= =?UTF-8?q?=E7=90=86=E5=9C=B0=E5=9D=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc.md | 6 +++--- reader.sh | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/doc.md b/doc.md index de42130a..0bea5e26 100644 --- a/doc.md +++ b/doc.md @@ -310,7 +310,7 @@ curl -fsSL https://get.docker.com | bash -s docker #国外服务器 curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun #国内服务器 # 下载项目里的 docker-compose.yaml -wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yaml +wget https://mirror.ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yaml # 根据 docker-compose.yaml 里面的注释编辑所需配置 vim docker-compose.yaml # 保存 @@ -337,10 +337,10 @@ docker-compose pull && docker-compose up -d ```shell # 此脚本对甲骨文非Ubuntu系统,CentOS9可能不兼容。建议网上手动搜索 #curl -bash <(curl -L -s https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) +bash <(curl -L -s https://mirror.ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) #wget -bash <(wget -qO- --no-check-certificate https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) +bash <(wget -qO- --no-check-certificate https://mirror.ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/reader.sh) ``` diff --git a/reader.sh b/reader.sh index fb2dc977..6eb48125 100644 --- a/reader.sh +++ b/reader.sh @@ -79,7 +79,7 @@ install_dockercompose() { systemctl restart docker systemctl enable docker echo -e "${green} 正在安装docker-compose ${plain}" - curl -L "https://ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose + curl -L "https://mirror.ghproxy.com/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose else echo -e "${green} 正在安装docker-compose ${plain}" apt update && apt install wget curl docker-compose -y @@ -90,7 +90,7 @@ install_reader() { mkdir -p ${orgin_file_dir}/storage/data/default cd ${orgin_file_dir} rm docker-compose* - wget https://ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yml + wget https://mirror.ghproxy.com/https://raw.githubusercontent.com/hectorqin/reader/master/docker-compose.yml echo -e "${green} 正在配置默认书源 ${plain}" wget https://jihulab.com/aoaostar/legado/-/raw/release/cache/6c35d84798ddbf4aad3fe3f0fd6cec53dd788be8.json -O storage/data/default/bookSource.json # 判断是否合法json From 2b9e40d6a075cf50e8d1e771ccd0cca390fd8fb3 Mon Sep 17 00:00:00 2001 From: hectorqin <14220132+hectorqin@users.noreply.github.com> Date: Wed, 1 May 2024 11:46:17 +0800 Subject: [PATCH 32/43] Update doc.md --- doc.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/doc.md b/doc.md index 0bea5e26..476226cb 100644 --- a/doc.md +++ b/doc.md @@ -145,6 +145,8 @@ reader: defaultUserBookSourceLimit: 100 # 新用户默认书源上限 defaultUserBookLimit: 200 # 新用户默认书籍上限 autoBackupUserData: false # 是否自动备份用户数据 + minUserPasswordLength: 8 # 用户密码最小长度 + remoteBookSourceUpdateInterval: 720 # 远程书源定时更新间隔时间,单位分钟,必须是10的倍数 server: port: 8080 # 监听端口 From 736c08065802f2fd6b90c3b667bc8c65815a1928 Mon Sep 17 00:00:00 2001 From: taotieren Date: Thu, 14 Nov 2024 22:59:44 +0800 Subject: [PATCH 33/43] update archlinux install --- doc.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/doc.md b/doc.md index 476226cb..7b45ad71 100644 --- a/doc.md +++ b/doc.md @@ -13,6 +13,7 @@ - [WebDAV同步配置](#webdav同步配置) - [客户端](#客户端) - [Windows / MacOS / Linux](#windows--macos--linux) + - [Arch Linux 安装](#Arch-Linux-安装) - [配置文件](#配置文件) - [手机端](#手机端) - [服务器版](#服务器版) @@ -186,6 +187,35 @@ reader: MacOS 版 `storage` 默认是 `用户目录/.reader/storage`,其它版本 `storage` 默认是 `程序目录/storage` +### Arch Linux 安装 + +从 [AUR 仓库](https://aur.archlinux.org/packages/reader-pro-bin)安装或[自建软件源](https://github.com/taotieren/aur-repo) + + +```bash +yay -Syu reader-pro +# 开启开机自启 +sudo systemctl enable reader-pro-single +sudo systemctl enable reader-pro-multi +# 运行 +sudo systemctl start reader-pro-single +sudo systemctl start reader-pro-multi +# 状态 +sudo systemctl status reader-pro-single +sudo systemctl status reader-pro-multi +# 停止 +sudo systemctl stop reader-pro-single +sudo systemctl stop reader-pro-multi +# 停止开机自启 +sudo systemctl disable reader-pro-single +sudo systemctl disable reader-pro-multi +``` + +> Arch Linux 的存储目录是 `/var/lib/reader-pro/` + +> Arch Linux 的配置文件是 `/usr/share/java/reader-pro/conf/application.properties` + + #### 配置文件 `storage/windowConfig.json` From aa24508fa73bca60b509813071f6c460b0591e78 Mon Sep 17 00:00:00 2001 From: hectorqin <14220132+hectorqin@users.noreply.github.com> Date: Sun, 1 Dec 2024 16:54:04 +0800 Subject: [PATCH 34/43] Update startup.sh --- server/bin/startup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server/bin/startup.sh b/server/bin/startup.sh index 228ffadb..d4f51dfc 100755 --- a/server/bin/startup.sh +++ b/server/bin/startup.sh @@ -54,7 +54,7 @@ fi export BASE_DIR=`cd $(dirname $0)/..; pwd` SERVER="reader" -NEWEST_JAR=$(ls $BASE_DIR/target | grep -EO 'reader.*\.jar' | sort -nr | head -1) +NEWEST_JAR=$(ls $BASE_DIR/target | grep -Eo 'reader.*\.jar' | sort -nr | head -1) if [ -n "$NEWEST_JAR" ]; then SERVER=${NEWEST_JAR/.jar/} fi From 4cdfaefcd70c2460bb57ad4d81c3a53887098832 Mon Sep 17 00:00:00 2001 From: lxl66566 Date: Thu, 5 Dec 2024 14:38:38 +0800 Subject: [PATCH 35/43] feat: add cache to chinese.js Signed-off-by: lxl66566 --- web/.gitignore | 3 ++- web/src/plugins/chinese.js | 40 +++++++++++++++++++++----------------- 2 files changed, 24 insertions(+), 19 deletions(-) diff --git a/web/.gitignore b/web/.gitignore index 1dcf0c67..4afee578 100644 --- a/web/.gitignore +++ b/web/.gitignore @@ -25,4 +25,5 @@ yarn-error.log* /.profile dist*.zip -yarn.lock \ No newline at end of file +yarn.lock +pnpm-lock.yaml \ No newline at end of file diff --git a/web/src/plugins/chinese.js b/web/src/plugins/chinese.js index a67c2d47..9cd5befb 100644 --- a/web/src/plugins/chinese.js +++ b/web/src/plugins/chinese.js @@ -3,32 +3,36 @@ const scStr = const tcStr = "皚藹礙愛翺襖奧壩罷擺敗頒辦絆幫綁鎊謗剝飽寶報鮑輩貝鋇狽備憊繃筆畢斃閉邊編貶變辯辮鼈癟瀕濱賓擯餅撥缽鉑駁蔔補參蠶殘慚慘燦蒼艙倉滄廁側冊測層詫攙摻蟬饞讒纏鏟産闡顫場嘗長償腸廠暢鈔車徹塵陳襯撐稱懲誠騁癡遲馳恥齒熾沖蟲寵疇躊籌綢醜櫥廚鋤雛礎儲觸處傳瘡闖創錘純綽辭詞賜聰蔥囪從叢湊竄錯達帶貸擔單鄲撣膽憚誕彈當擋黨蕩檔搗島禱導盜燈鄧敵滌遞締點墊電澱釣調叠諜疊釘頂錠訂東動棟凍鬥犢獨讀賭鍍鍛斷緞兌隊對噸頓鈍奪鵝額訛惡餓兒爾餌貳發罰閥琺礬釩煩範販飯訪紡飛廢費紛墳奮憤糞豐楓鋒風瘋馮縫諷鳳膚輻撫輔賦複負訃婦縛該鈣蓋幹趕稈贛岡剛鋼綱崗臯鎬擱鴿閣鉻個給龔宮鞏貢鈎溝構購夠蠱顧剮關觀館慣貫廣規矽歸龜閨軌詭櫃貴劊輥滾鍋國過駭韓漢閡鶴賀橫轟鴻紅後壺護滬戶嘩華畫劃話懷壞歡環還緩換喚瘓煥渙黃謊揮輝毀賄穢會燴彙諱誨繪葷渾夥獲貨禍擊機積饑譏雞績緝極輯級擠幾薊劑濟計記際繼紀夾莢頰賈鉀價駕殲監堅箋間艱緘繭檢堿鹼揀撿簡儉減薦檻鑒踐賤見鍵艦劍餞漸濺澗漿蔣槳獎講醬膠澆驕嬌攪鉸矯僥腳餃繳絞轎較稭階節莖驚經頸靜鏡徑痙競淨糾廄舊駒舉據鋸懼劇鵑絹傑潔結誡屆緊錦僅謹進晉燼盡勁荊覺決訣絕鈞軍駿開凱顆殼課墾懇摳庫褲誇塊儈寬礦曠況虧巋窺饋潰擴闊蠟臘萊來賴藍欄攔籃闌蘭瀾讕攬覽懶纜爛濫撈勞澇樂鐳壘類淚籬離裏鯉禮麗厲勵礫曆瀝隸倆聯蓮連鐮憐漣簾斂臉鏈戀煉練糧涼兩輛諒療遼鐐獵臨鄰鱗凜賃齡鈴淩靈嶺領餾劉龍聾嚨籠壟攏隴樓婁摟簍蘆盧顱廬爐擄鹵虜魯賂祿錄陸驢呂鋁侶屢縷慮濾綠巒攣孿灤亂掄輪倫侖淪綸論蘿羅邏鑼籮騾駱絡媽瑪碼螞馬罵嗎買麥賣邁脈瞞饅蠻滿謾貓錨鉚貿麽黴沒鎂門悶們錳夢謎彌覓綿緬廟滅憫閩鳴銘謬謀畝鈉納難撓腦惱鬧餒膩攆撚釀鳥聶齧鑷鎳檸獰甯擰濘鈕紐膿濃農瘧諾歐鷗毆嘔漚盤龐國愛賠噴鵬騙飄頻貧蘋憑評潑頗撲鋪樸譜臍齊騎豈啓氣棄訖牽扡釺鉛遷簽謙錢鉗潛淺譴塹槍嗆牆薔強搶鍬橋喬僑翹竅竊欽親輕氫傾頃請慶瓊窮趨區軀驅齲顴權勸卻鵲讓饒擾繞熱韌認紉榮絨軟銳閏潤灑薩鰓賽傘喪騷掃澀殺紗篩曬閃陝贍繕傷賞燒紹賒攝懾設紳審嬸腎滲聲繩勝聖師獅濕詩屍時蝕實識駛勢釋飾視試壽獸樞輸書贖屬術樹豎數帥雙誰稅順說碩爍絲飼聳慫頌訟誦擻蘇訴肅雖綏歲孫損筍縮瑣鎖獺撻擡攤貪癱灘壇譚談歎湯燙濤縧騰謄銻題體屜條貼鐵廳聽烴銅統頭圖塗團頹蛻脫鴕馱駝橢窪襪彎灣頑萬網韋違圍爲濰維葦偉僞緯謂衛溫聞紋穩問甕撾蝸渦窩嗚鎢烏誣無蕪吳塢霧務誤錫犧襲習銑戲細蝦轄峽俠狹廈鍁鮮纖鹹賢銜閑顯險現獻縣餡羨憲線廂鑲鄉詳響項蕭銷曉嘯蠍協挾攜脅諧寫瀉謝鋅釁興洶鏽繡虛噓須許緒續軒懸選癬絢學勳詢尋馴訓訊遜壓鴉鴨啞亞訝閹煙鹽嚴顔閻豔厭硯彥諺驗鴦楊揚瘍陽癢養樣瑤搖堯遙窯謠藥爺頁業葉醫銥頤遺儀彜蟻藝億憶義詣議誼譯異繹蔭陰銀飲櫻嬰鷹應纓瑩螢營熒蠅穎喲擁傭癰踴詠湧優憂郵鈾猶遊誘輿魚漁娛與嶼語籲禦獄譽預馭鴛淵轅園員圓緣遠願約躍鑰嶽粵悅閱雲鄖勻隕運蘊醞暈韻雜災載攢暫贊贓髒鑿棗竈責擇則澤賊贈紮劄軋鍘閘詐齋債氈盞斬輾嶄棧戰綻張漲帳賬脹趙蟄轍鍺這貞針偵診鎮陣掙睜猙幀鄭證織職執紙摯擲幟質鍾終種腫衆謅軸皺晝驟豬諸誅燭矚囑貯鑄築駐專磚轉賺樁莊裝妝壯狀錐贅墜綴諄濁茲資漬蹤綜總縱鄒詛組鑽緻鐘麼為隻兇準啟闆裡靂餘鍊洩"; +// 构建映射字典 +const scToTcMap = {}; +const tcToScMap = {}; +for (let i = 0; i < scStr.length; i++) { + scToTcMap[scStr[i]] = tcStr[i]; + tcToScMap[tcStr[i]] = scStr[i]; +} + export const traditionalized = function(orgStr) { - var str = "", - index, - char; - for (var i = 0; i < orgStr.length; i++) { - char = orgStr.charAt(i); + let str = ""; + for (let i = 0; i < orgStr.length; i++) { + const char = orgStr[i]; if (char.charCodeAt(0) > 10000) { - index = scStr.indexOf(char); - if (index != -1) str += tcStr.charAt(index); - else str += char; - } else str += char; + str += scToTcMap[char] || char; + } else { + str += char; + } } return str; }; export const simplized = function(orgStr) { - var str = "", - index, - char; - for (var i = 0; i < orgStr.length; i++) { - char = orgStr.charAt(i); + let str = ""; + for (let i = 0; i < orgStr.length; i++) { + const char = orgStr[i]; if (char.charCodeAt(0) > 10000) { - index = tcStr.indexOf(char); - if (index != -1) str += scStr.charAt(index); - else str += char; - } else str += char; + str += tcToScMap[char] || char; + } else { + str += char; + } } return str; }; From fbbb3fd7a83a147f88c5d3c87bd42dbb40db8239 Mon Sep 17 00:00:00 2001 From: lxl66566 Date: Thu, 5 Dec 2024 15:23:01 +0800 Subject: [PATCH 36/43] fix: apply traditionalized and simplized immediately Signed-off-by: lxl66566 --- web/src/views/Reader.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/web/src/views/Reader.vue b/web/src/views/Reader.vue index ae2e2587..636ac15a 100644 --- a/web/src/views/Reader.vue +++ b/web/src/views/Reader.vue @@ -685,8 +685,8 @@ export default { } }, chineseFont() { - this.title = this.title; - this.content = this.content; + this.title = this.filterContent(this.title); + this.content = this.filterContent(this.content); this.computeShowChapterList(); } }, From de1eb1699441d0fee6a911fa6adb5faa70d80d4d Mon Sep 17 00:00:00 2001 From: lxl66566 Date: Thu, 5 Dec 2024 17:18:55 +0800 Subject: [PATCH 37/43] fix: free not used structure Signed-off-by: lxl66566 --- web/src/plugins/chinese.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/web/src/plugins/chinese.js b/web/src/plugins/chinese.js index 9cd5befb..49cf83ab 100644 --- a/web/src/plugins/chinese.js +++ b/web/src/plugins/chinese.js @@ -1,6 +1,6 @@ -const scStr = +let scStr = "皑蔼碍爱翱袄奥坝罢摆败颁办绊帮绑镑谤剥饱宝报鲍辈贝钡狈备惫绷笔毕毙闭边编贬变辩辫鳖瘪濒滨宾摈饼拨钵铂驳卜补参蚕残惭惨灿苍舱仓沧厕侧册测层诧搀掺蝉馋谗缠铲产阐颤场尝长偿肠厂畅钞车彻尘陈衬撑称惩诚骋痴迟驰耻齿炽冲虫宠畴踌筹绸丑橱厨锄雏础储触处传疮闯创锤纯绰辞词赐聪葱囱从丛凑窜错达带贷担单郸掸胆惮诞弹当挡党荡档捣岛祷导盗灯邓敌涤递缔点垫电淀钓调迭谍叠钉顶锭订东动栋冻斗犊独读赌镀锻断缎兑队对吨顿钝夺鹅额讹恶饿儿尔饵贰发罚阀珐矾钒烦范贩饭访纺飞废费纷坟奋愤粪丰枫锋风疯冯缝讽凤肤辐抚辅赋复负讣妇缚该钙盖干赶秆赣冈刚钢纲岗皋镐搁鸽阁铬个给龚宫巩贡钩沟构购够蛊顾剐关观馆惯贯广规硅归龟闺轨诡柜贵刽辊滚锅国过骇韩汉阂鹤贺横轰鸿红后壶护沪户哗华画划话怀坏欢环还缓换唤痪焕涣黄谎挥辉毁贿秽会烩汇讳诲绘荤浑伙获货祸击机积饥讥鸡绩缉极辑级挤几蓟剂济计记际继纪夹荚颊贾钾价驾歼监坚笺间艰缄茧检碱硷拣捡简俭减荐槛鉴践贱见键舰剑饯渐溅涧浆蒋桨奖讲酱胶浇骄娇搅铰矫侥脚饺缴绞轿较秸阶节茎惊经颈静镜径痉竞净纠厩旧驹举据锯惧剧鹃绢杰洁结诫届紧锦仅谨进晋烬尽劲荆觉决诀绝钧军骏开凯颗壳课垦恳抠库裤夸块侩宽矿旷况亏岿窥馈溃扩阔蜡腊莱来赖蓝栏拦篮阑兰澜谰揽览懒缆烂滥捞劳涝乐镭垒类泪篱离里鲤礼丽厉励砾历沥隶俩联莲连镰怜涟帘敛脸链恋炼练粮凉两辆谅疗辽镣猎临邻鳞凛赁龄铃凌灵岭领馏刘龙聋咙笼垄拢陇楼娄搂篓芦卢颅庐炉掳卤虏鲁赂禄录陆驴吕铝侣屡缕虑滤绿峦挛孪滦乱抡轮伦仑沦纶论萝罗逻锣箩骡骆络妈玛码蚂马骂吗买麦卖迈脉瞒馒蛮满谩猫锚铆贸么霉没镁门闷们锰梦谜弥觅绵缅庙灭悯闽鸣铭谬谋亩钠纳难挠脑恼闹馁腻撵捻酿鸟聂啮镊镍柠狞宁拧泞钮纽脓浓农疟诺欧鸥殴呕沤盘庞国爱赔喷鹏骗飘频贫苹凭评泼颇扑铺朴谱脐齐骑岂启气弃讫牵扦钎铅迁签谦钱钳潜浅谴堑枪呛墙蔷强抢锹桥乔侨翘窍窃钦亲轻氢倾顷请庆琼穷趋区躯驱龋颧权劝却鹊让饶扰绕热韧认纫荣绒软锐闰润洒萨鳃赛伞丧骚扫涩杀纱筛晒闪陕赡缮伤赏烧绍赊摄慑设绅审婶肾渗声绳胜圣师狮湿诗尸时蚀实识驶势释饰视试寿兽枢输书赎属术树竖数帅双谁税顺说硕烁丝饲耸怂颂讼诵擞苏诉肃虽绥岁孙损笋缩琐锁獭挞抬摊贪瘫滩坛谭谈叹汤烫涛绦腾誊锑题体屉条贴铁厅听烃铜统头图涂团颓蜕脱鸵驮驼椭洼袜弯湾顽万网韦违围为潍维苇伟伪纬谓卫温闻纹稳问瓮挝蜗涡窝呜钨乌诬无芜吴坞雾务误锡牺袭习铣戏细虾辖峡侠狭厦锨鲜纤咸贤衔闲显险现献县馅羡宪线厢镶乡详响项萧销晓啸蝎协挟携胁谐写泻谢锌衅兴汹锈绣虚嘘须许绪续轩悬选癣绚学勋询寻驯训讯逊压鸦鸭哑亚讶阉烟盐严颜阎艳厌砚彦谚验鸯杨扬疡阳痒养样瑶摇尧遥窑谣药爷页业叶医铱颐遗仪彝蚁艺亿忆义诣议谊译异绎荫阴银饮樱婴鹰应缨莹萤营荧蝇颖哟拥佣痈踊咏涌优忧邮铀犹游诱舆鱼渔娱与屿语吁御狱誉预驭鸳渊辕园员圆缘远愿约跃钥岳粤悦阅云郧匀陨运蕴酝晕韵杂灾载攒暂赞赃脏凿枣灶责择则泽贼赠扎札轧铡闸诈斋债毡盏斩辗崭栈战绽张涨帐账胀赵蛰辙锗这贞针侦诊镇阵挣睁狰帧郑证织职执纸挚掷帜质钟终种肿众诌轴皱昼骤猪诸诛烛瞩嘱贮铸筑驻专砖转赚桩庄装妆壮状锥赘坠缀谆浊兹资渍踪综总纵邹诅组钻致钟么为只凶准启板里雳余链泄"; -const tcStr = +let tcStr = "皚藹礙愛翺襖奧壩罷擺敗頒辦絆幫綁鎊謗剝飽寶報鮑輩貝鋇狽備憊繃筆畢斃閉邊編貶變辯辮鼈癟瀕濱賓擯餅撥缽鉑駁蔔補參蠶殘慚慘燦蒼艙倉滄廁側冊測層詫攙摻蟬饞讒纏鏟産闡顫場嘗長償腸廠暢鈔車徹塵陳襯撐稱懲誠騁癡遲馳恥齒熾沖蟲寵疇躊籌綢醜櫥廚鋤雛礎儲觸處傳瘡闖創錘純綽辭詞賜聰蔥囪從叢湊竄錯達帶貸擔單鄲撣膽憚誕彈當擋黨蕩檔搗島禱導盜燈鄧敵滌遞締點墊電澱釣調叠諜疊釘頂錠訂東動棟凍鬥犢獨讀賭鍍鍛斷緞兌隊對噸頓鈍奪鵝額訛惡餓兒爾餌貳發罰閥琺礬釩煩範販飯訪紡飛廢費紛墳奮憤糞豐楓鋒風瘋馮縫諷鳳膚輻撫輔賦複負訃婦縛該鈣蓋幹趕稈贛岡剛鋼綱崗臯鎬擱鴿閣鉻個給龔宮鞏貢鈎溝構購夠蠱顧剮關觀館慣貫廣規矽歸龜閨軌詭櫃貴劊輥滾鍋國過駭韓漢閡鶴賀橫轟鴻紅後壺護滬戶嘩華畫劃話懷壞歡環還緩換喚瘓煥渙黃謊揮輝毀賄穢會燴彙諱誨繪葷渾夥獲貨禍擊機積饑譏雞績緝極輯級擠幾薊劑濟計記際繼紀夾莢頰賈鉀價駕殲監堅箋間艱緘繭檢堿鹼揀撿簡儉減薦檻鑒踐賤見鍵艦劍餞漸濺澗漿蔣槳獎講醬膠澆驕嬌攪鉸矯僥腳餃繳絞轎較稭階節莖驚經頸靜鏡徑痙競淨糾廄舊駒舉據鋸懼劇鵑絹傑潔結誡屆緊錦僅謹進晉燼盡勁荊覺決訣絕鈞軍駿開凱顆殼課墾懇摳庫褲誇塊儈寬礦曠況虧巋窺饋潰擴闊蠟臘萊來賴藍欄攔籃闌蘭瀾讕攬覽懶纜爛濫撈勞澇樂鐳壘類淚籬離裏鯉禮麗厲勵礫曆瀝隸倆聯蓮連鐮憐漣簾斂臉鏈戀煉練糧涼兩輛諒療遼鐐獵臨鄰鱗凜賃齡鈴淩靈嶺領餾劉龍聾嚨籠壟攏隴樓婁摟簍蘆盧顱廬爐擄鹵虜魯賂祿錄陸驢呂鋁侶屢縷慮濾綠巒攣孿灤亂掄輪倫侖淪綸論蘿羅邏鑼籮騾駱絡媽瑪碼螞馬罵嗎買麥賣邁脈瞞饅蠻滿謾貓錨鉚貿麽黴沒鎂門悶們錳夢謎彌覓綿緬廟滅憫閩鳴銘謬謀畝鈉納難撓腦惱鬧餒膩攆撚釀鳥聶齧鑷鎳檸獰甯擰濘鈕紐膿濃農瘧諾歐鷗毆嘔漚盤龐國愛賠噴鵬騙飄頻貧蘋憑評潑頗撲鋪樸譜臍齊騎豈啓氣棄訖牽扡釺鉛遷簽謙錢鉗潛淺譴塹槍嗆牆薔強搶鍬橋喬僑翹竅竊欽親輕氫傾頃請慶瓊窮趨區軀驅齲顴權勸卻鵲讓饒擾繞熱韌認紉榮絨軟銳閏潤灑薩鰓賽傘喪騷掃澀殺紗篩曬閃陝贍繕傷賞燒紹賒攝懾設紳審嬸腎滲聲繩勝聖師獅濕詩屍時蝕實識駛勢釋飾視試壽獸樞輸書贖屬術樹豎數帥雙誰稅順說碩爍絲飼聳慫頌訟誦擻蘇訴肅雖綏歲孫損筍縮瑣鎖獺撻擡攤貪癱灘壇譚談歎湯燙濤縧騰謄銻題體屜條貼鐵廳聽烴銅統頭圖塗團頹蛻脫鴕馱駝橢窪襪彎灣頑萬網韋違圍爲濰維葦偉僞緯謂衛溫聞紋穩問甕撾蝸渦窩嗚鎢烏誣無蕪吳塢霧務誤錫犧襲習銑戲細蝦轄峽俠狹廈鍁鮮纖鹹賢銜閑顯險現獻縣餡羨憲線廂鑲鄉詳響項蕭銷曉嘯蠍協挾攜脅諧寫瀉謝鋅釁興洶鏽繡虛噓須許緒續軒懸選癬絢學勳詢尋馴訓訊遜壓鴉鴨啞亞訝閹煙鹽嚴顔閻豔厭硯彥諺驗鴦楊揚瘍陽癢養樣瑤搖堯遙窯謠藥爺頁業葉醫銥頤遺儀彜蟻藝億憶義詣議誼譯異繹蔭陰銀飲櫻嬰鷹應纓瑩螢營熒蠅穎喲擁傭癰踴詠湧優憂郵鈾猶遊誘輿魚漁娛與嶼語籲禦獄譽預馭鴛淵轅園員圓緣遠願約躍鑰嶽粵悅閱雲鄖勻隕運蘊醞暈韻雜災載攢暫贊贓髒鑿棗竈責擇則澤賊贈紮劄軋鍘閘詐齋債氈盞斬輾嶄棧戰綻張漲帳賬脹趙蟄轍鍺這貞針偵診鎮陣掙睜猙幀鄭證織職執紙摯擲幟質鍾終種腫衆謅軸皺晝驟豬諸誅燭矚囑貯鑄築駐專磚轉賺樁莊裝妝壯狀錐贅墜綴諄濁茲資漬蹤綜總縱鄒詛組鑽緻鐘麼為隻兇準啟闆裡靂餘鍊洩"; // 构建映射字典 @@ -11,6 +11,10 @@ for (let i = 0; i < scStr.length; i++) { tcToScMap[tcStr[i]] = scStr[i]; } +// 释放内存 +scStr = undefined; +tcStr = undefined; + export const traditionalized = function(orgStr) { let str = ""; for (let i = 0; i < orgStr.length; i++) { From b04b8f506a9fe8d7b5bb50e499e1d269d5ac5697 Mon Sep 17 00:00:00 2001 From: hectorqin <14220132+hectorqin@users.noreply.github.com> Date: Sat, 7 Dec 2024 19:14:26 +0800 Subject: [PATCH 38/43] Update README.md --- README.md | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/README.md b/README.md index 55463ea0..eb499096 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,6 @@ 阅读3服务器版,不需要手机。 -在线体验 👉 [https://reader.htmake.com](https://reader.htmake.com) - 加入TG群(限时开放) 👉 [https://t.me/+pQ8HDlANPZ84ZWNl](https://t.me/+pQ8HDlANPZ84ZWNl) 关注公众号,查看教程和书源👇 @@ -57,17 +55,6 @@ 详见[文档](https://github.com/hectorqin/reader/blob/master/doc.md) -## TODO - -- [x] 定时更新书架书籍章节 -- [x] 多源并发搜索书籍 -- [x] 并发更新书架章节 -- [x] 并发搜索书籍来源 -- [x] WebDav同步 -- [x] 导入本地书籍,支持epub -- [x] 阅读3核心兼容。已最大可能兼容,支持使用webview,支持使用javascript。 -- [x] 支持RSS订阅 - ## 问题 - 部分使用了 `Javascript` 的书源可能会报错,如调用原生java等高级Javascript功能 From daa8075fe01aff7e781599d6a14bb48dd31af804 Mon Sep 17 00:00:00 2001 From: hectorqin <14220132+hectorqin@users.noreply.github.com> Date: Sat, 7 Dec 2024 19:29:21 +0800 Subject: [PATCH 39/43] Update doc.md --- doc.md | 65 +++++++++++++++++++++++++++++----------------------------- 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/doc.md b/doc.md index 7b45ad71..581cd9c4 100644 --- a/doc.md +++ b/doc.md @@ -13,13 +13,13 @@ - [WebDAV同步配置](#webdav同步配置) - [客户端](#客户端) - [Windows / MacOS / Linux](#windows--macos--linux) - - [Arch Linux 安装](#Arch-Linux-安装) - - [配置文件](#配置文件) - [手机端](#手机端) - [服务器版](#服务器版) - [Docker版](#docker版) - [Docker-Compose版(推荐)](#docker-compose版推荐) - [通过脚本一键部署](#通过脚本一键部署) + - [Arch Linux 安装](#Arch-Linux-安装) + - [配置文件](#配置文件) - [Nginx反向代理(如果有域名可以考虑80端口复用)](#nginx反向代理如果有域名可以考虑80端口复用) - [开发编译](#开发编译) - [编译脚本](#编译脚本) @@ -103,7 +103,7 @@ storage `http://ip:端口/simple-web` -> 注意,需要另外购买授权才能使用,加入TG群了解详情 +> 注意,加入TG群了解详情 ## 自定义阅读主题 @@ -187,35 +187,6 @@ reader: MacOS 版 `storage` 默认是 `用户目录/.reader/storage`,其它版本 `storage` 默认是 `程序目录/storage` -### Arch Linux 安装 - -从 [AUR 仓库](https://aur.archlinux.org/packages/reader-pro-bin)安装或[自建软件源](https://github.com/taotieren/aur-repo) - - -```bash -yay -Syu reader-pro -# 开启开机自启 -sudo systemctl enable reader-pro-single -sudo systemctl enable reader-pro-multi -# 运行 -sudo systemctl start reader-pro-single -sudo systemctl start reader-pro-multi -# 状态 -sudo systemctl status reader-pro-single -sudo systemctl status reader-pro-multi -# 停止 -sudo systemctl stop reader-pro-single -sudo systemctl stop reader-pro-multi -# 停止开机自启 -sudo systemctl disable reader-pro-single -sudo systemctl disable reader-pro-multi -``` - -> Arch Linux 的存储目录是 `/var/lib/reader-pro/` - -> Arch Linux 的配置文件是 `/usr/share/java/reader-pro/conf/application.properties` - - #### 配置文件 `storage/windowConfig.json` @@ -376,6 +347,36 @@ bash <(wget -qO- --no-check-certificate https://mirror.ghproxy.com/https://raw.g ``` +### Arch Linux 安装 + +> 注意,此软件源并非官方提供,后果自负 + +从 [AUR 仓库](https://aur.archlinux.org/packages/reader-pro-bin)安装或[自建软件源](https://github.com/taotieren/aur-repo) + + +```bash +yay -Syu reader-pro +# 开启开机自启 +sudo systemctl enable reader-pro-single +sudo systemctl enable reader-pro-multi +# 运行 +sudo systemctl start reader-pro-single +sudo systemctl start reader-pro-multi +# 状态 +sudo systemctl status reader-pro-single +sudo systemctl status reader-pro-multi +# 停止 +sudo systemctl stop reader-pro-single +sudo systemctl stop reader-pro-multi +# 停止开机自启 +sudo systemctl disable reader-pro-single +sudo systemctl disable reader-pro-multi +``` + +> Arch Linux 的存储目录是 `/var/lib/reader-pro/` + +> Arch Linux 的配置文件是 `/usr/share/java/reader-pro/conf/application.properties` + ## Nginx反向代理(如果有域名可以考虑80端口复用) ```shell From 42e4894f4792dd29bcad8afc7539b1bb133cb7e0 Mon Sep 17 00:00:00 2001 From: hectorqin <14220132+hectorqin@users.noreply.github.com> Date: Sat, 18 Jan 2025 22:49:56 +0800 Subject: [PATCH 40/43] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index eb499096..de23a692 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ ![](imgs/mpcode.png) +[](https://api.gitsponsors.com/api/badge/link?p=ppZ0zuTTgsLoYQZH8aJTvqFzbdqOfet2ItxePkp+K+q79G0KPQbeQUm0SVxwD/bIqN/LFXUiCwlns0uh7N5HGA==) + > 注意❗️ > > Reader 完整源码仅开放到 v2.5.4,新版本当前仅开放部分开源源码,见 https://github.com/hectorqin/reader-legado. From 5f435707a385bf4fb1099eb2178368d5bc8e10a3 Mon Sep 17 00:00:00 2001 From: hectorqin <14220132+hectorqin@users.noreply.github.com> Date: Sun, 19 Jan 2025 21:51:29 +0800 Subject: [PATCH 41/43] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index de23a692..9479291f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ ![](imgs/mpcode.png) -[](https://api.gitsponsors.com/api/badge/link?p=ppZ0zuTTgsLoYQZH8aJTvqFzbdqOfet2ItxePkp+K+q79G0KPQbeQUm0SVxwD/bIqN/LFXUiCwlns0uh7N5HGA==) +[](https://api.gitsponsors.com/api/badge/link?p=ppZ0zuTTgsLoYQZH8aJTvjzXx/yZK5mPrAY6D2jK3v3ol2hv2LTdleOGoYCy1Gcce6EoqenDm9C0TNIeBFdN/nkCoeoV88oHZ4dzwEcuGP40/fIIKpJ9oR1N+uUh1Ok1qAjjsJk2GkQLuoJOC7gKIg==) > 注意❗️ > From 774113b4507def3e967c817c9d9d1eee67a8fdab Mon Sep 17 00:00:00 2001 From: hectorqin <14220132+hectorqin@users.noreply.github.com> Date: Thu, 6 Mar 2025 13:33:39 +0800 Subject: [PATCH 42/43] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 9479291f..eb499096 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ ![](imgs/mpcode.png) -[](https://api.gitsponsors.com/api/badge/link?p=ppZ0zuTTgsLoYQZH8aJTvjzXx/yZK5mPrAY6D2jK3v3ol2hv2LTdleOGoYCy1Gcce6EoqenDm9C0TNIeBFdN/nkCoeoV88oHZ4dzwEcuGP40/fIIKpJ9oR1N+uUh1Ok1qAjjsJk2GkQLuoJOC7gKIg==) - > 注意❗️ > > Reader 完整源码仅开放到 v2.5.4,新版本当前仅开放部分开源源码,见 https://github.com/hectorqin/reader-legado. From 49e6d4aefed0136740b9be59472298156069b48a Mon Sep 17 00:00:00 2001 From: hectorqin <14220132+hectorqin@users.noreply.github.com> Date: Wed, 2 Jul 2025 10:35:26 +0800 Subject: [PATCH 43/43] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index eb499096..b6e14eb1 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ ![](imgs/mpcode.png) +[![Powered by DartNode](https://dartnode.com/branding/DN-Open-Source-sm.png)](https://dartnode.com "Powered by DartNode - Free VPS for Open Source") + > 注意❗️ > > Reader 完整源码仅开放到 v2.5.4,新版本当前仅开放部分开源源码,见 https://github.com/hectorqin/reader-legado.