собирать лучше из исходников, т.к. нам будет пофиг на название дистрибутива, также  будем иметь самые свежие версии пакетов.
Надеюсь все нужное уже скачано?

Начинать лучше с OpenSSL. Переходим в каталог с архивом и вводим следующее:

# tar -xf openssl-0.9.8g.tar.gz
# cd openssl-0.9.8g
# ./config
# make; make test; make install

Теперь ставим для web-сервера собственно сам SSL-модуль. Внимание! При конфигурировании нужно обязательно указывать путь к исходникам Apache и OpenSSL. Соответственно, оба архива уже должны быть распакованы:

# tar -xf httpd-2.2.6.tar.gz
# tar -xf mod_ssl-2.8.30-1.3.39.tar.gz
# cd mod_ssl-2.8.30-1.3.39

# ./configure \
—with-apache=../httpd-2.2.6 \
—with-ssl=../openssl-0.9.8g \
—with-crt=/usr/local/apache2/conf/ssl.crt/server.crt \
—with-key=/usr/local/apache2/conf/ssl.key/server.key \
—prefix=/usr/local/apache2

Далее по списку идет Apache. Собираем исходники и устанавливаем самым примитивным способом, но уже с сертификатами:

# cd ../httpd-2.2.6
# ./configure —enable-ssl
# make; make certificate; make install

Все собирается без проблем при условии, что отсутствуют неудовлетворенные зависимости. Если в процессе компиляции возникают ошибки, ни в коем случае нельзя компилировать с опцией ‘-i’   (игнорирование ошибок при сборке). В противном случае сервер долго не проживет и, естественно, никак нельзя гарантировать его безошибочную и стабильную работу.

После установки в каталоге /usr/local/apache2 у нас появился Апач, конфиг которого лежит в подкаталоге conf. Открываем httpd.conf и добавляем три строки в начало файла:

# vi /usr/local/apache2/conf/httpd.conf
SSLEngine on
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.key/server.key

Теперь запускаем Apache следующим образом:

# /usr/local/apache2/bin/httpd -startssl

И честно отвечаем на задаваемые вопросы.

Теперь при переходе в браузере по http://localhost/ должна появиться страница с сообщением: «It works!». То же самое происходит при переходе по https://localhost/. Это означает, что демон вполне работоспособен. Если при попытке запуска демон выдает ошибку, возможно, на 80-м или 443-м порту что-то уже висит. Проверить это можно так:

# netstat -p tcp -a —numeric-ports | grep *:80
# netstat -p tcp -a —numeric-ports | grep *:443

Если порт действительно занят, виновный процесс можно убить по PID или по имени, которые возвратят эти команды.

В любом другом случае ошибки не должно произойти — по умолчанию конфиг настроен наипростейшим образом, а права на файлы расставлены корректно.
Следующий шаг — инсталляция MySQL:

# tar -xf mysql-5.0.45.tar.gz
# cd mysql-5.0.45/

# ./configure
# make; make install

Теперь создадим группу и пользователя, с правами которого будет работать демон:

# groupadd mysql
# useradd -g mysql mysq
l

Далее у нас идет создание служебных баз данных и таблиц. Для этого переходим в подкаталог scripts и запускаем файл mysql_install_db:

# ./mysql_install_db

Просмотри внимательно результат стандартного вывода скрипта на наличие ошибок. Если все нормально, стартуем демон:

# /usr/local/bin/mysqld_safe &

По умолчанию администратором баз данных является пользователь root без пароля. Это очень хреново! В целях безопасности мы должны сразу установить свой пароль:

# /usr/local/bin/mysqladmin -u root password ‘новый пароль’

Все, MySQL больше не трогаем. Так как Apache и MySQL уже инсталлированы, при сборке PHP следует указать пути до apxs и mysql:

# tar -xf php-5.2.4.tar.bz2; cd php-5.2.4/
# ./configure —with-apxs2=/usr/local/apache2/bin/apxs \

—with-mysql=/usr/local
# make; make test; make install

Теперь мы должны заставить Apache распознавать PHP-файлы как исполняемые скрипты, а не просто выводить их содержимое в виде текста. Для этого идем в его конфиг и добавляем в начало файла три директивы AddType:

# vi /usr/local/apache2/conf/httpd.conf
AddType application/x-httpd-php .php
AddType application/x-httpd-php .phtml
AddType application/x-httpd-php-source .phps

После этого ищем строку «DirectoryIndex index.html» и меняем ее на «DirectoryIndex index.html index.html.var index.php». Перезапускаем httpd-демон:

# /usr/local/apache2/bin/apachectl restart

Далее создаем в /usr/local/apache2/htdocs каталог phpmyadmin и копируем в него все файлы из тарболла phpMyAdmin-2.10.2. Теперь можно проверить работоспособность Apache в связке с PHP+MySQL. Скопируем файл config.sample.inc.php в config.inc.php (тот, что лежит в /usr/local/apache2/htdocs/phpmyadmin), раскомментируем в нем строки controluser и controlpass, впишем туда пользователя root и его пароль и добавим в blowfish_secret любую строку из произвольных символов (она используется для идентификации cookie). Теперь идем на http://localhost/phpmyadmin/ и, если все правильно собрано, оказываемся в админке базы данных! Все, с установкой веб-сервера разобрались. Переходим к FTP.

Установка ProFTPd

В качестве FTP-сервера я давно для себя выбрал ProFTPd. Единственная проблема, возникающая при его использовании, заключается в том, что если закачка файлов производится с Windows-машин, то из названий русских файлов вырезаются буквы ы, ь, э, ю, я. Дело в том, что ProFTPd пропускает весь свой трафик через Telnet, который воспринимает символы с кодами 251-255 как управляющие последовательности и вырезает их. Но не стоит отчаиваться, такое поведение можно исправить небольшим вмешательством в файл src/netio.c. Просто удалим из него строки:

switch (mode) {
case IAC:
[[ чуть-чуть пропустим]] mode = cp;
continue;
}
break;
}

После этого смело компилируем:
# ./configure
# make; make install

Файл запуска установился как /usr/local/sbin/proftpd. Запусти его и проверь в FTP-клиенте адрес ftp://localhost/. Если каталог открылся, значит установка прошла успешно.

Вот и все!

Но в практическом плане пока наш сервер ничего собой не представляет. Для того чтобы запускать его в мир, необходима дальнейшая настройка.

Настройка

Для начала следует определиться, что нам действительно необходимо получить на выходе. Нарисуем примерно такую картину:
Наш сервер имеет доменное имя myservak.ru.
На сервере может располагаться любое количество сайтов, доменные имена которых Apache должен распознавать.
Сервер имеет статический IP-адрес с выходом в интернет через интерфейс eth0.
Снаружи должны быть видны следующие порты: http(80), ftp(21).
Все остальные порты должны быть закрыты на интерфейсе eth0, но открыты на всех остальных для администрирования сервера из доверенных сетей.
Право на редактирование каталога с web-файлами по FTP будут иметь только пользователи-владельцы сайтов под своими паролями.
Редактировать главный сайт компании myservak.ru по FTP будет только пользователь admin.
Все сервисы должны запускаться автоматически после перезагрузки системы.

Итак, создадим каталог /srv, где будем хранить наш сайт, и подкаталоги cgi-bin и htdocs для cgi-скриптов и для html-документов соответственно. Добавляем пользователя admin, которому в качестве домашнего каталога назначаем /srv, не забыв поменять владельца:

# mkdir -p /srv/{cgi-bin,htdocs}
# useradd -d /srv admin
# passwd admin
# chown admin /srv
# chmod 775 /srv

Теперь идем в /usr/local/etc/proftpd.conf и полностью удаляем секцию <Anonymous>. Таким образом мы перекроем кислород всем анонимным пользователям. Перезапускаем proftpd:

# killall proftpd
# /usr/local/sbin/proftpd

И пробуем зайти. После того как доступ по FTP будет открыт, можно смело закидывать html-документы в каталог /srv/htdocs. Теперь займемся настройкой Apache.

Открываем /usr/local/apache2/conf/httpd.conf и правим следующим образом: ServerAdmin — сюда пишем свой ящик; везде меняем /usr/local/apache2/htdocs на /srv/htdocs, а /usr/local/apache2/cgi-bin на /srv/cgi-bin. После внесенных изменений снова перезапускаем демон:

# /usr/local/apache2/bin/apachectl restart

Внимание! Строка «chmod 775 /srv» в нашем случае решающая. Так как владельцем каталога у нас является admin, а группа — root, доступ для них должен быть открыт полностью, чтобы можно было свободно манипулировать файлами по FTP и локально. Для всех остальных пользователей выставляются права только на чтение и на запуск скриптов. Только в этом случае можно гарантировать корректную работу и должный уровень безопасности.

Хотя *nix-серверы и считаются надежными, от перезагрузок не застрахован никто. И будет тоскливо, если после каждого включения нам придется стартовать все демоны вручную. Чтобы избежать проблем в будущем, лучше сразу развентилировать этот вопрос, поместив все стартовые файлы в каталог /etc/init.d. Кроме того, у нас появится возможность элегантно управлять сервисами (к примеру, service apache restart/stop/start).

В случае с Apache все решается достаточно просто — выполним команду:

# cp /usr/local/apache2/bin/apachectl /etc/init.d/apache

Для MySQL строка установки демона в качестве сервиса будет выглядеть так:

# cp /usr/local/bin/mysqld_safe /etc/init.d/mysql

К сожалению, для ProFTPD разработчики не позаботились выложить готовый скрипт для init.d.

Если ты не хочешь, чтобы все новые сервисы стартовали по умолчанию на пятом уровне запуска, создай ссылки в соответствующих rc.d вручную. Лично у меня все поднимается на третьем runlevel’е. После этого можешь смело перезагрузиться и протестировать работу.
Пару слов о безопасности

Не уделить внимание безопасности мы просто не можем. Ведь от того, насколько грамотно настроен доступ к нашему серверу снаружи, зависит и жизнь сайтов, которые у нас будут хоститься.

В первую очередь стоит обратить внимание на открытые порты. Совсем ни к чему, например, оставлять открытым порт на MySQL. Самый эффективный способ отфильтровать возможные вторжения — это использовать Iptables:

# iptables -A INPUT -i eth0 -p tcp -m multiport —dports 3306,…<Здесь через запятую можно указать порты, которые мы не будем оставлять открытыми наружу> -j REJECT —reject-with icmp-port-unreachable

Естественно, это будет работать только в том случае, если интерфейс eth0 смотрит в интернет.

Вот еще несколько советов по безопасности:
Ни в коем случае не используй простые пароли! Стойкий пароль должен состоять как минимум из восьми символов и включать чередующиеся заглавные, строчные буквы, спецсимволы и цифры.
Не устанавливай для разных административных задач одинаковые пароли.
Подумай несколько раз, прежде чем устанавливать права на файлы или каталоги. 777 — это далеко не лучшие права.
Добавление новых сайтов

Итак, у нас есть каталог /srv, в котором мы храним наш главный сайт. Но в случае хостинга одним сайтом, естественно, не обойтись. Можно, конечно, создать каталоги для других сайтов внутри /srv и обращаться к ним «http://myservak.ru/pupkin», но это очень неудобно, тем более что Apache обладает всеми возможностями для решения этой проблемы с помощью виртуальных хостов. Есть два вида виртуальных хостов: отдельные для каждого IP-адреса и использующие один IP (name-based хосты). Мы будем использовать последние. Теперь представим, что нам дали заказ на хостинг сайта number2.ru.

В первую очередь мы должны добавить группу для новых пользователей и создать в этой группе соответствующего пользователя:

# groupadd hosting
# useradd -d /home/number2 -g hosting number2
# passwd number2

Естественно, имя юзера не обязательно должно соответствовать названию сайта. Теперь создадим для пользователя домашний каталог и установим на него владельца и соответствующие права:

# mkdir /home/number2
# chown number2 /home/number2
# chmod 775 /home/number2

Здесь нужно создать каталог htdocs для хранения файлов сайта, cgi-bin для скриптов и журнальные файлы error.log и access.log:

# mkdir /home/number2/{htdocs,cgi-bin}
# chown number2 /home/number2/{htdocs,cgi-bin}
# chmod 775 /home/number2/{htdocs,cgi-bin}
# echo ‘###Log file for error logging###’ | tee /home/number2/error.log
# echo ‘###Log file for access logging###’ | tee /home/number2/access.log

Далее переходим в конфиг Apache и добавляем несколько строчек:

# vi /usr/local/apache2/conf/httpd.conf
#number2


<VirtualHost number2>
ServerAdmin admin@number2.ru
ServerName number2
DocumentRoot «/home/number2/htdoc»
ScriptAlias /cgi/ «/home/number2/cgi-bin»
ErrorLog /home/number2/error.log
CustomLog /home/number2/access.log common
</VirtualHost>

И немного правим /etc/hosts, добавляя туда локальный и внешний IP-адрес нашего сайта:

# vi /etc/hosts
127.0.0.1 number2
my.ext.ip.addr number2

В конфиге ProFTPd при этом никаких изменений делать не надо. Все, после этого можно смело заходить на http://number2.ru и на ftp://number2.ru.
Заключение

После того как фундамент готов, можно добавлять панель управления хостингом, почтовый сервер и много других примочек на твое усмотрение. Все зависит только от фантазии.

Удачки.
[ratings]