← Uz sākumu

Caddy webserveris

2023. gada 20. septembrī, 5 komentāri

Šis ieraksts ir tehnisks. Tas var būt par datoriem, programmēšanu, lodēšanu un tamlīdzīgām ne pārāk populārām lietām. Ja tevi šāds saturs neinteresē, droši vari to nelasīt.

Šo uzjundīja uzrakstīt tas, ka izlasīju par NGINX Unit, kurš spēj iekšpusē izpildīt lietas, kas nozīmē, ka tehniski var iztikt gan b ez php-fpm, gan bez reversās proksēšanas, jo šamais jēdz laist pa tiešo. Pa tiešo nozīmē tā ka PHP caur (custom) SAPI spraudni, Go un javascript, overloadojot atbilstošo funkcionalitāti, utt. Konfgurācija gan var izaugt, jo nav sane defaults. Taču. Ieguvumi ir acīmredzami - PHP gadījumā pietiek ar vienu akadēmisko konteineri bez php-fpm iesaistes. Dīvaina padarīšana, bet ak, aka. Tāds kā aplikāciju serveris on steroids, kurš ir relatīvi valodneatkarīgs.

Tad nu atminējos par universālajiem webserveriem. Viss sākās ar Apache. Tas darīja visu ko vajag. Tad turpinājās ar nginx. Tas darīja visu to pašu, tikai labāk, ātrāk un ar plašākām konfigurācijas iespējām.

Un tad, kad man nācās atkal pārmigrēt savu saimniecību, sapratu, ka tas viss ir lieki. Var dzīvot labāk :)

Ne tādā ziņā, ka webserveri vai saimniecība ir lieka, bet plašās webserveru konfigurācijas iespējas. Viss, kas man ir nepieciešams, ir serveris, kurš prot drošību, ir ņiprs gana, servē statiku un PHP bez iejaukšanās, kā arī reversi proksē pārējo. Līdz šim šo funkciju pildīja nginx (apkalpo webu) ar certbot (nodrošina SSL sertifikātus).

A tagad man pat certbot vairs nevajag. Lūk, zemāk ir pilnībā strādājošs Caddy konfigurācijas fails, kurš ļauj servēt lapu ar PHP un statiskiem failiem, automātiski nodrošina Let's Encrypt SSL (vai, ja tas nav pieejams, ZeroSSL) sertifikātus un to rotāciju, redirektu no HTTP uz HTTPS.

mzgd.some.lv, www.mzgd.some.lv {
    root * /var/www/mzgd.some.lv
    file_server
    php_fastcgi unix//var/run/php/php-fpm.sock
}

Reverso proxy?

git.some.lv {
    reverse_proxy localhost:3000
}

Pilnvērtīga konfigurācija, kurā tiek nokopots tehniskais mantojums, gan būtu nedaudz sarežģītāka. Tas jau nav nekāds jaunums, ka jo tālāk mežā, jo vairāk konfigurācijas.

Uff, caddy ir dāāāudz maģijas, bet kaut kā, kamēr nav īpašu vajadzību, tās ir tieši tik daudz, cik vajag. Tiktāl, ka pat lokālajiem domēniem (ieskaitot localhost un 127.0.0.1) pienākas savs sertifikāts (self-signed, protams) pēc noklusējuma.

Katra no iepriekš redzamajām rindiņām ir direktīva, kas fonā tiek pārveidota par pilno tās paplašināto formu, kuru arī var izmantot pats. Bet galvenā priekšrocība - absolūti saprātīgas noklusētās vērtības. SSL mūsdenās ir obligāts? Automātiski by default. Gribi bez, piekabini :80 galā un dzīvo bez. PHP mūsdienās pamatā tiek izmantots ar routingu caur index.php? Tieši tādi arī ir defaultie settingi.

Protams, ka var gadīties saskarties ar situāciju, kur tavs viedoklis par saprātīgām noklusētajām vērtībām ir pretējs autoru viedoklim :)

No otras puses, kā jau minēju, var arī līdz mielēm nokonfigurēties. Reversajiem prokšiem iespējas ir diezgan nais un pat ne kurš katrs dedicated API gateway var palielīties ar tādu daudzumu iespēju transporta un slodzes dalīšanas līmenī.

Te gan ir jāpiebilst, ka caddy 2 ir nedaudz cits zvērs, nekā bija caddy 1. Pirmā versija savulaik bija elegants veids kā fiksi pacelt no komandrindas ar vienu spļāvienu lielisku serveri. Un tā bija arī pirmā versija, kura kļuva slavens ar saviem ne sevišķi populārājiem lēmumiem (telemetrija un reklāmas iekš HTTP headeriem) To gan viņi nokopa un nupat jau vairākus gadus ir pilnībā saprātīgi. Ieskaitot Apache 2.0 licenci.

Riski gan pastāv. Neskatoties uz opensource karodziņu, tas tomēr ir kantora sponsorēts - izstrādātāja darba laiku apmaksā bizness. Tas var izvērsties daudz nelāgos momentos, ja ir mazs community un viens galvenais izstrādātājs. Bet dakšas un pikts community ir mūsu visa garants anyway, kā varbūt, ja paveiksies, pierādīs Terraform forks.

Otra lieta - dokumentācija ir diezgan nelasāma un konfigurācijā, ja vajag kaut ko ārpus noklusējuma, var pazust. Ne viss ir loģiski, ja to dari pirmās dažas reizes. Triviālās lietas gribētos vienkāršos piemēros, konfigurācijas konceptu arī saprotamāku.

Ir arī pāris lietas, kuras vēl jārisina. Piemēram, tas, ka administrācijas saskarne klausās uz localhost:2019 bez autentifikācijas. Ir gan plāni to mainīt, bet tur ir jāpaiet laikam, jo nav izolēts izlēmu-samainīju-lieta-cepurē gadījums.

Vēl viena lieta - veiktspēja vairumā scenāriju ir uz pusi, ja ne par divām trešdaļām sliktāka nekā nginx, ja tev tas rūp un tā ir tava deploymenta šaurā vieta. Un, galu galā, tas nav arī viņu mērķis. Vismaz pagaidām.

Respektīvi, apache, nginx, traefik ir forši, bet caddy ir tupa vienkārši ērti.

Caddy spēj darboties arī kā diezgan efektīvs WAF (izmantojot, piemēram, OWASP Coraza rūļus). Un tas ir sasodīti ērti paplašināms, izmantojot xcaddy.

Tu atbildi augstāk redzamajam komentāram. Atcelt

Gravatar nunu

2023. gada 20. septembrī, plkst. 22:46

a kā Tu zini, kas ir mzgd?

Gravatar Ēriks

2023. gada 21. septembrī, plkst. 08:49

Varbūt iegādājies kleperi :)

Gravatar Ēriks

2023. gada 21. septembrī, plkst. 08:47

Ok, pierunāji, palikšu pie nginx :)

Gravatar ivars

2023. gada 23. septembrī, plkst. 02:42

Pilnīgi piekrītu, ka perfekts risinājumu kā reverse proxy un statiskai lapu hostēšanai. Lietoju jau kopš 1.versijas (1.versijā pat automātiski palaidās php-fpm, tagad pašam jāparūpejas, bet tas sīkums).Automātiskais Letsencrypt HTTPS ir vienkāršu super (visas citas alternatīvas no "ņemtnes" viedokļa nav salīdzināmas)