OpenVZ/Sharedhosting
< OpenVZ
(ALT-адаптированная выжимка из http://wiki.openvz.org/Shared_webhosting)
Сначала создаем нужное количество vz-контейнеров:
# vzctl create 101 --ostemplate altlinux-3.0 --config vps.basic -- # тут будет жить nginx # vzctl create 102 --ostemplate altlinux-3.0 --config vps.basic -- # а тут - MySQL # vzctl create 103 --ostemplate altlinux-3.0 --config vps.basic -- # это первый из контейнеров с апачем ... # vzctl create 111 --ostemplate altlinux-3.0 --config vps.basic -- # а это пусть будет последний
И назначаем ip:
# for i in `vzlist –o vpsid -H -a`; do echo "VPS $i"; vzctl set $i --ipaddr 172.16.1.$i --save; done
Ставим в каждый контейнер openssh-server:
# for i in `vzlist –o vpsid -H -a`; do echo "VPS $i"; vzctl exec $i apt-get install openssh-server; done
На хост-системе правим /etc/sysconfig/iptables - добавляем:
*nat -A PREROUTING -p tcp --dport 10122 -j DNAT --to-destination 172.16.1.101:22 -A PREROUTING -p tcp --dport 10222 -j DNAT --to-destination 172.16.1.102:22 ... -A PREROUTING -p tcp --dport 11122 -j DNAT --to-destination 172.16.1.111:22
Ставим в контейнеры по вкусу/потребностям mod_php, mod_perl, mod_fastcgi и остальное..
Ставим Mysql и вешаем его на порт 3306:
# vzctl exec 102 apt-get install MySQL-server # vzctl enter 102 и раскоментируем в /var/lib/mysql/my.cnf skip-networking
Теперь переходим к настройке Nginx В хост-системе в /etc/sysconfig/iptables добавляем
-A PREROUTING -p tcp -d REAL_IP --dport 80 -j DNAT --to-destination 172.16.1.101:80
Потом
# vzctl enter 101 # joe /etc/nginx/nginx.conf ... server { listen REAL_IP; server_name domain1.ru www.domain1.ru; location / { proxy_pass http://172.16.1.103; } } server { listen REAL_IP; server_name domain2.ru www.domain2.ru; location / { proxy_pass http://172.16.1.104; } } server { listen ANOTHER_REAL_IP; server_name domain3.ru www.domain3.ru; location / { proxy_pass http://172.16.1.103; } } ...
Далее в каждом контейнере с 103-его по 111-й настраиваются Apache и вуаля -- все работает!
Теперь остается по аналогии поставить и настроить ftp-доступ: В контейнеры ставим ftp-сервер
# for i in `vzlist –o vpsid -H -a`; do echo "VPS $i"; vzctl exec $i apt-get install proftpd; done
На хост-системе добавляем:
*nat -A PREROUTING -p tcp --dport 10121 -j DNAT --to-destination 172.16.1.101:21 -A PREROUTING -p tcp --dport 10221 -j DNAT --to-destination 172.16.1.102:21 ... -A PREROUTING -p tcp --dport 11121 -j DNAT --to-destination 172.16.1.111:21
TODO: дописать про почту (и централизованное логохранилище?)
Ссылки
- OpenVZ
- Про nginx в частности
- Зачем нужен nginx by Anton V. Yuzhaninov