diff --git a/caddy-file-browser/Dockerfile b/caddy-file-browser/Dockerfile
new file mode 100644
index 0000000..c4de3b9
--- /dev/null
+++ b/caddy-file-browser/Dockerfile
@@ -0,0 +1,3 @@
+# syntax=docker/dockerfile:1
+FROM caddy:2-alpine
+ADD rootfs /
diff --git a/caddy-file-browser/docker-bake.hcl b/caddy-file-browser/docker-bake.hcl
new file mode 100644
index 0000000..3fbb917
--- /dev/null
+++ b/caddy-file-browser/docker-bake.hcl
@@ -0,0 +1,7 @@
+target "caddy-file-browser" {
+ inherits = [ "dockerfiles" ]
+ context = "caddy-file-browser"
+ tags = concat(
+ tags("caddy-file-browser", "latest"),
+ )
+}
diff --git a/caddy-file-browser/rootfs/etc/caddy/Caddyfile b/caddy-file-browser/rootfs/etc/caddy/Caddyfile
new file mode 100644
index 0000000..1119156
--- /dev/null
+++ b/caddy-file-browser/rootfs/etc/caddy/Caddyfile
@@ -0,0 +1,18 @@
+{
+ debug
+}
+:80 {
+ header {
+ Cache-Control "no-cache, no-store, must-revalidate"
+ Pragma "no-cache"
+ Expires "0"
+ }
+ @is-mobile header_regexp User-Agent (?i)(android|iphone|ipad|mobile)
+ vars @is-mobile isMobile true
+ vars isMobile false
+ root * /srv
+ file_server {
+ hide .DS_Store .git .git* .*.parts
+ browse /usr/share/caddy/index.html
+ }
+}
diff --git a/caddy-file-browser/rootfs/usr/share/caddy/index.html b/caddy-file-browser/rootfs/usr/share/caddy/index.html
new file mode 100644
index 0000000..3409304
--- /dev/null
+++ b/caddy-file-browser/rootfs/usr/share/caddy/index.html
@@ -0,0 +1,1281 @@
+{{ $nonce := uuidv4 -}}
+{{ $nonceAttribute := print "nonce=" (quote $nonce) -}}
+{{ $csp := printf "default-src 'none'; img-src 'self'; object-src 'none'; base-uri 'none'; script-src 'nonce-%s'; style-src 'nonce-%s'; frame-ancestors 'self'; form-action 'self';" $nonce $nonce -}}
+{{/* To disable the Content-Security-Policy, set this to false */}}{{ $enableCsp := true -}}
+{{ if $enableCsp -}}
+ {{- .RespHeader.Set "Content-Security-Policy" $csp -}}
+{{ end -}}
+{{- define "icon"}}
+ {{- if .IsDir}}
+ {{- if .IsSymlink}}
+
+ {{- else}}
+
+ {{- end}}
+ {{- else if or (eq .Name "LICENSE") (eq .Name "README")}}
+
+ {{- else if .HasExt ".jpg" ".jpeg" ".png" ".gif" ".webp" ".tiff" ".bmp" ".heif" ".heic" ".svg" ".avif"}}
+ {{- if eq .Tpl.Layout "grid"}}
+
+ {{- else}}
+
+ {{- end}}
+ {{- else if .HasExt ".mp4" ".mov" ".m4v" ".mpeg" ".mpg" ".avi" ".ogg" ".webm" ".mkv" ".vob" ".gifv" ".3gp"}}
+
+ {{- else if .HasExt ".mp3" ".m4a" ".aac" ".ogg" ".flac" ".wav" ".wma" ".midi" ".cda"}}
+
+ {{- else if .HasExt ".pdf"}}
+
+ {{- else if .HasExt ".csv" ".tsv"}}
+
+ {{- else if .HasExt ".txt" ".doc" ".docx" ".odt" ".fodt" ".rtf"}}
+
+ {{- else if .HasExt ".xls" ".xlsx" ".ods" ".fods"}}
+
+ {{- else if .HasExt ".ppt" ".pptx" ".odp" ".fodp"}}
+
+ {{- else if .HasExt ".zip" ".gz" ".xz" ".tar" ".7z" ".rar" ".xz" ".zst"}}
+
+ {{- else if .HasExt ".deb" ".dpkg"}}
+
+ {{- else if .HasExt ".rpm" ".exe" ".flatpak" ".appimage" ".jar" ".msi" ".apk"}}
+
+ {{- else if .HasExt ".ps1"}}
+
+ {{- else if .HasExt ".py" ".pyc" ".pyo"}}
+
+ {{- else if .HasExt ".bash" ".sh" ".com" ".bat" ".dll" ".so"}}
+
+ {{- else if .HasExt ".dmg"}}
+
+ {{- else if .HasExt ".iso" ".img"}}
+
+ {{- else if .HasExt ".md" ".mdown" ".markdown"}}
+
+ {{- else if .HasExt ".ttf" ".otf" ".woff" ".woff2" ".eof"}}
+
+ {{- else if .HasExt ".go"}}
+
+ {{- else if .HasExt ".html" ".htm"}}
+
+ {{- else if .HasExt ".js"}}
+
+ {{- else if .HasExt ".css"}}
+
+ {{- else if .HasExt ".json" ".json5" ".jsonc"}}
+
+ {{- else if .HasExt ".ts"}}
+
+ {{- else if .HasExt ".sql"}}
+
+ {{- else if .HasExt ".db" ".sqlite" ".bak" ".mdb"}}
+
+ {{- else if .HasExt ".eml" ".email" ".mailbox" ".mbox" ".msg"}}
+
+ {{- else if .HasExt ".crt" ".pem" ".x509" ".cer" ".ca-bundle"}}
+
+ {{- else if .HasExt ".key" ".keystore" ".jks" ".p12" ".pfx" ".pub"}}
+
+ {{- else}}
+ {{- if .IsSymlink}}
+
+ {{- else}}
+
+ {{- end}}
+ {{- end}}
+{{- end}}
+
+
+
+ {{html .Name}}
+
+
+
+
+
+{{- if eq .Layout "grid"}}
+
+{{- end}}
+
+
+
+
+
Folder Path
+
+ {{range $i, $crumb := .Breadcrumbs}}{{html $crumb.Text}}{{if ne $i 0}}/{{end}}{{end}}
+
+
+
+
+
+
+
+ {{- if eq .Layout "grid"}}
+ {{- range .Items}}
+
+ {{- end}}
+ {{- else}}
+
+ {{- end}}
+
+
+
+
+
+
+
+
diff --git a/docker-bake.hcl b/docker-bake.hcl
index 2c2e3aa..b49004f 100644
--- a/docker-bake.hcl
+++ b/docker-bake.hcl
@@ -55,6 +55,7 @@ target "dockerfiles" {
group "default" {
targets = [
"caddy-layer4",
+ "caddy-file-browser",
"caddy",
"certigo",
"certstrap",
@@ -116,6 +117,7 @@ target "targets" {
targets = [
"caddy-json-schema",
"caddy-layer4",
+ "caddy-file-browser",
"caddy",
"certigo",
"certstrap",