[VestaCP] Script Change Server IP

พอดีทดลองเล่น VestaCP แล้วพบว่าจะเปลี่ยน IP server ขั้นตอนการเปลี่ยนต้องเข้าไปแก้ไขไฟล์ config ของ httpd และ nginx แล้วยังต้องไปไล่แก้ ip ของแต่ละ user อีกที
เลยเอาไฟล์ ipswap ของ da มาแแก้ให้ใช้กับ Vesta ซะเลย เสร็จแล้วก็เอาไปไว้ใน folder เดียวกับคำสั่งต่างๆของ vesta ที่ /usr/local/vesta/bin/ โดยตั้งชื่อให้สอดคล้องกับคำสั่งอื่นๆว่า v-change-server-ip (อย่าลืม chmod 755 ด้วย)

/usr/local/vesta/bin/v-change-server-ip


#!/bin/sh

#script to change ips on a VestaCP server.
#usage:
# $0 <oldip> <newip>

LOG=/var/log/vesta/system.log

MYUID=`/usr/bin/id -u`
if [ "$MYUID" != 0 ]; then
        echo "You require Root Access to run this script";
        exit 0;
fi

if [ $# != 2 ] && [ $# != 3 ]; then
        echo "Usage:";
        echo "$0 <oldip> <newip> [<file>]";
        echo "you gave #$#: $0 $1 $2 $3";
        exit 0;
fi

OLD_IP=$1
NEW_IP=$2

HAVE_HTTPD=1
HAVE_NGINX=1

DATE=`date '+%F %X'`
BIN=`echo $0 | awk -F/ '{print $NF}'`

log()
{
        echo -e "$1";
        echo -e "$1" >> $LOG;
}

swapfile()
{
        if [ ! -e $1 ]; then
                log "Cannot Find $1 to change the IPs. Skipping...";
                return;
        fi

        TEMP="perl -pi -e 's/${OLD_IP}/${NEW_IP}/g' $1"
        eval $TEMP;

        log "$DATE $BIN $1	: $OLD_IP -> $NEW_IP";
}

if [ $# = 3 ]; then
        swapfile $3;
        exit 0;
fi


IPFILE_OLD=/usr/local/vesta/data/ips/$OLD_IP
IPFILE_NEW=/usr/local/vesta/data/ips/$NEW_IP
if [ ! -e $IPFILE_OLD ]; then
        echo -n "$IPFILE_OLD does not exist.  Do you want to continue anyway? (y/n) : ";
        read YESNO;
        if [ "$YESNO" != "y" ]; then
                exit 0;
        fi
else
        mv -f $IPFILE_OLD $IPFILE_NEW
        log "$DATE $0 $IPFILE_OLD	: $OLD_IP -> $NEW_IP";
fi

if [ "${HAVE_HTTPD}" -eq 1 ]; then
        if [ -e /etc/httpd/conf.d/${OLD_IP}.conf ]; then
                swapfile /etc/httpd/conf.d/${OLD_IP}.conf
                mv -f /etc/httpd/conf.d/$OLD_IP.conf /etc/httpd/conf.d/${NEW_IP}.conf
        fi
        swapfile /etc/httpd/conf.d/mod_extract_forwarded.conf
fi

if [ "${HAVE_NGINX}" -eq 1 ]; then
        if [ -e /etc/nginx/conf.d/${OLD_IP}.conf ]; then
                swapfile /etc/nginx/conf.d/${OLD_IP}.conf
                mv -f /etc/nginx/conf.d/$OLD_IP.conf /etc/nginx/conf.d/${NEW_IP}.conf
        fi
fi

swapfile /etc/hosts

ULDDU=/usr/local/vesta/data/users

for i in `ls $ULDDU`; do
{

        if [ ! -d $ULDDU/$i ]; then
                continue;
        fi

        swapfile $ULDDU/$i/web.conf
        swapfile $ULDDU/$i/dns.conf
        for j in `ls $ULDDU/$i/dns/*.conf`; do
        {
                swapfile $j
        };
        done;

        if [ "${HAVE_HTTPD}" -eq 1 ]; then
                swapfile /home/$i/conf/web/httpd.conf
        fi
        if [ "${HAVE_NGINX}" -eq 1 ]; then
                swapfile /home/$i/conf/web/nginx.conf
        fi

        for j in `ls /home/$i/conf/dns/*.db`; do
        {
                swapfile $j
        };
        done;

};
done;

#this is needed to update the serial in the db files.
if [ "${HAVE_HTTPD}" -eq 1 ]; then
   service httpd restart
fi
if [ "${HAVE_NGINX}" -eq 1 ]; then
   service nginx restart
fi

echo "*** Done swapping $OLD_IP to $NEW_IP ***";

ปล. IP Server ต้องเปลี่ยนเองนะครับ script นี้ไม่ได้เปลี่ยนให้

รบกวนหน่อยครับ พอดีตอนลงลืม root password ของ mysql มันดูตรงไหนได้บ้างอ่ะครับ

มีไฟล์ mysql.conf เหมือนๆกับ da ครับ เปิดดูในไฟล์ได้เลย
อยู่ใน /usr/local/vesta/conf/mysql.conf ครับ

ส่วน passwd admin ที่เข้าหน้า cp ก็สั่ง passwd admin เหมือนๆกับ da เลย

ขออนุญาตรวม+ส่ง patch กลับไปทางต้นฉบับนะครับ

ตัวนี้ใช้กับ private ip ได้ไหมครับ

ได้ครับ เพราะไม่มีปัญหาเรื่อง license เหมือน DA
ที่ทดสอบอยู่ก็ติดตั้วบน 192.168.

จะมีปัญหาเรื่องลิขสิทธ์หรือเปล่า เพราะเอาไฟล์ของ DA มาแก้ไข ไม่ได้เขียนขึ้นมาใหม่ ชื่อตัวแปลก็ไม่ได้แก้ แต่ถ้าส่งไปแล้วทางนั้นเขาเอาไปเป็นแนวทางแล้วเขียนใหม่ก็ไม่น่ามีปัญหา