V minulém článku byly představeny základní vlastnosti netradičního webového serveru Caddy. Ten se od ostatních odlišuje svým zaměřením na jednoduchou konfiguraci a snadné rozšíření. Jedním z těchto rozšíření je například git addon, díky kterému lze snadno Caddyho propojit s repozitářem, a s pomocí některého generátoru statických webů pak tvořit jednoduchý web za pár okamžiků.
CMS a ti druzí
Přestože je v dnešní době moderní používat pro správu webu content management systémy, ani staromódní způsob vytvoření obsahu na jiném stroji a jeho nakopírování na web server ještě neřekl své poslední slovo. V tomto případě se budeme věnovat právě druhému zmíněnému. Konkrétně se tedy pokusíme nastolit model, kdy obsah vytváříme i editujeme na lokálním stroji, a pak prostřednictvím verzovacího systému nahrajeme na správné místo.
Pro účely tohoto článku bude dále použit generátor statických webů Hugo, který generuje statické HTML soubory ze zdrojových dat ve značkovacím jazyce (např. Markdown). Pro reálné nasazení je samotná volba generátoru statických webů natolik nepodstatná, a instalace a používání generátoru Hugo je natolik triviální, že v tomto článku nebude zahrnuta.
Caddyfile
Konfiguraci základního zabezpečení jsme shrnuli v minulém článku. Na tomto základě by tedy konfigurace webu mohla vypadat nějak takto:
http://caddy.halenka.eu {
redir https://caddy.halenka.eu/
}
https://caddy.halenka.eu {
header / Strict-Transport-Security "max-age=1814400; includeSubDomains; preload"
root ./blog/public/
}
Git modul
Jak již bylo zmíněno, pro stahování dat využijeme git addon, který nasměrujeme na náš veřejný Git repozitář s obsahem webu. S příslušnou konfigurací pak vypadá takto:
http://caddy.halenka.eu {
redir https://caddy.halenka.eu/
}
https://caddy.halenka.eu {
header / Strict-Transport-Security "max-age=1814400; includeSubDomains; preload"
root ./blog/public/
git github.com/HalisCz/test-web {
path ../
branch master
hook /webhook super-tajny-pristupovy-token
then hugo --theme=base16
}
shutdown rm -r blog
}
Kromě samotného zavolání modulu git, a předání cesty ke vzdálenému repozitáři, obsahuje konfigurace také cestu, do které bude repozitář naklonován. V tomto případě je klonován obsah repozitáře o úroveň výše, než je nastavený kořenový adresář webu. Díky tomu pak bude webový server zobrazovat HTML soubory z odpovídajícího adresáře. Dále je v konfiguraci nastavena volba větve repozitáře, webhook s přístupovým tokenem pro notifikaci o nových commitech ze vzdáleného repozitáře a volání příslušného příkazu pro vygenerování HTML stránek ze zdrojových dat. Na konec konfiguračního souboru byl doplněn příkaz pro smazání obsahu repozitáře při vypnutí webového serveru.
Posledním chybějícím střípkem konfigurace je pak nastavení Git repozitáře tak, aby při obdržení nových commitů notifikoval server na adrese https://caddy.halenka.eu/webhook s autorizačním tokenem super-tajny-pristupovy-token
.
Závěr
Caddy se snaží nechovat jen jako web server, ale i jako jednoduchá webová aplikace. Zatímco podobné chování by u jiných serverů vyžadovalo zapojení externích skriptů, Caddy přichází s modulem, díky kterému je zapotřebí jen konfigurace o desítce řádků. Ačkoliv je Caddy ještě velmi mladý, je zde vidět touha autorů po jednoduchosti, kterou se jejich výtvor rozhodně snaží naplnit, a bude přinejmenším zajímavé, kam dál se bude tento projekt ubírat.