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

  • Saturday, 8 October 2005
  • 19,185 views