přejít na obsah přejít na navigaci

Linux E X P R E S, Správa linuxového serveru: Nasazení aplikace Redmine

Správa linuxového serveru: Nasazení aplikace Redmine

debain_notext.png

Minulý díl se věnoval nasazení Ruby aplikací obecně. Tento díl vám vše ukáže na konkrétním příkladu, a sice na nasazení systému pro správu projektů Redmine.


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.

Nahoru

Příspěvky

Správa linuxového serveru: Nasazení aplikace Redmine
faha 16. 11. 2011, 15:38:00
Odpovědět  Odkaz 
Diky za clanek.
Jeste pridavam odkaz pro "lenochy" na instalator.

http://bitnami.org/stack/redmine
Nastaveni Apache pro redmine
Antonin Marek 27. 03. 2012, 18:59:35
Odpovědět  Odkaz 
Zdravim vsechny,

uz nekolik hodin si tu lamu hlavu nad tim, jak nakonfigurovat apache2 pro to aby mi fungoval redmine na localhostu pod portem 3000. Nevim co delam spatne a precetl jsem uz tunu navodu, ale asi to uz dnes nejsem schopen vstrebat. Nemohl by nekdo prosim poradit jak dokonfigurovat apache krok za krokem... umisteni mam nasledujici /var/www/redmine/

v httpd.conf jsem zkousel neco jako nasledujici zapis ale zrejme spatne.


ServerName 127.0.0.1
#ServerAlias redmine
DocumentRoot /var/www/redmine/public/

ServerAdmin toncek.marku@gmail.com
LogLevel warn
#ErrorLog /var/log/apache2/redmine_error
#CustomLog /var/log/apache2/redmine_access combined


Options Indexes ExecCGI FollowSymLinks
Order allow,deny
Allow from all
AllowOverride all





kompletni konf je nasledujici :

ServerTokens OS
ServerRoot "/etc/httpd"
PidFile run/httpd.pid
Timeout 60
KeepAlive Off
MaxKeepAliveRequests 100
KeepAliveTimeout 15


StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 256
MaxRequestsPerChild 4000



StartServers 4
MaxClients 300
MinSpareThreads 25
MaxSpareThreads 75
ThreadsPerChild 25
MaxRequestsPerChild 0


Listen 80

LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule expires_module modules/mod_expires.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule headers_module modules/mod_headers.so
LoadModule usertrack_module modules/mod_usertrack.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule dav_module modules/mod_dav.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule info_module modules/mod_info.so
LoadModule dav_fs_module modules/mod_dav_fs.so
LoadModule vhost_alias_module modules/mod_vhost_alias.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule speling_module modules/mod_speling.so
LoadModule userdir_module modules/mod_userdir.so
LoadModule alias_module modules/mod_alias.so
LoadModule substitute_module modules/mod_substitute.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule cache_module modules/mod_cache.so
LoadModule suexec_module modules/mod_suexec.so
LoadModule disk_cache_module modules/mod_disk_cache.so
LoadModule cgi_module modules/mod_cgi.so
LoadModule version_module modules/mod_version.so


LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-3.0.11/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-3.0.11
PassengerRuby /usr/bin/ruby

User apache
Group apache

ServerAdmin root@localhost

UseCanonicalName Off

DocumentRoot "/var/www/html"


Options FollowSymLinks
AllowOverride None




Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all




UserDir disabled


DirectoryIndex index.html index.html.var

AccessFileName .htaccess


Order allow,deny
Deny from all
Satisfy All


TypesConfig /etc/mime.types

DefaultType text/plain


# MIMEMagicFile /usr/share/magic.mime
MIMEMagicFile conf/magic


HostnameLookups Off

ErrorLog logs/error_log

LogLevel warn

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent

CustomLog logs/access_log combined

ServerSignature On

Alias /icons/ "/var/www/icons/"


Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all



# Location of the WebDAV lock database.
DAVLockDB /var/lib/dav/lockdb


ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"


AllowOverride None
Options None
Order allow,deny
Allow from all


IndexOptions FancyIndexing VersionSort NameWidth=* HTMLTable Charset=UTF-8

AddIconByEncoding (CMP,/icons/compressed.gif) x-compress x-gzip

AddIconByType (TXT,/icons/text.gif) text/*
AddIconByType (IMG,/icons/image2.gif) image/*
AddIconByType (SND,/icons/sound2.gif) audio/*
AddIconByType (VID,/icons/movie.gif) video/*

AddIcon /icons/binary.gif .bin .exe
AddIcon /icons/binhex.gif .hqx
AddIcon /icons/tar.gif .tar
AddIcon /icons/world2.gif .wrl .wrl.gz .vrml .vrm .iv
AddIcon /icons/compressed.gif .Z .z .tgz .gz .zip
AddIcon /icons/a.gif .ps .ai .eps
AddIcon /icons/layout.gif .html .shtml .htm .pdf
AddIcon /icons/text.gif .txt
AddIcon /icons/c.gif .c
AddIcon /icons/p.gif .pl .py
AddIcon /icons/f.gif .for
AddIcon /icons/dvi.gif .dvi
AddIcon /icons/uuencoded.gif .uu
AddIcon /icons/script.gif .conf .sh .shar .csh .ksh .tcl
AddIcon /icons/tex.gif .tex
AddIcon /icons/bomb.gif core

AddIcon /icons/back.gif ..
AddIcon /icons/hand.right.gif README
AddIcon /icons/folder.gif ^^DIRECTORY^^
AddIcon /icons/blank.gif ^^BLANKICON^^

DefaultIcon /icons/unknown.gif

ReadmeName README.html
HeaderName HEADER.html

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

AddLanguage ca .ca
AddLanguage cs .cz .cs
AddLanguage da .dk
AddLanguage de .de
AddLanguage el .el
AddLanguage en .en
AddLanguage eo .eo
AddLanguage es .es
AddLanguage et .et
AddLanguage fr .fr
AddLanguage he .he
AddLanguage hr .hr
AddLanguage it .it
AddLanguage ja .ja
AddLanguage ko .ko
AddLanguage ltz .ltz
AddLanguage nl .nl
AddLanguage nn .nn
AddLanguage no .no
AddLanguage pl .po
AddLanguage pt .pt
AddLanguage pt-BR .pt-br
AddLanguage ru .ru
AddLanguage sv .sv
AddLanguage zh-CN .zh-cn
AddLanguage zh-TW .zh-tw

LanguagePriority en ca cs da de el eo es et fr he hr it ja ko ltz nl nn no pl pt pt-BR ru sv zh-CN zh-TW

ForceLanguagePriority Prefer Fallback

AddDefaultCharset UTF-8

AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz

AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl .crl

AddHandler type-map var

AddType text/html .shtml
AddOutputFilter INCLUDES .shtml


Alias /error/ "/var/www/error/"




AllowOverride None
Options IncludesNoExec
AddOutputFilter Includes html
AddHandler type-map var
Order allow,deny
Allow from all
LanguagePriority en es de fr
ForceLanguagePriority Prefer Fallback






BrowserMatch "Mozilla/2" nokeepalive
BrowserMatch "MSIE 4\.0b2;" nokeepalive downgrade-1.0 force-response-1.0
BrowserMatch "RealPlayer 4\.0" force-response-1.0
BrowserMatch "Java/1\.0" force-response-1.0
BrowserMatch "JDK/1\.0" force-response-1.0

BrowserMatch "Microsoft Data Access Internet Publishing Provider" redirect-carefully
BrowserMatch "MS FrontPage" redirect-carefully
BrowserMatch "^WebDrive" redirect-carefully
BrowserMatch "^WebDAVFS/1.[0123]" redirect-carefully
BrowserMatch "^gnome-vfs/1.0" redirect-carefully
BrowserMatch "^XML Spy" redirect-carefully
BrowserMatch "^Dreamweaver-WebDAV-SCM1" redirect-carefully


ServerName 127.0.0.1
#ServerAlias redmine
DocumentRoot /var/www/redmine/public/

ServerAdmin toncek.marku@gmail.com
LogLevel warn
#ErrorLog /var/log/apache2/redmine_error
#CustomLog /var/log/apache2/redmine_access combined


Options Indexes ExecCGI FollowSymLinks
Order allow,deny
Allow from all
AllowOverride all

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss



 
 

Top články z OpenOffice.cz