понедельник, 16 мая 2011 г.

FAMP: FreeBSD+Apache+MySQL+PHP

Установка MySQL Server

Перед началом установки MySQL вносим в /etc/make.conf
.if ${.CURDIR} == "/usr/ports/databases/mysql51-server"
WITH_CHARSET=utf8
WITH_COLLATION=utf8_general_ci
WITH_XCHARSET=all
.endif
Ставим MySQL
# cd /usr/ports/databases/mysql51-server
# make install clean

# rehash
Теперь установим системные дефолтные таблицы
# mysql_install_db --user=mysql
Теперь скопируем дефолтный конфиг
# cp /usr/local/share/mysql/my-large.cnf /usr/local/etc/my.cnf
Правим конфиг /usr/local/etc/my.cnf под себя.
[client]
#password = your_password
port  = 3306
socket  = /tmp/mysql.sock

# The MySQL server
[mysqld]
port  = 3306
bind-address = 127.0.0.1
socket  = /tmp/mysql.sock
log  = /var/log/mysql.log
expire_logs_days = 2
skip-locking
key_buffer_size = 256M
max_allowed_packet = 1M
table_open_cache = 256
sort_buffer_size = 1M
read_buffer_size = 1M
read_rnd_buffer_size = 4M
myisam_sort_buffer_size = 64M
thread_cache_size = 8
query_cache_size= 16M
# Try number of CPU's*2 for thread_concurrency
thread_concurrency = 4

# Replication Master Server (default)
# binary logging is required for replication
log-bin=mysql-bin

# binary logging format - mixed recommended
binlog_format=mixed

# required unique id between 1 and 2^32 - 1
# defaults to 1 if master-host is not set
# but will not function as a master if omitted
server-id = 1

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[myisamchk]
key_buffer_size = 128M
sort_buffer_size = 128M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout
Устанавливаем вспомогательные скрипты mysql, которые упрощают первоначальную настройку
# cd /usr/ports/databases/mysql51-scripts
# make install clean
Для скриптов mysql понадобится p5-DBD-mysql51 4.018, который подтянется в процессе установки. Опции оставляем стандартными или по своему усмотрению.
Делаем rehash
# rehash
Для автозапуска mysql при старте системы добавляем в /etc/rc.conf
mysql_enable="YES"
Создаем лог-файл и делаем mysql его владельцем
# touch /var/log/mysql.log
# chown mysql:mysql /var/log/mysql.log
Стартуем mysql
# /usr/local/etc/rc.d/mysql-server start
Starting mysql.
Смотрим логи
# tail -f /var/log/mysql.log
/usr/local/libexec/mysqld, Version: 5.1.56-log (FreeBSD port: mysql-server-5.1.56). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
Выходим из просмотра логов нажатием Ctrl+c.
Запускаем скрипт безопасной настройки:
# /usr/local/bin/mysql_secure_installation
Отвечаем на вопросы скрипта
Enter current password for root (enter for none):
OK, successfully used password, moving on...

Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!

Remove anonymous users? [Y/n] y
... Success!

Disallow root login remotely? [Y/n] y
... Success!

Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!

Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...

All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!
На этом установка MySQL Завершена. Переходим к установке Apache…

Установка Apache

# cd /usr/ports/www/apache22
# make config
Теперь открывается масса опций сборки apache. Большинство из них остаются стандартными.
Дополнительно включяем MYSQL, остальное - по желанию.
# make install clean
При установке подтянется недостающее, в том числе arp-ipv6-devrandom_gdbm_db4, для которой будет предложено выбрать опции. Включяем MYSQL.
По окончании установки выполняем
# rehash
Вносим в /etc/rc.conf
apache22_enable="YES"
apache пока не стартуем, переходим к установке PHP…

Установка PHP

cd /usr/ports/lang/php52
make config
В опциях дополнительно включаем APACHE
# make install clean
# rehash
Теперь скопируем файл конфига php
# cp /usr/local/etc/php.ini-recommended /usr/local/etc/php.ini
Конфиг php можно оставить стандартным, изменив только date.timezone (строку раскомментировать!) и upload_max_filesize под себя.
Находим эти секции и приводим к виду.
upload_max_filesize = 100M
date.timezone = "Europe/Kiev"
Приступаем к редактированию конфига apache.
# ee /usr/local/etc/apache22/httpd.conf
Конфиг выглядит примерно так:
ServerRoot "/usr/local"
Listen 80

LoadModule authn_file_module libexec/apache22/mod_authn_file.so
LoadModule authn_dbm_module libexec/apache22/mod_authn_dbm.so
LoadModule authn_anon_module libexec/apache22/mod_authn_anon.so
LoadModule authn_default_module libexec/apache22/mod_authn_default.so
LoadModule authn_alias_module libexec/apache22/mod_authn_alias.so
LoadModule authz_host_module libexec/apache22/mod_authz_host.so
LoadModule authz_groupfile_module libexec/apache22/mod_authz_groupfile.so
LoadModule authz_user_module libexec/apache22/mod_authz_user.so
LoadModule authz_dbm_module libexec/apache22/mod_authz_dbm.so
LoadModule authz_owner_module libexec/apache22/mod_authz_owner.so
LoadModule authz_default_module libexec/apache22/mod_authz_default.so
LoadModule auth_basic_module libexec/apache22/mod_auth_basic.so
LoadModule auth_digest_module libexec/apache22/mod_auth_digest.so
LoadModule file_cache_module libexec/apache22/mod_file_cache.so
LoadModule cache_module libexec/apache22/mod_cache.so
LoadModule disk_cache_module libexec/apache22/mod_disk_cache.so
LoadModule dumpio_module libexec/apache22/mod_dumpio.so
LoadModule reqtimeout_module libexec/apache22/mod_reqtimeout.so
LoadModule include_module libexec/apache22/mod_include.so
LoadModule filter_module libexec/apache22/mod_filter.so
LoadModule charset_lite_module libexec/apache22/mod_charset_lite.so
LoadModule deflate_module libexec/apache22/mod_deflate.so
LoadModule log_config_module libexec/apache22/mod_log_config.so
LoadModule logio_module libexec/apache22/mod_logio.so
LoadModule env_module libexec/apache22/mod_env.so
LoadModule mime_magic_module libexec/apache22/mod_mime_magic.so
LoadModule cern_meta_module libexec/apache22/mod_cern_meta.so
LoadModule expires_module libexec/apache22/mod_expires.so
LoadModule headers_module libexec/apache22/mod_headers.so
LoadModule usertrack_module libexec/apache22/mod_usertrack.so
LoadModule unique_id_module libexec/apache22/mod_unique_id.so
LoadModule setenvif_module libexec/apache22/mod_setenvif.so
LoadModule version_module libexec/apache22/mod_version.so
LoadModule ssl_module libexec/apache22/mod_ssl.so
LoadModule mime_module libexec/apache22/mod_mime.so
LoadModule dav_module libexec/apache22/mod_dav.so
LoadModule status_module libexec/apache22/mod_status.so
LoadModule autoindex_module libexec/apache22/mod_autoindex.so
LoadModule asis_module libexec/apache22/mod_asis.so
LoadModule info_module libexec/apache22/mod_info.so
LoadModule cgi_module libexec/apache22/mod_cgi.so
LoadModule dav_fs_module libexec/apache22/mod_dav_fs.so
LoadModule vhost_alias_module libexec/apache22/mod_vhost_alias.so
LoadModule negotiation_module libexec/apache22/mod_negotiation.so
LoadModule dir_module libexec/apache22/mod_dir.so
LoadModule imagemap_module libexec/apache22/mod_imagemap.so
LoadModule actions_module libexec/apache22/mod_actions.so
LoadModule speling_module libexec/apache22/mod_speling.so
LoadModule userdir_module libexec/apache22/mod_userdir.so
LoadModule alias_module libexec/apache22/mod_alias.so
LoadModule rewrite_module libexec/apache22/mod_rewrite.so
LoadModule php5_module        libexec/apache22/libphp5.so

<IfModule !mpm_netware_module>
<IfModule !mpm_winnt_module>

User www
Group www

</IfModule>
</IfModule>

ServerAdmin asyzone@xxx.org.ua
ServerName xxx.org.ua:80
DocumentRoot "/usr/local/www/apache22/data"

<Directory />
AllowOverride None
Order deny,allow
Deny from all
</Directory>

<Directory "/usr/local/www/apache22/data">
Options Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>

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

<FilesMatch "^\.ht">
Order allow,deny
Deny from all
Satisfy All
</FilesMatch>

ErrorLog "/var/log/httpd-error.log"
LogLevel warn

<IfModule log_config_module>
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common

<IfModule logio_module>
# You need to enable mod_logio.c to use %I and %O
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
</IfModule>

CustomLog "/var/log/httpd-access.log" combined
</IfModule>

<IfModule alias_module>

ScriptAlias /cgi-bin/ "/usr/local/www/apache22/cgi-bin/"

</IfModule>

<IfModule cgid_module>
#Scriptsock /var/run/cgisock
</IfModule>

<Directory "/usr/local/www/apache22/cgi-bin">
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>

DefaultType text/plain

<IfModule mime_module>
TypesConfig etc/apache22/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>

# Supplemental configuration

# Server-pool management (MPM specific)
#Include etc/apache22/extra/httpd-mpm.conf

# Multi-language error messages
#Include etc/apache22/extra/httpd-multilang-errordoc.conf

# Fancy directory listings
#Include etc/apache22/extra/httpd-autoindex.conf

# Language settings
#Include etc/apache22/extra/httpd-languages.conf

# User home directories
#Include etc/apache22/extra/httpd-userdir.conf

# Real-time info on requests and configuration
#Include etc/apache22/extra/httpd-info.conf

# Virtual hosts
#Include etc/apache22/extra/httpd-vhosts.conf

# Local access to the Apache HTTP Server Manual
#Include etc/apache22/extra/httpd-manual.conf

# Distributed authoring and versioning (WebDAV)
#Include etc/apache22/extra/httpd-dav.conf

# Various default settings
#Include etc/apache22/extra/httpd-default.conf

# Secure (SSL/TLS) connections
#Include etc/apache22/extra/httpd-ssl.conf
#
# Note: The following must must be present to support
#       starting without SSL on platforms with no /dev/random equivalent
#       but a statically compiled-in mod_ssl.
#
<IfModule ssl_module>
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
</IfModule>

Include etc/apache22/Includes/*.conf
Вам нужно в стандартном конфиге поменять ServerAdmin, ServerName, название директорий под себя и привести секцию <IfModule dir_module> к такому виду
<IfModule dir_module>
DirectoryIndex index.html index.shtml index.htm index.php
</IfModule>
Секцию <IfModule mime_module> привести к следующему виду
<IfModule mime_module>
TypesConfig etc/apache22/mime.types
AddType application/x-compress .Z
AddType application/x-gzip .gz .tgz
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
</IfModule>
Виртуальные хосты пока не конфигурим.
Теперь создаем файл index.php
# touch /usr/local/www/apache22/data/index.php
Редактируем его и приводим к такому виду
<?php
phpinfo();
phpinfo(INFO_MODULES);
?>
Стартуем apache
# /usr/local/etc/rc.d/apache22 start
Смотрим логи, проверяем
# tail -f /var/log/httpd-error.log
Теперь открываем в браузере http://ваш_ip и должны увидеть «It Works!».
Проверяем работу php – в браузере http://ваш_ip/index.php – увидим страничку с информацией о php и модулях.

Устанавливаем PHP-EXTENSIONS

# cd /usr/ports/lang/php52-extensions
# make config
В дополнение к стандартным опциям конфига отключаем SQLITE и включаем:
CURL, FTP, GD, GETTEXT, IMAP, MB STRING, MCRYPT, MYSQL, XSL, ZIP, ZLIB.
Устанавливаем
# make install clean
После начала установки поочередно будут появляться окна конфигурации опций для расширений.
curl 7.21.3_1 – отключаем IPV6
ca_root_nss 3.12.9 – стандартно
php52_pcre 5.2.17 – стандартно
php52_gd 5.2.17 – стандартно
libxslt 1.1.26_2 – стандартно
cclient 2007e,1 – отключаем IPV6
# rehash
Рестартуем apache
# /usr/local/etc/rc.d/apache22 restart
Теперь заходим http://ваш_ip/index.php – увидим страничку с информацией о php, модулях и расширениях