1. Output of caddy version
:
caddy version
v2.6.2 h1:wKoFIxpmOJLGl3QXoo6PNbYvGW4xLEgo32GPBEjWL8o=
2. How I run Caddy:
OpenWRT doesn’t use SystemD and has no Caddy package per-se, so I run it via /etc/rc.local
and use caddy reload
whenever I need to. It’s…not very elegant, but, works. PHP on the other hand, has a native package.
a. System environment:
root@FriendlyWrt:/sdcard# cat /etc/openwrt_release
DISTRIB_ID='OpenWrt'
DISTRIB_RELEASE='22.03.2'
DISTRIB_REVISION='r19803-9a599fee93'
DISTRIB_TARGET='rockchip/armv8'
DISTRIB_ARCH='aarch64_generic'
DISTRIB_DESCRIPTION='OpenWrt 22.03.2 r19803-9a599fee93'
DISTRIB_TAINTS='busybox'
root@FriendlyWrt:/sdcard# cat /etc/openwrt_version
r19803-9a599fee93
Device: FriendlyElec NanoPi R6S
b. Command:
# /etc/rc.local:
/usr/bin/caddy start --resume --config /srv/Caddyfile
# Later in shell:
caddy validate --config /srv/Caddyfile
caddy reload --config /srv/Caddyfile
c. Service/unit/compose file:
See above.
d. My complete Caddy config:
# Globals
{
log {
level info
output file /var/log/caddy.log {
roll_size 10mb
roll_keep 10
roll_keep_for 720h
}
}
}
(php) {
php_fastcgi unix//var/run/php8-fpm.sock {
try_files {http.vars.root}/{path} {http.vars.root}/{path}/index.php
}
}
:80 {
# Set this path to your site's directory.
root * /srv/default
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000
}
# Basic ping-pong
echo.birb.it:80 {
respond "hello"
}
# LuCi
router.birb.it:80 {
reverse_proxy * localhost:8080
}
# Home Assistant
hass.birb.it:80 {
reverse_proxy * localhost:8123
}
# TVHeadend - broken atm...
tvh.birb.it:80 {
reverse_proxy * localhost:9981 {
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
}
}
# NextCloud
cloud.birb.it:80 {
root * /sdcard/srv/nextcloud
import php
file_server
}
Additionally, /etc/php8-fpm.d/www.conf
:
[www]
user = www
group = www
listen = /var/run/php8-fpm.sock
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
access.log = /var/log/www.access.log
chdir = /
3. The problem I’m having:
This:
root@FriendlyWrt:/sdcard/srv/nextcloud# ls -l
-rwxrwxrwx 1 www www 158285 Nov 30 2021 setup-nextcloud.php
root@FriendlyWrt:/sdcard/srv/nextcloud# curl -v http://cloud.birb.it/setup-nextcloud.php
> GET /setup-nextcloud.php HTTP/1.1
> Host: cloud.birb.it
> User-Agent: curl/7.86.0
> Accept: */*
>
< HTTP/1.1 404 Not Found
< Content-Type: text/html; charset=UTF-8
< Server: Caddy
< Status: 404 Not Found
< X-Powered-By: PHP/8.1.13
< Date: Sun, 11 Dec 2022 12:23:11 GMT
< Content-Length: 25
<
No input file specified.
In the Caddyfile you see me trying to utilize the http.vars.root
placeholder - I added that before writing this question. But the error is the same with or without.
4. Error messages and/or full log output:
root@FriendlyWrt:/sdcard/srv/nextcloud# tail /var/log/caddy.log
{"level":"info","ts":1670760823.6982152,"logger":"admin","msg":"admin endpoint started","address":"localhost:2019","enforce_origin":false,"origins":["//localhost:2019","//[::1]:2019","//127.0.0.1:2019"]}
{"level":"info","ts":1670760823.6990283,"logger":"tls.cache.maintenance","msg":"started background certificate maintenance","cache":"0x4000448310"}
{"level":"warn","ts":1670760823.6991317,"logger":"http","msg":"server is listening only on the HTTP port, so no automatic HTTPS will be applied to this server","server_name":"srv0","http_port":80}
{"level":"info","ts":1670760823.7033687,"logger":"tls","msg":"cleaning storage unit","description":"FileStorage:/root/.local/share/caddy"}
{"level":"info","ts":1670760823.7033985,"logger":"http.log","msg":"server running","name":"srv0","protocols":["h1","h2","h3"]}
{"level":"info","ts":1670760823.7034645,"logger":"tls","msg":"finished cleaning storage units"}
2022/12/11 12:13:43.703 info tls.cache.maintenance stopped background certificate maintenance {"cache": "0x400088b650"}
{"level":"info","ts":1670760823.7044778,"msg":"autosaved config (load with --resume flag)","file":"/root/.config/caddy/autosave.json"}
{"level":"info","ts":1670760823.704517,"logger":"admin.api","msg":"load complete"}
{"level":"info","ts":1670760823.7063136,"logger":"admin","msg":"stopped previous server","address":"localhost:2019"}
root@FriendlyWrt:/sdcard/srv/nextcloud# tail /var/log/www.access.log
- - 10/Dec/2022:21:57:16 -0200 "GET /setup-nextcloud.php" 404
- - 10/Dec/2022:21:58:09 -0200 "GET /setup-nextcloud.php" 404
- - 10/Dec/2022:21:58:12 -0200 "GET /setup-nextcloud.php" 404
- - 10/Dec/2022:21:58:58 -0200 "GET /setup-nextcloud.php" 404
- - 11/Dec/2022:10:04:31 -0200 "GET /setup-nextcloud.php" 404
- - 11/Dec/2022:10:13:49 -0200 "GET /setup-nextcloud.php" 404
- - 11/Dec/2022:10:22:50 -0200 "GET /setup-nextcloud.php" 404
- - 11/Dec/2022:10:23:11 -0200 "GET /setup-nextcloud.php" 404
root@FriendlyWrt:/sdcard/srv/nextcloud# tail /var/log/php8-fpm.log
[10-Dec-2022 21:56:11] NOTICE: exiting, bye-bye!
[10-Dec-2022 21:56:12] ERROR: failed to open access log (/usr/log/www.access.log): No such file or directory (2)
[10-Dec-2022 21:56:12] ERROR: failed to post process the configuration
[10-Dec-2022 21:56:12] ERROR: FPM initialization failed
[10-Dec-2022 21:57:07] NOTICE: fpm is running, pid 26789
[10-Dec-2022 21:57:07] NOTICE: ready to handle connections
[11-Dec-2022 10:04:22] NOTICE: Terminating ...
[11-Dec-2022 10:04:22] NOTICE: exiting, bye-bye!
[11-Dec-2022 10:04:23] NOTICE: fpm is running, pid 8631
[11-Dec-2022 10:04:23] NOTICE: ready to handle connections
The logs cover a little more time - but as you see, same error still.
5. What I already tried:
I had the idea of using a (php)
placeholder to not constantly having to re-type this part of the config to set up my PHP based services. This is just my home router, so things are fully allowed to be messy :). Idealy, I wanted to have simple $service.{system.hostname} { root /srv/... import php }
-ish blocks to just have a central Caddyfile to control the whole thing. As you see, a few reverse proxies are also here so I don’t have to memorize port numbers all the time. I have statically assigned *.birb.it
to my router and that works quite well. The big idea is to eventually upgrade this to a full reverse-proxy setup to where some services are available from outside (Home Assistant for cloud integrations being one) whilst others stay in a cozy VPN.
So… that should be all the details. I am out of ideas…
6. Links to relevant resources:
None I could think of. o.o