Вы здесь: / / / Сервер своими силами за пол дня. Часть 2.

Сервер своими силами за пол дня. Часть 2.

Халик Алешин
 
    Поднимаем сервер для локальных сетей малых офисов и фирм на одном дыхании. С сервером под Linux мы разобрались, теперь на очереди сервер под Windows XP. Для извращенцев (столько проблем и за такие деньги!).
 
 
    Итак, для тех, кто не желает видеть Linux у себя на винчестере, - ставим сервер на Microsoft Windows XP Professional SP3. Нам также понадобятся программы Аpache, РНР, Мysql, Cerberus FTP. Все они являются бесплатными, остается лишь купить Windows, ну или крайние формы Windows Server...
 
    Обратите внимание, не каждая версия apachephpmysql подходит для работы в связке. Тут есть пара тонкостей. Для нормальной работы работы программ предпочтительны связки:
 
Apache 1.3.X (2.0.X) - PHP 4.4.X - MySQL 4.X.X
Apache 2.2.X - PHP 5.2.X - MySQL 5.X
 
    Ставить будем вторую ветвь apache, так как все найденные ошибки очень быстро исправляются и появляются все новые версии. Так что я рекомендую ставить последние версии софта. Правда, Аpache 1.3.X лучше работает с РНР и более быстра в обработке запросов. В моем случае ставилась Аpache_2.2.9, Мysql-5.0.18, РНР-5.2.6, Cerberus FTP.
 
    Без предисловий сразу перехожу к установке и настройке сервера. Трудностей это не вызовет, так как почти все проходит в графическом режиме.
 
    Создадим нужные нам папки:
 
apache c:/server/apache2 - папка для устаноыки apache 2.2.9
php c:/server/php5 - папка для устаноыки apache 5.2.6
mysql c:/server/mysql - папка для устаноыки MySQL 5.0.18
mysql_data c:/server/mysql_db - папка для хранения баз данных MySQL
webdir c:/server/www - папка для хранения файлов сайта (html, php)
ftp c:/server/ftp - папка для установки Cerberus FTP
 
Установка Apache
 
    Apache_2.2.9-win32-x86-no_ssl-r2.msi (http://httpd.apache.org/download.cgi). Ставим версию 2.2.9 без поддержки SSL. По умолчанию я выбрал папку для сервера C:/server/, нам нужно подредактировать только некоторые параметры:
 
NetworkDomen : localhost
ServerName : localhost
Admin Email Addres : ваш Email адрес для связи
Устанавливает на 80 порт для всех пользователей
 
    Остальные настройки apache производятся в файле /conf/httpd.conf
 
DocumentRoot - папка расположения документов сервера (c:/server/www)
ScriptAlias /cgi-bin/ c:/server/www/cgi-bin
Папка, куда по умолчанию будут качаться скрипты *.pl Perl
 
    Подключение виртуальных хостов, раскоментируем строку
#Include conf/extra/httpd-vhost.conf > Include conf/extra/httpd-vhost.conf
и теперь в файле Include conf/extra/httpd-vhost.conf будем добавлять новые виртиуальные хосты. Делается это очень просто:
 
&ltVirtualHost 192.168.1.1>  
ServerAdmin [email protected] 
DocumentRoot c:/server/www/ghost.ru/www 
#ServerPath /mail 
ServerName www.ghost.ru  
ServerAlias ghost.ru *.ghost.ru  
ErrorLog c:/server/www/logs/ghost.ru.error_log 
TransferLog c:/server/www/logs/ghost.ru.access_log
#ErrorDocument 400 http://www.ghost.ru/messages/error403.html
#ErrorDocument 403 http://www.ghost.ru /messages/error403.html
#ErrorDocument 404 http://www.ghost.ru /messages/error403.html
#ErrorDocument 500 http://www.ghost.ru /messages/error403.html
</VirtualHost>
 
ServerAdmin [email protected].  E-mail адрес администратора сайта (хоста)
DocumentRoot c:/server/www/ghost.ru/www.  Папка расположения файлов сайта
#ServerPath /mail  - данная директива перенаправляет запрос из www.ghost.ru/ в www.ghost.ru/mail/
ServerName www.ghost.ru  - данная директива описывает имя виртуального хоста (URL адрес)
ServerAlias ghost.ru *.ghost.ru  - данная директива описывает алиасы адреса, чтобы сайт был доступен
не только по адресу www.ghost.ru, но и по адресу ghost.ru: *.ghost.ru - означает, что со всех
поддоменов данного узла он будет переадресован на ghost.ru (www.ghost.ru)
ErrorLog c:/server/www/logs/ghost.ru.error_log - ведение логов с ошибками
TransferLog c:/server/www/logs/ghost.ru.access_log - ведение логов с доступом
#ErrorDocument 400 http://www.ghost.ru/messages/error403.html
#ErrorDocument 403 http://www.ghost.ru /messages/error403.html
#ErrorDocument 404 http://www.ghost.ru /messages/error403.html
#ErrorDocument 500 http://www.ghost.ru /messages/error403.html
ErrorDocument (400,403,404,500) определяет страницы ошибок для данного хоста
 
Установка PHP
 
    Разархивируем архив с php в папку c:/server/php5 - собственно вот и вся установка, конфигурируим. В папке php5 есть файл php.ini-recomendet - копируем его в %Win_Dir% (C:/WINDOWS) /php.ini и поправим некоторые парамеры.
 
    Подключение php5 к apache2. Редактируем файл конфигураций apache2- (c:/server/apache2/conf/httpd.conf) добавляем строки:
 
LoadModule php5_module c:/server/php5/php5apache2_2.dll
AddType application/x-httpd-php php phtml
DirectoryIndex index.html index.php index.phtml
 
    Теперь непосредственно и сам php.ini:
short_open_tag = On (данная деректива разрешает сокрашать теги php <?php на <?)
default_charset = cp1251 (установка кодировки по-умолчанию cp1251)
upload_max_filesize = M (максимальный размер файла для загрузки)
memory_limit = M (максимальный размер в оперативной памети)
extension_dir = "c:/server/php5/ext"
 
Раскомментируем строки:
;extension = php_mysql.dll
;extension = php_mysqli.dll
;extension = php_mssql.dll
>>
extension = php_mysql.dll
extension = php_mysqli.dll
extension = php_mssql.dll
Таким образом, мы подключаем расширение mysql для работы с базами данных.
Если нужно, можно изменить кодировку, в которой РНР получает-обрабатывает-выдает информацию:
[iconv]
;iconv.input_encoding = ISO-8859-1
;iconv.internal_encoding = ISO-8859-1
;iconv.output_encoding = ISO-8859-1
>>
iconv.input_encoding = cp1251
iconv.internal_encoding = cp1251
iconv.output_encoding = cp1251
 
Установка MySQL
 
    Установка MySQL проще, чем Apache, следуем всем инструкциям инсталлятора, конфигурируем, потом удаляем файл c:/server/mysql/my.cnf и переименовываем файл my-****.cnf. Там есть несколько файлов.
 
Настройка переменных
 
Если запустить mysqladmin-variables, то можно увидеть примерно такую картину:
back_log - 5
connect_timeout - 5
basedir - /usr/local/
 
datadir - /home/www/data/
delayed_insert_limit - 100
delayed_insert_timeout - 300
delayed_queue_size - 1000
join_buffer - 131072
flush_time - 0
key_buffer - 8388600
language - /usr/local/share/mysql/english/
log - OFF
log_update - OFF
long_query_time - 10
low_priority_updates - OFF
max_allowed_packet - 1048576
max_connections - 100
max_connect_errors - 10
max_delayed_insert_threads - 20
max_join_size - 4294967295
max_sort_length - 1024
net_buffer_length - 16384
pid_file - /usr/local/var/mysqld.pid
port - 3306
protocol_version - 10
record_buffer - 131072
skip_locking - ON
skip_networking - OFF
socket - /tmp/mysql.sock
sort_buffer - 2097144
table_cache - 64
thread_stack - 65536
tmp_table_size - 1048576
tmpdir - /tmp/
version - 3.22.27
wait_timeout - 28800
 
    От настройки этих переменных существенно зависит производительность сервера. Надо сказать, что не существует наилучших значений для всех случаев. Для каждого конкретного сервера и поставленных задач нужно выбирать свои значения. Рассмотрим подробнее эти переменные (выделены наиболее важные из них).
 
back_log - этот параметр показывает, сколько одновременно может быть невыполненных запросов на соединение (connection requests). Параметр имеет большое значение в тех случаях, когда к MySQL поступает ОЧЕНЬ много запросов на соединение в малый промежуток времени. Когда к MySQL поступает connect-запрос, производятся следующие действия - проверяется, разрешен ли доступ к серверу, и если разрешен, то порождается новый процесс. Все это занимает достаточно мало времени. Однако если за это время поступит еще один connect-запрос, то он заносится в очередь. Параметр back_log определяет длину этой очереди. Если количество запросов превысит данное значение, то все непомещающиеся запросы будут игнорироваться. По умолчанию значение back_log равно 5, что вполне достаточно для большинства серверов.
 
flush_time - если значение больше нуля, то каждые flush_time секунд все таблицы будут закрываться. Это позволит освобождать неиспользуемые ресурсы и синхронизировать данные на диске.
 
join_buffer - величина буфера, который используется для полных JOIN запросов (для полного объединения двух таблиц без использования индексов). Память под такой буфер выделяется один раз для каждого запроса. Увеличение параметра ускорит выполнение таких запросов. Более естественный путь ускорить полные JOIN запросы - использовать индексы.
 
key_buffer - величина буфера (байтах), который используется для индексов. Этот буфер общий для всех потоков. Если используется много DELETE или INSERT запросов к таблицам с большим кол - индексов, то увеличение значения повысит скорость выполнения таких запросов.
 
long_query_time - если время выполнения запроса превысит данное значение (сек.), то внутренний счетчик slow_queries будет увеличен на 1. Посмотреть значение счетчика можно командой mysql>status.
 
max_allowed_packet - максимальный размер пакета для передачи данных. Данные между клиентом и сервером передаются пакетами. В начале создается пакет длиной net_buffer_length затем, если размер данных больше, то размер пакета увеличивается до необходимого значения, при этом его длина не может превысить значение max_allowed_packet. Если используются поля BLOB большого размера, то рекомендуется увеличить значение этого параметра. В идеале нужно присвоить этой переменной значение размера самого большого BLOB поля.
 
max_connections - максимальное количество открытых соединений. Определяет, сколько клиентов одновременно могут работать с сервером. Увеличение параметра увеличивает количество используемых дескрипторов файла.
 
max_connect_errors - если в процессе общения с клиентом произошел обрыв соединения (interrupt connection), то счетчик ошибок для хоста клиента увеличивается на 1. Когда значение этого счетчика достигнет max_connect_errors, то все последующие соединения с данного хоста будут игнорироваться. Для обнуления счетчиков использовать команду FLUSH HOSTS.
 
max_delayed_threads - максимальное количество потоков, которые выполняют INSERT DELAYED. Если будет вызван запрос INSERT DELAYED, а при этом достигнуто значение max_delayed_threads, то такой запрос будет выполнен как обычный INSERT (опции DELAYED).
 
max_join_size - максимальное количество записей, которое может быть возвращено полным JOIN запросом. Если в JOIN запросе кол - записей превысит это значение, то будет возвращена ошибка. Увеличение значения этого параметра позволит выполнять большие запросы, но при этом следует учитывать, то такие запросы съедают много процессорного времени и могут содержать миллионы записей.
 
max_sort_length - при сортировке BLOB или TEXT полей из каждого поля берутся только первые max_sort_length байт, а остальные отбрасываются и при сортировке не учитываются.
 
max_tmp_tables - максимальное количество временных таблиц, которые клиент может сохранять открытыми одновременно. На самом деле в версии 3.22 это поле ни на что не влияет.
 
net_buffer_length - размер пакета для передачи данных (max_allowed_packet) Обычно этот параметр не нужно изменять, но если у вас очень мало памяти, то его можно уменьшить до ожидаемого размера результата запроса.
 
record_buffer - каждый поток, который осуществляет последовательное сканирование таблиц (это происходит в SELECT запросах), для каждой таблицы, участвующей в сканировании выделяет память размером record_buffer. Если будет много запросов, требующих последовательно сканировать таблицы, то значение этого параметра рекомендуется увеличить.
 
sort_buffer - каждый поток, который осуществляет сортировку данных (ORDER BY или GROUP BY), выделяет память размером sort_buffer. Для повышения быстродействия запросов с ORDER BY или GROUP BY это значение необходимо увеличить.
 
table_cache - количество открытых таблиц для ВСЕХ потоков. Увеличение значения приведет к увеличению количества используемых дескрипторов файла. MySQL необходимо 2 дескриптора для каждой открытой таблицы.
 
tmp_table_size - максимальный размер временных таблиц. При превышении этого размера возвращается ошибка table tbl_name is full. При использовании сложных GROUP BY запросов значение нужно увеличить.
 
thread_stack - размер стека для каждого потока. Обычно значение по умолчанию является достаточным.
 
wait_timeout - время, которое поток ждет повторного обращения. Если за это время к потоку не было ни одного обращения, то поток удаляется.
 
    Теперь все готово к испытаниям. Создадим скрипт для соединения с базой данных:
 
<?
$link = mysql_connect('localhost','root','password_for_this_user');
mysql_close($link);
?>
 
    Вот и готова сборка. Осталось только сделать пользователей для сайтов и отдельно для MySQL, и чтобы никто не мог получить доступ к c:/server/mysql_db.
 
    PHP обращается к своему файлу конфигураций, расположенному в папке %WIN_Dir% (C:/WINDOWS). Можно изменить это, указав директиву PHPIniDir = путь (PHPIniDir = C:/server/config_file) в конфигурационном файле apache2 (c:/server/apache2/conf/httpd.conf). Ну, а установка PhpMyAdmin точно такая же, как говорилось в прошлой части статьи.
 
 
Для запуска сервера создадим скрипт /etc/init.d/proftpd:

#!/bin/sh
# ProFTPD files
FTPD_BIN=/usr/local/sbin/proftpd
FTPD_CONF=/usr/local/etc/proftpd.conf
PIDFILE=/usr/local/var/proftpd.pid
# If PIDFILE exists, does it point to a proftpd process?
if [ -f $PIDFILE ]; then
pid=`cat $PIDFILE`
fi
if [ ! -x $FTPD_BIN ]; then
echo "$0: $FTPD_BIN: cannot execute"
exit 1
fi
 
case $1 in
start)
if [ -n "$pid" ]; then
echo "$0: proftpd [PID $pid] already running"
exit
fi
if [ -r $FTPD_CONF ]; then
echo "Starting proftpd..."
$FTPD_BIN -c $FTPD_CONF
else
echo "$0: cannot start proftpd -- $FTPD_CONF missing"
fi
;;
stop)
if [ -n "$pid" ]; then
echo "Stopping proftpd..."
kill -TERM $pid
else
echo "$0: proftpd not running"
exit 1
fi
;;
restart)
if [ -n "$pid" ]; then
echo "Rehashing proftpd configuration"
kill -HUP $pid
 
else
echo "$0: proftpd not running"
exit 1
fi
;;
*)
echo "usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
Делаем исполняемым chmod a+x /etc/init.d/proftpd
Готово! Данный скрипт позволяет запускать, останавливать и перегружать запущенный сервер
запуск /etc/init.d/proftpd start
останов /etc/init.d/proftpd stop
перезагрузка /etc/init.d/proftpd restart
 
 
Источник: http://magicpc.spb.ru/