参考:https://www.moerats.com/archives/806/
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/PyOne.sh
bash PyOne.sh
PyOne程序目录:/root/PyOne
Caddy配置文件目录:/root/.caddy
Aria2配置文件目录:/root/.aria2
#以下程序均已配置开机自启,所以就不说开机自启命令了。
#Redis使用命令
启动:systemctl start redis-server
重启:systemctl restart redis-server
停止:systemctl stop redis-server
状态:systemctl status redis-server
#Mongodb使用命令
启动:systemctl start mongod
重启:systemctl restart mongod
停止:systemctl stop mongod
状态:systemctl status mongod
#Aria2使用命令
启动:systemctl start aria2
重启:systemctl restart aria2
停止:systemctl stop aria2
状态:systemctl status aria2
#Caddy使用命令(使用域名的才会安装Caddy)
启动:systemctl start caddy
重启:systemctl restart caddy
停止:systemctl stop caddy
状态:systemctl status caddy
#PyOne使用命令
启动:systemctl start pyone
重启:systemctl restart pyone
停止:systemctl stop pyone
状态:systemctl status pyone
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# ====================================================
# Description:PyOne 一键脚本 for Debian 8+ 、CentOS 7、Ubuntu 16+
# Author:MOERATS
# Site:moerats.com
# ====================================================
#fonts color
Red="\033[31m"
Font="\033[0m"
Blue="\033[36m"
[[ $(id -u) -ne 0 ]] && echo -e "${Red}请使用root运行该脚本,安装退出!${Font}" && exit 1;
source /etc/os-release
#check system
system(){
if [[ "${ID}" == "debian" && ${VERSION_ID} -ge 8 ]];then
echo -e "${CBlue}当前系统为 Debian ${VERSION_ID},符合安装要求!${Font} "
elif [[ "${ID}" == "ubuntu" && `echo "${VERSION_ID}" | cut -d '.' -f1` -ge 18 ]];then
echo -e "${CBlue}当前系统为 Ubuntu ${VERSION_ID},符合安装要求!${Font} "
else
echo -e "${Red}目前仅支持Debian 9、10,Ubuntu 18.04、18.10、19.04系统,安装退出${Font} "
exit 1
fi
bit=`uname -m`
if [[ ${bit} = "x86_64" ]]; then
bit="64"
else
bit="32"
fi
}
#enter info
enter(){
if [[ "${num}" = "2" ]]; then
stty erase '^H' && read -p "请输入你的PyOne域名信息(如:pyone.moerats.com):" py_domain
fi
stty erase '^H' && read -p "请输入你的Aria2密钥:" pass
}
#install repo
repo(){
if [[ "${ID}" = "centos" && ${VERSION_ID} -ge 7 ]]; then
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/mongodb.repo -P '/etc/yum.repos.d/'
else
apt update -y
apt install curl gnupg2 -y
if [[ "${ID}" = "debian" && "${VERSION_ID}" = "8" ]]; then
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
elif [[ "${ID}" = "debian" && "${VERSION_ID}" = "9" ]]; then
curl https://www.mongodb.org/static/pgp/server-4.0.asc | apt-key add -
echo "deb http://repo.mongodb.org/apt/debian stretch/mongodb-org/4.0 main" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
elif [[ "${ID}" = "debian" && "${VERSION_ID}" = "10" ]]; then
curl https://www.mongodb.org/static/pgp/server-4.2.asc | apt-key add -
echo "deb http://repo.mongodb.org/apt/debian buster/mongodb-org/4.2 main" | tee /etc/apt/sources.list.d/mongodb-org-4.2.list
elif [[ "${ID}" == "ubuntu" && `echo "${VERSION_ID}" | cut -d '.' -f1` -eq "16" ]]; then
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
else
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4
echo "deb https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list
fi
fi
}
#install depend(Redis、Mongodb)
depend(){
if [[ "${ID}" = "centos" ]]; then
yum -y install mongodb-org make git gcc crontabs lsof unzip python-devel
wget http://download.redis.io/releases/redis-5.0.2.tar.gz
tar zxvf redis-5.0.2.tar.gz && rm -rf redis-5.0.2.tar.gz
cd redis-5.0.2
make
cp src/redis-server src/redis-cli /usr/local/bin
cd ..
rm -rf redis-5.0.2
sysctl -w vm.overcommit_memory=1
echo 512 > /proc/sys/net/core/somaxconn
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo "net.core.somaxconn= 1024" >> /etc/sysctl.conf
sysctl -p
systemctl start crond
systemctl enable crond
else
apt update -y
apt install -y mongodb-org redis-server make git cron build-essential python-dev lsof unzip python-setuptools python-wheel
fi
}
#install aria2
aria2(){
echo -e "${Blue}开始安装Aria2...${Font}"
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/aria2-1.34.0-linux-${bit}.tar.gz
tar zxvf aria2-1.34.0-linux-${bit}.tar.gz
rm -rf aria2-1.34.0-linux-${bit}.tar.gz
cd aria2-1.34.0-linux-${bit}
make install
if command -v aria2c; then
echo -e "${Blue}Aria2安装成功!${Font}"
else
echo -e "${Red}Aria2安装失败!${Font}"
exit 1
fi
cd ..
rm -rf aria2-1.34.0-linux-${bit}
mkdir "/root/.aria2" && mkdir /root/Download
wget -N --no-check-certificate https://www.moerats.com/usr/shell/Aria2/dht.dat -P '/root/.aria2/'
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/aria2.conf -P '/root/.aria2/'
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/trackers-list-aria2.sh -P '/root/.aria2/'
touch /root/.aria2/aria2.session
chmod +x /root/.aria2/trackers-list-aria2.sh
chmod 777 /root/.aria2/aria2.session
sed -i "s/rpc-secret=/rpc-secret=${pass}/g" /root/.aria2/aria2.conf
echo -e "${Blue}开始设置trackers-list自动更新!${Font}"
echo "0 3 */7 * * /root/.aria2/trackers-list-aria2.sh
*/5 * * * * systemctl restart aria2" > /root/bt.cron
crontab bt.cron
rm -rf bt.cron
}
#install pyone
pyone(){
echo -e "${Blue}正在安装pip!${Font}"
if [[ "${ID}" = "centos" ]]; then
yum install -y python-pip
if ! command -v pip; then
wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py
fi
else
apt -y install python-pip
fi
cd /root
if [[ "${choice}" = "2" ]]; then
git clone https://github.com/abbeyokgo/PyOne.git
cd PyOne
cp self_config.py.sample self_config.py
sed -i 's#from werkzeug.contrib.fixers import ProxyFix#from werkzeug.middleware.proxy_fix import ProxyFix#g' app/__init__.py
else
wget wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/PyOne-3.0.zip
unzip PyOne-3.0.zip && rm -rf PyOne-3.0.zip
cd PyOne
chmod 777 upload
cp config.py.sample config.py
sed -i 's#from werkzeug.contrib.fixers import ProxyFix#from werkzeug.middleware.proxy_fix import ProxyFix#g' run.py
fi
pip2 install -r requirements.txt
}
#install caddy
caddy(){
echo -e "${Blue}正在安装Caddy!${Font}"
curl https://getcaddy.com | bash -s personal
if command -v caddy; then
echo -e "${Blue}Caddy安装成功!${Font}"
else
echo -e "${Red}Caddy安装失败!${Font}"
exit 1
fi
mkdir /root/.caddy
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/caddy.conf -P '/root/.caddy/'
sed -i "s/moerats.com/${py_domain}/g" /root/.caddy/caddy.conf
}
#check domain
domain(){
EXEC="$(command -v bc)"
if [[ -z ${EXEC} ]]; then
if [[ "${ID}" = "centos" ]]; then
yum -y install bc
else
apt install bc -y
fi
fi
domain_ip=`ping ${py_domain} -c 1 | sed '1{s/[^(]*(//;s/).*//;q}'`
local_ip=`curl http://whatismyip.akamai.com`
echo -e "域名dns解析IP:${domain_ip}"
echo -e "本机IP: ${local_ip}"
sleep 2
if [[ $(echo ${local_ip}|tr '.' '+'|bc) -eq $(echo ${domain_ip}|tr '.' '+'|bc) ]];then
echo -e "${Blue}域名dns解析IP与本机IP匹配${Font}"
sleep 2
else
echo -e "${Red}域名dns解析还未生效,请稍后再试!${Font}"
exit 1
fi
}
#open firewall
firewall(){
if [[ "${ID}" = "centos" ]]; then
firewall-cmd --zone=public --add-port=6800/tcp --permanent
firewall-cmd --zone=public --add-port=34567/tcp --permanent
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
firewall-cmd --reload
fi
}
#set start up
start(){
echo -e "${Blue}正在为相关应用设置开机自启!${Font}"
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/aria2.service -P '/etc/systemd/system/'
if [[ "${num}" = "2" ]]; then
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/caddy.service -P '/etc/systemd/system/'
systemctl start caddy
systemctl enable caddy
fi
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/pyone.service -P '/etc/systemd/system/'
if [[ "${ID}" = "centos" ]]; then
wget -N --no-check-certificate https://www.moerats.com/usr/shell/PyOne/redis-server.service -P '/etc/systemd/system/'
fi
sed -i "s#gunicorn#$(command -v gunicorn)#g" /etc/systemd/system/pyone.service
systemctl start redis-server aria2 mongod pyone
systemctl enable redis-server aria2 mongod pyone
}
#Select version
pyoneversion(){
echo -e "———————————————————————————————————————"
echo -e "${Blue}请选择PyOne版本,输入1或2即可!${Font}"
echo -e "${Blue}1、安装PyOne 3.0${Font}"
echo -e "${Blue}2、安装PyOne 4.0${Font}"
echo -e "———————————————————————————————————————"
while :; do echo
read -p "请输入数字 [1-2]:" choice
if [[ ! $choice =~ ^[1-2]$ ]]; then
echo -e "${Red}输入错误,请重新输入正确的数字!${Font}"
else
break
fi
done
}
#Complete info
info(){
if [[ -z "${py_domain}" ]]; then
local_ip=`curl http://whatismyip.akamai.com`
echo -e "———————————————————————————————————————"
echo -e "${Blue}PyOne安装完成!${Font}"
echo -e "${Blue}PyOne访问地址:http://${local_ip}:34567${Font}"
echo -e "${Blue}Aria2密匙:${pass}${Font}"
echo -e "${Blue}PyOne后台密码:PyOne${Font}"
echo -e "———————————————————————————————————————"
else
echo -e "———————————————————————————————————————"
echo -e "${Blue}PyOne安装完成!${Font}"
echo -e "${Blue}PyOne访问地址:https://${py_domain}${Font}"
echo -e "${Blue}Aria2密匙:${pass}${Font}"
echo -e "${Blue}PyOne后台密码:PyOne${Font}"
echo -e "———————————————————————————————————————"
fi
}
#start menu
main(){
# system
clear
echo -e "———————————————————————————————————————"
echo -e "${Blue}PyOne一键脚本 for Debian 8+ 、CentOS 7、Ubuntu 16+${Font}"
echo -e "${Blue}1、使用IP访问${Font}"
echo -e "${Blue}2、使用域名访问(请提前解析好域名并生效)${Font}"
echo -e "———————————————————————————————————————"
read -p "请输入数字 [1-2]:" num
case "$num" in
1)
use_ip
;;
2)
use_domain
;;
*)
clear
echo -e "${Blue}请输入正确数字 [1-2]${Font}"
sleep 2s
main
;;
esac
}
use_ip(){
enter
pyoneversion
repo
depend
aria2
pyone
firewall
start
info
}
use_domain(){
enter
pyoneversion
domain
repo
depend
aria2
pyone
caddy
firewall
start
info
}
main
网友评论