§2023-07-28

alexlai@h2Jammy:~/build/yushei-caddy-markdown$ tree
.
├── access.43115.log
├── Caddyfile
├── demo
│   ├── another.md
│   ├── index-html
│   │   └── index.html
│   ├── index-md
│   │   └── index.md
│   ├── index.md
│   ├── index-txt
│   │   └── index.txt
│   ├── media
│   │   └── photo.jpg
│   ├── munetakaJupyterHub -> /opt/munetakaJupyterHub
│   └── templates -> ../templates
├── LICENSE
├── Makefile
├── README.md
├── screenshot.png
├── templates
│   ├── axist.min.css
│   ├── bootstrap-5.0.2-dist
│   │   ├── css
│   │   │   ├── bootstrap.css
│   │   │   ├── bootstrap.css.map
│   │   │   ├── bootstrap-grid.css
│   │   │   ├── bootstrap-grid.css.map
│   │   │   ├── bootstrap-grid.min.css
│   │   │   ├── bootstrap-grid.min.css.map
│   │   │   ├── bootstrap-grid.rtl.css
│   │   │   ├── bootstrap-grid.rtl.css.map
│   │   │   ├── bootstrap-grid.rtl.min.css
│   │   │   ├── bootstrap-grid.rtl.min.css.map
│   │   │   ├── bootstrap.min.css
│   │   │   ├── bootstrap.min.css.map
│   │   │   ├── bootstrap-reboot.css
│   │   │   ├── bootstrap-reboot.css.map
│   │   │   ├── bootstrap-reboot.min.css
│   │   │   ├── bootstrap-reboot.min.css.map
│   │   │   ├── bootstrap-reboot.rtl.css
│   │   │   ├── bootstrap-reboot.rtl.css.map
│   │   │   ├── bootstrap-reboot.rtl.min.css
│   │   │   ├── bootstrap-reboot.rtl.min.css.map
│   │   │   ├── bootstrap.rtl.css
│   │   │   ├── bootstrap.rtl.css.map
│   │   │   ├── bootstrap.rtl.min.css
│   │   │   ├── bootstrap.rtl.min.css.map
│   │   │   ├── bootstrap-utilities.css
│   │   │   ├── bootstrap-utilities.css.map
│   │   │   ├── bootstrap-utilities.min.css
│   │   │   ├── bootstrap-utilities.min.css.map
│   │   │   ├── bootstrap-utilities.rtl.css
│   │   │   ├── bootstrap-utilities.rtl.css.map
│   │   │   ├── bootstrap-utilities.rtl.min.css
│   │   │   └── bootstrap-utilities.rtl.min.css.map
│   │   └── js
│   │       ├── bootstrap.bundle.js
│   │       ├── bootstrap.bundle.js.map
│   │       ├── bootstrap.bundle.min.js
│   │       ├── bootstrap.bundle.min.js.map
│   │       ├── bootstrap.esm.js
│   │       ├── bootstrap.esm.js.map
│   │       ├── bootstrap.esm.min.js
│   │       ├── bootstrap.esm.min.js.map
│   │       ├── bootstrap.js
│   │       ├── bootstrap.js.map
│   │       ├── bootstrap.min.js
│   │       └── bootstrap.min.js.map
│   ├── bootstrap-5.0.2-dist.zip
│   ├── bootstrap.min.css
│   ├── error.html
│   ├── footer.html
│   ├── header.html
│   ├── head.html
│   └── index.html
└── test.ts

11 directories, 65 files
alexlai@h2Jammy:~/build/mongosh-1.10.1-linux-x64$ cat  /usr/lib/systemd/system/caddy.service 
# caddy.service
#
# For using Caddy with a config file.
#
# Make sure the ExecStart and ExecReload commands are correct
# for your installation.
#
# See https://caddyserver.com/docs/install for instructions.
#
# WARNING: This service does not use the --resume flag, so if you
# use the API to make changes, they will be overwritten by the
# Caddyfile next time the service is restarted. If you intend to
# use Caddy's API to configure it, add the --resume flag to the
# `caddy run` command or use the caddy-api.service file instead.

[Unit]
Description=Caddy
Documentation=https://caddyserver.com/docs/
After=network.target network-online.target
Requires=network-online.target

[Service]
Type=notify
User=caddy
Group=caddy
WorkingDirectory=/home/alexlai/build/yushei-caddy-markdown/
ExecStart=/usr/bin/caddy run --environ --config /home/alexlai/build/yushei-caddy-markdown/Caddyfile
ExecReload=/usr/bin/caddy reload --config /home/alexlai/build/yushei-caddy-markdown/Caddyfile --force
TimeoutStopSec=5s
LimitNOFILE=1048576
LimitNPROC=512
PrivateDevices=yes
PrivateTmp=true
ProtectSystem=full
AmbientCapabilities=CAP_NET_BIND_SERVICE

[Install]
WantedBy=multi-user.target
# https://github.com/dbohdan/caddy-markdown-site
# Copyright (c) 2021 D. Bohdan.  License: MIT.

# http://h2jammy.yushei.net:43889 {
http://192.168.48.229:43889 {
        root * demo

        encode gzip

        file_server browse
        templates

        log {
                output file access.43115.log
        }

        @media {
                path /favicon.ico
                path /media/*
        }
        @templates {
                path /templates/*
                not path /templates/*.css /templates/*.js
        }
        @markdown {
                path_regexp \.md$
        }
        @markdown_exists {
                file {path}.md
        }

        handle @media {
                file_server
        }
        handle @templates {
                error 403
        }
        handle @markdown {
                rewrite * /templates/index.html
        }
        handle @markdown_exists {
                map {path} {caddy_markdown_site.append_to_path} {
                        default extension
                }
                rewrite * /templates/index.html
        }

        handle_errors {
                file_server
                templates

                @markdown_index_exists_404 {
                        file {path}/index.md
                        expression `{http.error.status_code} == 404`
                }

                handle @markdown_index_exists_404 {
                        map {path} {caddy_markdown_site.append_to_path} {
                                default index
                        }
                        file_server {
                                status 200
                        }
                        rewrite * /templates/index.html
                }
                handle {
                        rewrite * /templates/error.html
                }
        }
}