Kategória: Raspberry π

Zmenené: 24. máj 2013

Webový server s PHP a MySQL

Moja prvá myšlienka je nastaviť webový server s podporou PHP, Python a skriptov SGI. Ako prvá úloha predo mnou stojí PHP, tak som sa do nej s vervou pustil a nastavil si webový server so základnou podporou PHP.

Obsah článku

Nginx

Svoj server som sa rozhodol postaviť na nginx. K dispozícii sú tri podoby balíka (vlastne štyri, ale nagsi riešiť nemienim):

  • nginx-light len naozaj základné moduly
  • nginx-full všetky základné moduly webu a pošty, plus niekoľko modulov tretích strán
  • nginx-extra všetky základné moduly webu a pošty, plus viac modulov tretích strán

Ktorý si vyberiete závisí na vás, ale často postačí aj najľahšia verzia.

Varovanie

Čím bohatšia (viac modulov) verzia nginx, tým su vyššie jeho nároky na pamäť. Táto náročnosť sa samozrejme prejaví až pri zaťažení servera, nie pri jednom pripojení.

Ja som zvolil tú najplnejšiu, ale nie je to podmienka (robím pokusy):

aptitude install nginx-extra
invoke-rc.d nginx start

Neviem prečo, ale po inštalácii sa mi server nespustil, preto je vyššie príkaz na jeho spustenie. Predvolene je koreň dokumentov webového servera umiestnený na pomerne nevšednom mieste, tak ho nastavím na podobne nezvyklé, ale zato odporúčané. Nájdite a zmeňte v časti server ():

root /srv/www/main;

Je veľmi pravdepodobné, že tento adresár neexistuje, tak ho treba vytvoriť a nastaviť mu vhodné vlastníctvo i prístupové práva:

mkdir -p /srv/www/main
chovn :www-data /srv/www/main
chmod g+w /srv/www/main

Ešte odporúčam v časti location / () zmeniť hodnotu try_files takto:

try_files $uri $uri/ =404;

Môžete opätovne načítať nastavenia, aby sa zmeny prejavili (asi vráti 403, keďže je adresár koreňa dokumentov prázdny), ale bude treba urobiť ešte ďalšie zmeny, tak to zatiaľ nie je potrebné:

invoke-rc.d nginx reload

PHP

Skriptovací jazyk PHP dnes iste predstavovať netreba. Webový server nginx podporuje PHP prostredníctvom FastCGI, ktorý je reprezentovaný balíkom php5-fpm:

aptitude install php5 php5-fpm

Samozrejme, týmto nainštalujete len naozaj základné funkcie PHP a na úplnú funkčnosť aplikácií bude celkom určite treba ešte dodatočné moduly PHP.

Aby nginx dokázal spracovávať stránky PHP je potrebné odkomentovať riadky, ktoré sú v konfiguračnom súbore už pripravené. Nájdite teda v súbore /etc/nginx/sites-available/default riadky a upravte ich takto:

location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
#       # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
#       # With php5-cgi alone:
#       fastcgi_pass 127.0.0.1:9000;
#       # With php5-fpm:
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
}

Samozrejme, je dosť pravdepodobné, že budete chcieť urobiť ešte ďalšie vyladenia nastavení, ale to nie je cieľom tohoto článku a toto nastavenie na základnú funkčnosť stačí. ešte je dobre nastaviť indexový súbor v časti server () tak, aby obsahoval aj index.php:

index index.php index.html index.htm;

Po vykonaní zmien možno opätovne načítať nastavenia nginx:

invoke-rc.d nginx reload

A aby ste mohli skontrolovať činnosť PHP, je dobré pripraviť si ten najjednoduchší kontrolný skript:

cat /srv/www/main/index.php
<?php
phpinfo();
?>

Po otvorení adresy Raspberry π v prehliadači by v tomto okamžiku mal byť zobrazený informačný súbor PHP:

raspi_php.png

Informácie o PHP

Poznámka

Obrázok je novší ako článok…

MySQL

Mnoho aplikácií potrebuje úložisko dát a relačná databáza je dnes tiež bežná. Projekt MySQL má v súčasnosti pomerne neistú budúcnosť, ale to teraz riešiť nebudem. Na nainštalovanie jednoducho stačí:

aptitude -R install mysql-server mysql-client php5-mysql

Na moje prekvapenie potrebuje server i klient MySQL aj nejaké knižnice Perlu, ale s tým nič neurobím. Počas inštalácie budete vyzvaný na nastavenie hesla pre server MySQL. Hoci to nie je povinný krok, vrelo odporúčam heslo nastaviť. Okrem hesla, je dobré po inštalácii nastaviť aj znakovú sadu a radenie UTF-8. Môžete to urobiť priamo v súbore /etc/mysql/my.cnf, ale za lepšie riešenie považujem vytvorenie súboru /etc/mysql/conf.d/utf-8.cnf (názov súboru nie je povinný) s týmto obsahom:

[mysqld]
skip-character-set-client-handshake
collation_server=utf8_unicode_ci
character_set_server=utf8

Aby sa táto zmena prejavila, je potrebné server MySQL reštartovať:

invoke-rc.d mysql restart

V tomto okamžiku možno opäť zobraziť informačný súbor PHP a skontrolovať, že sú načítané moduly MySQL.

Záver

Nabudúce vyskúšam nainštalovať Joomlu, nejaký ten monitorovací systém, pretože ma známy požiadal o nejaké informácie, tak ich potrebujem nejako pozbierať. No a samozrejme Python a skripty CGI, nech môžem z Raspberry π dostať maximum. Ale teraz idem hľadať konektory, ktorými pripojím GPIO k obvodom

Joomlu som vyskúšal, funguje, ale Načítanie stránky (kópia tejto stránky) trvá 10 i viac sekúnd. Skúšal som memcached, ale veľmi som si nepomohol, hoci to mohlo byť zlým nastavením

Rada

MySQL je naozaj pomalé, nepomohla ani rýchlejšia karta SD, jednoducho webový server s MySQL na Raspberry π nie je to pravé orechové.