Files
MIXBOX-ARCHIVE/apps/kodexplorer/scripts/kodexplorer.sh
2020-03-05 00:08:40 +08:00

230 lines
6.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
source /etc/mixbox/bin/base
eval `mbdb export kodexplorer`
source /etc/mixbox/apps/entware/scripts/functions.sh
# port=81
PHPBIN=/opt/bin/spawn-fcgi
NGINXBIN=/opt/sbin/nginx
NGINXCONF=/opt/etc/nginx/nginx.conf
PHPCONF=/opt/etc/php.ini
WWW=/opt/share/nginx/html/kodexplorer
CONF="/opt/etc/nginx/vhost/kodexplorer.conf"
path=$(mbdb get ${appname}.main.path)
port=$(mbdb get ${appname}.main.port) || port=81
lanip=$(uci get network.lan.ipaddr)
opkg_list="php7-cgi php7-mod-curl php7-mod-gd php7-mod-iconv php7-mod-json php7-mod-mbstring php7-mod-opcache php7-mod-session php7-mod-zip nginx spawn-fcgi zoneinfo-core zoneinfo-asia libxml2 unzip"
config_php() {
logsh "$service" "修改php配置信息..."
result=$(/opt/bin/opkg list-installed | grep -c "^php7-cgi")
[ "$result" == '0' ] && logsh "$service" "php未安装" && end
cp $PHPCONF ${mbtmp}/php.ini
sed -i "/doc_root/d" ${mbtmp}/php.ini
sed -i "s#.*open_basedir.*#open_basedir = \"$WWW\"#" ${mbtmp}/php.ini
sed -i 's/memory_limit = 8M/memory_limit = 20M/' ${mbtmp}/php.ini
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 2000M/' ${mbtmp}/php.ini
umountsh $PHPCONF
mount --bind ${mbtmp}/php.ini $PHPCONF
# echo "<?php phpinfo(); ?>" > $WWW/info.php
# rm -rf $WWW/index.html
}
config_nginx() {
logsh "$service" "生成nginx配置信息..."
#修改nginx配置文件
[ ! -x "$NGINXBIN" ] && logsh "$service" "nginx未安装" && end
cat > ${mbtmp}/nginx.conf <<-\EOF
user root;
pid /opt/var/run/nginx.pid;
worker_processes auto;
worker_rlimit_nofile 65535;
events {
worker_connections 1024;
}
http {
include mime.types;
sendfile on;
default_type application/octet-stream;
keepalive_timeout 65;
client_max_body_size 4G;
include /opt/etc/nginx/vhost/*.conf;
}
EOF
umountsh $NGINXCONF
mount --bind ${mbtmp}/nginx.conf $NGINXCONF
#生成配置文件
[ ! -d "/opt/etc/nginx/vhost" ] && mkdir -p /opt/etc/nginx/vhost
cat > ${mbtmp}/${appname}.conf <<-\EOF
server {
listen 81;
server_name kodexplorer;
location / {
root /opt/share/nginx/html/kodexplorer;
index index.php index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
location ~ \.php$ {
root /opt/share/nginx/html/kodexplorer;
fastcgi_pass 127.0.0.1:9009;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
EOF
sed -i "s/81/${port}/" ${mbtmp}/${appname}.conf
rm -rf /opt/etc/nginx/vhost/${appname}.conf
ln -s ${mbtmp}/${appname}.conf /opt/etc/nginx/vhost/${appname}.conf
}
detect_webfiles() {
if [ ! -d $WWW/app/kod/ ]; then
logsh "$service" "未检测到${appname}文件,正在下载"
[ ! -d $WWW ] && mkdir $WWW
wgetsh $WWW/kodexplorer.zip $mburl/appsbin/kodexplorer.zip
[ $? -ne 0 ] && logsh "$service" "${appname}文件下载失败" && stop
unzip $WWW/kodexplorer.zip -d $WWW
rm -rf $WWW/kodexplorer.zip
fi
}
detect_opkg() {
for i in $opkg_list
do
result=$(/opt/bin/opkg list-installed | grep -c "^$i")
[ "$result" == '0' ] && /opt/bin/opkg install $i
done
}
mount_admin_root() {
if [ -n "$path" ]; then
logsh "$service" "挂载${appname}管理目录"
if [ -d $WWW/data/User/admin/home ]; then
[ ! -d "$path" ] && mkdir -p $path
umountsh $WWW/data/User/admin/home
mount --bind "$path" $WWW/data/User/admin/home
else
logsh "$service" "检测到${appname}服务未配置,无法挂载管理目录"
fi
fi
}
start () {
result=$(ps | grep -E 'nginx|php-cgi' | grep -v sysa | grep -v grep | wc -l)
if [ "$result" != '0' -a -f /opt/etc/nginx/vhost/${appname}.conf ];then
logsh "$service" "${appname}已经在运行!"
exit 1
fi
# result=$(ps | grep entware.sh | grep -v grep | wc -l)
# if [ "$result" != '0' ];then
# logsh "【$service】" "检测到【Entware】正在运行现在启用${appname}可能会冲突"
# exit 1
# fi
logsh "$service" "正在启动${appname}服务... "
#检查entware状态
result1=$(mbdb show entware)
result2=$(ls /opt | grep etc)
if [ -z "$result1" ] || [ -z "$result2" ]; then
logsh "$service" "检测到【Entware】服务未启动或未安装"
end
else
result3=$(echo $PATH | grep opt)
[ -z "$result3" ] && export PATH=/opt/bin/:/opt/sbin:$PATH
fi
detect_opkg
config_nginx
config_php
detect_webfiles
mount_admin_root
#添加entware识别
auto_start_enable
open_port
write_firewall_start
/opt/etc/init.d/S80nginx stop &> /dev/null
/opt/etc/init.d/S80nginx start > /dev/null
if [ $? -ne 0 ]; then
logsh "$service" "启动nginx服务失败"
fi
daemon $PHPBIN -a 127.0.0.1 -p 9009 -C 2 -f /opt/bin/php-cgi > /dev/null
if [ $? -ne 0 ]; then
logsh "$service" "启动php服务失败"
fi
logsh "$service" "${appname}服务启动完成"
logsh "$service" "请在浏览器中访问[http://$lanip:${port}]配置"
}
stop () {
logsh "$service" "正在停止${appname}服务... "
[ "$enable" == '0' ] && destroy
result=$(mbdb get mixbox.httpfile.enable)
killall php-cgi &> /dev/null
# kill -9 $(ps | grep 'nginx' | grep -v sysa | grep -v grep | awk '{print$1}') > /dev/null 2>&1
close_port
remove_firewall_start
#清除关于entware配置
logsh "$service" "关闭或卸载不会删除opkg的软件包和${appname}的web文件"
umountsh $PHPCONF && rm -rf ${mbtmp}/php.ini
umountsh $NGINXCONF && rm -rf ${mbtmp}/nginx.conf
rm -rf ${mbtmp}/${appname}.conf /opt/etc/nginx/vhost/${appname}.conf
umountsh $WWW/data/User/admin/home
}
end() {
/opt/etc/init.d/S80nginx stop > /dev/null
stop && exit 1
}
destroy() {
#清除entware识别
auto_start_disable
}
status() {
result=$(pssh | grep -E 'nginx|php-cgi' | grep -v sysa | grep -v grep | wc -l)
if [ "$result" -ge '5' ] && [ -f "/opt/etc/nginx/vhost/${appname}.conf" ]; then
status="运行端口号: ${port}, 管理目录: $path|1"
else
status="未运行|0"
fi
mbdb set $appname.main.status="$status"
}
case "$1" in
start) start ;;
stop) stop ;;
restart) stop; start ;;
reload) close_port && open_port ;;
status) status ;;
esac