Instalacja i konfiguracja Apache/MySQL/PHP w OpenWrt
Ostatnia zmiana: 2016-05-21 10:52

LAMP jest akronimem określającym platformę serwerową składającą się z następujących elementów:

  • Linux (system operacyjny)
  • Apache (serwer www)
  • MySQL (baza danych)
  • PHP (język skryptowy)
Nic nie stoi na przeszkodzie aby takie połączenie oprogramowania zainstalować na OpenWrt; linux już jest, należy tylko zainstalować pozostałe komponenty. Mała uwaga: routery mają małą ilość pamięci RAM i są ograniczone zasobami obliczeniowymi. Nie będzie to super wydajna platforma, ale do domowych i niewielkich zastosować może się sprawdzić.
Niezbędne jest posiadanie zewnętrznego nośnika na bazę danych oraz najlepiej extroot, jako że same pakiety zajmują dość dużo miejsca. Całość przetestowano na wydaniu OpenWrt Chaos Calmer 15.05.1.

Założenia:

  • serwer nasłuchuje na porcie 80 (więc wyłączamy wbudowane LuCI)
  • katalog główny serwera to /www1
Przed instalacją należy spełnić w/w wymagania, czyli:


    # opkg update
    # mkdir -p /www1
    # /etc/init.d/uhttpd stop
    # /etc/init.d/uhttpd disable


  • mamy dostateczną ilość wolnego miejsca, najlepiej wykonać extroota z wykorzystaniem nośnika USB

Apache

Instalacja



    # opkg install apache

Konfiguracja

Plik konfiguracyjny znajduje się w pliku /etc/apache/httpd.conf. Należy zmienić linię zawierającą DocumentRoot tak, aby wskazywała na wymagany przez nas katalog, czyli:


    DocumentRoot "/usr/share/htdocs"

na


    DocumentRoot "/www1"

Należy też zmienić sekcję


    <Directory "/usr/share/htdocs">

na


    <Directory "/www1">

Z powodu błędu w pakiecie należy także zmienić opcję LogLevel na error.


    LogLevel debug

na


    LogLevel error

Uruchomienie



    # apachectl start

Poprawnie działanie można sprawdzić umieszczając dowolny plik pod nazwą index.html w katalogu /www1, np


    # echo "<html><body>To dziala!</body></html>" > /www1/index.html

I wchodzimy przeglądarką na adres routera, np http://192.168.1.1/index.html

Aby apache uruchamiało się po starcie routera należy np. w/w linię dopisać jako pierwszą w pliku /etc/rc.local.

PHP5

Instalacja



    # opkg install php5-cgi php5-mod-mysql php5-mod-mysqli zoneinfo-core

Konfiguracja

Do zmiany niezbędna jest aktualizacja pliku konfiguracyjnego apache. Dodajemy tzw. handler do obsługi plików php przez cgi na końcu pliku /etc/apache/httpd.conf.


    ScriptAlias /local-bin /usr/bin
    AddHandler application/x-httpd-php5 php
    Action application/x-httpd-php5 /local-bin/php-cgi
    <Directory "/usr/bin">
        Order allow,deny
        Allow from all
    </Directory>

Restartu dokonujemy poleceniem


    # apachectl restart

Następnie należy zmodyfikować plik konfiguracyjny /etc/php.ini. Do modyfikacji jest linia:


    doc_root = "/www1"

oraz date.time, którą zmieniamy z


    ;date.timezone =

na


    date.timezone = Europe/Warsaw

PHP będzie uruchamiane z poziomu Apache, więc nie potrzeby specjalnego uruchamiania tego interpretera. Sprawdzenie czy PHP działa poprawnie dokonujemy wykonując polecenie:


    # php-cgi -v

Należy pamiętać że do instalacji for czy portali niezbędne jest dużo rozszerzeń php; w tym celu należy zainstalować określone (lub wszystkie) pliki php5-mod-*.

Sprawdzenie działania



    echo "<?php phpinfo(); ?>" > /www1/index.php

I wchodzimy przeglądarką na adres routera, np http://192.168.1.1/index.php. Powinna wyświetlić się strona informacyjna o zainstalowanym PHP.

MySQL

Instalacja



    # opkg install mysql-server

Konfiguracja

Plik konfiguracyjny to /etc/my.cnf. Do modyfikacji niezbędne jest ustawienie katalogu z bazą danych (linia z datadir). Nie powinna wskazywać wewnętrznej pamięci flash, powinien to być zewnętrzny nośnik:


    datadir = /mnt/data/mysql/

To samo dotyczy linii tmpdir:


    tmpdir = /mnt/data/tmp

Przed uruchomieniem należy utworzyć te katalogi:


    # mkdir -p /mnt/data/mysql
    # mkdir -p /mnt/data/tmp

Dobrze jest także zmienić domyślne wartości buforów na mniejsze:


    key_buffer = 2M
    max_allowed_packet = 2M

Niezbędne jest zainicjowanie serwera poleceniem

 
    # mysql_install_db --force

Uruchomienie



    # /etc/init.d/mysqld enable
    # /etc/init.d/mysqld start

Ustawiamy hasło roota w bazie


    # mysqladmin -u root password admin123

Testy



    # mysql -uroot -padmin123
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select version();       
+-----------+
| version() |
+-----------+
| 5.1.73    |
+-----------+
1 row in set (0.00 sec)

mysql> exit
Bye

Uruchomienie LAMP

Wszystkie serwery są na miejscu, można więc pokusić się o sprawdzenie połączenia tych elementów.

Baza danych

Tworzymy nową bazę danych o nazwie openwrt, tworzymy użytkownika phptest z haslem phphaslo i nadajemy mu określone prawa dostępu.


    # mysql  mysql -uroot -padmin123
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create database openwrt;
Query OK, 1 row affected (0.00 sec)

mysql> create user 'phptest'@'localhost' IDENTIFIED BY 'phphaslo';
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON * . * TO 'phptest'@'localhost';
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.01 sec)

mysql> exit
Bye

Następnie logujemy się jako użytkownik phptest, tworzymy prostą tabelę lamptest i wpisujemy do niej dane:


    # mysql -uphptest -pphphaslo openwrt;
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.1.73 Source distribution

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> create table lamptest (kolumna1 int, kolumna2 varchar(255));
Query OK, 0 rows affected (0.03 sec)

mysql> insert into lamptest (kolumna1, kolumna2) values (1, "to");
Query OK, 1 row affected (0.02 sec)

mysql> insert into lamptest (kolumna1, kolumna2) values (2, "zyje");
Query OK, 1 row affected (0.00 sec)

mysql> insert into lamptest (kolumna1, kolumna2) values (3, "!");   
Query OK, 1 row affected (0.01 sec)

mysql> select * from lamptest;
+----------+----------+
| kolumna1 | kolumna2 |
+----------+----------+
|        1 | to       |
|        2 | zyje     |
|        3 | !        |
+----------+----------+
3 rows in set (0.00 sec)

mysql> exit
Bye

Strony PHP

Zmieniamy plik /www1/index.php i wpisujemy w nim następującą zawartość:


<?php
$servername = "127.0.0.1";
$username = "phptest";
$password = "phphaslo";
$dbname = "openwrt";

$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
    die("Connection failed: " . $conn->connect_error);
} 

$sql = "SELECT kolumna1, kolumna2 FROM lamptest";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "kolumna1: " . $row["kolumna1"] . ", kolumna2: " . $row["kolumna2"]. "<br>";
    }
} else {
    echo "0 results";
}
$conn->close();
?>

Wchodzimy przeglądarką na adres routera, np http://192.168.1.1/index.php. Jeżeli wyświetli się strona o zawartości


    kolumna1: 1, kolumna2: to
    kolumna1: 2, kolumna2: zyje
    kolumna1: 3, kolumna2: !

To mamy działający cały zestaw LAMP, gratulacje!

Zakończenie

Serwer Apache można zastąpić lighttpd, zamiast cgi w php można użyć zainstalować fastcgi. Takie połączenie powinno działać sprawniej od samego apache z cgi.
Należy pamiętać o doinstalowany dodatkowych modułów od php5, które różne aplikacje mogą potrzebować.
W razie problemów z działaniem stron można doinstalować pakiet php5-cli i uruchamiać strony z poziomu konsoli. Można także w pliku php.ini włączyć wyświetlanie błędów.