Skip to content

Commit

Permalink
修改文档,添加服务器版本脚本
Browse files Browse the repository at this point in the history
  • Loading branch information
hectorqin committed Aug 2, 2023
1 parent d2432db commit ed98a9d
Show file tree
Hide file tree
Showing 7 changed files with 367 additions and 24 deletions.
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -45,4 +45,8 @@ out
/reader-assets
/.lh/

/simple-web/
/simple-web/

/server/logs
/server/storage
/server/target
38 changes: 15 additions & 23 deletions doc.md
Original file line number Diff line number Diff line change
Expand Up @@ -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 用于备份数据
Expand Down Expand Up @@ -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`

Expand Down Expand Up @@ -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/
Expand Down
24 changes: 24 additions & 0 deletions server/bin/shutdown.cmd
Original file line number Diff line number Diff line change
@@ -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!
28 changes: 28 additions & 0 deletions server/bin/shutdown.sh
Original file line number Diff line number Diff line change
@@ -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"
96 changes: 96 additions & 0 deletions server/bin/startup.cmd
Original file line number Diff line number Diff line change
@@ -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%
142 changes: 142 additions & 0 deletions server/bin/startup.sh
Original file line number Diff line number Diff line change
@@ -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 查看日志"
Loading

0 comments on commit ed98a9d

Please sign in to comment.