Redmine
Redmine je svobodný (GNU GPLv2) správce projektů, systém pro sledování chyb (bug tracker), wiki, diskusní fórum, kalendář, vše integrováno v jednom komplexním balíčku. Integrace SCM je zde samozřejmostí. Lze jej použít pro usnadnění vývoje softwaru, ale také jako aplikaci pro správu projektů obecně, nikoliv nezbytně jen těch softwarových. Umí dobře zastoupit groupware nebo zastat funkci osobního managementu. Umí dokonce i generovat Ganttův diagram. Pokud byste měli zájem o osobní management dle oblíbené metodiky GTD, Redmine vám možná nebude úplně vyhovovat – v takovém případě se můžete podívat na jinou Ruby on Rails aplikaci – Tracks. Ale zpět k Redmine. Redmine je modulární, je tedy možné vytvářet moduly rozšiřující jeho funkčnost nebo použít některé z již vytvořených modulů.
Vývoj aplikace je spravován pomocí Redmine – chcete-li se tedy podívat na běžící instanci, stačí se podívat na web projektu. Demo k vyzkoušení je pak k dispozici na subdoméně.
V tomto dílu seriálu předpokládám, že znáte obsah minulého dílu, kde najdete obecné informace o nasazování Ruby aplikací na server. Na tyto informace se budu odkazovat, resp. budu předpokládat, že je znáte. Stejně tak předpokládám, že distribucí, kterou na serveru používáte, je Debian v aktuální verzi (tj. Squeeze). V případě jiné distribuce si budete muset některé příkazy upravit.
Předesílám, že vzhledem k obsáhlosti je návod rozdělený na dva díly. Tento díl končí funkční testovací instancí Redmine, následující díl pak objasní produkční nasazení pomocí Thinu a Nginx.
Vytvoření uživatelského účtu a zprovoznění RVM
Jako první vytvořte uživatelský účet, pod kterým bude Redmine běžet:
adduser redmine
Poté se ujistěte, že máte k dispozici SCM nástroj Git, dále nástroj curl
a nástroje pro kompilaci:
aptitude install git curl build-essential
Nyní získejte oprávnění uživatele Redmine. Jste-li root, můžete provést:
su redmine - cd
Ujistěte se, že soubor .bashrc
existuje v domovském adresáři:
touch ~/.bashrc
Náhledem do dokumentace se ujistěte, že následující příkaz pro instalaci RVM je správně (mohl se změnit), a proveďte jej:
bash < <(curl -s https://rvm.beginrescueend.com/install/rvm)
Nyní byste měli mít k dispozici RVM nainstalované pod vaším redmine
uživatelským účtem. RVM je třeba obvykle ještě „aktivovat“ nastavením příslušných systémových proměnných, což lze provést příkazem, který vám RVM po instalaci vypíše, spolu s řadou informací, které vám doporučuji projít si. Tento příkaz si raději také ověřte:
[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm"
RVM vám doporučí instalovat pro jednotlivé Ruby interprety i určité balíčky. Opět doporučuji řídit se instrukcemi, jež vám RVM po instalaci poskytne. Uvádím nicméně seznam balíčků, který jsem obdržel já na Debianu Squeeze:
aptitude install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion
Tyto balíčky je třeba nainstalovat před samotnou instalací (resp. kompilací) Ruby interpretu (viz níže), jinak vám instalace dalších komponent bude dělat problémy. V takovém případě proveďte opětovnou rekompilaci interpretu poté, co balíčky nainstalujete.
Instalace Ruby interpretu a potřebných komponent
Potřebnou verzi Ruby a příslušných komponent naleznete v přehledové tabulce v oficiálním návodu pro instalaci Redmine. V době psaní článku byl potřebný Ruby interpret pro aktuální verzi Redmine (1.2.1) buď 1.8.6, nebo 1.8.7. Vyberte si tedy a nainstalujte příslušný interpret:
rvm install 1.8.7
Tuto verzi interpretu „aktivujte“ a nastavte jako výchozí:
rvm use 1.8.7 --default
Mezi další potřebné komponenty patří jednoznačně Ruby framework Ruby on Rails. Ten si ovšem Redmine tahá s sebou, pokud jej instalujete z oficiálního tarballu. Používáte-li verzi ze SCM, budete muset Ruby on Rails nainstalovat ručně. V opačném případě vám postačí nainstalovat Rack, i18n a RubyGems (viz níže):
gem install rack -v=1.1.1 gem install i18n -v=0.4.2
Nyní je třeba vyřešit problém s RubyGems, který musí odpovídat příslušné verzi Rails frameworku. Jestliže instalujete aktuální verzi (1.2.1), která vyžaduje Rails 2.3.11, pak nezapomeňte nainstalovat RubyGems verze nižší než 1.7.0:
rvm rubygems 1.6.0
V případě, že používáte starší Rails 2.3.5, musí být verze RubyGems nižší než 1.5.0.
Používáte-li Redmine ze SCM a nikoliv z oficiálního balíčku, nainstalujte Ruby on Rails v potřebné verzi. Potřebnou verzi zjistíte z přehledové tabulky, na kterou jsem vás odkázal výše. V době psaní článku to byla verze 2.3.11, kterou byste nainstalovali takto:
gem install rails -v=2.3.11
Nezapomeňte zohlednit problém s RubyGems popsaný výše a nainstalujte jeho správnou verzi, jinak při inicializaci databáze uvidíte jen chybové hlášky.
Tím je instalace potřebných komponent hotová.
Zprovoznění databáze
Redmine umí pracovat s MySQL, PostgreSQL a SQLite. Sami zvažte, jakou databázi chcete na server nasadit (pokud vůbec nějakou). Mám zkušenost, že výchozí instalace MySQL na Debianu zabírá díky výchozímu použití InnoDB přes 100 MB RAM. Používáte-li virtuální stroj s malou RAM, můžete si pomoci vypnutím enginu InnoDB, a sice úpravou /etc/mysql/my.cnf
, kam přidejte řádku s direktivou skip-innodb
. PostgreSQL je ve výchozím nastavení paměťově šetrnější. Oba DBMS je však možné dodatečně vyladit a přidělit jim tolik paměti, kolik chcete nebo kolik máte k dispozici. Pro optimalizaci nastavení PostgreSQL doporučuji seriál Optimalizace PostgreSQL. Postgresu jsem se věnoval po stránce instalace a základů jeho správy i já v tomto seriálu (první díl, druhý díl).
Osobně používám Redmine na Postgresu, avšak vzhledem k tomu, že oficiální dokumentace upřednostňuje MySQL, a také vzhledem k tomu, že MySQL jsem se v tomto seriálu věnoval spíše méně, v tomto návodu upřednostním MySQL. Ujistěte se tedy, že máte nainstalovaný MySQL server:
aptitude install mysql-server
Pokud jej budete instalovat takto z balíčku, budete vyzváni k zadání rootovského hesla pro MySQL. I když je možné ponechat heslo prázdné, rozhodně jej důrazně doporučuji nastavit.
Pro lepší a rychlejší interakci s databází MySQL je třeba nainstalovat příslušný Ruby balíček pro práci s MySQL. Ještě před tím, než se do jeho instalace pustíte, nainstalujte hlavičkové soubory MySQL klienta (bez toho se kompilace příslušného gemu nezdaří):
aptitude install libmysqlclient-dev
Poté jako uživatel redmine
proveďte instalaci gemu MySQL:
gem install mysql
Chcete-li použít jiný databázový server, nahlédněte do instalační příručky Redmine, jsou tam podrobné informace, jak databázi nastavit.
Vytvoření databáze a databázového uživatele
Spusťte MySQL konzoli a přihlaste se jako root:
mysql -u root -p
Následně vytvořte databázi s kódováním UTF-8 a českým porovnáváním:
CREATE DATABASE `redmine` DEFAULT CHARACTER SET utf8 COLLATE utf8_czech_ci;
Vytvořte uživatele s příslušným (pokud možno silným) heslem:
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'heslo';
A konečně, přidělte uživateli všechna práva pro tuto databázi:
GRANT ALL PRIVILEGES ON `redmine`.* TO 'redmine'@'localhost';
Instalace Redmine
Stáhněte si aktuální verzi Redmine a přeneste ji na server (nebo použijte textový prohlížeč Lynx či wget přímo na serveru). Balíček následně rozbalte a vstupte do nově vytvořeného adresáře s aplikací:
tar xvf redmine-1.2.1.tar.gz cd redmine-1.2.1
Nyní je třeba Redmine propojit s vámi používanou databází. Vytvořte tedy konfigurační soubor config/database.yml
s následujícím obsahem (kde samozřejmě upravíte název databáze, uživatelské jméno a heslo):
production: adapter: mysql database: redmine host: localhost port: 3306 username: redmine password: heslo
Můžete také použít šablonu config/database.yml.example
a tu upravit.
Nyní vygenerujte „session store secret“:
rake generate_session_store
A konečně, inicializujte databázi a nechte vytvořit příslušné tabulky v rámci databázové migrace:
RAILS_ENV=production rake db:migrate
Objeví-li se chyby, zkontrolujte práva k databázi. Následující krok sice není povinný, ale je důrazně doporučený, jelikož databázi naplní výchozími daty, jako jsou role, oprávnění apod. (bez tohoto kroku budete mít opravdu „holý“ Redmine):
RAILS_ENV=production rake redmine:load_default_data
V tuto chvíli můžete konečně ověřit funkčnost instalace Redmine spuštěním webového serveru Webrick:
ruby script/server webrick -e production
Server by se měl spustit na portu 3000
a konzolový výpis by měl vypadat takto:
=> Booting WEBrick => Rails 2.3.11 application starting on http://0.0.0.0:3000 => Call with -d to detach => Ctrl-C to shutdown server [2011-10-15 16:40:50] INFO WEBrick 1.3.1 [2011-10-15 16:40:50] INFO ruby 1.8.7 (2011-06-30) [i686-linux] [2011-10-15 16:40:50] INFO WEBrick::HTTPServer#start: pid=32709 port=3000
Webový server běží na všech přidělených IP adresách, takže můžete Redmine vyzkoušet, jestli se nezobrazí jen „bílá obrazovka smrti“. Pokud Redmine běží, server shoďte a postupujte dál. Pokud ne, všimněte si chybové hlášky a pokuste se problém vyřešit. Zejména si znovu projděte výše uvedené instrukce, zda jste provedli opravdu vše, zda databáze funguje apod.
Pokud byste se chtěli přihlásit, vězte, že výchozí uživatel je „admin“ a heslo je (překvapivě) také „admin“. Jako správcům vám, doufám, nemusím zdůrazňovat, abyste přinejmenším heslo urychleně změnili.
Tímto bych tento díl ukončil. Příště se budete moci dozvědět, jak nainstalovat Thin a Nginx a připravit je pro produkční nasazení Redmine na externí IP adrese.