Home» Články» Praxe» Správa linuxového serveru» Správa linuxového serveru: Redmine: Thin a Nginx Předchozí kapitola Zpět na obsah Následující kapitola Správa linuxového serveru: Redmine: Thin a Nginx Minulý díl načal nasazení systému pro správu projektů Redmine. Dozvěděli jste se, jak dospět k funkční testovací instanci Redmine. V tomto dílu se dočtete, jak nasadit Redmine produkčně pomocí webových serverů Thin a Nginx. Čtvrtek, 27. říjen 2011 Autor Michal Dočekal Úvod Tento návod je dokončením, které navazuje na předchozí dva díly seriálu. Doporučuji vám si tyto dva díly (1. díl, 2. díl) projít, pokud jste tak ještě neučinili. Webový server Thin Minulý díl skončil funkční instancí Redmine, kterou jste si mohli otestovat pomocí webového serveru Webrick, jenž se ovšem nehodí pro produkční nasazení. Dalším krokem je tedy zprovoznění webového serveru Thin. Jak bylo řečeno v prvním dílu miniseriálu o nasazení Ruby aplikací, Thin je server napsaný v Ruby, zralý pro produkční nasazení (na rozdíl od Webricku, který se doporučuje používat pouze na testování Ruby aplikací). Thin lze propojit s Nginx, což provedeme za chvíli. Získejte tedy oprávnění uživatele Redmine: cd A následně nainstalujte Thin: gem install thin Pro samotné spouštění Thin můžete použít vlastní skript, který Thin nahodí (popř. podle potřeby shodí). Pokud budete používat pokročilejší vlastnosti RVM, můžete specifikovat konkrétní gemset před spuštěním Thinu. Pokud jste postupovali podle návodu, nemusíte si s touto informací dělat starosti. Vytvořte adresář $HOME/bin: cd mkdir bin V tomto adresáři vytvořte skript pojmenovaný redmine thin: nano bin/redmine thin Obsah skriptu může být následující: #!/bin/bash if [ z "$1" ]; then echo 'Specifikujte parametr pro Thin server (napr. "start", "stop" apod.)' 1/5
fi exit 0 [[ s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" cd "$HOME/redmine 1.2.1" thin e production $1 s1 socket "$HOME/redmine.sock" d Tento skript si vylaďte podle libosti. Zejména parametry Thinu, jako např. počet serverů (parametr s) či konkrétní soubor se socketem, přes který bude Thin komunikovat. Socket je rychlejší než komunikace přes síť, proto je lepší používat socket v případě problémů se můžete vrátit k použití sítě a spustit Thin na nějakém portu na místní smyčce (viz minulý díl). Dodávám jen, že Thin mění pojmenování socketu, i když je nastaven pro běh jen jednoho serveru, přidává tam číslo (redmine.0.sock). Zohledněte to pak v konfiguraci Nginx. Následně učiňte skript spustitelným: chmod a+x bin/redmine thin Adresář $HOME/bin můžete zařadit do prohledávací cesty, tedy do proměnné PATH. Do.bashrc uživatele redminetedy přidejte: PATH="$PATH:$HOME/bin" Spusťte Thin pomocí skriptu: $HOME/bin/redmine thin start Následně zkontrolujte, zda byl příslušný socket vytvořen (pozor, chvilku to trvá, zejména na pomalejších serverech, nelekejte se tedy, že se tam soubor hned neobjeví). Pokud ne, podívejte se v adresáři s Redmine do logu, který je umístěn v log/thin.0.log, zda vám nenapoví, kde je problém. Tento soubor pak můžete spouštět s právy roota takto: c '/home/redmine/bin/redmine thin start' Aby se tento skript spustil při startu serveru, nejjednodušší je přidat příkaz k jeho spuštění do /etc/rc.local, ale mnohem čistší řešení je vytvořit pro něj skript v /etc/init.da zařadit ho do příslušné úrovně běhu pomocí update rc.d. Abyste zajistili jeho nepřerušený běh, resp. jeho případný automatický restart, pokud by spadl, můžete použít nástroj Monit. Tento nástroj byl představen ve dvou dílech seriálu (1. díl, 2. díl). Nginx Nyní by vám již měl Redmine běžet a měl by být dostupný na socketu /home/redmine/redmine.sock. Zbývá propojit webový server s tímto socketem. Nainstalujte tedy Nginx: aptitude install nginx Nginx je třeba nakonfigurovat. Ideální je, pokud vám Redmine bude běžet přes zabezpečený protokol HTTPS, k čemuž ovšem potřebujete certifikát, a to ideálně ne self signed (na který jsou prohlížeče v dnešní době již silně alergické), ale certifikát podepsaný od nějaké důvěryhodné certifikační autority. Nechcete li příliš utrácet, můžete použít např. StartSSL nebo CACert.org, které vám vydají certifikát zdarma. Vytvořte tedy konfigurační soubor pro Nginx: 2/5
nano /etc/nginx/sites available/redmine A naplňte jej následujícím obsahem: listen 1.2.3.4:443; server_name jmeno.serveru.cz; client_max_body_size 10M; client_body_buffer_size 128k; ssl on; ssl_certificate /etc/nginx/certifikat.pem; ssl_certificate_key /etc/nginx/klic.pem; ssl_session_cache builtin:1000 shared:ssl:10m; ssl_session_timeout 3m; access_log /var/log/nginx/redmine.access.log; root /home/redmine/redmine 1.2.1/public; location / { proxy_set_header X Real IP $remote_addr; proxy_set_header X Forwarded For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if ( f $request_filename/index.html) { rewrite (.*) $1/index.html break; if ( f $request_filename.html) { rewrite (.*) $1.html break; if (! f $request_filename) { proxy_pass http://backend; break; listen 1.2.3.4:80; rewrite ^(.*) https://$host$1 permanent; Pokud byste přeci jen nechtěli používat zabezpečený přístup ke své instanci Redmine a stačil by vám nešifrovaný protokol HTTP, můžete použít následující konfigurační soubor: listen 1.2.3.4:80; 3/5
server_name jmeno.serveru.cz; client_max_body_size 10M; client_body_buffer_size 128k; access_log /var/log/nginx/redmine.access.log; root /home/redmine/redmine 1.2.1/public; location / { proxy_set_header X Real IP $remote_addr; proxy_set_header X Forwarded For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; if ( f $request_filename/index.html) { rewrite (.*) $1/index.html break; if ( f $request_filename.html) { rewrite (.*) $1.html break; if (! f $request_filename) { proxy_pass http://backend; break; V tomto souboru si určitě upravte všechny potřebné informace jako IP adresy serveru, dále cesty k logům, cestu k Redmine (direktiva root), cestu k socketu nebo socketům, samozřejmě pak také cesty k certifikátům v SSL variantě konfiguračního souboru výše apod. Budete li používat více než jeden běžící server, socketů se vytvoří také více v takovém případě ke všem z nich uveďte cestu: server unix:/home/redmine/redmine.1.sock; server unix:/home/redmine/redmine.2.sock; server unix:/home/redmine/redmine.3.sock; Posledním krokem je "aktivace" konfigurace, resp. vytvoření symbolického odkazu v adresáři /etc/nginx/sites enabled: ln s /etc/nginx/sites available/redmine /etc/nginx/sites enabled/redmine A konečně můžete spustit nakonfigurovaný Nginx: /etc/init.d/nginx start Nyní se přihlaste do Redmine a konfigurujte, vytvářejte projekty, uživatelské účty apod. Připomínám, že výchozím uživatelem je "admin" a heslo k němu je "admin". Opět dodávám, že by bylo vhodné toto heslo urychleně změnit. Doladění konfigurace Redmine 4/5
Na závěr zbývá doladit konfiguraci Redmine, a sice vyřešit rozesílání e mailů. Redmine má velmi propracovaný systém e mailových oznámení, a proto potřebuje přístup k poštovnímu serveru, aby mohl poštu rozesílat. Asi nejjednodušší je použít nástroj sendmailk odesílání pošty, ale můžete použít i klasický SMTP server. Získejte tedy oprávnění uživatele redmine a dostaňte se do adresáře s Redmine: cd ~/redmine 1.2.1 Můžete použít předlohu, configuration.yml.example, a zkopírovat ji do neexistujícího configuration.yml: cp config/configuration.yml.example config/configuration.yml Tento soubor je bohatě komentovaný, varianta se sendmailem je tam naznačena: production: email_delivery: delivery_method: :sendmail Stejně tak varianta s použitím místního poštovního serveru: production: email_delivery: delivery_method: :smtp smtp_settings: address: "localhost" port: 25 K dispozici jsou i varianty s externím poštovním serverem s autentifikací. Pokud budete používat tento soubor jako předlohu, berte na vědomí, že je v něm již doručování e mailů nastaveno (SMTP server s autentifikací), je tedy vhodné tuto konfiguraci najít a upravit (soubor je velký a klíčový odkomentovaný kousíček snadno přehlédnete). Tím je instalace a konfigurace Redmine hotová. Z bezpečnostního hlediska běží Thin a celé Redmine pod separátním, neprivilegovaným účtem redmine. Ke Thinu se pak připojuje Nginx, který také běží pod neprivilegovaným účtem, v Debianu pod účtem www data. S MySQL, Thinem a Nginx jsem se na OpenVZ virtuálním stroji s 256 RAM vešel do 150 MB, i s poštovním serverem. Použil jsem jeden paralelní Thin server, jak jsem naznačil v návodu výše. Předchozí kapitola Zpět na obsah Následující kapitola Přidat téma diskuse Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích najdete v nápovědě. Diskuzi můžete sledovat pomocí RSS kanálu 5/5