Vývoj stránek na Linuxu – PostgreSQL

logo PostgreSQL

Linux je ideální operační systém pro vývoj webových stránek. Spousta serverů úspěšně systém používá pro jeho nesporné kvality. Pokud jste jedním ze šťastlivců, kteří ho mají doma, není nic lepšího, než z něj udělat vývojový server pro vaše webové stránky. Přenesení takto vyvinutých stránek k vašemu webhosterovi se může zredukovat na spuštění jednoho skriptu. Dnes bych vám rád přiblížil takto přispůsobenou instalaci a nastavení PostgreSQL serveru.

Doma mám nainstalovaný Debian GNU/Linxu lenny, pro který je taky psán tento postup. Většina věcí je ale podobně proveditelná v jiných Linuxových distribucích, takže směle do toho.

logo PostgreSQL

PostgreSQL je jedním z nejlepších a nejpokročilejších open source databázových systémů, který pro vaše aplikace můžete zvolit. Jeho instalace na Debianu je poměrně snadná, ale přesto se můžete setkat s pár věcmi, na které je třeba si dát pozor. Cílem by mělo být nainstalovat databázi a nastavit ji tak, aby fungovala stejně jako databáze na webhostingu, aby nebylo pak potřeba při přenosu na produkční server cokoli měnit.

Instalace PosgtreSQL

databáze běží

Před instalcí je vhodné zkontrolovat nastavení linuxové lokalizace. Pokud budete chtít provozovat databázi s konkrétním kódováním, nemuselo by to být při špatném nastavení možné. Kódování databáze musí být kompaktibilní s kódováním databázového clusteru (místa na disku, kde si databázový systém uchovává data). Ve velmi dobře zpracované dokumentaci PosgtreSQL můžete najít zmínku, že systémová proměnná LC_CTYPE, která určuje část chování linuxové lokalizace, by měla být při vytváření databázového clusteru nastavena na hodnotu C nebo POSIX a tím se zvolí nezávislost na kódování. Nastavení provedete jednoduchým příkazem:

export LC_CTYPE="C"

Pak se můžeme pustit do instalce balíčků. Ve vašem oblíbeném programu na správu balíčků (ten můj se jmenuje dselect) vyberte tyto balíčky:

Balíčky -common jsou povinné, slouží k případnému spravování více verzí PostgreSQL zároveň. Jistou dobu se mi takhle neúmyslně při startu systému spouštěly tři verze PostgreSQL serveru zároveň. Pokud nemáte nějaký rozumný důvod, proč tak nečinit, nainstalujte si poslední verzi – momentálně verze 8.3.

PostgreSQL startuje

Uživatel postgres

Uživatel postgres je něco jako root pro databázi, tj. má neomezená práva v databázových clusterech. Přihlašte se jako uživatel root a pak se pomocí příkazu su přihlašte na uživatele postgres bez nutnosti zadávání hesla.

su -
su - postgres

PostgreSQL má několik skriptů, které můžete spustit bez přihlášení do databáze, o těch ale později, teď jak se přihlásit do databáze pomocí řádkového klienta. Tento klient se jmenuje psql a přihlášení do databáze je snadné jak ponožka:

psql

Ano, mnozí jistě namítnou, že existují mocné grafické nástroje a webová rozhraní, avšak my drsní linuxáři si bohatě (ale hlavně efektivně) vystačíme s příkazovou řádkou. Seznam příkazu psql zjistíme zadáním přikazu \?, seznam SQL příkazů zase \h. Proteď ale krásné prostředí opustíme pomocí příkazu \q, další kroky budeme provádět z linuxového shellu.

Vytvoření databáze a uživatelů

tabulky v databázi

Teď nastal čas na zjištění tzv. connection stringu na připojení k databázi na vašem webhostingu. Potřebujete znát

Databáze se dá vytvořit i v klientovi psql, ale PostgreSQL nabízí pohodlnější řešení – sript createdb. Jméno zvolte stejné jako na vašem webhostingu a dobře si taky rozmyslete kódování databáze. Seznam možných kódování PostgreSQL najdete v dokumentaci, já osobně volím UTF-8.

createdb -E UTF8 jmeno_databaze

Pak pomocí dalšího skriptu vytvoříme uživatele, který bude mít k databázi přístup. Opět je to možné udělat pomocí SQL příkazu CREATE USER, ale kdybychom nebyli líní, nebyly by počítače vůbec potřeba. Zvolte jméno uživatele stejné jako na vašem webhostingu.

createuser -P jmeno_uzivatele

Parametr -P vynutí dotaz na heslo, dál vám bude položeno ještě pár otázek, na všechny můžete s klidem říct ne.

Nastavení práv už z shellu nezváldneme, takže spusťe psql a v něm proveďte tento SQL příkaz, který dá veškerá práva vašemu uživateli na vámi vytvořenou databázi:

GRANT ALL ON DATABASE jmeno_databaze TO jmeno_uzivatele

Více o právech se můžete dočíst v dokumentaci: Database Roles and Privileges

Podvrhnutí IP nebo domény

V connection stringu od vašeho webhostera najdete také IP adresu nebo jméno serveru s databází. Pokud je to IP 127.0.0.1 nebo jméno localhost, nemusíte se s ničím trápit. Pokud však má váš webhoster databázi na jiném serveru než diskový prostor pro vaše stránky, najdete tam IP adresu nebo jméno serveru odlišné. A co teď?

Každý pokročilý uživatel Linuxu je dobře obeznámen se souborem /etc/hosts. Je to kouzelný soubor, pomocí kterého můžeme mimo jiné přiřadit určitým IP adresám vlastní jména. Najdete tam například řádek, který přiřazuje IP adrese 127.0.0.1 jméno localhost. No a ten nás právě zajímá. Pro naši potřebu bude stačit za localhost přidat naši požadovanou IP adresu nebo jméno serveru. Tedy pokud IP databázového serveru vašeho webhostera je například 192.168.1.2, bude to vypadat nějak takto:

127.0.0.1     localhost 192.168.1.2

Tento řádek říká, že jakýkoli dotaz na localhost nebo IP 192.168.1.2 se bude přesměrovávat na IP 127.0.0.1. Funknčnost nového nastavení můžete vyzkoušet pomocí příkazu ping.

To ale není vše. PostrgreSQL v základní instalaci naslouchá pouze požadavkům na localhost resp. na IP 127.0.0.1. Aby naslouchalo i vašemu novému podvrhnutému serveru, je třeba upravit jeho konfiguraci. To provedeme nastavením vlastnosti listen_addresses v souboru postgresql.conf, který se nachází někde přibližně zde: /etc/postgres­ql/8.3/main/pos­tgresql.conf

listen_addresses = 'localhost,192.168.1.2'

Aby se změny v souboru projevily, je třeba restartovat PostgreSQL server.

/etc/init.d/postgresql-8.3 restart

Funguje teď připojení k databázi? Ne? Zkuste výpis s PostgreSQL logu:

tail -f /var/log/postgresql/postgresql-8.3-main.log

Neříká náhodou něco ve smyslu „No pg_hba.conf entry for host…“? Pokud ano, máte už téměř vyhráno.

Krok finální – práva na přihlášení

databázová tabulka

Abyste se mohli na vašeho uživatele přihlásit přes psql klienta, je třeba pohrát si s právy. PostrgreSQL nabízí několik druhů autentikace a v základním nastavení není možné příhlásit se na uživatele, který nemá stejné jméno jako váš účet v Debianu. K nastavování práv na přihlášení slouží soubor pg_hba.conf, který najdete nejspíš tady: /etc/postgres­ql/8.3/main/pg_hba­.conf Jeho popis najdete opět v dokumentaci. Budeme se snažit zprovoznit tzv. Password autentikaci, tedy přihlášení pomocí hesla.

V souboru pg_hba.conf najděte řádek s obecnou ident autentikací. Vypadá nějak tatko:

# "local" is for Unix domain socket connections only
local   all   all      ident sameuser

Před něj přidejte tento řádek s naší md5 password autentikací:

# all users can connect localy to all databases using md5 password
local   all   all      md5

Pokud komentář není dostačující, vězte, že PostgreSQL prochází jednotlivé řádky a pokouší se je napasovat na váš způsob přihlášení. Jakmile řádek pasuje, použije se daný způsob. Tento řádek říká, že všichni PostgreSQL uživatelé se lokálně můžou připojovat ke všem databázím pomocí md5 autentikace. Kdychom dali řádek níže, nejspíš by na něj nedošlo, PostgreSQL by dříve došlo k ident autentikaci, která říká „Přihlaš mě na PostgreSQL uživatele, který má stejné jméno jako můj linuxový účet.“

Pro projevení změn restartuje PostgreSQL server a to je vše, vážení a milí. Teď se pokuste přihlásit do vaší databáze pod vašeho uživatele:

pgsql jmeno_databaze jmeno_uzivatele

Pokud jste nebyli dotázáni na heslo, je nejspíš chyba v pg_hba.conf, pokud vidíte magický příkazový řádek psql, jste za vodou a můžete začít tvořit.

psql připojeno

Magický příkazový řádek psql

Že jsem na něco zapomněl? Skoro ano. Pokud jste v předchozím textu hledali návod, jak upravit soubor pg_hba.conf, aby jste se k SQL serveru mohli připojovat přes jinou IP adresu nebo jméno serveru, hledali jste marně. Není to tam! Takže tady to je, stačí jediný řádek, jehož taje můžete odtajnit pomocí dokumentace.

host   all   all   192.168.1.2/32   md5

Příště?

Instalaci SVN, Apache a používání rsync jste už prošvihli. Nainstaloval jsem, nezapsal jsem, zapomněl jsem. Vše funguje jak má, ale pokud budete trpěliví a počkáte si, až fungovat přestane, rád své poznatky zveřejním.

Datum modifikace
01. 04. 2008
Sekce
Webdesign
Horor jménem obrázky na webu
cnw counter