Jako firma zabývající se vývojem zakázkového software a outsourcingem, jsme potřebovali vytvořit intranet pro naše zákazníky a partnery. Ten se skládá z různých propojených aplikací. Tyto aplikace musí mít jednotný vzhled, jednotné přístupové konto a omezování podle přístupových práv.
Narazili jsme tedy na problém integrace několika webových aplikací:
- Bugzilla
- TWiki
- Subversion
- Insurrection
- WebSVN
- ViewVC
- Continuum
- webmail
- a další
Integraci jsme prováděli na těchto úrovních:
- běh na jedné adrese
- ověřování uživatelů a centrální databáze
- jednotný vzhled a jednotné menu dle přístupových práv
Jednotlivé aplikace jsou psány v různých jazycích a používají různé šablonovací systémy.
Běh na jedné adrese
Pro toto má apache velmi silnou podporu – od aliasů, mod_rewrite, proxy pro přesměrování na jiný webserver až po instalaci aplikace do vlastního podadresáře.
Ověřování uživatelů a centrální databáze
Pro ověřování uživatelů jsme použili ověřování ve webovém serveru apache. Pro centrální databázi uživatelů používáme replikovaný OpenLDAP. Konfigurace apache tedy vypadá takto:
<Location /> AuthLdapEnabled on AuthLDAPURL "ldaps://server1:636 server2:636/dc=firma,dc=cz?uid,mail,cn?" AuthLDAPGroupAttribute memberUid AuthLDAPGroupAttributeIsDN off AuthLDAPRemoteUserIsDN off AuthType Basic AuthName "Intranet" require group cn=wiki,ou=groups,dc=firma,dc=cz Satisfy all </Location>
Důležité je ?uid,mail,cn?. To zajišťuje, že tyto atributy budou exportované pro jednotlivé moduly ve webovém serveru (CGI moduly, PHP, …) jako AUTHENTICATE_UID, AUTHENTICATE_MAIL a AUTHENTICATE_CN, tedy uživatelské jméno (uid), email (mail), a celé jméno uživatele (cn). Je pak možné nastavit v bugzille od verze 2.20, aby tyto informace přebírala a zobrazovala. Tímto způsobem je možné nastavit (bugzilla, všechny SVN klienti, TWiki) nebo upravit (MediaWiki, …) i všechny další programy, které chceme integrovat.
Přístupová práva jsou určována členstvím ve skupině pro danou aplikaci – např. require group cn=bugzilla,ou=groups,dc=firma,dc=cz.
Pro správu LDAP databáze používáme program GOSA.
Jednotný vzhled a jednotné menu dle přístupových práv
Každá stránka by měla mít jednotný vzhled. Lze upravit všechny aplikace a zde přímo přidat společnou hlavičku/patičku – není možné použít vložení nějakého souboru, protože každá aplikace je psána jinou technologií. Pokud tedy chcete častěji společné části upravovat nebo je mít vytvářené dynamicky dle práv uživatele, narazíte na problémy. My jsme vše vyřešili filtrem SSI. Do šablon jednotlivých aplikací jsme přidali <–#include virtual="/pub/virtual/header/" –>. Pak jsme nastavili apache, aby toto nahradil obsahem dané stránky. Podpora filtrů je podporována až od apache verze 2.0.
Pokud ovšem chcete vkládané části vytvářet pomocí PHP, narazíte na problém. Pokud je PHP stránka vkládána pomocí SSI, interpretr PHP havaruje. Řešením je nevolat PHP jako apache modul, ale jako CGI skript. Abychom zabránili SSI úpravě binárním souborům nebo obsahu SVN repository (a tím způsobili poškození souboru) je nastaveno, že se má SSI aplikovat jen pro konkrétní typy souborů (text/html, text/xhtml, …) a rozhodně se nemají aplikovat na SVN repository (proto specifikujeme seznam aplikací).
Alias /pub/virtual/header/ /www/pub/virtual/header/index.html Alias /pub/virtual/footer/ /www/pub/virtual/footer/index.html ScriptAlias /pub/virtual/menu/ /www/pub/virtual/menu/index.cgi <Location ~ "^(/websvn/|/bugz/|/pub/|/webcam/|/mrtg/|/wiki/|/browse/)"> AddOutputFilterByType INCLUDES text/html text/xhtml multipart/x-mixed-replace application/xml Options +Includes AcceptPathInfo On </Location>