Hledal jsem komunitní portál. Podmínky byly tyto: open-source licence (s preferencí GNU GPL), fungování pod www serverem Apache s databází MySQL, PostgreSQL nebo FirebirdSQL; "hezké" odkazy. Našel jsem několik kandidátů: XOOPS, PHP-Nuke a Drupal, z nichž mě nejvíce zaujal právě třetí jmenovaný. Podívejme se na něj.
Budeme potřebovat server Apache s moduly mod_php a mod_rewrite, databázový server MySQL nebo PostgreSQL a trošku času.
Apache a PHP
Provedeme instalaci webového serveru Apache 2.0 a modulu PHP 4.x pro Mandrakelinux. Je to snadné a rychlé, binární balíčky obsahují vše potřebné a jsou přednastavené - šetříme tím čas. Napíšeme tedy
urpmi apache2 apache2-mod_php php-pgsql php-pear
a poté nastartujeme server pomocí service httpd start. Prohlížečem ověříme, jestli je spuštěn: http://localhost.
Apache Advanced Extranet Server (advx) je speciální distribuce serveru Apache, která je použita v Mandrakelinuxu. Tak proč ji nepoužít? Vytvoříme si virtuální doménu www.drupal.lan a na ní nastavíme portál Drupal. Pro detailní popis všech zde probíraných nastavení zamiřte své prohlížeče na dokumentaci serveru nacházející se v balíčku apache2-manual.
Celé nastavení spočívá ve vložení několika řádků do souboru /etc/httpd/conf/vhosts/Vhosts.conf. Tuto konfiguraci uvádím v rámečku.
DocumentRoot /var/www/drupal
ServerName www.drupal.lan
AllowOverride All
Order allow,deny
Allow from all
]]>
Poté stačí jen restartovat server (service httpd restart).
Drupal
Drupal můžeme také nainstalovat z balíčku (urpmi drupal), ale jelikož není vždy k nejnovější verzi připraven, můžeme provést instalaci z tarballu. Stáhneme jej z domovské stránky a rozbalíme obsah do /var/www/drupal. V případě instalace z binárního balíčku musíme přesunout adresář /var/www/html/drupal do správného umístění.
Nastavme nyní správného vlastníka:
chown -R apache.apache /var/www/drupal
a vše je připraveno ke konfiguraci Drupalu. Je to hračka, protože stačí jen nastavit PHP a připojení k databázi. Konfigurace PHP spočívá v editaci souboru /etc/php.ini a nastavení voleb session.save_handler user a session.cache_limiter none.
Konfigurace portálového systému Drupal je pak stejně snadná. Editace souboru /var/www/drupal/includes/conf.php - to je vše. Podle zvolené databáze stačí editovat jeden řádek. Pro PostgreSQL by to bylo: pgsql://drupal:heslo@localhost/drupal. Druhým parametrem, který musíme nastavit, je adresa celého portálu: $base_url = "http://www.drupal.lan".
V mém případě jsem virtuální server vytvořil ve firemní síti. Je tedy nutné buď přidat záznam do lokálního DNS serveru, nebo modifikovat /etc/hosts. Vybral jsem druhou možnost a přidal jsem do tohoto souboru řádek 127.0.0.1 www.drupal.lan. V případě, že chcete Drupal nasadit do ostrého provozu, stačí u svého poskytovatele nasměřovat doménu (a také místo www.drupal.lan použít správné jméno).
PostgreSQL
Drupal spolupracuje s dvěma databázovými servery, MySQL a PostgreSQL. Jelikož MySQL je jasně nejpoužívanějším databázovým serverem pro internetové aplikace, budeme se nejprve věnovat jeho velkému bratříčku.
Stažení a nainstalování balíčku je snadná záležitost, v případě Mandrakelinuxu provedeme
urpmi postgresql postgresql-server postgresql-pl
Předem upozorňuji, že je potřeba také druhý balíček obsahující jazyk pro uložené procedury, Drupal jej vyžaduje. Doporučuji také instalaci balíčku postgresql-docs, jenž obsahuje množství podrobné dokumentace, kterou najdete v /usr/share/doc/postgresql-docs. Instalace pomocí kompilace zdrojových kódů je dobře popsána v dokumentaci, a tak se jí nebudu věnovat a přistoupíme rovnou k nastavení.
Balíček pro Mandrakelinux (stejně tak jako binární balíček pro většinou jiných distribucí) po instalaci vytvořil automaticky uživatele postgres, vytvořil základní databázi (v terminologii PostgreSQL je to database cluster) v adresáři /var/lib/pgsql/data, přidělil správného vlastníka vytvořenému adresáři a nakopíroval startovací skripty pro databázový démon.
Nám zbylo jen pár kroků: spustit server a vytvořit pro Drupal databázi. První krok obstará příkaz service postgresql start a ten druhý je také jednoduchý, ale pro jistotu jej rozepíšu do tří příkazů. Jelikož je přihlášení uživatele postgres do systému z bezpečnostních důvodů zakázáno, musíme se nejprve přihlásit jako superuživatel a teprve pak provést změnu na tohoto speciálního uživatele příkazem su postgres.
Teprve pod tímto uživatelem je totiž možno manipulovat s databází (ono by to šlo pomocí superuživatele, ale toto se obecně nedoporučuje a ani to ve standardní konfiguraci nejde). Nyní vytvoříme (databázového) uživatele drupal příkazem createuser -A -d -P drupal. Díky parametru P se nás program zeptá na heslo. Zvolme tedy libovolné (rozumné) heslo.
V žádném případě nenastavujte heslo pro databázi Drupalu stejné, jako je heslo superuživatele celého systému. Konfigurační soubor musí být čitelný pro uživatele, pod kterým běží webový server. V tomto souboru je napsáno heslo v čisté (nezakódované) formě a potencionální útočník by jistě vyzkoušel toto heslo použít k získání plného přístupu.
Druhým a posledním krokem je vytvoření databáze. Obstará to program createdb:
createdb -O drupal drupal
Parametr O nastavuje vlastníka databáze na uživatele drupal, což je nejsnazší a nejrychlejší řešení, jak povolit přístup do právě vytvořené databáze. Korektnější by bylo vytvořit databázi a tabulky pod jiným účtem (např. postgres) a uživateli drupal jen přidělit práva (SQL příkaz GRANT), ale pro účely internetové aplikace se obvykle volí první zmíněné řešení.
Ještě jako uživatel postgres provedeme dva důležité kroky. Prvním je změna hesla tohoto superuživatele. Připojíme se pomocí psql template1 k systémové databázi a provedeme SQL příkaz
ALTER USER postgres PASSWORD 'heslo';
Kdykoliv budeme potřebovat provést zásah na serveru (např. nainstalovat novou databázi, vytvořit dalšího uživatele a podobně), použijeme superuživatele postgres a toto heslo.
Na změnu hesla k účtu postgres nezapomínejte! Prvním pokusem potencionálního útočníka je na databázovém serveru test, jestli administrátor nezapomněl nastavit heslo. Některé databáze po nainstalování heslo vůbec nemají, jiné požívají předem známá hesla (např. sysdba, dba, masterkey, password a podobně).
Druhým krokem je aktivace jazyka PL/pgSQL. Aby byla zachována kompatibilita se serverem MySQL, používá Drupal uložené procedury k simulaci některých volání MySQL. Aktivaci podpory jazyka provedeme příkazem createlang plpgsql drupal (opět jako uživatel postgres).
Nyní se odhlasme z účtu postgres a vytvořme databázi. Abychom vůbec mohli na serveru pracovat (a něco vytvářet), musíme se samozřejmě připojit. A připojení předchází autentizace. Standardně je PostgreSQL nastaven v Mandrakelinuxu tak, že přijímá pouze spojení z lokálního počítače a přístup povolí jen uživatelům se stejným jménem (ident), jako je uživatelské jméno v databázi.
Pokud bychom se nyní pokusili k serveru připojit, zřejmě bychom obdrželi hlášku psql: FATAL: IDENT authentication failed for user "drupal". Máme dvě možnosti: a) vytvořit systémového uživatele drupal a připojit se k databázi jako tento uživatel; b) povolit přihlášení libovolného lokálního systémového uživatele pod heslem.
Druhý krok zajistíme snadno - editací /var/lib/pgsql/data/pg_hba.conf a vložením řádků:
local all all password host all all 127.0.0.1 255.255.255.255 password
Nezapomeneme restartovat server: service postgresql restart. Pokud nechcete vůbec ověřovat hesla (a povolit tak libovolnému uživateli, aby se připojil bez hesla), stačí místo password uvést volbu trust.
Ať jste zvolili první, nebo druhé řešení, připojení je už stejné: psql drupal drupal. Program psql je standardní SQL konzolí relačního databázového systému PostgreSQL, dva parametry uvedené v příkazu specifikují databázi, respektive uživatele pro připojení. Program se zeptá na heslo a v případě správného zadání zobrazí uvítací text.
Vidíme, že připojení funguje. Můžeme se zatím odhlásit pomocí [Ctrl+d] nebo příkazem \q. Jsme skoro u konce. Vytvoření databáze provedeme v adresáři /var/www/drupal/database pomocí
psql -f database.pgsql drupal drupal
Přes konzoli "přeletí" spoustu hlášení, ověřte, že žádné z nich neobsahuje slovo "ERROR".
Editujeme ještě soubor /var/lib/pgsql/data/postgresql.conf a zapneme volbu tcpip_socket = on. Restartujeme server. Vivat! Funguje nám korektně nakonfigurovaný databázový server pro portálový systém Drupal.
MySQL
Instalaci Postgresu jsem propsal detailně, o to stručnější budu u používanější varianty - MySQL. Opět jej nainstalujeme z binárního balíčku s názvem MySQL (pozor na velikost písmen). K dispozici jsou dvě verze: MySQL a MySQL-Max. Ta druhá má v sobě zakompilovanou podporu pro InnoDB tabulky, které ovšem Drupal nevyužije, takže je lepší nainstalovat variantu první. V opačném případě doporučuji nakonfigurovat server tak, aby vůbec nepodporoval InnoDB - nezabírá potom tolik paměti.
Binární balíčky automaticky nainstalují základní databázový prostor, takže se můžeme věnovat pouze nastavení uživatelských účtů. MySQL totiž v základu povolí připojení pro uživatele root a anonymního uživatele bez hesla - a to rozhodně není dobrá politika. Připojíme se tedy k databázi pomocí mysql -u root a provedeme nastavení hesla pomocí SQL příkazu
UPDATE mysql.user SET Password = PASSWORD('heslo') WHERE User='root';
Anonymního uživatele doporučuji prostě smazat
DELETE FROM mysql.user WHERE User = '';
Po těchto příkazech buď restartujte server, nebo napište příkaz FLUSH PRIVILEGES.
Nyní se vrhneme na vytvoření účtu pro Drupal. Je to velmi snadné. Pokud jste se již odpojili od databáze, tak musíte k příkazu mysql -u root přidat ještě parametr -p, protože jinak by se vás klient neptal na heslo a připojování by skončilo neúspěchem. Pakliže jste (ještě) připojeni na konzoli, přidejte uživatele tímto SQL řetězcem:
GRANT ALL PRIVILEGES ON *.* TO 'drupal'@'localhost' IDENTIFIED BY 'heslo' WITH GRANT OPTION;
Vytvoření databáze proběhne příkazem
mysqladmin -u drupal -p create drupal
který provedeme již v shellu. Nahrání struktury pak pomocí
mysql -u drupal -p drupal < database.mysql
v adresáři drupal/database.
Nastavení portálu
Do prohlížeče napišme adresu www.drupal.lan, měli bychom spatřit uvítací obrazovku portálu Drupal. První uživatelské konto, které vytvoříme, bude mít neomezená práva, proto ještě než tak učiníme, zkontrolujeme, jestli funguje příkaz sendmail, kterým PHP odesílá poštu.
Pomocí příkazu (v Bashi) sendmail nase@adresacz a napsáním slova test s následným [Ctrl+d] odešleme e-mail. Pokud všechno proběhlo hladce a e-mail se objeví v naší schránce, je všechno v pořádku. Jestliže ne, budeme muset nakonfigurovat lokální poštovní server (většinou je to Postfix). Kdo má znalosti, může se do toho pustit. Já osobně lokální poštovní server nepoužívám. Kdo mě chce následovat, může si přečíst následující odstavec.
Postfix odinstalujte: urpme postfix a místo něj do systému nahrajte ssmtp - jednoduchý skript simulující program sendmail: urpmi ssmtp. Udělá nám tu samou práci, stačí editovat jeden jediný soubor - /etc/ssmtp/ssmtp.conf. Nastavte jeden parametr: mailhub=server, kde server je váš SMTP server pro odchozí poštu.
Proč jsme to všechno dělali? Drupal při registraci odesílá novým uživatelům hesla poštou. U prvního registrovaného (super)uživatele sice heslo pro jistotu napíše na obrazovku, ale mohlo by se na to zapomenout a e-maily by se pak ztrácely někde v útrobách systému. Je to tak lepší.
Vytvořme superuživatele a přihlasme se. Nyní vám dám čas, abyste si Drupal pěkně "proklikali". Pokud možno nic "důležitého" neměňte, abychom mohli pokračovat v návodu.
V pořádku? Doufám, že se vám Drupal zalíbil, začněme se základní konfigurací. V prvé řadě si všimněte, že každá stránka v Drupalu má takzvanou "čistou" URL ve tvaru ?q=/něco/něco. Je to velmi přehledné, uživatelé portálu nebudou muset nikdy vidět hrůzy v podobě dlouhých adres. My to však můžeme ještě zkrášlit.
Jestliže jste instalovali Apache Advanced Extranat Server dle výše uvedeného návodu, budete mít již v základu aktivován modul mod_rewrite, s čímž Drupal ve své konfiguraci počítá. Přejděte na adresu www.drupal.lan/?q=user/1 a editujte ji do tvaru www.drupal.lan/user/1. O moc hezčí, není-liž pravda? Pakliže se objevila stejná stránka (a ne tedy chyba 404), mod_rewrite funguje. Můžete přepnout nastavení na tzv. čistší adresy. V opačném případě musíte nainstalovat modul apache-mod_rewrite, Drupal si jej aktivuje sám pomocí souboru .htaccess.
Přejděte do nabídky administer-settings a na stránce najděte volbu Clean URLs a aktivujte ji. Na této stránce mimochodem nastavte základní parametry celého portálu, jako je název, patička nebo formát zobrazování data. V dalším kroku ještě nainstalujeme lokalizaci do češtiny: Administer-modules. Zde aktivujte modul locale.
V nabídce se nyní objeví nová položka: Administer-localization. Ze stránky http://drupal.org/project/translations stáhněte překladový soubor pro libovolný jazyk (například pro češtinu) a naimportujte jej. Drupal je v tomto ohledu na špičkové úrovni, podporuje kódování UTF-8, lokalizační řetězce ukládá přímo do databáze, umožňuje editaci (překládání) přímo přes webové rozhraní a nabízí export a import do .po souborů.
Všimněte si, že není přeloženo ještě asi 30% všech textů, zejména se to týká oblasti administrace, která nehraje tak důležitou roli. Můžete přiložit ruku k dílu a následně svůj překlad exportovat a dát vývojářům k dispozici. Pokud byste se rozhodli pro větší změny, využijte raději PO editoru, který nabízí docela komfortní (rychlý) překlad.
Vzhled Drupalu můžeme modifikovat změnou šablony: Administer-themes. Za zmínku stojí šablona Chameleon, které je kompletně dělána pomocí CSS. Pro vytvoření vlastního vzhledu stačí vytvořit podadresář v ./themes/chameleon a změnit soubor style.css. Rozhodně se podívejte na stránku projektu - najdete tam velké množství hotových šablon.
Drupal má velké množství předinstalovaných modulů, například aggregator (stahuje RSS kanály), blog (podpora blogování pro uživatele), forum (plnohodnotné diskuzní fórum s notifikací a sticky vlákny), menu (uživatelské menu), path (vlastní odkazy), profile (vlastní profily), tracker (sledování příspěvků) nebo statistics (detailní statistiky portálu).
Drupal se od jiných portálových systémů odlišuje tím, že veškeré moduly jsou originální. Většina jiných projektů (např. PHP-Nuke) pro diskuzní fóra využije služeb jiného projektu (např. Phorum). Vzniká tak změť různých nezávislých částí, všechno je to "slepeno" dohromady a nepůsobí to dobrým dojmem. Netvrdím, že to nemůže fungovat, ale v Drupalu je vše jaksi "šité na míru".
Základem práce v Drupalu je taxanometrie (kategorie). Každý objekt musí příslušet do nějaké kategorie, takže na začátku práce musíme vytvořit několik kategorií například pro články, pro diskuzní fóra nebo statické stránky. Některé objekty vůbec nelze vytvořit, pokud není aktivní alespoň jedna kategorie příslušící dané třídě objektů - to je případ diskuzního fóra.
Toto také doporučuji - vytvořte novou kategorii "Fórum". V jednotlivých subkategoriích již můžete tvořit vlastní fóra v modulu forum. Podobné je to s deníčky - stačí aktivovat modul blog a vytvořit novou kategorii.
Základem je samozřejmě psaní článků. Můžete využít omezené HTML (jen několik HTML značek), plné HTML a dokonce i PHP. Existuje řada dodatečných modulů nabízejících například WYSIWYG JavaScript editory. Jako velmi zajímavý bych doporučil modul, který formátuje články ve stylu WiKi.
Drupal je především portálový systém, ale vytvářet můžete i "statické" weby. Jako portál však Drupal nabízí takzvané bloky, což je základní stavební kámen nově vytvářeného portálu. Tyto bloky při nastavování "kladete" na stránku. Například menu můžete umístit vlevo nahoru, pod menu RSS zdroje, vpravo nejnovější příspěvky ve fóru a dolů blok s přihlašovacím formulářem. Fantazie se meze nekladou.
Drupal nabízí mnoho dalších funkcí, je důležité jej řádně vyzkoušet. Nebojte se nastavovat neznámé hodnoty - vždyť databázi můžete klidně zrušit a znovu vytvořit. A na závěr jen připomenu - nezapomínejte při ostrém provozu databázi zálohovat. Není nic horšího, než ztratit články, záznamy v denících svých uživatelů a stovky příspěvků v diskuzních fórech.
Poznámka: Článek se vztahuje k verzi 4.5.