#!/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+ # ==================================================== #fonts color Red="\033[31m" Font="\033[0m" Blue="\033[36m" cur_path=`pwd` check_port() { netstat -tlpn | grep "\b$1\b" } #root permission check_root(){ if [[ $EUID -ne 0 ]]; then echo "${Red}Error:请使用root运行该脚本!"${Font} 1>&2 exit 1 fi } #check system check_system(){ if [[ -f /etc/redhat-release ]]; then release="centos" elif cat /etc/issue | grep -Eqi "debian"; then release="debian" elif cat /etc/issue | grep -Eqi "ubuntu"; then release="ubuntu" elif cat /etc/issue | grep -Eqi "centos|red hat|redhat"; then release="centos" elif cat /proc/version | grep -Eqi "debian"; then release="debian" elif cat /proc/version | grep -Eqi "ubuntu"; then release="ubuntu" elif cat /proc/version | grep -Eqi "centos|red hat|redhat"; then release="centos" fi } #check version check_version(){ if [[ -s /etc/redhat-release ]]; then version=`cat /etc/redhat-release|sed -r 's/.* ([0-9]+)\..*/\1/'` else version=`grep -oE "[0-9.]+" /etc/issue | cut -d . -f 1` fi bit=`uname -m` if [[ ${bit} = "x86_64" ]]; then bit="64" else bit="32" fi if [[ "${release}" = "centos" && ${version} -ge 7 ]];then echo -e "${Blue}当前系统为CentOS ${version}${Font} " elif [[ "${release}" = "debian" && ${version} -ge 8 ]];then echo -e "${Blue}当前系统为Debian ${version}${Font} " elif [[ "${release}" = "ubuntu" && ${version} -ge 16 ]];then echo -e "${Blue}当前系统为Ubuntu ${version}${Font} " else echo -e "${Red}脚本不支持当前系统,安装中断!${Font} " exit 1 fi for EXE in grep cut xargs systemctl ip awk do if ! type -p ${EXE}; then echo -e "${Red}系统精简厉害,脚本自动退出${Font}" exit 1 fi done } check_service(){ read -p "请输入redis端口号[6379]:" redis_port if [ -z "${redis_port}" ];then redis_port=6379 fi read -p "请输入MongoDB端口号[27017]:" mongo_port if [ -z "${mongo_port}" ];then mongo_port=27017 fi if check_port ${redis_port}; then echo "" else echo -e "${Red}Error:请先在宝塔安装redis"${Font} 1>&2 exit 1 fi if check_port ${mongo_port}; then echo "" else echo -e "${Red}Error:请先在宝塔安装MongoDB"${Font} 1>&2 exit 1 fi } #enter info enter(){ stty erase '^H' && read -p "请设置Aria2密钥:" aria2_pass sed -i "s/ARIA2_SECRET=\"abbey\"/ARIA2_SECRET=\"${aria2_pass}\"/g" self_config.py read -p "请设置PyOne的后台密码:" pyone_pass sed -i "s/password=\"PyOne\"/password=\"${pyone_pass}\"/g" self_config.py } config_file(){ cur_dir=`pwd` cp self_config.py.sample self_config.py sed -i "s|/root/PyOne|$cur_dir|" self_config.py } #install depend install_depend(){ echo -e "${Blue}开始安装依赖${Font}" if [[ "${release}" = "centos" ]]; then yum -y install make git gcc crontabs lsof unzip python-devel libffi-devel openssl-devel -y else apt update -y apt install -y make git cron build-essential python-dev lsof unzip python-setuptools python-wheel libffi-devel libssl-dev fi } #install aria2 install_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 EXEC="$(command -v aria2c)" if [[ -n ${EXEC} ]]; 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=${aria2_pass}/g" /root/.aria2/aria2.conf echo -e "${Blue}开始设置trackers-list自动更新!${Font}" if [[ "${release}" = "centos" ]]; then echo "0 0 */7 * * /root/.aria2/trackers-list-aria2.sh" >> /var/spool/cron/root else echo "0 0 */7 * * /root/.aria2/trackers-list-aria2.sh" >> /var/spool/cron/crontabs/root fi } #install pyone install_pip(){ echo -e "${Blue}正在安装pip!${Font}" if [[ "${release}" = "centos" ]]; then yum install -y python-pip EXEC="$(command -v pip)" if [[ -z ${EXEC} ]]; then wget https://bootstrap.pypa.io/get-pip.py python get-pip.py fi else apt -y install python-pip fi EXEC="$(command -v pip)" if [[ -n ${EXEC} ]]; then echo -e "${Blue}pip安装成功!${Font}" else echo -e "${Red}pip安装失败!${Font}" exit 1 fi } install_package(){ pip2 install -r requirements.txt } #open firewall firewall(){ if [[ "${release}" = "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}" echo "[Unit] Description=Aria2 server After=network.target Wants=network.target [Service] Type=simple PIDFile=/var/run/aria2c.pid ExecStart=/usr/bin/aria2c --conf-path=/root/.aria2/aria2.conf RestartPreventExitStatus=23 Restart=always User=root [Install] WantedBy=multi-user.target " > '/etc/systemd/system/aria2.service' echo "[Unit] Description=pyone After=network.target Wants=network.target [Service] Type=simple PIDFile=/var/run/pyone.pid WorkingDirectory=${cur_path} ExecStart=gunicorn -keventlet -b 0.0.0.0:34567 run:app RestartPreventExitStatus=23 Restart=always User=root [Install] WantedBy=multi-user.target " > '/etc/systemd/system/pyone.service' EXEC="$(command -v gunicorn)" sed -i "s#gunicorn#${EXEC}#g" /etc/systemd/system/pyone.service systemctl start aria2 pyone systemctl enable aria2 pyone } #Complete info info(){ local_ip=`curl http://whatismyip.akamai.com` echo -e "———————————————————————————————————————" echo -e "${Blue}PyOne安装完成!${Font}" echo -e "${Blue}请通过访问:http://${local_ip}:34567 继续后面的安装${Font}" echo -e "${Blue}PyOne后台密码:${pyone_pass}${Font}" echo -e "${Blue}Aria2密匙:${aria2_pass}${Font}" echo -e "${Blue}常用命令:${Font}" echo -e "${Blue}1. 暂停PyOne: systemctl stop pyone${Font}" echo -e "${Blue}2. 启动PyOne: systemctl start pyone${Font}" echo -e "${Blue}3. 重启PyOne: systemctl restart pyone${Font}" echo -e "${Blue}4. 手动运行PyOne: systemctl stop pyone && gunicorn -keventlet -b 0:34567 run:app${Font}" echo -e "${Blue}5. 暂停Aria2: systemctl stop aria2${Font}" echo -e "${Blue}6. 启动Aria2: systemctl start aria2${Font}" echo -e "${Blue}7. 重启Aria2: systemctl restart aria2${Font}" echo -e "———————————————————————————————————————" echo -e "${Blue}PyOne交流群:864996565${Font}" echo -e "${Blue}PyOne交流群TG:https://t.me/joinchat/JQOOug6MY11gy_MiXTmqIA${Font}" } #start menu main(){ check_root check_system check_version check_service clear echo -e "———————————————————————————————————————" echo -e "${Blue}PyOne一键脚本 for Debian 8+ 、CentOS 7、Ubuntu 16+${Font}" echo -e "本脚本参考【萌鼠博客】:https://www.moerats.com/archives/806/" echo -e "${Blue}安装之前请确保已经在安装宝塔,并且在宝塔-软件管理已经安装MongoDB和redis${Font}" echo -e "———————————————————————————————————————" config_file enter install_depend install_aria2 install_pip install_package firewall start info } main