Compare commits

...

48 Commits

Author SHA1 Message Date
lmq8267
98b3436add
Update caddy 2025-06-11 08:05:17 +08:00
lmq8267
dfbdaca1d2
Update build.yml 2025-02-10 14:02:31 +08:00
lmq8267
42ca5d0975
Update README.md 2025-02-10 10:35:06 +08:00
lmq8267
d649f50551
Update build.yml 2025-02-10 10:33:18 +08:00
lmq8267
895a0940e6
Update caddy.lua 2025-01-26 16:47:19 +08:00
lmq8267
81f9a6017d
Update README.md 2025-01-12 09:27:11 +08:00
lmq8267
0c6a524875
Update Caddyfile 2024-12-29 15:38:19 +08:00
lmq8267
fd5e086251
Update caddy 2024-12-29 15:37:57 +08:00
lmq8267
6b4b2d5b52
Update README.md 2024-12-06 08:28:48 +08:00
lmq8267
7beae1a69d
Update README.md 2024-12-06 08:09:31 +08:00
lmq8267
129cce00ef
Update caddy 2024-11-29 09:04:52 +08:00
lmq8267
a10eba890e
Update Caddyfile 2024-11-29 09:04:25 +08:00
lmq8267
2a12defc40
Update README.md 2024-04-25 14:47:08 +08:00
lmq8267
2f6c139267
Update README.md 2024-04-25 14:46:13 +08:00
lmq8267
6f9bade729
Update caddy.lua 2024-02-01 21:57:02 +08:00
lmq8267
3a1b5b5cd9
Update README.md 2024-01-31 09:45:37 +08:00
lmq8267
d2f4e79115
增加检测配置文件选项 2024-01-31 09:31:57 +08:00
lmq8267
080487f16c
增加检测配置文件选项 2024-01-31 09:30:56 +08:00
lmq8267
14b6de3291
增加检测配置文件选项 2024-01-31 09:29:08 +08:00
lmq8267
f9fd95704f
Update caddy 2024-01-30 23:03:03 +08:00
lmq8267
5a4a5743b7
Update build.yml 2024-01-30 21:36:23 +08:00
lmq8267
9de473d802
Update build.yml 2024-01-30 21:36:03 +08:00
lmq8267
de56d3916d
Update README.md 2024-01-30 21:34:45 +08:00
lmq8267
db60ef0bcc
Update README.md 2024-01-30 21:32:59 +08:00
lmq8267
68f275f172
Update README.md 2024-01-30 20:54:32 +08:00
lmq8267
a8c3b61ce0
加个图片 2024-01-30 08:36:52 +08:00
lmq8267
9896e19f9c
Update build.yml 2024-01-22 09:43:21 +08:00
lmq8267
4af5789703
Delete caddy directory 2024-01-22 09:05:12 +08:00
lmq8267
cfaf472a6f
Update caddy.lua 2024-01-21 16:52:07 +08:00
lmq8267
038ae23a15
Update caddy.lua 2024-01-21 16:32:33 +08:00
lmq8267
8d83c077ce
Update caddy.lua 2024-01-21 08:51:23 +08:00
lmq8267
d7a6311a86
Update CI.yml 2024-01-20 18:02:52 +08:00
lmq8267
1d7c1d84b5
Update caddy.lua 2024-01-20 17:41:24 +08:00
lmq8267
2dedb42076
Update CI.yml 2024-01-19 23:53:51 +08:00
lmq8267
b28516861b
Update CI.yml 2024-01-19 23:47:47 +08:00
lmq8267
fa248b791b
Update CI.yml 2024-01-19 23:44:43 +08:00
lmq8267
b6d61e81f8
Create CI.yml 2024-01-19 23:41:29 +08:00
lmq8267
7178199422
Update README.md 2024-01-19 21:47:47 +08:00
lmq8267
ab20e87d2f
Update README.md 2024-01-19 21:40:36 +08:00
lmq8267
febf0f8451
Update caddy 2024-01-19 21:25:04 +08:00
lmq8267
c0a8c82950
Update caddy.lua 2024-01-19 20:14:30 +08:00
lmq8267
391755a309
Update Makefile 2024-01-19 18:34:03 +08:00
lmq8267
7c719547ee
Update Makefile 2024-01-19 18:21:09 +08:00
lmq8267
19de0ef023
Create README.md 2024-01-19 18:03:31 +08:00
lmq8267
0105764798
Create Makefile 2024-01-19 17:51:48 +08:00
lmq8267
50a2b669d2
Update caddy 2024-01-19 11:42:37 +08:00
lmq8267
d75bd6ab87
Update caddy.lua 2024-01-19 11:14:16 +08:00
lmq8267
ffca770343
Update caddy 2024-01-19 11:11:44 +08:00
9 changed files with 244 additions and 31 deletions

135
.github/workflows/CI.yml vendored Normal file
View File

@ -0,0 +1,135 @@
name: 编译caddy二进制文件
on:
workflow_dispatch:
env:
TZ: Asia/Shanghai
jobs:
build:
strategy:
fail-fast: false
matrix:
include:
- TARGET: amd64
OS: ubuntu-latest
AARCH: amd64
- TARGET: arm64
OS: ubuntu-latest
ARCH: arm64
- TARGET: mips
OS: ubuntu-latest
SOFT: softfloat
ARCH: mips
- TARGET: mips64
OS: ubuntu-latest
SOFT: softfloat
ARCH: mips64
- TARGET: mips64le
OS: ubuntu-latest
SOFT: softfloat
ARCH: mips64le
- TARGET: mipsel
OS: ubuntu-latest
SOFT: softfloat
ARCH: mipsle
- TARGET: ppc64le
OS: ubuntu-latest
SOFT: softfloat
ARCH: ppc64le
- TARGET: s390x
OS: ubuntu-latest
SOFT: softfloat
ARCH: s390x
- TARGET: arm
OS: ubuntu-latest
SOFT: softfloat
ARCH: arm
- TARGET: armv5l
OS: ubuntu-latest
SOFT: softfloat
ARM: 5
ARCH: arm
- TARGET: armv6
OS: ubuntu-latest
SOFT: softfloat
ARM: 6
ARCH: arm
- TARGET: armv7l
OS: ubuntu-latest
SOFT: softfloat
ARM: 7
ARCH: arm
runs-on: ${{ matrix.OS }}
env:
TARGET: ${{ matrix.TARGET }}
OS: ${{ matrix.OS }}
SOFT: ${{ matrix.SOFT }}
ARM: ${{ matrix.ARM }}
ARCH: ${{ matrix.ARCH }}
steps:
- name: 获取最新Go
run: |
latest_version=$(curl -L -k -s https://golang.org/dl/?mode=json | grep -m 1 -o '"version": "[^"]*' | sed 's/"version": "//' | tr -d 'go" ')
echo "go版本=$latest_version"
echo "gotag=$latest_version" >> $GITHUB_ENV
- name: 安装go
uses: actions/setup-go@v5
with:
go-version: ${{ env.gotag }}
-
name: 检查代码仓库
uses: actions/checkout@v4
-
name: 编译
run: |
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
wget -q -c https://github.com/upx/upx/releases/download/v4.2.2/upx-4.2.2-amd64_linux.tar.xz -P /opt
tar -xf /opt/upx-4.2.2-amd64_linux.tar.xz -C /opt
sudo cp -rf /opt/upx-4.2.2-amd64_linux/upx /usr/bin/upx
echo "开始构建"
mkdir -p /opt/caddy
cd /opt/caddy
sudo timedatectl set-timezone "Asia/Shanghai"
GOOS=linux GOARCH=${ARCH} GOMIPS=${SOFT} GOARM=${ARM} xcaddy build \
--with github.com/mholt/caddy-webdav \
--with github.com/aksdb/caddy-cgi/v2
file caddy
du -k caddy
mv caddy caddy-${TARGET}
if [[ $TARGET != mips64 ]] && [[ $TARGET != mips64le ]] && [[ $TARGET != s390x ]] ;then
cp caddy-${TARGET} caddy-${TARGET}-upx
upx --lzma --best caddy-${TARGET}-upx
du -k caddy-${TARGET}-upx
fi
#sudo apt install qemu-user
#qemu-mipsel caddy -v
echo "build_time=$(date '+%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV
echo "tag=$(date '+%Y-%m-%d')" >> $GITHUB_ENV
- name: 发布
uses: softprops/action-gh-release@v1
with:
token: ${{ secrets.c8 }}
body: |
> ### 编译时间 ${{ env.build_time }}
tag_name: ${{ env.tag }}
files: /opt/caddy/*

View File

@ -26,15 +26,16 @@ jobs:
cd /opt/openwrt-sdk*/bin/packages/aarch64_generic/base
ls
mv *.ipk luci-app-caddy_all.ipk
echo "build_time=$(date '+%Y-%m-%d %H:%M:%S')" >> $GITHUB_ENV
echo "build_time=$(date '+%Y年%m月%d日%H:%M:%S' | jq -sRr @uri)" >> $GITHUB_ENV
echo "tag=$(date '+%Y-%m-%d')" >> $GITHUB_ENV
- name: 发布
uses: softprops/action-gh-release@v1
with:
token: ${{ secrets.c8 }}
body: |
> ### 编译时间 ${{ env.build_time }}
> ### ![](https://img.shields.io/badge/%E7%BC%96%E8%AF%91%E6%97%B6%E9%97%B4-${{ env.build_time }}-8267?logo=github&labelColor=%E9%A1%BB)![](https://img.shields.io/github/downloads/${{ github.repository }}/${{ env.tag }}/total?label=%E4%B8%8B%E8%BD%BD%E6%AC%A1%E6%95%B0&logo=github)
二进制程序下载地址:[caddy](https://github.com/lmq8267/caddy/releases)
tag_name: ${{ env.tag }}
files: /opt/openwrt-sdk*/bin/packages/aarch64_generic/base/*

View File

@ -1,11 +1,26 @@
# luci-app-caddy
<p align="center">
<img alt="GitHub Created At" src="https://img.shields.io/github/created-at/lmq8267/luci-app-caddy?logo=github&label=%E5%88%9B%E5%BB%BA%E6%97%A5%E6%9C%9F">
<a href="https://hits.seeyoufarm.com"><img src="https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2Flmq8267%2Fluci-app-caddy&count_bg=%2395C10D&title_bg=%23555555&icon=github.svg&icon_color=%238DC409&title=%E8%AE%BF%E9%97%AE%E6%95%B0&edge_flat=false"/></a>
<a href="https://github.com/lmq8267/luci-app-caddy/releases"><img src="https://img.shields.io/github/downloads/lmq8267/luci-app-caddy/total?logo=github&label=%E4%B8%8B%E8%BD%BD%E9%87%8F"></a>
<a href="https://github.com/lmq8267/luci-app-caddy/graphs/contributors"><img src="https://img.shields.io/github/contributors-anon/lmq8267/luci-app-caddy?logo=github&label=%E8%B4%A1%E7%8C%AE%E8%80%85"></a>
<a href="https://github.com/lmq8267/luci-app-caddy/releases/"><img src="https://img.shields.io/github/release/lmq8267/luci-app-caddy?logo=github&label=%E6%9C%80%E6%96%B0%E7%89%88%E6%9C%AC"></a>
<a href="https://github.com/lmq8267/luci-app-caddy/issues"><img src="https://img.shields.io/github/issues-raw/lmq8267/luci-app-caddy?logo=github&label=%E9%97%AE%E9%A2%98"></a>
<a href="https://github.com/lmq8267/luci-app-caddy/discussions"><img src="https://img.shields.io/github/discussions/lmq8267/luci-app-caddy?logo=github&label=%E8%AE%A8%E8%AE%BA"></a>
<a href="GitHub repo size"><img src="https://img.shields.io/github/repo-size/lmq8267/luci-app-caddy?logo=github&label=%E4%BB%93%E5%BA%93%E5%A4%A7%E5%B0%8F"></a>
<a href="https://github.com/lmq8267/luci-app-caddy/actions?query=workflow%3ABuild"><img src="https://img.shields.io/github/actions/workflow/status/lmq8267/luci-app-caddy/build.yml?branch=main&logo=github&label=%E6%9E%84%E5%BB%BA%E7%8A%B6%E6%80%81" alt="Build status"></a>
项目地址https://github.com/caddyserver/caddy
没有添加caddy二进制程序需要下载或编译对应cpu架构的二进制程序手动上传至路由器然后填写对应的程序路径。
caddy的大概 [命令参数](https://github.com/lmq8267/caddy/blob/main/README_caddy.md)
```shell
#查看添加了哪些插件命令
caddy list-modules -s
```
------------------------------------------------------
编译的大概步骤:抄自网上的方法
编译的大概步骤:抄自网上的方法, 也有我编译好的二进制文件[caddy](https://github.com/lmq8267/caddy/releases)文件服务器支持照片音视频预览播放 支持markdown[UI预览效果图](https://github.com/lmq8267/caddy/tree/main#ui%E9%A2%84%E8%A7%88)
还有OpenWrt的[github.com/fuqiang03/openwrt-caddy](https://github.com/fuqiang03/openwrt-caddy)Makefile
```shell
apt update
apt install xcaddy git libnss3 upx-ucl
@ -38,3 +53,8 @@ upx --lzma --best caddy
其他功能可以自行修改编辑配置文件
![](./Image/自定义启动.png)
![QQ截图20240131092630](https://github.com/lmq8267/luci-app-caddy/assets/119713693/05742312-7b0f-4a71-bbc2-83fdafb96df4)
![QQ截图20240131092717](https://github.com/lmq8267/luci-app-caddy/assets/119713693/60c57424-1a5b-4e99-9517-4fd663e13d5c)

View File

@ -16,6 +16,7 @@ function index()
entry({"admin", "nas", "caddy", "caddy_status"}, call("caddy_status")).leaf = true
entry({"admin", "nas", "caddy", "get_log"}, call("get_log")).leaf = true
entry({"admin", "nas", "caddy", "clear_log"}, call("clear_log")).leaf = true
entry({"admin", "nas", "caddy", "admin_info"}, call("admin_info")).leaf = true
end
function caddy_status()
@ -25,14 +26,23 @@ function caddy_status()
local port = tonumber(uci:get_first("caddy", "caddy", "port"))
e.port = (port or 12311)
e.running=luci.sys.call("pidof caddy >/dev/null")==0
local command1 = io.popen("[ -f /tmp/caddy_time ] && start_time=$(cat /tmp/caddy_time) && time=$(($(date +%s)-start_time)) && day=$((time/86400)) && [ $day -eq 0 ] && day='' || day=${day}天 && time=$(date -u -d @${time} +'%H小时%M分%S秒') && echo $day $time")
e.caddysta = command1:read("*all")
command1:close()
if e.caddysta == "" then
e.caddysta = "unknown"
end
local tagfile = io.open("/tmp/caddy_time", "r")
if tagfile then
local tagcontent = tagfile:read("*all")
tagfile:close()
if tagcontent and tagcontent ~= "" then
os.execute("start_time=$(cat /tmp/caddy_time) && time=$(($(date +%s)-start_time)) && day=$((time/86400)) && [ $day -eq 0 ] && day='' || day=${day}天 && time=$(date -u -d @${time} +'%H小时%M分%S秒') && echo $day $time > /tmp/command_caddy 2>&1")
local command_output_file = io.open("/tmp/command_caddy", "r")
if command_output_file then
e.caddysta = command_output_file:read("*all")
command_output_file:close()
if e.caddysta == "" then
e.caddysta = "unknown"
end
end
end
end
local command2 = io.popen('test ! -z "`pidof caddy`" && (top -b -n1 | grep -E "$(pidof caddy)" 2>/dev/null | grep -v grep | awk \'{for (i=1;i<=NF;i++) {if ($i ~ /caddy/) break; else cpu=i}} END {print $cpu}\')')
e.caddycpu = command2:read("*all")
command2:close()
@ -65,10 +75,17 @@ function caddy_status()
end
function get_log()
luci.http.write(luci.sys.exec("test ! -z `pidof caddy` && cat $(uci -q get caddy.@caddy[0].log_dir)"))
luci.http.write(luci.sys.exec("[ -s $(uci -q get caddy.@caddy[0].log_dir) ] && cat $(uci -q get caddy.@caddy[0].log_dir)"))
end
function clear_log()
luci.sys.call("cat /dev/null > $(uci -q get caddy.@caddy[0].log_dir)")
end
function admin_info()
local validate = luci.sys.exec("$(uci -q get caddy.@caddy[0].bin_dir) validate --config /etc/caddy/Caddyfile --adapter caddyfile 2>&1")
luci.http.prepare_content("application/json")
luci.http.write_json({ validate = validate })
end

View File

@ -1,5 +1,4 @@
local m, s
local fs = require "luci.fs"
m = Map("caddy", translate("Caddy"), translate("Caddy 是一个可扩展的服务器平台,具有自动 HTTPS 功能的快速且可扩展的多平台 HTTP/1-2-3 Web 服务器") .. "<br/>" .. "项目地址:" .. [[<a href="https://github.com/caddyserver/caddy" target="_blank">]] .. translate("github.com/caddyserver/caddy") .. "</a>&nbsp; &nbsp;&nbsp;" .. " caddy文档" .. [[<a href="https://caddyserver.com/docs/" target="_blank">]] .. translate("caddyserver.com/docs/") .. [[</a>]])
m:section(SimpleSection).template = "caddy/caddy_status"
@ -12,6 +11,15 @@ o = s:option(Flag, "enabled", translate("Enabled"))
o.rmempty = false
o.default = 0
o = s:option(Button, "btnrm", translate("重启"))
o.inputtitle = translate("重启")
o.description = translate("在没有修改参数的情况下快速重新启动一次")
o.inputstyle = "apply"
o:depends("enabled", "1")
o.write = function()
os.execute("/etc/init.d/caddy restart")
end
e=s:option(ListValue,"cmd",translate("启动方式"),
translate("自定义配置文件启动,若不懂参数请勿选择自定义"))
e:value("默认")
@ -96,7 +104,7 @@ o:depends("webdav", "1")
o = s:option(Flag, "webzip", translate("启用 压缩"))
o.default = 0
o:depends("webdav", "默认")
o:depends("webdav", "1")
o = s:option(Value, "webdav_data_dir", translate("webdav指向路径"),
translate("指向一个路径使用webdav访问你的文件默认为 /mnt<br>连接地址须加/dav后缀&nbsp;&nbsp;如: 192.168.1.1:12311/dav"))
@ -110,4 +118,10 @@ o.rmempty = false
o = s:option(Flag, "api", translate("启用 API接口"))
o:depends("cmd", "默认")
o = s:option(Button, "admin_info", translate("检测配置文件"),
translate("验证Caddyfile配置文件是否正确它会模拟启动caddy<br>但是并不会真的启动,会列出详细信息,以便修正配置文件"))
o.rawhtml = true
o.template = "caddy/admin_info"
return m

View File

@ -0,0 +1,25 @@
<%+cbi/valueheader%>
<script type="text/javascript">//<![CDATA[
function admin_info(btn)
{
btn.disabled = true;
btn.value = '<%:Collecting data...%>';
XHR.get('<%=luci.dispatcher.build_url("admin", "nas", "caddy", "admin_info")%>',
null,
function(x,rv)
{
var tb = document.getElementById('<%=self.option%>-status');
if (tb) {
rv.validate = rv.validate.replace(/{"level":/g, '<br>{"level":').replace(/Error/g, "<br>Error").replace(/Valid configuration/g, "<br><strong><font color='#008000'>当前配置文件正确!</font></strong>").replace(/warn/g, "<font color='#800080'>警告</font>").replace(/level/g, "<font color='#1E90FF'>等级</font>").replace(/info/g, "<font color='#00BFFF'>普通</font>").replace(/msg/g, "<font color='#FFA500'>信息</font>").replace(/error/g, "<font color='#DB7093'>错误</font>").replace(/Error:/g, "<font color='red'><strong>当前配置文件错误!</strong><br>错误位置信息:</font>");
tb.innerHTML = "<br><font color='#FF00FF'><%:状态:%></font>" + "<font color='#2F4F4F'>" + rv.validate + "</font>";
}
btn.disabled = false;
btn.value = '<%:检测%>';
}
);
return false;
}
//]]></script>
<input type="button" class="btn cbi-button cbi-button-apply" value="<%:检测%>" onclick="return admin_info(this)" />
<span id="<%=self.option%>-status"><em><%=self.value%></em></span>
<%+cbi/valuefooter%>

View File

@ -14,8 +14,8 @@
var tb = document.getElementById('caddy_status');
if (st && tb) {
var caddyStatus = st.running ? "<span style='color:green;'> 运行中</span>" : "<span style='color:red;'> 未运行</span>";
var caddystaContent = st.running ? "&nbsp;" + "&nbsp;&nbsp;&nbsp;行:" + "<span style='color:#DA70D6;'>" + st.caddysta + "</span>" : "";
var caddyStatus = st.running ? "<span style='color:green;'> 运行中</span><img src='https://www.right.com.cn/forum/data/attachment/album/202401/30/073058is17bcmu7z3nmn2b.gif' width='30px' alt=''>" : "<span style='color:red;'> 未运行</span>";
var caddystaContent = st.running ? "已运行:" + "<span style='color:#DA70D6;'>" + st.caddysta + "</span>" : "";
var caddycpuContent = st.running ? "<br>" + "CPU占用" + "<span style='color:#6A5ACD;'>" + st.caddycpu + "</span>" : "";
var caddyramContent = st.running ? "&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;" + "&nbsp;内存占用:" + "<span style='color:#0000CD;'>" + st.caddyram + "</span>" : "";
var caddytagContent = st.running ? "<br>" + "当前版本:" + "<span style='color:#CD853F;'>" + st.caddytag + "</span>" : "";

View File

@ -20,11 +20,6 @@ admin $2a$14$RdbOHzJhf5BaapSdlYTCbe.yWY9cEZjyDpfgwStY28K/qsM1tX8tu
root * /mnt
#文件服务器 端口12311
file_server browse
header {
#中文字符显示
Content-Type "text/plain; charset=utf-8"
}
log {
#日志 路径/tmp/caddy/requests.log

View File

@ -54,6 +54,8 @@ start_service() {
config_load caddy
config_foreach get_config caddy
[ $enabled -ne 1 ] && return 1
log_path="$(dirname $log_dir)"
mkdir -p $log_path
if [ ! -f "$PROG" ] ;then
uci -q set caddy.@caddy[0].enabled=0
uci commit caddy
@ -61,7 +63,7 @@ start_service() {
exit 1
else
chmod +x $PROG
if [ $(($($PROG -h | wc -l))) -lt 3 ] ;then
if [[ "$($PROG -h 2>&1 | 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
@ -71,8 +73,7 @@ start_service() {
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
@ -137,10 +138,6 @@ $filezips
$filebasicauth
root * $data_dir
file_server browse
header {
Content-Type "text/plain; charset=utf-8"
}
$logs
@ -152,10 +149,19 @@ EOF
uci -q set caddy.@caddy[0].caddyfile="$(cat $caddy_file)"
uci commit caddy
else
logpat="$(uci -q get caddy.@caddy[0].caddyfile)"
logpath="$(echo $logpat | grep "output file" | awk -F 'output file' '{print $2}' | tr -d '{ ')"
caddyf="$(uci -q get caddy.@caddy[0].caddyfile)"
logpath="$(echo $caddyf | grep "output file" | awk -F 'output file' '{print $2}' | tr -d '{ ')"
[ ! -z "$logpath" ] && uci -q set caddy.@caddy[0].log_dir=$logpath && uci commit caddy
if [ ! -z "$caddyf" ] ;then
echo "$caddyf" >$caddy_file 2>&1
else
uci -q set caddy.@caddy[0].enabled=0
uci commit caddy
echo "$(TZ=UTC-8 date -R +%Y年%m月%d日\ %X) : $caddy_file 配置文件Caddyfile为空无法启动!" >>$log_dir 2>&1
exit 1
fi
fi
$PROG fmt --overwrite $caddy_file
procd_open_instance caddy
procd_set_param command $PROG
procd_append_param command run