mirror of
https://github.com/whyour/qinglong.git
synced 2025-05-22 22:36:06 +08:00
127 lines
3.5 KiB
Bash
127 lines
3.5 KiB
Bash
#!/usr/bin/env bash
|
||
|
||
# 前置依赖 nodejs、npm、python3
|
||
set -e
|
||
set -x
|
||
|
||
if [[ ! $QL_DIR ]]; then
|
||
npm_dir=$(npm root -g)
|
||
pnpm_dir=$(pnpm root -g)
|
||
if [[ -d "$npm_dir/@whyour/qinglong" ]]; then
|
||
QL_DIR="$npm_dir/@whyour/qinglong"
|
||
elif [[ -d "$pnpm_dir/@whyour/qinglong" ]]; then
|
||
QL_DIR="$pnpm_dir/@whyour/qinglong"
|
||
else
|
||
echo -e "未找到 qinglong 模块,请先执行 npm i -g @whyour/qinglong 安装"
|
||
fi
|
||
|
||
if [[ $QL_DIR ]]; then
|
||
echo -e "请先手动设置 export QL_DIR=$QL_DIR,环境变量,并手动添加到系统环境变量,然后再次执行命令 qinglong 启动服务"
|
||
fi
|
||
|
||
exit 1
|
||
fi
|
||
|
||
if [[ ! $QL_DATA_DIR ]]; then
|
||
echo -e "请先手动设置数据存储目录 export QL_DATA_DIR 环境变量,目录必须以斜杠开头的绝对路径,并且以 /data 结尾,例如 /ql/data 并手动添加到系统环境变量"
|
||
exit 1
|
||
fi
|
||
|
||
if [[ $QL_DATA_DIR != */data ]]; then
|
||
echo -e "QL_DATA_DIR 必须以 /data 结尾,例如 /ql/data,如果有历史数据,请新建 data 目录,把历史数据放到 data 目录中"
|
||
exit 1
|
||
fi
|
||
|
||
command="$1"
|
||
|
||
if [[ $command != "reload" ]]; then
|
||
# 安装依赖
|
||
os_name=$(source /etc/os-release && echo "$ID")
|
||
|
||
if [[ $os_name == 'alpine' ]]; then
|
||
apk update
|
||
apk add -f bash \
|
||
coreutils \
|
||
git \
|
||
curl \
|
||
wget \
|
||
tzdata \
|
||
perl \
|
||
openssl \
|
||
jq \
|
||
nginx \
|
||
openssh \
|
||
procps \
|
||
netcat-openbsd
|
||
elif [[ $os_name == 'debian' ]] || [[ $os_name == 'ubuntu' ]]; then
|
||
apt-get update
|
||
apt-get install -y git curl wget tzdata perl openssl jq nginx procps netcat-openbsd openssh-client
|
||
else
|
||
echo -e "暂不支持此系统部署 $os_name"
|
||
exit 1
|
||
fi
|
||
|
||
npm install -g pnpm@8.3.1 pm2 ts-node
|
||
fi
|
||
|
||
export PYTHON_SHORT_VERSION=$(python3 -c 'import sys; print(f"{sys.version_info.major}.{sys.version_info.minor}")')
|
||
export PNPM_HOME=${QL_DIR}/data/dep_cache/node
|
||
export PYTHON_HOME=${QL_DIR}/data/dep_cache/python3
|
||
export PYTHONUSERBASE=${QL_DIR}/data/dep_cache/python3
|
||
|
||
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:${PNPM_HOME}:${PYTHON_HOME}/bin
|
||
export NODE_PATH=/usr/local/bin:/usr/local/lib/node_modules:${PNPM_HOME}/global/5/node_modules
|
||
export PIP_CACHE_DIR=${PYTHON_HOME}/pip
|
||
export PYTHONPATH=${PYTHON_HOME}:${PYTHON_HOME}/lib/python${PYTHON_SHORT_VERSION}:${PYTHON_HOME}/lib/python${PYTHON_SHORT_VERSION}/site-packages
|
||
|
||
if [[ $command != "reload" ]]; then
|
||
pip3 install --prefix ${PYTHON_HOME} requests
|
||
fi
|
||
|
||
cd ${QL_DIR}
|
||
cp -f .env.example .env
|
||
chmod 777 ${QL_DIR}/shell/*.sh
|
||
|
||
. ${QL_DIR}/shell/share.sh
|
||
. ${QL_DIR}/shell/env.sh
|
||
|
||
log_with_style() {
|
||
local level="$1"
|
||
local message="$2"
|
||
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
|
||
|
||
printf "\n[%s] [%7s] %s\n" "${timestamp}" "${level}" "${message}"
|
||
}
|
||
|
||
log_with_style "INFO" "🚀 1. 检测配置文件..."
|
||
import_config "$@"
|
||
make_dir /etc/nginx/conf.d
|
||
make_dir /run/nginx
|
||
init_nginx
|
||
fix_config
|
||
|
||
pm2 l &>/dev/null
|
||
|
||
log_with_style "INFO" "🔄 2. 启动 nginx..."
|
||
nginx -s reload 2>/dev/null || nginx -c /etc/nginx/nginx.conf
|
||
|
||
log_with_style "INFO" "⚙️ 3. 启动 pm2 服务..."
|
||
reload_pm2
|
||
|
||
if [[ $command != "reload" ]]; then
|
||
if [[ $AutoStartBot == true ]]; then
|
||
log_with_style "INFO" "🤖 4. 启动 bot..."
|
||
nohup ql bot >$dir_log/bot.log 2>&1 &
|
||
fi
|
||
|
||
if [[ $EnableExtraShell == true ]]; then
|
||
log_with_style "INFO" "🛠️ 5. 执行自定义脚本..."
|
||
nohup ql extra >$dir_log/extra.log 2>&1 &
|
||
fi
|
||
|
||
pm2 startup
|
||
pm2 save
|
||
fi
|
||
|
||
log_with_style "SUCCESS" "🎉 启动成功!"
|