Instalace aplikačního serveru JBoss

Tento příspěvek stručně popisuje, jak nainstalovat aplikační server JBoss na server na platformě GNU Linux CentOS 5. Instalované prostředí bude sloužit pro vývoj webových aplikací postavených na jazyku Java.

Instalace JDK

Dřív než se pustíme do instalace samotného aplikačního serveru, musíme mít v systému funkční javu. Je proto potřeba naistalovat Java SE Development Kit (JDK). Já jsem použil verzi Sun JDK, kterou lze získat z nasledující adresy http://java.sun.com/javase/downloads/widget/jdk6.jsp pro JDK 6.0 (vybrat jdk-6u<X>-linux-i586-rpm.bin, kde <X> je číslo posledního update, aktuálně <X>=19) a http://java.sun.com/javase/downloads/index_jdk5.jsp pro JDK 5.0. Variantu JDK od Sun-u (naproti OpenJDK) jsem zvolil na základě dokumentace JBoss AS a také zkušeností některých administrátorů. Nainstalujeme Sun JDK

[root@nps1:~]$ chmod 755 jdk-6u19-linux-i586-rpm.bin
[root@nps1:~]$ ./jdk-6u19-linux-i586-rpm.bin

Můžeme ověřit, že se JDK podařilo naistalovat (instaluje se do /usr/java)

[root@nps1:~]$ java -version
java version "1.6.0_19"
Java(TM) SE Runtime Environment (build 1.6.0_19-b04)
Java HotSpot(TM) Client VM (build 16.2-b04, mixed mode, sharing)

Vytvoříme si symbolické odkazy na javu z důvodu přehlednosti a případných pozdejších změn v administraci JBoss AS (např. změna verze javy, více verzí javy, atd.)

[root@nps1:~]$ mkdir -p /opt/java
[root@nps1:~]$ ln -s /usr/java/jdk1.6.0_19 /opt/java/jdk

Dále budeme potřebovat nastavit hodnoty proměnných pro javu. Můžeme si například v /etc/profile.d/ vytvořit skript java.sh s následujícím obsahem:

[root@nps1:~]$ vim /etc/profiles.d/java.sh
########################
# JAVA variables setup #
########################

JAVA_HOME=/opt/java/jdk
PATH=$PATH:$JAVA_HOME/bin

export JAVA_HOME PATH

přidáme právo pro spouštění a vyexportujeme pro aktualizaci proměnných:

[root@nps1:~]$ chmod 755 /etc/profile.d/java.sh
[root@nps1:~]$ sh /etc/profile.d/java.sh

Instalace JBoss AS

V zásadě máme dvě možnosti instalace. Kompilace ze zdrojových kódů nebo instalace z binárních balíčků. Já jsem zvolil instalaci z binárních balíčků. Balíček si můžeme stáhnout ze stránek projektu na adrese http://www.jboss.org/jbossas/downloads.html. Verzi jsem zvolil 5.1.0 (poslední stable release, verze 6.0.0 byla v té době ve druhé milestone verzi). Vytvoříme si cílový adresář pro JBoss AS, do kterého rozbalíme získaný balíček JBoss AS (zip soubor, jboss-5.1.0.GA.zip)

[root@nps1:~]$ mkdir -p /srv
[root@nps1:~]$ unzip -d /srv jboss-5.1.0.GA.zip

Vytvoříme symlink na kořenový adresář JBoss AS

[root@nps1:~]$ ln -s /srv/jboss-5.1.0.GA /opt/java/jboss

Stejně jako v případě javy, budeme potřebovat nastavit hodnoty proměnných pro JBoss AS. Vytvoříme si tedy skript jboss.sh v /etc/profile.d s následujícím obsahem:

[root@nps1:~]$ vim /etc/profile.d/jboss.sh
############################
# JBoss AS variables setup #
############################

JBOSS_HOME=/opt/java/jboss
PATH=$PATH:$JBOSS_HOME/bin

export JBOSS_HOME PATH

upravíme práva skriptu a aktualizujeme proměnné

[root@nps1:~]$ chmod 755 /etc/profile.d/jboss.sh
[root@nps1:~]$ sh /etc/profile.d/jboss.sh

V této chvíli máme již všechno připraveno pro spuštění JBoss AS. Aplikační server spouštíme skriptem run.sh, který se nachází v $JBOSS_HOME/bin

[root@nps1:~]$ sh $JBOSS_HOME/bin/run.sh

což odpovídá spouštění s konfigurací

[root@nps1:~]$ sh $JBOSS_HOME/bin/run.sh -c default -b 127.0.0.1

Dostupnost si ověříme na URL http://localhost:8080. JBoss AS předvoleně poslouchá jenom na localhost (127.0.0.1). Parametrem -c spouštěcího skriptu určujeme konfiguraci aplikačního serveru. Jednotlivé konfigurace se nacházejí v adresáři $JBOSS_HOME/server. Stručný popis několika základních konigurací nacházejících se v instalačním balíčku je možno najít v online dokumentaci. Parametrem -b určujeme rozsah adres, ze kterých je možno přistupovat na server. Chceme-li povolit přístup na server z libovolné adresy a s konfigurací default, spustíme server příkazem

[root@nps1:~]$ sh $JBOSS_HOME/bin/run.sh -c default -b 0.0.0.0

Aby jsme nespouštěli JBoss AS pod uživatelem root, vytvoříme si pro tuto službu samostatného uživatele a převedeme na něj vlastnická práva souborů aplikace

[root@nps1:~]$ useradd -r jboss
[root@nps1:~]$ chown -Rf /srv/jboss-5.1.0.GA

a nyní spustíme JBoss AS pod uživatelem jboss

[root@nps1:~]$ su - jboss -c $JBOSS_HOME/bin/run.sh

případně s konkrétnimi parametry.

JBoss SysV init

Aby jsme nemuseli spouštět manuálně, vytvoříme si pro JBoss AS spouštecí sysV init skript. Vzorové init skripty pro některé distribuce (Red Hat, Fedora, openSuSE) se již nacházejí v adresáři $JBOSS_HOME/bin. Vzhledem k distribuci použité na našem serveru jsem zvolil variantu pro distribuci Red Hat (soubor init_jboss_redhath.sh). Vzorový init skript zkopírujeme do adresáře /etc/init.d

[root@nps1:~]$ cp $JBOSS_HOME/bin/init_jboss_redhath.sh /etc/init.d/jboss

Náš nový init skript /etc/init.d/jboss ještě upravíme tak, aby odpovídal konfiguraci pro chkconfig. Do „hlavičky“ skriptu doplníme potřebné direktivy (i s křížkem #)

[root@nps1:~]$ vim /etc/init.d/jboss
# chkconfig: 2345 85 15 #runlevely S-priorita K-priorita
# description: JBoss Application Server
# processname: jboss
# pidfile: /var/run/jboss.pid

Dále je potřeba v skriptu upravit hodnoty některých direktiv a jíné doplnit

JBOSS_HOME=${JBOSS_HOME:-"/opt/java/jboss"}
JBOSS_USER=${JBOSS_USER:-"jboss"} #uživatel pod kterým bude služba běžet
JAVAPTH=${JAVAPTH:-"/opt/java/jdk"}
JBOSS_CONF=${JBOSS_CONF:-"default"} #konfiguračny profil
JBOSS_HOST="0.0.0.0" #rozsah adres, ze kterých je možno přistupovat

Zaregistrujeme službu chkconfigem a aktivujeme

[root@nps1:~]$ chkconfig --add jboss (název služby je shodný s názvem init skriptu)
[root@nps1:~]$ chkconfig jboss on

Program chkconfig nám automaticky vytvoří symlinky v příslušných rcX profilech (adresáře /etc/rc[0..6].d) podle hodnot direktivy chkconfig v init skripte. Ověříme

[root@nps1:~]$ chkconfig --list jboss
jboss           0:off   1:off   2:on    3:on    4:on    5:on    6:off

Teď službu JBoss AS spustíme {zastavíme|restartujeme}

[root@nps1:~]$ /etc/init.d/jboss start {stop|restart}

nebo

[root@nps1:~]$ service jboss start {stop|restart}

SSL na straně JBoss AS

Základním případem použití SSL je povolení SSL na straně JBoss AS serveru. V takovém případě budeme přistupovat na web JBoss AS přes protokol HTTPS namísto HTTP. Vzhledem k tomu, že jde o vývojové prostředí, vystačíme si se self-signed certifikátem. Nejdříve si musíme vytvořit úložiště pro uchování páru klíčů a také certifikátu pro JBoss AS server. Pro tento účel použijeme aplikaci keytool, která se nachází v adresáři $JAVA_HOME/bin. Vytvoříme si úložiště (podle nové konvence se používá parametr -genkeypair), které umístíme někam do adresářové struktury dané konfigurace JBoss AS, například do $JBOSS_HOME/server/<konfigurace>/conf/ssl

[root@nps1:~]$ mkdir -p $JBOSS_HOME/server/<konfigurace>/conf/ssl
[root@nps1:~]$ $JAVA_HOME/bin/keytool -genkey -alias <alias> -keyalg RSA -keystore $JBOSS_HOME/server/<konfigurace>/conf/ssl/jboss.keystore

Při vytváření úložište budeme dotázáni na klíč pro úložiště. Dále si vygenerujeme certifikát pro JBoss AS server a uložíme ho do stejného úložiště jako klíče. Při geneování certifikátu budeme dotázáni na některé indetifikační údaje

[root@nps1:~]$ $JAVA_HOME/bin/keytool -export -alias <alias> -keystore $JBOSS_HOME/server/<konfigurace>/conf/ssl/jboss.keystore -file $JBOSS_HOME/server/<konfigurace</conf/ssl/jboss-server.cer

Nakonec upravíme connectory pro JBoss AS web tak, aby bylo možné přistupovat jenom přes HTTPS

[root@nps1:~]$ vim $JBOSS_HOME/server/<konfigurace>/deploy/jbossweb.sar/server.xml
...
<!-- A HTTP/1.1 Connector on port 8080
  <Connector protocol="HTTP/1.1" port="8080" address="${jboss.bind.address}"
       connectionTimeout="20000" redirectPort="8443" />
-->
...
<!-- SSL/TLS Connector configuration using the admin devl guide keystore -->
<Connector protocol="HTTP/1.1" SSLEnabled="true"
       port="8443" address="${jboss.bind.address}"
       scheme="https" secure="true" clientAuth="false"
       keystoreFile="${jboss.server.home.dir}/conf/ssl/jboss.keystore" <!-- cesta k ůložišti cetifikátu a klíče -->
       keystorePass="<heslo_k_ulozisti≫" sslProtocol = "TLS" />
...

Dostupnost JBoss AS ověříme na URL https://<domena_JBoss_AS>:8443.

Instalace dotazníkového serveru LimeSurvey

V dnešním zápisku se zaměřím na zprovoznění LimeSurvey serveru na systému CentOS 5. LimeSurvey je jednou z nejznámnějších open source dotazníkových aplikací. Aplikace je napsána kompletně v PHP. Samotná aplikace vyžaduje pro svůj správný chod několik komponent: SQL databázi (já jsem zvolil MySQL), web server (Apache HTTP server) s podporou PHP a poštovní server (Postfix). Podrobný popis požadavků můžeme najít v dokumentaci na stránkách projektu.

Instalace a konfigurace komponent

Nejdříve naistalujeme jednotlivé komponenty pro LimeSurvey

[root@vserver6:~]$ yum install httpd postfix mysql-server mysql mbstring php php-mbstring php-mysql

Význam jednotlivých komponent pro aplikaci LimeSurvey je zřejmý. Poštovní server Postfix bude sloužit pro odesílaní dotanzíků a pozvánek. Konfiguraci samotného poštovního serveru nemusíme pro naše potřeby ani upravovat, v předvolené konfiguraci Postfix zvládá odesílání zpráv. Na MySQL serveru si vytvoříme nového uživatele (například lime) a novou databázi (například LS_DB) pro naši dotazníkouvou aplikaci

[root@vserver6:~]$ mysql -u root -p <heslo_spravce>
mysql> CREATE USER lime IDENTIFIED BY PASSWORD '<nejake_heslo>';
mysql> CREATE DATABASE IF NOT EXISTS LS_DB;

Takto vytvořený uživatel lime nemá na našem MySQL serveru žádná privilegia a má přístup jenom z localhostu. Omezení pro přístum nám vyhovuje, protože aplikace LimeSurvey bude do databáze přistupovat jenom lokálně a žádné jiné přístupy nejsou požadovány a proto nemusíme ani povolovat port pro MySQL server ve firewallu. Uživateli lime však musíme přidělit privilegia, ale jenom pro databázi, kterou bude obsluhovat, tj. LS_DB

mysql> GRANT ALL ON LS_DB.* TO 'lime'@'localhost' IDENTIFIED BY '<heslo_uzivatele_lime>';

Pro apache server vytvoříme kořenový adresář například v /home/apache kam nakonec naistalujeme aplikaci LimeSurvey

[root@vserver6:~]$ mkdir -p /home/apache

Vzhledem k tomu, že v našem případě se bude na dotazníkový server přistupovat jenom přes HTTPS, musíme si vygenerovat pár klíčů a certfikát pro server, k čemu použijeme utilitku openssl. V našem případě si vystačíme i se self-signed cetifikátem

[root@vserver6:~]$ openssl req -new -x509 -nodes -out cert.pem -keyout key.pem -days 365

Uvedený příkazem jsme si na základě žádosti (req) o vydání certifikátu vygenerovali certifikát podepsaný sám sebou (-out <soubor_s_certifikatem>) a soukromý klíč (-keyout <soubor_se_soukromym_klicem>) s platností jeden rok (-days 365) pro náš dotazníkový server. Při generování certifikátu budeme požádaní o zadání některých identifikačních údajů. Soubor s certifikátem a soukromým klíčem vhodně umístníme a upravíme vlastníka a přístupová práva

[root@vserver6:~]$ mkdir -p /etc/httpd/ssl
[root@vserver6:~]$ mv cert.pem key.pem /etc/httpd/ssl
[root@vserver6:~]$ chown root:apache /etc/httpd/ssl/*.pem
[root@vserver6:~]$ chmod 640 /etc/httpd/ssl/*.pem

Dále si upravíme konfiguraci apache web serveru následovně

[root@vserver6:~]$ vim /etc/httpd/conf/httpd.conf
...
DocumentRoot /home/apache
...
NameVirtualHost *:80
<VirtualHost *:80>
     ServerAdmin admin@domena.com
     DocumentRoot /home/apache/
     RedirectPermanent / https://moje.domena.com
     ServerName moje.domena.com
</VirtualHost>
...
NameVirtualHost *:443
<VirtualHost *:443>
     SSLEngine on
     SSLCertificateFile /etc/httpd/ssl/cert.pem
     SSLCertificateKeyFile /etc/httpd/ssl/key.pem
     DocumentRoot /home/apache/
      ServerName moje.domena.com
</VirtualHost>
...

Z bezpečnostních důvodů aktivujeme direktivu open_basedir, která nám omezí spouštění PHP skriptů jenom na daný adresář a její hodnotu nastavíme na kořenový adresář apache serveru (tj. instalačního adresáře aplikace LimeSurvey)

[root@vserver6:~]$ vim /etc/php.ini
...
open_basedir = /home/apache
...

Rovněž tak si pro PHP upravíme memory limit, který představuje maximální množství paměti, které si může skript alokovat (určíme z dokumentace LimeSurvey, předvolená hodnota je 16M)

[root@vserver6:~]$ vim /etc/php.ini
...
memory_limit = 32M
...

Instalace LimeSurvey

Instalace a základní konfigurace dotazníkového serveru LimeSurvey je poměrně jednoduchá. Nejdřív si stáhneme balíček ze stránek projektu (aktuální verze byla 1.87+, build 8518). Obsah získaného balíčku (po rozbalení se nachází ještě v adresáři limesurvey) umístníme do kořenového adresáře apache web serveru, tj. do /home/apache

[root@vserver6:~]$ tar xvfz limesurvey187plus-build8518-20100323.tar.gz
[root@vserver6:~]$ cp -r limesurvey/* /home/apache/

V našem případě můžeme kopírovat i bez kořenového adrešáře limesurvey, protože nám na serveru bude běžet jenom aplikace LimeSurvey. Teď si musíme upravit několik základních nastavní pro LimeSurvey

[root@vserver6:~]$ vim /home/apache/config.php
...
//typ databáze
$databasetype		=	'mysql';

//umístnění databázového serveru
$databaselocation	=	'localhost';

//název databáze
$databasename		=	'LS_DB';

//název uživatele a heslo pod kterým se budeme přihlašovat na databázový server
$databaseuser		=	'lime';
$databasepass		=	'<heslo_uzivatele_$databaseuser>';

//prefix pro názvy tabulek - můžeme nechat prázdný v případě, že používáme samostatnou databázi pro LimeSurvey
$dbprefix		=	'lime_';

//kořenový URL pro web LimeSurvey - určíme podle umístnění souborů aplikace na serveru
$rooturl		=	"https://{$_SERVER['HTTP_HOST']}";

//umístnění instalace LimeSurvey na serveru
$rootdir		=	dirname(__FILE__);

//název administrátorského účtu a heslo
//je potřeba zadat při instalaci tabulek do databáze (viz níže) a zároveň se
//vytvoří identický administrátorský účet v databázi
$defaultuser		=	'admin';
$defaultpass		=	'<heslo_pro_$defaultuser>';
...

Do webového prohlížeče zadáme URL https://moje.domena.com/admin/install a klikneme na tlačítko „Populate Database“, přičemž se pro autentizaci použijí údaje z konfiguračního souboru ($defaultuser a $defaultpass). Následně si aplikace vytvoří tabulky v databázi, kretou jsme definovali v konfiguračním souboru config.php. Administrátorský účet, který jsme zapisovali do konfiguačního souboru config.php, se používá jenom při instalaci tabulek a na vytvoření identického administrátorského účtu v databázi, který si můžeme kdykoliv změnit a pod kterým se budeme přihlašovat do administrátorského rozhraní aplikace LimeSurvey. Nakonec ještě musíme upravit práva pro adresáře tmp/, upload/ a templates/ v instalačním adresáři aplikace tak, aby do nich web server mohl i zapisovat (nebo můžeme upravit vlastnictví souborů, připadně ACL záznamy)

[root@vserver6:~]$ chown -R root:apache /home/apache/tmp /home/apache/upload /home/apache/templates
[root@vserver6:~]$ chmod -R 775 /home/apache/tmp /home/apache/upload /home/apache/templates

Nakonec zrestartujeme apache web server

[root@vserver6:~]$ service httpd restart

a ověříme dostupnost na URL https://moje.domena.com/. Administrátorské rozhraní se nachází na adrese https://moje.domena.com/admin. V této chvílí již máme připravený dotazníkový server k použití, stačí když se přes administrátorské rozhraní přihlásime na server a můžeme vytvářet dotanzíky a uživatele.

Aplikace disponuje množstvím voleb pro tvorbu dotazníků a jejich správu, obsahuje také několik vestavěných šablon a také mnohojazyčnou podporu včetně češtiny. Potřebujete-li zpracovat nějaký dotazník nebo uďelat půzkum prostřednictvím internetu je LimeSurvey určitě to pravou volbou. Samorejmostí je také tvorba různých výtupních materiálů, například grafů, tabulek a různych dalších statistik. Aplikace je vhodná jak pro osobní použití tak pro použití ve firemním prostředí.