Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/chelit.ru/engine/classes/rss.class.php on line 51 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/chelit.ru/engine/classes/rss.class.php on line 51 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/chelit.ru/engine/modules/show.short.php on line 164 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/chelit.ru/engine/modules/show.short.php on line 164 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/chelit.ru/engine/modules/show.short.php on line 164 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/chelit.ru/engine/modules/show.short.php on line 164 Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /var/www/chelit.ru/engine/modules/show.short.php on line 164 Debian в ответах
 

Готовые решения для Debian


 

Отвязать чужой домен от своего IP

При обслуживании VPS столкнулся с частой проблемой привязки левых доменов к своим сайтам. Обращение к хостеру давало слабый и кратковременный эффект. Пришлось оборонятся самостоятельно.
Добавляем в htaccess
RewriteCond %{HTTP_HOST} !chelit.ru
RewriteRule (.*) - [G,L]

Этого достаточно, чтобы вместо чужого домена выдавало ошибку 410.
Спасибо groups.google.com и sariolla.ru за предоставленные материалы.
 

Копирование сайтов с базами

Архивирование сайтов одним файлом, с пропуском некоторых директорий(больших по объему, никогда не меняются, уже есть в архиве и т.д.).
#!/bin/bash
dirw="/var/www"
dirb="/var/www/data"
mkdir -p $dirb/$(date +%y.%m.%d)
site1="chelit.ru"
site2="italycar.ru"

base1="chelit"
base2="italycar"

tar cjf $dirb/$(date +%y.%m.%d)/$site1.tar.bz2 --exclude=$dirw/$site1/au $dirw/$site1 2> /dev/null
tar cjf $dirb/$(date +%y.%m.%d)/$site2.tar.bz2 $dirw/$site2 2> /dev/null

mysqldump -uлогин -pпароль $base1 > $dirb/$(date +%y.%m.%d)/$base1.sql
mysqldump -uлогин -pпароль $base2 > $dirb/$(date +%y.%m.%d)/$base2.sql

tar czf $dirb/$(date +%y.%m.%d)_ALL.tar $dirb/$(date +%y.%m.%d) 2> /dev/null
rm -rf $dirb/$(date +%y.%m.%d)
 

VPN: динамический IP с пробросом портов и апдейтом DNS

Дано: VPN с динамическим реальным IP (PPTP).
Требуется: внести изменения в iptables -t nat (привязка к исходящему интерфейсу, проброс портов во внутреннюю сеть), обновить A-запись в домене второго уровня у регистратора R01.

/etc/network/interfaces
auto ppp0
iface ppp0 inet ppp
provider my_pptp

/etc/ppp/peers# cat my_pptp
pty "pptp 10.1.1.1 --loglevel 0 --nolaunchpppd --nobuffer"
user юзер
+chap
defaultroute
persist
lock
maxfail 0
crtscts
#debug
nomppe
idle 0
noproxyarp
novj
novjccomp
asyncmap 0
noipx
nodeflate
nobsdcomp
noauth
#nodetach

/etc/ppp# cat chap-secrets
юзер  "*"  пароль

/etc/ppp# cat ip-up
#!/bin/bash
OUT1=$(ifconfig |grep -wo 123.123.12.* |cut --delimiter=' ' -f1) &> /dev/null

/sbin/iptables -F -t nat
/sbin/iptables -t nat -X
/sbin/iptables -t nat -A POSTROUTING -j SNAT -o ppp0 --to-source $OUT1
/sbin/iptables -t nat -A PREROUTING -p tcp -d $OUT1 --dport 12345 -j DNAT --to-destination 192.168.1.1:12345

sed -i s/123.123.[0-9]*.[0-9]*/$OUT1/ /etc/ppp/update-DNS.php
php /etc/ppp/update-DNS.php

/etc/ppp# cat update-DNS.php
<?
$client = new SoapClient(null,array
(
'location'   => 'https://partner.r01.ru:1443/partner_api.khtml',
'uri'        => 'urn:RegbaseSoapInterface',
'exceptions' => true,
'user_agent' => 'RegbaseSoapInterfaceClient',
'trace'      => 1
  ));
// не забыть создать пароль для API
$loginresult = $client->logIn('логин','пароль');

$client->__setCookie('SOAPClient',$loginresult->status->message);

$data = array(
'owner'        => '',
'data'         => '123.123.123.123',
'type_record'  => '',
'info'         => '',
       );
//123456=id записи у регистратора
$editrecord = $client->editRrRecord('123456', $data );

$logoutresult = $client->logOut();

P.S. Возможно потребуется :
aptitude install php5-cli
 

Добавление - удаление доменов и субдоменов

Создание нового домена, создание суб-домена, удаление суб-домена.

Заведение нового домена с виртуальными хостами в apache и nginx, а так же проверка работоспособности
#!/bin/bash
# скрипт создаёт инфраструктуру сайта, требуется доменное имя c указанием зоны

nd=$@
if [ $nd ]
then echo make new virtual domain $nd
else echo use: $0 new-domain.ru; exit
fi
d=`echo $nd| sed -r 's/\.[a-z]+$//g'`
t="chelit.ru" # название эталонного виртуального хоста

#DNS
cp /etc/bind/db.chelit /etc/bind/db.$nd
sed -i s/$t/$nd/g /etc/bind/db.$nd

echo "zone \"$nd\" IN{" >> /etc/bind/named.conf
echo "type master;" >> /etc/bind/named.conf
echo "notify no;" >> /etc/bind/named.conf
echo "file \"/etc/bind/db.$nd\";" >> /etc/bind/named.conf
echo "};" >> /etc/bind/named.conf

/etc/init.d/bind9 restart

# создаём директорию для нового сайта, -p без проверок и вопросов. установка прав доступа
mkdir -p /var/www/$nd
chown -R www-data:www-data /var/www/$nd

# создаём виртуальный хост apache на основе конфига рабочего сайта
cp /etc/apache2/sites-available/$t /etc/apache2/sites-available/$nd
sed -i s/$t/$nd/g /etc/apache2/sites-available/$nd
ln -s /etc/apache2/sites-available/$nd /etc/apache2/sites-enabled/

/etc/init.d/apache2 restart

# аналогично для Nginx
cp /etc/nginx/sites-available/$t /etc/nginx/sites-available/$nd
sed -i s/$t/$nd/g /etc/nginx/sites-available/$nd
ln -s /etc/nginx/sites-available/$nd /etc/nginx/sites-enabled/

/etc/init.d/nginx restart

#проверка работоспособности
if
wget -q  --spider $nd;
then echo done http://$nd
else echo fail!
fi
 

Поиск и замена

Глобальный поиск и замена по директориям
#!/bin/bash
text="italycar.ru"
newtext="chelit.ru"
domen="chelit.ru"
grep -lR $text  /var/www/$domen/ > /tmp/grep.txt
for i in $( cat /tmp/grep.txt ); do sed -i s/$text/$newtext/g $i; done