FreeBSD: Apache+MySQL+PHP (LAMP) + phpMyAdmin

В данном примере будет проводиться установка «классической» сборкиApache + mpm_prefork + mod_php.

Что такое MPM — можно почитать тут>>>.

Статья была обновлена 02.08.2012 (год после первой публикации:-)) — добавлено несколько полезных замечаний и уточнений.

Обновмляем коллекцию портов.

При первом обновлении необходимо выполнить следующие команды:

# portsnap fetch && portsnap extract

При последующих обновлениях:

# portsnap fetch update

Пример:

# cd /usr/ports/
# portsnap fetch && portsnap extract

Более подробно тут.

Перейдем непосредственно к установке LAMP.

Для начала — веб-сервер Apache:

# cd /usr/ports/www/apache22
# make install clean

В файле /usr/local/etc/apache22/httpd.conf находим строку:

#ServerName www.example.com:80

Раскомментируем, и заменим на имя хоста, например:

ServerName setevoy.kiev.ua:80

В строке:

ServerAdmin you@example.com

укажем свой почтовый ящик.

После установки запустим его:

# apachectl start

Проверим:

# /usr/local/etc/rc.d/apache22 onestatus
apache22 is running as pid 929.

Apache завелся — все нормально. Добавим его в автозапуск при старте сервера — в /etc/rc.confдобавим строку:

# apache22_enable=»YES»

Переходим к MySQL:

# cd /usr/ports/databases/mysql55-server
# make install clean

Запускаем сервер:

# /usr/local/etc/rc.d/mysql-server onestart

Проверяем:

# /usr/local/etc/rc.d/mysql-server onestatus
mysql is running as pid 1006.

Если ошибок не выдал — значит все нормально, добавляем его в автозапуск при старте сервера — в/etc/rc.conf добавим строку:

mysql_enable=»YES»

Устанавливаем пароль для пользователя root сервера MySQL:

# /usr/local/bin/mysqladmin -u root password ‘new-password’

где new-password — пароль.

Сразу же проверим, что все правильно указали:

# mysql -u root -p
Enter password:

mysql>

Все ОК.

В каталоге /usr/local/bin  запускаем:

# mysql_secure_installation

Сначала — вводим пароль root:

Enter current password for root (enter for none):

Нам предложат не менять его:

You already have a root password set, so you can safely answer ‘n’.
Change the root password? [Y/n]

жмем n.

Далее — удаляем пользователя anonymous:

Remove anonymous users? [Y/n] Y

Запретить удаленное подключение пользователю root? У меня доступ из-вне вообще будет запрещен:

Disallow root login remotely? [Y/n] Y

Удалить базу test и доступ к ней?

Remove test database and access to it? [Y/n] Y

Обновить таблицу привилегий? Да.

Reload privilege tables now? [Y/n] Y

Thanks for using MySQL!

При желании — можете сразу настроить логгирование. Для этого создадим собственный файл конфигурации, взяв уже готовый:

# cp /var/db/mysql/my-medium.cnf /etc/my.cnf

И в нём, в блоке [mysqld] добавим строку:

log = /var/log/mysql.log

Обратите внимание, что в каталоге /var/db/mysql/ лежат несколько готовых файлов для серверов с разным уровнем предполагаемой нагрузки:

-rw-r—r— 1 root wheel 4675 Apr 8 11:03 my-huge.cnf
-rw-r—r— 1 root wheel 4649 Apr 8 11:03 my-large.cnf
-rw-r—r— 1 root wheel 4660 Apr 8 11:03 my-medium.cnf
-rw-r—r— 1 root wheel 2824 Apr 8 11:03 my-small.cnf

Создадим сам лог-файл:

# touch /var/log/mysql.log

Установим пользователя:

chown mysql:mysql /var/log/mysql.log

Перезапустим MySQL:

# /usr/local/etc/rc.d/mysql-server restart
Stopping mysql.
Waiting for PIDS: 39932.
Starting mysql.

И посмотрим лог:

# cat /var/log/mysql.log
/usr/local/libexec/mysqld, Version: 5.5.25-log (Source distribution). started with:
Tcp port: 0  Unix socket: (null)
Time                 Id Command    Argument

На этом настройка MySQL завершена.

Далее устанавливаем РНР.

ВАЖНО: обратите внимание на версию — на момент написания статьи актуальной была 5.2, поэтому порт — php52!:

# cd /usr/ports/lang/php52
# make install clean

ВАЖНО: установка пакетом, через

# pkg_add -r php52

в этом варианте не подойдет, т.к. РНР установится без модуля для Apache.

Во время установки отметьте для установки модуль Apache:

│ │ [*] APACHE     Build Apache module                             │ │

Устанавливаем расширения РНР :

# cd /usr/ports/lang/php52-extensions/
# make install clean

В окне первом конфигурирования не забываем установить:

|  │    [*] MYSQL       MySQL database support                      │ │
│ │    [*] MYSQLI      MySQLi database support                     │ │

Редактируем файл конфигурации Apache:

# ee /usr/local/etc/apache22/httpd.conf

находим строки с надписями AddType и дописываем туда:

AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps

Далее находим:

<IfModule dir_module>
DirectoryIndex index.html
</IfModule>

И меняем их на:

<IfModule dir_module>
DirectoryIndex index.html index.shtml index.htm index.php
</IfModule>

Для проверки — создадим файл index.php:

# ee /usr/local/www/apache22/data/index.php

В него вставим строки:

<?php
phpinfo( );
?>

Удалим index.html:

# rm /usr/local/www/apache22/data/index.html

И пробуем через браузер открыть страничку, например:

http://77.120.106.40

В результате — должна открыться страница с описанием конфигурации Apache и PHP. Если вместо этого предлагает сохранить файл, или открывается страница с кодом — что-то сделано не так, проверяйте.

Перезапускаем Apache:

# apachectl restart

В целях безопасности — не рекомендуется оставлять файл index.php в таком виде в открытом доступе.

Если все прошло нормально — можно почти расслабиться. Остался последний пункт.

Установка phpMyAdmin:

# cd /usr/ports/databases/phpmyadmin
# make install clean

После установки он выдаст нам сообщение примерно такого плана:

phpMyAdmin-3.4.3.2 has been installed into:

/usr/local/www/phpMyAdmin

Please edit config.inc.php to suit your needs.

To make phpMyAdmin available through your web site, I suggest
that you add something like the following to httpd.conf:

Alias /phpmyadmin/ «/usr/local/www/phpMyAdmin/»

<Directory «/usr/local/www/phpMyAdmin/»>
Options none
AllowOverride Limit

Order Deny,Allow
Deny from all
Allow from 127.0.0.1 .example.com
</Directory>

Опять открываем httpd.conf для редактирования:

# ee /usr/local/etc/apache22/httpd.conf

и добавляем туда alias и настройки для доступа к phpMyAdmin из браузера.

Alias /phpmyadmin/ «/usr/local/www/phpMyAdmin/»

<Directory «/usr/local/www/phpMyAdmin/»>
Options none
AllowOverride Limit
Order Allow,Deny
Allow from all
</Directory>

В указанном выше примере — доступ к phpMyAdmin разрешен с любого адреса. Что бы разрешить доступ только с определнных IP — указываем так:

<Directory «/usr/local/www/phpMyAdmin/»>
Options none
AllowOverride Limit
Order Deny,Allow
Deny from all
Allow from 127.0.0.1 192.168.0.2 [перечисляем IP через пробел]
</Directory>

Ещё раз перезагрузим Apache:

# apachectl restart

Теперь переходим на страницу http://ваш_домен/phpmyadmin/setup/и видим предложение провести конфигурирование phpMyAdmin для работы с нашим сервером MySQL. В принципе, можно поступить проще — вручную отредактировать файл /usr/local/www/phpMyAdmin/config.inc.php, а можно посмотреть что предлагает сам phpMyAdmin.

Перейдем в каталог с установленным phpMyAdmin:

# cd /usr/local/www/phpMyAdmin/

Создадим каталог config:

# mkdir config

Дадим права всем на запись в каталог:

# chmod 777 config

Скопируем в него файл конфигурации

# cp config.inc.php config

Установим права на запись всем на этот файл:

# chmod 777 config/config.inc.php

Переходим на страницу http://ваш_домен/phpmyadmin/setup/ и проводим установку. Тут для каждого поля есть подсказки — так что проблем не возникло.

Вкратце — нажимаем кнопку «Новый сервер«,  во вкладке Идентификация выбираем тип авторизации (у меня cookie), внизу нажимаем «Сохранить«, и возвращаемся на предыдщую страницу, где внизу ещё раз нажимаем «Сохранить» — теперь конфигурация сохранена в файл /config/config.inc.php.

Перемещаем файл конфигурации назад, в каталог phpMyAdmin:

# mv config/config.inc.php .

Меняем права доступа:

# chmod 640 config.inc.php

Если после изменения прав доступа в phpMyAdmin появляется ошибка:

Existing configuration file (./config.inc.php) is not readable.

то проверяем владельцев файла config.inc.php в каталоге /usr/local/www/phpMyAdmin:

# ls -la | grep config.inc.php
-rw-r——   1 root  wheel     759 Aug  2 21:16 config.inc.php
-rw-r——   1 root  www       374 Aug  2 21:15 config.inc.php.sample

Меняем группу:

# chgrp www config.inc.php

и перезагружаем страницу с phpMyAdmin.

Удаляем каталог:

# rm -rf config

Переходим на страницу http://ваш_домен/phpmyadmin/, вводим логин-пароль — профит!

Содержимое файла конфигурации у меня получилось таким:

<?php
/*
* Generated configuration file
* Generated by: phpMyAdmin 3.4.3.2 setup script
* Date: Tue, 16 Aug 2011 19:28:05 +0000
*/
/* Servers configuration */
$i = 0;

/* Server: localhost [1] */
$i++;
$cfg[‘Servers’][$i][‘verbose’] = »;
$cfg[‘Servers’][$i][‘host’] = ‘localhost’;
$cfg[‘Servers’][$i][‘port’] = »;
$cfg[‘Servers’][$i][‘socket’] = »;
$cfg[‘Servers’][$i][‘connect_type’] = ‘tcp’;
$cfg[‘Servers’][$i][‘extension’] = ‘mysqli’;
$cfg[‘Servers’][$i][‘auth_type’] = ‘cookie’;
$cfg[‘Servers’][$i][‘user’] = ‘root’;
$cfg[‘Servers’][$i][‘password’] = ‘passwd‘;

/* End of servers configuration */

$cfg[‘blowfish_secret’] = ‘циферки_буковки‘;
$cfg[‘DefaultLang’] = ‘en’;
$cfg[‘ServerDefault’] = 1;
$cfg[‘UploadDir’] = »;
$cfg[‘SaveDir’] = »;
?>

Собственно, на этом — все. Можно перезапустить сервер, что бы проверить все ли нормально поднимется при перезагрузке:

# reboot

или

# shutdown -r now

P.S. Многие ругают phpMyAdmin за его «дырявость», поэтому как альтернативу можно попробовать такую утилиту как MySQL GUI Tools.