Apache2 z SSL, PHP, Ruby, Perlem, MySQL i PHPMyAdmin
Opis dotyczy dystrybucji Gentoo, ale konfiguracja pod innymi Linuksami, Uniksami czy *BSD będzie wyglądać podobnie.
Podczas pisania tego HOWTO korzystałem z Apache 2.0.54-r31, PHP 4.4.0-r1, MySQL 4.1.14 i PHPMyAdmin 2.6.4_p3 oraz Ruby 1.8.3, eRruby 1.0.5, mod_ruby 1.2.4 i mysql-ruby 2.5, mod_per l-2.0.1-r2
HOWTO to uwzględnia ostanie zmiany w konfiguracji Apache’a.
Tabela zmian plików konfiguracyjnych w nowym Apache’u:
| Stary | Nowy |
| /etc/apache2/ | /usr/lib/apache2/ |
| /etc/apache2/conf/ | /etc/apache2/ |
| /etc/apache2/conf/apache2.conf | /etc/apache2/httpd.conf |
| /etc/apache2/conf/commonapache2.conf | /etc/apache2/httpd.conf |
| /etc/apache2/conf/vhosts/ | /etc/apache2/vhosts.d/ |
| /etc/apache2/conf/modules.d/ | /etc/apache2/modules.d/ |
| /usr/lib/apache2-extramodules/ | /usr/lib/apache2/modules/ |
Apache 2
Instalujemy serwer Apache
# emerge apache
MySQL
# emerge mysql
Po kompilacji tworzymy tabele bazy systemowej, w której będą przechowywane przywileje i ustawiamy hasło roota
emerge --config =mysql-4.1.14
możliwy problem to
/usr/bin/mysqladmin: connect to server at 'localhost' failed error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
lub coś podobnego, rozwiązaniem jest dopisanie/zmiana w /etc/mysql/my.cnf, bind-address = 127.0.0.1 na bind-address = 0.0.0.0
Teraz sprawdź czy działa
# mysqlshow -p
Powinnieneś zobaczyć coś takiego
Enter password: +-----------+ | Databases | +-----------+ | mysql | | test | +-----------+
Bardzo ważną rzeczą jest usunięcie konta anonimowego użytkownika
# mysql -u root -p mysql> use mysql mysql> delete from user where User=' '; mysql> quit
PHP
Instalujemy PHP jako moduł serwera Apache. Można jeszcze jako CGI, ale ja tu nie o tym ;)
emerge dev-php/php mod_php
Jeśli wystąpią błędy w kompilacji, prawdopodobnie pomoże Ci zemergowanie nowszej libwww
emerge net-libs/libwww
Po ostatnich zmianach w plikach konfiguracyjnych Apache’a konfiguracja modułów wydaje się być dużo prostrza.
By PHP działało wystarczy w pliku /etc/conf.d/apache2 do linijki APACHE2_OPTS="-D DEFAULT_VHOST"
dopisać -D PHP. By mieć możliwość listowania katalogów użytkowników dodaj -D USERDIR czyli wszystko razem będzie wyglądać tak: APACHE2_OPTS="-D DEFAULT_VHOST -D PHP4 -D USERDIR"
Teraz powinien działać Apache z PHP
Sprawdź czy działa. Uruchom Apache’a
# /etc/init.d/apache2 start
Najprościej jest wywołać phpinfo() i sprawdzić czy się wykona.
# vi /var/www/localhost/htdocs/test.php <?php phpinfo(); ?>
Jeśli wszystko działa, powinieneś zobaczyć ustawienia swojego serwera
PHPMyAdmin
Emergujemy co trzeba :)
# emerge phpmyadmin
Tworzymy bazę danych pmadb :
mysql -u root -p < /usr/share/webapps/phpmyadmin/VERSION/sqlscripts/mysql/VERSION_create.sqlmysql -u root -p
Restart MySQLa :
/etc/init.d/mysql restart
W przeglądarce wpisz: http://localhost/phpmyadmin/ i zaloguj się podając dane użytkownika root MySQL.
Jeżeli wszystko działa dobrze, możesz wyłączyć ostrzeżenie odnośnie PmaAbsoluteUri, które najprawdopodobniej widzisz na dole ekranu.
W pliku /usr/share/webapps/phpmyadmin/ 'nr_wersji'/htdocs/config.inc.php :
# vi /usr/share/webapps/phpmyadmin/'nr_wersji'/htdocs/config.inc.php
Wyłącz komunikat ostrzeżenia :
$cfg['PmaAbsoluteUri_DisableWarning'] = TRUE;
Jeżeli jednak masz jakieś problemy z operacjami na bazie, to ustaw ścieżkę do PMA w tym samym pliku :
# vi /usr/share/webapps/phpmyadmin/'nr_wersji'/htdocs/config.inc.php $cfg['PmaAbsoluteUri'] = 'http://localhost/phpmyadmin/';
Ruby
Emergujemy co trzeba
# emerge ruby eruby mod_ruby mysql-ruby
Dodaj do APACHE2_OPTS -D RUBY.
Niestety nie wszystkie moduły jeszcze poprawnie współpracują z nowyą konfiguracją Apache’a, mod_ruby lokuje się w starej ścieżce /etc/apache/conf/modules.d/ podczas gdy teraz używamy /etc/apache2/modules.d/ rozwiązaniem jest skopiować moduł do nowej lokalizacji, ale lepszym rozwiązaniem wydaje się dopisać starą ścieżkę do pliku konfiguracyjnego by inne stare moduły działały. Oczywiście za jakiś czas można o tym zapomnieć, gdy wszystkie moduły zostaną zaktualizowane.
W pliku /etc/apache2/httpd.conf odszukaj linijkę Include /etc/apache2/modules.d/*.conf i pod nią dopisz Include /etc/apache2/conf/modules.d/*.conf
Następnie zrestartuj Apache’a i zobacz czy wg phpinfo moduł mod_ruby jest załadowany.
Jeśli jest to srawdź czy Ruby działa. Utwórz plik test.rhtml z zawartością:
... <body> <dl> <%ENV.keys.sort.each do |key|%> <dt><%=key%></dt> <dd><%=ENV[key]%></dd> <%end%> </dl> </body> ...
Jeśli widzisz to co zazwyczaj można uzyskać w PHP przy pomocy print_r(&_SERVER);, czyli zmienne środowiskowe, to znaczy że działa. Jeśli jednak widzisz kod źródłowy Ruby to najprawdopodobniej Apache nie widzi mod_ruby, natomiast jeśli Apache zwraca 500 to prawdopodobnie problem tkwi w pliku /etc/apache2/conf/modules.d/20_mod_ruby.conf (lub podobnym).
Standardowo Apache powinien znaleść mod_ruby, jeśli tego nie zrobił należy w pliku /etc/apache2/conf/apache2.conf wskazać mu ścieżkę do niego.
Jeśli chodzi o drugą możliwość błędu, zwracanie przez serwer wewnętrznego błędu, tak było w moim przypadku, należy wyedytować plik /etc/apache2/conf/modules.d/20_mod_ruby.conf.
Odkomentuj w nim
# for Apache::ERubyRun RubyRequire apache/eruby-run # handle files under /eruby as eRuby files by eruby. <Location /eruby> SetHandler ruby-object RubyHandler Apache::ERubyRun.instance Options ExecCGI </Location> # handle *.rhtml as eruby files. <Files *.rhtml> SetHandler ruby-object RubyHandler Apache::ERubyRun.instance </Files>
Perl
Emergujemy mod_perl ale w wersji najnowszej (trzeba sobie odmaskować), ponieważ wersje niezamaskowane dostępnew portage nie są przystosowane do nowego Apache’e i nie można zrobić tu takiego myku jak z Ruby bo po zemergowaniu mod_perla brakuje jednego pliku…
emerge mod_perl
Do APACHE2_OPTS dodaj -D PERL i to wszystko. Prawda że teraz jest dużo lepiej niż w poprzedniej konfoguracji Apache’a? :)
Strony na temat
- Oficjalna strona Apache
- zmiany w Apache2.0 w stosunku do 1.3
- Oficjalna strona PHP
- Manual do PHP
- Oficjalna strona MySQL
- Dokumentacja do PHPMyAdmin
- Strona domowa Ruby