173 lines
4.5 KiB
Bash
173 lines
4.5 KiB
Bash
#!/bin/sh /etc/rc.common
|
||
|
||
START=99
|
||
USE_PROCD=1
|
||
PROG="$(uci -q get caddy.@caddy[0].bin_dir)"
|
||
|
||
get_config() {
|
||
config_get_bool enabled $1 enabled 0
|
||
config_get cmd $1 cmd "默认"
|
||
config_get_bool webdav $1 webdav 0
|
||
config_get port $1 port 12311
|
||
config_get webdav_port $1 webdav_port 12322
|
||
config_get log $1 log 1
|
||
config_get data_dir $1 data_dir "/mnt"
|
||
config_get webdav_data_dir $1 webdav_data_dir "/mnt"
|
||
config_get log_dir $1 log_dir "/tmp/caddy/requests.log"
|
||
config_get caddy_file $1 caddy_file "/etc/caddy/Caddyfile"
|
||
config_get webdav_pass $1 webdav_pass 0
|
||
config_get webdav_username $1 webdav_username "admin"
|
||
config_get webdav_password $1 webdav_password "123456"
|
||
config_get ssl $1 ssl 0
|
||
config_get cgi $1 cgi 0
|
||
config_get api $1 api 0
|
||
config_get allow_wan $1 allow_wan 0
|
||
|
||
|
||
}
|
||
|
||
set_firewall() {
|
||
if [ "$external_access" = "allow" ]; then
|
||
uci -q delete firewall.caddy
|
||
uci set firewall.caddy=rule
|
||
uci set firewall.caddy.name="caddy"
|
||
uci set firewall.caddy.target="ACCEPT"
|
||
uci set firewall.caddy.src="wan"
|
||
uci set firewall.caddy.proto="tcp"
|
||
uci set firewall.caddy.dest_port="$port"
|
||
[ ! -z "$webdav_port" ] && uci set firewall.caddy.dest_port="$webdav_port"
|
||
uci set firewall.caddy.enabled="1"
|
||
uci commit firewall
|
||
/etc/init.d/firewall reload >/dev/null 2>&1
|
||
elif [ "$external_access" = "deny" ]; then
|
||
uci -q delete firewall.caddy
|
||
uci commit firewall
|
||
/etc/init.d/firewall reload >/dev/null 2>&1
|
||
fi
|
||
}
|
||
|
||
start_service() {
|
||
config_load caddy
|
||
config_foreach get_config caddy
|
||
[ $enabled -ne 1 ] && return 1
|
||
if [ ! -f "$PROG" ] ;then
|
||
uci -q set caddy.@caddy[0].enabled=0
|
||
uci commit caddy
|
||
echo "$(TZ=UTC-8 date -R +%Y年%m月%d日\ %X) : $PROG 未找到,无法启动!请确认已上传程序" >>$log_dir 2>&1
|
||
exit 1
|
||
else
|
||
chmod +x $PROG
|
||
if [ $(($($PROG -h | wc -l))) -lt 3 ] ;then
|
||
uci -q set caddy.@caddy[0].enabled=0
|
||
uci commit caddy
|
||
echo "$(TZ=UTC-8 date -R +%Y年%m月%d日\ %X) : $PROG 程序不完整或CPU架构不支持的程序,无法启动!" >>$log_dir 2>&1
|
||
exit 1
|
||
fi
|
||
fi
|
||
if [ "$cmd" = "默认" ] ;then
|
||
mkdir -p $data_dir
|
||
if [ "$log" -eq 1 ] ;then
|
||
log_path="$(dirname $log_dir)"
|
||
mkdir -p $log_path
|
||
logs="log {
|
||
output file $log_dir {
|
||
roll_size 1MiB
|
||
roll_local_time
|
||
roll_keep 5
|
||
roll_keep_for 120h
|
||
}
|
||
}"
|
||
fi
|
||
if [ "$webdav" -eq 1 ] ;then
|
||
mkdir -p $webdav_data_dir
|
||
if [ "$webdav_pass" -eq 1 ] ;then
|
||
password="$($PROG hash-password --plaintext $webdav_password)"
|
||
basicauth="basicauth /dav/* {
|
||
$webdav_username $password
|
||
}"
|
||
fi
|
||
webdavs=":$webdav_port {
|
||
$basicauth
|
||
webdav * {
|
||
prefix /dav
|
||
root $webdav_data_dir
|
||
}
|
||
}"
|
||
reder_web="order webdav before file_server # 启动 webdav 模块 # 全局配置"
|
||
fi
|
||
if [ "$ssl" -eq 1 ] ;then
|
||
tsl="tls {
|
||
protocols tls1.1 tls1.2 tls1.3
|
||
}"
|
||
fi
|
||
if [ "$cgi" -eq 1 ] ;then
|
||
cgis="order cgi before respond # 启动 cgi 模块 # 全局配置"
|
||
fi
|
||
if [ "$api" != "1" ] ;then
|
||
apis="admin off # 关闭 API 端口 # 全局配置"
|
||
fi
|
||
if [ "$allow_wan" -eq "1" ]; then
|
||
external_access="allow"
|
||
else
|
||
external_access="deny"
|
||
fi
|
||
if [ "$cgi" -eq 1 ] || [ "$webdav" -eq 1 ] || [ "$api" != "1" ] ;then
|
||
order="{ # 全局配置
|
||
$cgis
|
||
$reder_web
|
||
$apis
|
||
} # 全局配置"
|
||
fi
|
||
set_firewall
|
||
|
||
cat > $caddy_file <<EOF
|
||
# 此配置文件路径:/etc/caddy/Caddyfile
|
||
|
||
$order
|
||
|
||
:$port {
|
||
root * $data_dir
|
||
file_server browse
|
||
|
||
header {
|
||
Content-Type "text/plain; charset=utf-8"
|
||
}
|
||
|
||
$logs
|
||
|
||
}
|
||
|
||
$webdavs
|
||
EOF
|
||
fi
|
||
procd_open_instance caddy
|
||
procd_set_param command $PROG
|
||
procd_append_param command run
|
||
procd_append_param command --config $caddy_file
|
||
procd_append_param command --adapter caddyfile
|
||
|
||
procd_set_param stdout 0
|
||
procd_set_param stderr 0
|
||
procd_set_param respawn
|
||
procd_close_instance caddy
|
||
|
||
echo `date +%s` > /tmp/caddy_time
|
||
}
|
||
|
||
service_triggers() {
|
||
procd_add_reload_trigger "caddy"
|
||
}
|
||
|
||
stop_service() {
|
||
external_access="deny"
|
||
set_firewall
|
||
rm -rf /tmp/caddy.tag /tmp/caddynew.tag
|
||
rm -rf $(uci -q get caddy.@caddy[0].log_dir)
|
||
}
|
||
|
||
reload_service() {
|
||
stop
|
||
sleep 1
|
||
start
|
||
}
|