Виртуальный хостинг в Gentoo
Данная статья подойдет для организации либо небольшого провайдера, желающего предоставлять услуги виртуального хостинга: место под веб страницы, фтп, почта, домены, база данных и т. д. В качестве панели управления выбрана бесплатная панель Virtualmin, которая является модулем Webmin.
Что мы получим в итоге? Хостинг-клиентам можно будет предоставлять следующие услуги:
- размещение WEB сайтов, в том числе и SSL
- создание персонального FTP сервера (в случае, если для клиента имеется уникальный IP)
- поддержка DNS зоны
- поддержка базы данных MySQL
- поддержка сервисов электронной почты для домена клиента
- отчеты по WEB сайту (Webalizer)
- доступ к панели управления собственным аккаунтом (редактирование настроек, создание баз данных, поддоменов, почтовых ящиков и т. д.)
- дисковая квота и возможность установки лимитов на сервер
Для каждого клиента будет создаваться свой домашний каталог, в /var/www:
/var/www/client/cgi-bin каталог для размещения CGI скриптов /var/www/client/logs логи WEB сервера и FTP сервера /var/www/client/public_html DocumentRoot для основного WEB сайта клиента /var/www/client/public_html/stats директория с отчетами по WEB сайту (генерируются ежедневно) /var/www/client/php.ini персональный файл конфигурации PHP
Если у клиента несколько доменов/поддоменов, то они создаются в каталоге /var/www/client/domains и имеют аналогичную структуру.
Итак, приступаем! Сначала необходимо установить Gentoo на сервер, как описано в статье «Установка Gentoo«, затем нужно поставить почтовый сервер, как описано в статье «Почтовый сервер на Gentoo«. Сервер должен иметь доменное имя, (например devel.spnet.ru) и два IP адреса в разных подсетях класса С для поддержания DNS зон. Если все эти формальности соблюдены – идем дальше.
Добавляем USE флаги и разрешаем установку маскированных пакетов
cat >> /etc/portage/package.use << end-of-text media-gfx/imagemagick jpeg png tiff truetype xml wmf www-apache/mod_suphp mode-force end-of-text
cat >> /etc/portage/package.keywords << end-of-text dev-php5/ZendOptimizer ~x86 end-of-text
Устанавливаем пакеты, которые нужны большинству php программистов. Сначала скачайте дистрибутив ZendOptimizer с http://www.zend.com/products/zend_optimizer (в моем случае это ZendOptimizer-3.3.3-linux-glibc23-i386.tar.gz) и поместите его в папку /usr/portage/distfiles
emerge dev-php5/ZendOptimizer imagemagick PEAR-PEAR
Устанавливаем mod_suphp и другие необходимые пакеты
emerge mod_suphp Net-SSLeay bind bind-tools webalizer proftpd quota
Устанавливаем webmin
cd /tmp ; wget http://prdownloads.sourceforge.net/webadmin/webmin-1.470.tar.gz http://download.webmin.com/download/virtualmin/virtual-server-3.69.gpl.wbm.gz http://download.webmin.com/download/virtualmin/virtual-server-theme-7.1.wbt.gz http://klyaznik.ru/files/webmin.tgz; tar zxvf webmin-1.470.tar.gz -C /usr/libexec; mv /usr/libexec/webmin-1.420 /usr/libexec/webmin
Конфигурируем пакеты и добавляем их в автозагрузку, открываем порт 10000 в фаирволе
/usr/libexec/webmin/setup.pl ; emerge --config bind ; rc-update add proftpd default ; rc-update add named default ; rc-update add quota default ; sed -i -e 's#-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT#-A INPUT -p tcp -m tcp --dport 22 -j ACCEPTn-A INPUT -p tcp -m tcp --dport 10000 -j ACCEPT#g' /var/lib/iptables/rules-save ; /etc/init.d/iptables restart
Заходим в https://devel.spnet.ru:10000, идем в Webmin -> Webmin Configuration -> Webmin Modules. «Install from» устанавливаем в значение «From local file», в поле пишем «/tmp/virtual-server-3.59.gpl.wbm.gz», жмем кнопку «Install Module». теперь «Return to Webmin configuration» -> Webmin Themes. Устанавливаем тему, в поле рядом с «From local file» пишем «/tmp/virtual-server-theme-6.0.wbt.gz» и жмем кнопку «Install Theme». Теперь «Return to themes list», в окне «Current theme :» выбираем «Virtualmin Framed Theme» и жмем рядом кнопочку «Change».
Теперь конфигурируем virtualmin и другие пакеты:
tar zxvf /tmp/webmin.tgz -C /etc/webmin ;cp /etc/proftpd/proftpd.conf.sample /etc/proftpd/proftpd.conf
Правим файл /etc/suphp.conf
cat > /etc/suphp.conf << end-of-text [global] ;Path to logfile logfile=/var/log/apache2/suphp_log
;Loglevel loglevel=warn
;User Apache is running as webserver_user=apache
;Path all scripts have to be in docroot=/var/www
; Security options allow_file_group_writeable=false allow_file_others_writeable=false allow_directory_group_writeable=false allow_directory_others_writeable=false
;Check wheter script is within DOCUMENT_ROOT check_vhost_docroot=false
;Send minor error messages to browser errors_to_browser=true
;PATH environment variable env_path=/bin:/usr/bin
;Umask to set, specify in octal notation umask=0027
; Minimum UID min_uid=1000
; Minimum GID min_gid=100
[handlers] ;Handler for php-scripts x-httpd-php=php:/usr/lib/php5/bin/php-cgi x-httpd-php5=php:/usr/lib/php5/bin/php-cgi x-httpd-php4=php:/usr/lib/php4/bin/php-cgi x-httpd-phtml=php:/usr/lib/php5/bin/php-cgi
;Handler for CGI-scripts
x-suphp-cgi=execute:!self
end-of-text
Активируем mod_suphp в apache, изменяем список DNS серверов, делаем дополнительные действия, которые требуются для установки
sed -i -e 's#-D PHP5"#-D SUPHP"#g' /etc/conf.d/apache2 ; sed -i -e 's#dns_servers=".*"#dns_servers="127.0.0.1"#g' /etc/conf.d/net ; sed -i -e 's#nameserver .*#nameserver 127.0.0.1#' /etc/resolv.conf ; touch /var/log/user.log ; mkdir /etc/skel-www ; cp /etc/php/cgi-php5/php.ini /etc/skel-www
cat > /chroot/dns/etc/bind/named.conf << end-of-text
logging {
category lame-servers {
null;
};
category default {
null;
};
};
options {
directory "/var/bind";
listen-on-v6 { none; };
auth-nxdomain yes;
allow-recursion { 127.0.0.1; };
check-names master ignore;
check-names slave ignore;
check-names response ignore;
version "[REFUSED]";
pid-file "/var/run/named/named.pid";
};
zone "COM" { type delegation-only; };
zone "NET" { type delegation-only; };
zone "." IN {
type hint;
file "named.ca";
};
zone "localhost" IN {
type master;
file "pri/localhost.zone";
allow-update { none; };
notify no;
};
zone "127.in-addr.arpa" IN {
type master;
file "pri/127.zone";
allow-update { none; };
notify no;
};
end-of-text
sed -i -e 's#/dev/md3 / ext3 noatime 0 1#/dev/md3 / ext3 noatime,grpquota,usrquota 0 1#g' /etc/fstab
Добавляем задание cron для проверки дисковых квот:
crontab -e
0 3 * * 0 /usr/sbin/quotacheck -avugf
Добавляем пользователя localhost, от которого будут работать почтовые веб интерфейсы и вносим необходимые изменения в конфигурацию apache (замените 192.168.2.1 на Ваш первый IP адрес)
useradd -s /sbin/nologin -d /var/www/localhost localhost ; usermod -a -G localhost apache ; chown localhost:localhost /var/www/localhost ; chown localhost:localhost /var/www/localhost/htdocs/squirrelmail -R ; chown localhost:localhost /var/local/squirrelmail/attach -R sed -i -e 's#<VirtualHost *:80>#<VirtualHost 192.168.2.1:80>#g' -e 's#^NameVirtualHost *:80##NameVirtualHost *:80#g' /etc/apache2/vhosts.d/00_default_vhost.conf sed -i -e 's#DocumentRoot "/var/www/localhost/htdocs"#DocumentRoot "/var/www/localhost/htdocs"\nSuPHP_UserGroup localhost localhost#g' /etc/apache2/vhosts.d/default_vhost.include
Заходим в https://devel.spnet.ru:10000, Webmin -> Servers -> MySQL Database Server. Вводим логин root и пароль на базу данных. Теперь жмем Refresh Modules. Идем в Webmin -> System -> Disk Quotas. Жмем «Enable Quotas». После этого идем в Virtualmin -> System Settings -> Re-Check Config. Теперь идем в System Information -> Status и запускаем все не запущенные до сих пор службы. Идем в Virtualmin -> System Settings -> Server Templates. Жмем на «Custom» в столбце «BIND?». В окне «BIND DNS records for new domains» вписываем вместо 192.168.1.1 свой второй IP адрес, жмем внизу кнопочку «Save». Аналогично меняем 192.168.1.1 на свой второй IP в шаблонах «Email message». Идем в Virtualmin -> System Settings -> Bandwidth Monitoring, ставим «Bandwidth monitoring active?» в «Yes», жмем кнопку «Save».
Дополнительно можно включить автообновления Webmin и Vurtualmin: Webmin -> Webmin Configuration -> Upgrade Webmin -> Scheduled update. Ставим крыжики «Scheduled updating currently enabled», «Update from http://www.webmin.com», «Install modules that are not currently installed», «Update non-core modules as well», жмем «Save and Apply».
Немного повысим безопасность сервера, убрав лишние атрибуты на чтение
chmod o-rwx /etc/proftpd /etc/skel-www
Добавляем ротацию логов для proftpd
cat >>/etc/logrotate.d/syslog-ng <<end-of-text
# proftpd
/var/log/xferlog {
sharedscripts
postrotate
/etc/init.d/syslog-ng reload > /dev/null 2>&1 || true
endscript
}
end-of-text
За рамками данной статьи остались настройки лимитов и других параметров хостинга, а также grsec RBAC (Role Based Access Control), однако я готов ответить на Ваши вопросы. Приятного хостинга!