Быстрый патч nginx конфигов пула при переносе серверов в ispmanager 6

В крайней 6 версии isp панели разработчики учинили конкретный дебилизмус, распределив fpm сокеты под каждый сайт и обозвав их тупо цифрами. Ранее это был один сокет на каждого пользователя и носил имя пользователя. Теперь сокет на каждай сайт, так: fastcgi_pass unix:/var/www/php-fpm/18.sock;

И вот решили вы переехать, импортируете в новую панельку 100-200 сайтов. Создался пул php-fpm конфигов и пул nginx конфигов. Циферки сокетов, естественно соответствовать должны для каждого сайта. Только вот nginx конфиги не импортировались, а создались по умолчанию полупустые. А в старых nginx конфигах циферки другие! Либо там вообще имя пользователя, а не циферка, если это старая версия isp. Приятно теперь поправить каждый конфиг? А если сетку 1000 сайтов переносим? Дебилы, блядь!

Перед процедурой, не забываем забекапить /etc/nginx на всякий, чтобы не обосраться если что.

tar -cvzf etc_nginx_`date '+%Y-%m-%d-%H-%M-%S'`.tar.gz /etc/nginx

На новом сервере сохраняем все сокеты из вновь созданных nginx конфигов в файлик себе:

grep -rn 'fastcgi_pass' /etc/nginx/vhosts > sockets.txt

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

Патчим все сокеты на новые:

IFS=$'\n';for str in $(cat sockets.txt) ; do file=$(echo $str | cut -d':' -f1); sock=$(echo $str | awk '{print $2 " " $3}' | sed 's/\//\\\//g');  sed -i "s/fastcgi_pass.*sock;/$sock/" $file;  done

Теперь циферки соответствуют конфигам php-fpm. Тяжело баранам это было встроить?

Убедимся, что не обосрались:

nginx -t

Патчим IP в конфигах на новый:

IFS=$'\n';for str in $(cat sockets.txt) ; do file=$(echo $str | cut -d':' -f1);  sed -i "s/OLD_IP_SERVER/NEW_IP_SERVER/g" $file;  done

Сложно баранам вот это было сделать?

Если не обосрались, перезагружаем конфиги

nginx -t
nginx -s reload

Если сайты нагруженные, поправим нужное кол-во дочерних процессов php-fpm ещё

for file in /etc/php/7.3/fpm/pool.d/pool.d/* ; do sed -i 's/pm.max_children = 5/pm.max_children = 15/' $file ; done

И  перезапустим сервис:

systemctl restart php7.3-fpm.service

И идем менять записи днс со своим списком:

cat sockets.txt | cut -d'/' -f6 | cut -d':' -f1 | sed 's/.conf//' > domains.txt

Если пул за клоудом, поздравляю, дрочиться долго — там нет массовой замены ip, можно написать скрипт по их api для этой цели, но это ещё дольше.

Оставить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *