caddy logo

Caddy webový server – základné nastavenie

Úvod

Caddy webový server je ten úplne najlepší webový server na svete. Tvorí ho komunita, pravidelne pribúdajú nové funkcionality. Milujem tento skvostný kus softvéru lebo mnoho fantastických vlastností funguje bez zložitého nastavovania, napríklad:

  • https s certifikátmi od Let’s Encrypt
  • http/2
  • quic
  • statický obsah cez brotli
  • a mnoho ďalších

Zo srdca vďaka všetkým ktorí sa podieľajú na tvorení tohto webového serveru.

Tieto postupy a návody sú v prvom rade pripomienkou pre mňa, ako som to vlastne robil, ak by som to ešte potreboval zopakovať 🙂 Použiť ich môže ktokoľvek, ale len na vlastné riziko. Za ich správnosť neručím.

Realizáciu projektu je možné nájsť na: https://cluster.zwerimex.com/. Z dôvodu údržby alebo preťaženia môže byť adresa dočasne nedostupná 🙁

 

Caddy ako systemd služba

Webový server chcem spúšťať ako systemd službu, okrem iného preto aby server bežal aj po každom reštarte operačného systému. Najskôr si potrebujem vytvoriť konfiguračný súbor pre novú službu:

sudo nano /etc/systemd/system/caddy.service

Ďalej do tohto súboru zapíšem požadované údaje, viď nasledujúci príklad:

[Unit]
Description=Caddy webserver
Documentation=https://caddyserver.com/
After=network.target

[Service]
Type=simple
User=pi
Group=pi
WorkingDirectory=/var/www/zwerimex.com
LimitNOFILE=4096
PIDFile=/var/run/caddy/caddy.pid
PermissionsStartOnly=true
ExecStartPre=/sbin/setcap cap_net_bind_service=+ep /bin/caddy
Environment=CADDYPATH=/etc/ssl/caddy
ExecStart=/usr/local/bin/caddy -conf /var/www/zwerimex.com/Caddyfile -log /var/log/caddy/process.log -agree -email john@doe.com -pidfile /var/run/caddy/caddy.pid
Restart=always
StartLimitInterval=600
ExecReload=/bin/kill -USR1 $MAINPID

[Install]
WantedBy=multi-user.target

Len krátke vysvetlenie, lebo väčšina je zrejmá už podľa názvu. User a Group by mal byť neprivilegovaný užívateľ, WorkingDirectory by mal byť adresár v ktorom je obsah webu, LimitNOFILE môže byť až 1048576, ExecStartPre je dôležité pre systemd v228 a staršie.

Novovytvorenú službu môžem zapnúť (povoliť, nie spustiť):

sudo systemctl enable caddy.service

Ak som všetko nastavil správne, tak web server môžem spúšťať, zastavovať, znova načitať konfiguračný súbor pomocou následujúcich príkazov:

sudo service caddy start
sudo service caddy reload
sudo service caddy restart
sudo service caddy stop

Ak už webový server beží tak aj po reboote systému bude znova spustený, naopak ak chcem toto zmeniť, teda novovytvorenú systemd službu vypnúť:

sudo systemctl disable caddy.service

Ak potrebujem niečo v konfiguračnom súbore zmeniť, tak najskôr zastavím webový server, editujem konfiguračný súbor, znovu načítam upravený konfigurák a nakoniec opäť spustím webový server:

sudo service caddy stop
sudo nano /etc/systemd/system/caddy.service
sudo systemctl daemon-reload
sudo service caddy start

Zdroje a ďalšie zaujímavé čítanie:

Nebojte se systemd: služby
Running CaddyServer as a service with systemd
Getting Started With systemd on Debian Jessie
Understanding Systemd Units and Unit Files

Inštalácia a upgrade caddy

Mám dve možnosti, buď môžem použiť predkompilované balíčky pre jednotlivé platformy, alebo môžem použiť úplne najčerstvejšiu verziu softvéru z gitu.

Ak teda chcem predkompilované binárky, tak sa najskôr prepnem do príslušného adresára, v ňom vytvorím ďalší pre novú verziu. Prepnem sa do tohto novovytvoreného adresára, stiahnem archív a rozbalím archív. Potom zastavím webový server, prekopírujem novú verziu binárky do príslušného adresára a na koniec môžem webový server znova spustiť:

cd $HOME/caddy_bin
mkdir caddy_0.9.4
cd caddy_0.9.4
wget https://github.com/mholt/caddy/releases/download/v0.9.4/caddy_linux_386.tar.gz
tar xvfz *
sudo service caddy stop
sudo cp ./caddy_linux_386 /usr/local/bin
sudo service caddy start

Ak som urobil všetko správne caddy by mal bežať už v novej verzii, o tomto sa môžem presvedčiť:

sudo service caddy status

caddy status

sudo netstat -ntlpu | grep 'caddy'

caddy netstat


Ak chcem použiť vždy čo najčerstvejšiu verziu, alebo posledná vydaná obsahuje nejakú chybu tak môžem použiť zdrojové kódy z gitu a skompilovať ich sám. Bude to len o trochu komplikovanejšie. Najskôr si potrebujem nainštalovať programovací jazyk Go, zmeniť adresár, stiahnúť a rozbaliť archív:

cd /usr/local
sudo wget https://storage.googleapis.com/golang/go1.7.4.linux-386.tar.gz
sudo tar -C /usr/local -xzf go1.7.4.linux-386.tar.gz

Ďalej si potrebujem vytvoriť pracovný adresár pre zdrojové kódy projektu v jazyku Go a doplniť údaje do bash profilu ( potrebujem tam pridať cestu ku spustiteľným súborom pre jazyk Go a cestu ku zdrojákom v jazyku Go ):

cd
mkdir GO_sources
nano $HOME/.profile

na koniec editovaného súboru vložím dva riadky:

export PATH=$PATH:/usr/local/go/bin
export GOPATH=$HOME/GO_source

Na koniec sa potrebujem odhlásiť a znova prihlásiť, alebo znovu načítať bash profil:

source ~/.profile

Prepnem sa do adresáru s Go zdrojákmi a naklonujem a skompilujem projekt:

cd $GOPATH
go get github.com/mholt/caddy/caddy

Po tomto mám najnovšiu, práve skompilovanú, vývojovú verziu web servera v adresári $HOME/GO_source/bin a túto môžem prekopírovať na požadované miesto:

sudo service caddy stop
sudo cp $HOME/GO_source/bin/caddy /usr/local/bin
sudo service caddy start

Ak potrebujem kompilovať znova sám:

cd $GOPATH/src/github.com/mholt/caddy/caddy
./build.bash

Zdroje a ďalšie zaujímavé čítanie:

github.com/mholt/c a d d y
The Go Programming Language install

Caddyfile jediný konfiguračný súbor

Jednou z ďalších nesporných výhod tohto komunitou vyvíjaného slobodného softvéru je jednoduchosť konfigurácie. Tá môže byť celá sústredená do jediného konfiguračného súboru Caddyfile.

Ja využívam server v rôznych konfiguráciach, buď ako jednoduchý backend bez https alebo ako reverzné proxy – load balancer so všetkým ( https, quic, brotli ).

Takže najskôr to jednoduchšie nastavenie, toto je jeden z uzlov mojej experimentálnej webovej farmy, konkrétne je to raspberry pi 2 (node-3):

:8080 {
 gzip
 tls off
 ext .html .htm .php
 root /home/pi/www_hugo/recepty/public
 log /home/pi/log/recepty_caddyaccess.log
 errors /home/pi/log/recepty_caddyerror.log
 fastcgi / /var/run/php5-fpm.sock php
}

:80 {
 gzip
 tls off
 ext .html .htm .php
 root /home/pi/www
 log /home/pi/log/cluster_caddyaccess.log
 errors /home/pi/log/cluster_caddyerror.log
 fastcgi / /var/run/php5-fpm.sock php
}

Len krátke vysvetlenie, po riadkoch:

  • číslo portu na ktorom načúva server
  • zipovanie odpovedí za chodu
  • čisté url bez koncoviek
  • adresár v ktorom je web
  • súbor do ktorého sa ukladajú logy prístupu
  • súbor do ktorého sa zapisujú chyby
  • všetky požiadavky s koncovkou php idú do fastcgi servera

Text neprešiel žiadnou jazykovou a ani odbornou korektúrou.

Zdieľaj to:

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená. Vyžadované polia sú označené *