Create caddy

This commit is contained in:
lmq8267 2024-01-18 14:52:08 +08:00 committed by GitHub
parent cbf42859bf
commit 7f2cb258d2
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -0,0 +1,172 @@
#!/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
}