วันอังคารที่ 28 เมษายน พ.ศ. 2558

VestaCP Script Change Server IP

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

ก็อปปี้ Script นี้ แล้ว Save
#!/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\t: $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\t: $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 ***";

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

วิธีใช้งาน
/usr/local/vesta/bin/v-change-server-ip <oldip> <newip>
ตัวอย่าง /usr/local/vesta/bin/v-change-server-ip 192.168.1.5 10.10.10.5

ปล. IP Server ต้องเปลี่ยนเอง

จัดการ Hosting ด้วย VestaCP

VestaCP คือ?

หลายเว็บไซต์ได้อธิบายเกี่ยวกับ VestaCP
http://www.thaiwebnews.com/vestacp/
http://www.hostpacific.com/introducing-vesta-cp/

ซึ่งพูดง่ายๆเลยว่า มันคือตัวจัดการ Hosting ที่แจกไว้ใช้กันฟรีๆ


การติดตั้ง
http://www.vestacp.com/#install

ตั้งค่าเพิ่มเติม
เปลี่ยนรหัสผ่าน #v-change-user-password username new-password
เปลี่ยน root mysql #nano /usr/local/vesta/conf/mysql.conf
แก้ไฟล์ HTML หน้าแรกเวลาเพิ่มโดเมน #nano /usr/local/vesta/data/templates/web/skel/public_html/index.html
apache เปิด mods-enabled
#cd /etc/apache2
#cp mods-available/mime_magic.load mods-enabled/mime_magic.load
#cp mods-available/mime_magic.conf mods-enabled/mime_magic.conf
#cp mods-available/cgi.load mods-enabled/cgi.load
#cp mods-available/include.load mods-enabled/include.load
#cp mods-available/headers.load mods-enabled/headers.load

ตั้งค่า timezone ให้ตรงใน php.ini
#nano /etc/php5/apache2/php.ini
แก้ไขเป็น date.timezone = Asia/Bangkok

อ่านรายละเอียดเพิ่มเติม http://www.vestacp.com/docs/

วันอังคารที่ 17 มีนาคม พ.ศ. 2558

วิธีการเขียน php ให้เพิ่ม user ใน ubuntu

ไฟล์ php
<?php
$user = $_GET['user'];
echo exec('sudo useradd -m -b /home -s /bin/bash $user');
?>

แก้ไขไฟล์  /etc/sudoers
#nano /etc/sudoers
โดยเพิ่ม
www-data ALL=(root) NOPASSWD: /usr/sbin/useradd

ทดสอบสอบรันไฟล์ php

วันอังคารที่ 3 มีนาคม พ.ศ. 2558

เขียน scrip python เพื่อสำรองฐานข้อมูล mysqldump

# nano autobk.py

#! Python Auto Backup database
import subprocess

cmd = 'mysqldump -uroot -pPassword  --all-database --lock-all-table | bzip2 -c > /backup/db-backup_$(date +%Y%m%d_%H%M%S).sql.bz2'
pid = subprocess.call(cmd, shell=True)

exit()

หากเป็นเซอร์เวอร์อื่น

#! Python Auto Backup database
import subprocess

cmd = 'mysqldump -p3306 -h 127.0.0.1 -uroot -pPassword  --all-database --lock-all-table | bzip2 -c > /backup/db-backup_$(date +%Y%m%d_%H%M%S).sql.bz2'
pid = subprocess.call(cmd, shell=True)

exit()

อ้างอิง http://apro45.blogspot.com/2014/05/crontab-mysqldump.html

FTP ด้วย bash shell script

สร้าง bash shell script ให้ดึงไฟล์ .sql.bz2 ใน /home/backup_db ไปไว้ที่ FTP โฟลเดอร์ file_db
  - [host] = hostname หรือ ip server
  - [user] = ftp username
  - [pass] = ftp password

ตัวอย่างไฟล์

#!/bin/sh

cd /home/backup_db

ftp -n [host] << EOF
prompt
user [user] [pass]
cd file_db
binary
mput *.sql.bz2
bye
EOF

exit 0


แก้ปัญหา mysqldump กับ crontab

วิธีการแก้ปัญหา เมื่อสั่ง Crontab สำรองข้อมูล MySQL แล้วไม่ทำงานให้ หรือทำงานแปปเดียว

- ต้องใส่ตัวเรียกเต็มๆของโปรแกรม เช่น /usr/local/bin/mysqldump , /usr/bin/bzip2

ตัวอย่างไฟล์สำรองข้อมูล MySQL

#!/bin/sh

today=$(date '+%d')

/usr/local/bin/mysqldump -uUSER -pPASS --all-database --lock-all-table| /usr/bin/bzip2 -c > /home/backup_db/db-date"$today".sql.bz2

วันจันทร์ที่ 23 กุมภาพันธ์ พ.ศ. 2558

การประยุกต์ใช้ Webmin Samba Ftp Apache และให้ User Authen กับ Radius (Ubuntu14.04)

1. ติดตั้ง webmin  ตามลิงก์ http://sulkiflee-n.blogspot.com/2013/02/webmin-ubuntu.html
#apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python
#wget http://prdownloads.sourceforge.net/sourceforge/webadmin/webmin_1.690_all.deb
#dpkg --install webmin_1.690_all.deb

2. ติดตั้ง Apache
#apt-get install apache2
#cd /etc/apache2/mods-enabled/
#ln -s ../mods-available/userdir.load
#ln -s ../mods-available/userdir.conf

3. ติดตั้ง Ftp
#apt-get install vsftpd
แก้ไฟล์ /etc/vsftpd.conf
#nano /etc/vsftpd.conf
local_umask = 002
anonymous_enable=YES
local_enable=YES
write_enable=YES
allow_writeable_chroot=YES
user_sub_token=$USER
local_root=/home/$USER
chroot_local_user=YES
chroot_list_enable=YES
chroot_list_file=/etc/vsftpd.chroot_list
#touch /etc/vsftpd.chroot_list

4. ติดตั้ง Samba
#apt-get install samba samba-common python-glade2 system-config-samba
แก้ไฟล์ /etc/samba/smb.conf
#nano /etc/samba/smb.conf
unix password sync = yes

[aritc]
comment = File Server Share
path = /var/www/html/aritc
browsable = yes
guest ok = yes
read only = no
create mask = 0755

[homes]
comment = User Directories
browseable = no
valid users = %S
writable = yes
create mask = 0755
directory mask = 0755

5. ติดตั้ง pam radius module  ตามลิงก์ http://opensource.cc.psu.ac.th/ติดตั้ง_pam_radius_module_บน_ubuntu
#apt-get install libpam-radius-auth

6. เพิ่ม User ใช้งาน
#sudo useradd -m -b /home -s /bin/bash user1.a
#ln -s /home/user1.a/public_html/ /var/www/html/user1.a

7. การใช้งาน
   - อัพโหลดไฟล์โดยใช้ samba แบบ public รูปแบบ \\ip server
   - อัพโหลดไฟล์ส่วนตัวโดยใช้ Ftp (YRU Authen) รูปแบบ ftp://ip server
     หากต้องการแชร์ ไฟล์ให้คนอื่นเห็น ให้สร้างโฟลเดอร์ public_html แล้วอัพไฟล์ใส่ในนั้น

8. การเรียกดูแบบ URL ผ่าน Browser
   - http://ip server

วันจันทร์ที่ 5 มกราคม พ.ศ. 2558

ตั้งค่าให้ Connect MySQL จากที่อื่นได้ (Ubuntu)

แก้ไขไฟล์  /etc/mysql/my.cnf
nano /etc/mysql/my.cnf

port = 3306  (ตั้งค่า port)
#bind-address = 127.0.0.1  (ใส่ # ข้างหน้า Access ได้จากทุกเครื่อง แต่ไม่ค่อยปลอดภัย)

เสร็จแล้วบันทึก แล้ว restart mysql
/etc/init.d/mysql restart

ขั้นต่อไปต้อง Grant Access ให้ User เพื่อให้ใช้ DB ได้
mysql -u root -p

mysql> GRANT ALL ON ชื่อฐาน.* TO ผู้ใช้@'%' IDENTIFIED BY 'รหัสผ่าน';
mysql> quit

ทดสอบเชื่อมต่อได้เลย