В этой статье я постараюсь описать свой вариант FAMP (FreeBSD8.2 + Apache2 + MySQL5.1 + PHP5.3.10 + другие вкусности по мере возможности).
Итак, для хостинг площадки я выбрал Amazon AWS EC2, так называемый cloud-хостинг, что очень не плохо для меня, так как "бесплатно" на целый год, но более подробно об этом в другой статье. Конечно же тут есть свои нюансы, так как это не обычный хостинг, трудности в основном в виртуализации, иногда надо ткнуть носом в определенное устройство и указать что это и как оно должно работать, например, количество цилиндров виртуального жесткого диска система определяет не правильно (если использовать для разметки sysinstall), но об этом не здесь :).
Установка:
Так как я использую cloud хостинг, мне нет необходимости устанавливать саму ОС, так как она уже установлена, ее надо всего лишь "подключить", и она уже будет работать. В Amazon EC2 – это называется instance, то есть экземпляр работающей машины (виртуальной), в которую подключаются жесткие диски (виртуальные), сетевые устройства (также виртуальные) и т.д. Ну а вообще установка ОС FreeBSD не составляет трудностей.
Итак, в моем случае, у меня уже установлен пользователь root, и настроена сеть для подключения к интернет.
Первым делом ставим для root пароль:
passwd
Далее обновляем порты:
portsnap fetch extract portsnap fetch update
Добавляем нового пользователя:
adduser
Добавляем ему группу wheel.
Переопределяем редактор по умолчанию (vi на ee), кому как, но мне стандартный редактор по умолчанию очень не удобный:
echo $SHELL
определяем шелл, если csh, то вставляем строки в ~/.tcshrc
echo 'setenv EDITOR /usr/bin/ee' >> ~/.tcshrc
Приступаем к установке веб-сервера, мой выбор – apache2:
cd /usr/ports/www/apache22/ make config make install clean
Как настроить apache22 вы уже разберетесь сами, благо для этого существует уйма документации в интернете, могу лишь поделиться своими настройками:
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 #сюда будет вставлена строка модуля PHP #Определяем пользователя и группу, от имени которой будет работать apache User www Group www ServerAdmin [email protected] #Определяем имя сервера по умолчанию, на тот случай, если мы используем виртуальные хосты и кто-то введет в адресной строке браузера просто IP ServerName 100.org.ua:80 #Определяем доступ к директоряим по умолчания, то есть закрываем доступ всем и всюду <Directory /> AllowOverride None Order deny,allow Deny from all </Directory <IfModule dir_module> #я добавил сюда index.php, но он будет установлен позже DirectoryIndex index.php index.html </IfModule> #Определяем права на доступ и редактирование файлов, имя которых начинается с .ht* <FilesMatch "^\.ht"> Order allow,deny Deny from all Satisfy All </FilesMatch> #Определяем место хранения файла логов об ошибках ErrorLog "/www/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 "/www/log/httpd-access.log" combined </IfModule> <IfModule alias_module> #Определяем алиас, то есть теперь запрос типа http://host/cgi-bin/ будет apache-ем перенаправляться в папку /www/cgi-bin/ ScriptAlias /cgi-bin/ "/www/cgi-bin/" </IfModule> <Directory "/www/cgi-bin"> AllowOverride None Options None Order allow,deny Allow from all </Directory> #Определяем тип отдаваемого контента по умолчанию, конечно же в скрипте PHP, а также в файле .htaccess виртуального хоста можно переопределить эту директиву DefaultType text/plain <IfModule mime_module> TypesConfig etc/apache22/mime.types AddType application/x-compress .Z AddType application/x-gzip .gz .tgz #Следующие две строки надо раскоментировать, когда вы установите PHP #AddType application/x-httpd-php .php #AddType application/x-httpd-php-source .phps </IfModule> #Определяем путь к файлу настроек виртуальных хостов, а у меня есть виртуальные хосты Include etc/apache22/extra/httpd-vhosts.conf #Определяем путь к другим каким-либо динамически подключенным файлам настроек apache Include etc/apache22/Includes/*.conf
Далее идем в настройки виртуальных хостов:
NameVirtualHost *:80 <VirtualHost *:80> ServerAdmin [email protected] DocumentRoot "/www/sites/100.org.ua/public_html" ServerName 100.org.ua ServerAlias www.100.org.ua vmmelnic.org.ua *.vmmelnic.org.ua eone.org.ua *.eone.org.ua ione.org.ua *.ione.org.ua i1.org.ua *.i1.org.ua e-one.org.ua *.e-one.org.ua i-one.org.ua *.i-one.org.ua ErrorLog "/www/sites/100.org.ua/log/error_log" CustomLog "/www/sites/100.org.ua/log/access_log" common <Directory "/www/sites/100.org.ua/public_html"> Options -Indexes FollowSymlinks AllowOverride All Order allow,deny Allow from all </Directory> </VirtualHost> #И так для каждого виртуального хоста...
Как вы уже, наверное, заметили, перед тем как запускать apache с такими настройками, нам необходимо создать структуру директорий. К примеру, у меня для веб-сервера отдельно примонтирован диск, /www, в нем /www/sites/ и т.д. Вы сами можете проследить по настройкам, предоставленным выше.
Чтобы запустить apache необходимо выполнить команду:
/usr/local/etc/rc.d/apache22 start
А для того, чтобы apache запускался автоматически при запуске системы – выполните:
echo 'apache22_enable="YES"' >> /etc/rc.conf
Установка MySQL:
cd /usr/ports/databases/mysql51-server/ make config #Выбираете необходимые вам найстройки make install clean
Я предпочитаю хранить базы данных в моей предопределенной директории, для этого вписываем в /etc/rc.conf:
echo 'mysql_dbdir="/www/mysql"' >> /etc/rc.conf echo 'mysql_enable="YES"' >> /etc/rc.conf
Заодно и пропишем автоматический запуск сервера баз данных.
Копируем конфигурационный файл:
/usr/local/share/mysql/my-large.cnf /www/mysql/my.cnf
Изменяем кодировку для баз данных по умолчанию:
ee /www/mysql/my.cnf #Находим строку [mysqld] и добавляем туда строчки: [mysqld] character-set-server = utf8 collation-server = utf8_general_ci
Запускаем сервер баз данных:
/usr/local/etc/rc.d/mysql-server onestart
Проверить работу сервера как apache так и mysql можно с помощью простой команды:
ps -aux | grep httpd #или для mysql ps -aux | grep mysql sockstat | grep mysql
Сервер запущен. Осталось настроить только к нему доступ:
rehash mysql_secure_installation
Установка PHP:
cd /usr/ports/*/php5/ make config #Выбираем необходимые нам настройки make install clean
Не забудьте в настройках выбрать модуль для apache, если вы конечно хотите, чтобы ваш PHP работал как модуль apache, в чем разница между модулем и отдельным процессом – читайте в интернет, возможно и на этом ресурсе :).
копируем дефолтный файл настроек, и редактируем по своему усмотрению:
cd /usr/local/etc cp php.ini-production php.ini #редктируем файл ee php.ini ..... ...... ..... #изменяем права доступа к файлу настроек chmod 0440 php.ini
Итак, файл настроек PHP у нас находится по адресу /usr/local/etc/php.ini, все измененные настройки в этом файле будут работать только после перезапуска apache.
Расширения для PHP.
Надо определиться, какие именно расширения вам необходимы, а потом их устанавливать. Подключать все расширения, которые имеются для PHP не обязательно, помните, что каждое расширение (модуль) постоянно висит в памяти и требует соответственно ресурсов вашего сервера.
Есть два способа установки дополнительных модулей (расширений) для PHP: а) – использовать специальный порт "php5-extensions", который поможет вам выбрать, сконфигурировать и установить расширения; б) – устанавливать каждое расширени вручную. Плюсы и минусы того и иного способа: если использовать php5-extensions, то легче конечно же все установить, да и при обновлении портов в будущем возни меньше, обновляете просто php5-extensions и все; при ручном же способе установки расширений (который я и рекомендую), возможны коллизии с портами, их версиями, зависимостфми и т.д., но, вы таким образом уж точно выучите все ньюансы в работе с портами.
ВНИМАНИЕ! Некоторые расширения любят четкую последовательность подключения в файле /usr/local/etc/php/extensions.ini. Например, библиотека gd.so (.dll для windows) не любит, когда ее подключают в самом конце. При вызове соответствующих функций в php скриптах, например "imagecreatefrompng()", вы не будете получать требуемый результат, смотрите в логи php и apache, если у вас возникли необъяснимые проблемы в работе с какими либо расширениями – это может быть причиной этих пролем.
Итак расширения, установка ничем не отличается от всех предыдущих портов (да, это такие же порты), например:
cd /usr/ports/*/php5-gd make config && install && clean
Таким образом мы установили расширение GD для PHP, чтобы оно вошло в действие надо перезапустить apache. Так как у нас PHP подключен к apache как модуль, а расширение php5-gd является расширением для PHP, то при перезапуске apache – перезапускается и сам PHP, и все расширения вместе с ним.
Если же вы все таки решили воспользоваться автоматическим управлением ваших расширений для PHP, тогда устанавливаем php5-extensions:
cd /usr/ports/*/php5-extensions make config && install && clean
Все подключенные расширения к PHP вы сможете увидеть в файте /usr/local/etc/php/extensions.ini:
cat /usr/local/etc/php/extensions.ini
Вот какие дополнительные библиотеки обычно приходится установить, чтобы нормально и полнофункционально заработал любой сайт:
%pkg_info | grep php5- php5-5.3.10_1 PHP Scripting Language php5-curl-5.3.10_1 The curl shared extension for php php5-ftp-5.3.10_1 The ftp shared extension for php php5-gd-5.3.10_1 The gd shared extension for php php5-iconv-5.3.10_1 The iconv shared extension for php php5-json-5.3.10_1 The json shared extension for php php5-mbstring-5.3.10_1 The mbstring shared extension for php php5-mysql-5.3.10_1 The mysql shared extension for php php5-mysqli-5.3.10_1 The mysqli shared extension for php php5-session-5.3.10_1 The session shared extension for php php5-simplexml-5.3.10_1 The simplexml shared extension for php php5-xml-5.3.10_1 The xml shared extension for php php5-zlib-5.3.10_1 The zlib shared extension for php
Продолжение следует…