Tag: backup/restore

  • กรณีศึกษา การสำรองข้อมูล Neo4j Graph Database

    สวัสดีครับ

    บทความนี้เป็นกรณีศึกษาเกี่ยวกับการสำรองข้อมูล Neo4j Graph Database เรื่องมันมีอยู่ว่า สำนักนวัตกรรมดิจิทัลและระบบอัจฉริยะ หรือชื่อเดิมคือ ศูนย์คอมพิวเตอร์ ได้พัฒนาระบบเอกสารอิเล็คทรอนิกส์ เวอร์ชั่นใหม่ ซึ่งได้เปลี่ยนเทคโนโลยีในการเก็บข้อมูลมาใช้ Neo4j Graph Database แทนของเดิมที่ใช้ Microsoft SQL Server จึงต้องมีการวางแผนความเสี่ยงในเรื่องของการสำรองข้อมูล คราวนี้ตัวผมเองไม่ได้มีความเชี่ยวชาญหรือรู้จักกับ Neo4j Graph Database มากเท่าไหร่ แต่น้องที่สำนักนวัตกรรมที่เป็นผู้พัฒนาระบบและเรียนรู้การใช้งานก็ได้ไปศึกษา ทดสอบวิธีการส่งออกและนำเข้าข้อมูลจนมีความรู้ ความเข้าใจ ก็ได้มาถ่ายทอดต่อ ส่วนตัวผมเองก็นำวิธีการนี้ไปบวกกับความรู้เรื่อง Batch Script + PowerShell เล็กน้อย ทำเป็นระบบสำรองข้อมูลขึ้นมา ซึ่งขณะนี้ได้ทดสอบมาประมาณ 1 เดือนก็ยังสามารถทำงานได้ จึงจะขอมาเล่าสู่กันฟังในบทความนี้ครับ

    ข้อมูลที่ได้รับมาก็คือ

    1. Neo4j Graph Database ที่ใช้เป็นรุ่น Community ข้อดีคือ ไม่มีค่าใช้จ่ายในการใช้งาน แต่จะมีข้อจำกัดคือ ในการส่งออกและนำเข้าไฟล์ฐานข้อมูลนั้นจะไม่มีเครื่องมือให้ใช้งานมากมายจะต้องใช้คำสั่่งผ่านทาง Command Line

    2. ข้อจำกัดอีกอย่างคือ การส่งออกไฟล์นั้นจะทำในขณะ Neo4j ทำงานอยู่ไม่ได้ ต้องหยุดการทำงานก่อนเสร็จแล้วจึงทำการสตาร์ท Neo4่j ขึ้นมาทำงานใหม่

    นำข้อมูลที่ได้มาวางแผนการเขียน Script

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

    – เนื่องจากมีหลายขั้นตอนในการทำงานจีงใช้วิธีเขียนไฟล์ Script แยกการทำงานออกไป เช่น

    • Batch File ชื่อ neo4j-stop.bat เอาไว้หยุดการทำงาน Neo4j
    • Batch File ชื่อ neo4j-dump.bat เอาไว้ส่งออกไฟล์ฐานข้อมูล Neo4j ออกมา

    เมื่อได้รับข้อมูลและวางแผนการทำงานเรียบร้อยแล้ว จึงเริ่มต้นเขียน Script ตามลำดับขั้นตอนดังนี้

    1. สร้าง Batch File ชื่อ neo4j-stop.bat เอาไว้สำหรับหยุดการทำงานของ Neo4j จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    for /f %%a in (‘powershell -Command “Get-Date -format ‘HH:mm:ss’”‘) do set “TimeStart=%%a”echo === Start Backup Neo4j On %DATE% %TimeStart% === > log.txt

    net stop neo4j >> log.txt

    call neo4j-dump.bat

    อธิบายได้ดังนี้
    – เริ่มต้นจะมีการรับค่าวันและเวลาปัจจุบัน คือ %DATE% และ %TimeStart%
    – จากนั้นจึงเริ่มใช้คำสั่งหยุดการทำงานของ Neo4j
    – สังเกตว่าทุกคำสั่งจะมีการส่งออกไปเก็บที่ log.txt
    – เสร็จแล้วจะมีการเรียก Batch Script neo4j-dump.bat ให้ทำงานต่อ

    2. สร้าง Batch File ชื่อ neo4j-dump.bat เอาไว้สำหรับส่งออกไฟล์ Neo4j จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    for /f %%a in (‘powershell -Command “Get-Date -format ‘HH:mm:ss’”‘) do set “TimeDumpStart=%%a”

    echo == Start Dump Database On %TimeDumpStart% == >> log.txt

    neo4j-admin dump –database=neo4j –to=C:\neo4j_dump\backup_%date:~10,4%%date:~4,2%%date:~7,2%.dump > logtmp.txt 2>> log.txt & call neo4j-start.bat

    อธิบายได้ดังนี้
    – จะมีคำสั่ง dump ฐานข้อมูล Neo4j ออกมาเก็บไว้ที่ C:\neo4j_dump ตั้งชื่อไฟล์ว่า backup ต่อด้วยวันที่สร้าง เช่น backup_20220531.dump
    – เสร็จแล้วจะมีการเรียก Batch Script neo4j-start.bat ให้ทำงานต่อ

    3. สร้าง Batch File ชื่อ neo4j-start.bat เอาไว้สำหรับสตาร์ทการทำงานของ Neo4j จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    net start neo4j >> log.txt

    call backup-to-nas03.bat

    อธิบายได้ดังนี้
    – จะมีคำสั่งสตาร์ทการทำงานของ Neo4j
    – เสร็จแล้วจะมีการเรียก Batch Script backup-to-nas03.bat ให้ทำงานต่อ

    4. สร้าง Batch File ชื่อ backup-to-nas03.bat เอาไว้สำหรับส่งไฟล์สำรองข้อมูล Neo4j ไปเก็บยัง Nas Server Backup จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    for /f %%a in (‘powershell -Command “Get-Date -format ‘HH:mm:ss’”‘) do set “TimeSendNas03Start=%%a”

    echo == Start Send Backup File to Nas03 On %TimeSendNas03Start% == >> log.txt

    net use z: \\nas03.psu.ac.th\backup2\docs /user:[user] [password] >> log.txt

    “C:\Program Files\7-Zip\7z.exe” a -tzip z:\docs_db_%date:~10,4%%date:~4,2%%date:~7,2%.zip C:\neo4j_dump\backup_%date:~10,4%%date:~4,2%%date:~7,2%.dump >> log.txt

    net use z: /delete /yes >> log.txt

    for /f %%a in (‘powershell -Command “Get-Date -format ‘HH:mm:ss’”‘) do set “TimeEnd=%%a”

    echo === Finish All Process Backup Neo4j On %DATE% %TimeEnd% === >> log.txt

    xcopy log.txt C:\admin-scripts\logs\log_%date:~10,4%%date:~4,2%%date:~7,2%.txt*

    Powershell.exe -executionPolicy ByPass -noexit -File C:\admin-scripts\sendmail.ps1

    อธิบายได้ดังนี้
    – จะมีคำสั่งสำหรับสร้าง Map Drive z: ที่ Mount มาจาก Nas Server Backup

       – /user:[user] [password] คือ parameter ที่เป็นการระบุชื่อผู้ใช้และรหัสผ่านที่มีสิทธิ์เข้าถึงพื้นที่ที่กำหนดไว้

    – จะใช้โปรแกรม 7zip ทำการบีบอัดไฟล์ backup ที่ได้สร้างขึ้นจากข้อที่ 2 ตั้งชื่อว่า docs_db ต่อด้วยวันที่สร้าง เช่น docs_db_20220531.zip ไฟล์ดังกล่าวจะไปสร้างที่ Nas Server Backup โดยตรง
    – เสร็จแล้วจะมีคำสั่ง Powershell เรียกไฟล์ sendmail.ps1 ให้ทำงานต่อ

    5. สร้างไฟล์ Powershell ชื่อ sendmail.ps1 เอาไว้สำหรับส่งเมลแจ้งไปยังผู้ดูแลพร้อมกับส่ง log.txt ไปกับอีเมลด้วยเพื่อให้สามารถตรวจสอบได้

    $DateTime = Get-Date -format ‘yyyy-MM-dd’
    $From = “docsdb@psu.ac.th”
    $To = “somchai.wa@psu.ac.th”
    $Copy = “somchai.wanathanasin@gmail.com”
    $Attachment = “C:\admin-scripts\log.txt”
    $Subject = “Server DocsDB Backup Successfully on $DateTime”
    $Body = “Dear Admin,

    The System send log file backup docsdb.Please see details in attached file.

    Thank you”
    $SMTPServer = “smtp.psu.ac.th”
    $SMTPPort = “25”

    Send-MailMessage -From $From -to $To -Cc $Copy -Subject $Subject -Body $Body -SmtpServer $SMTPServer -Port $SMTPPort -Attachments $Attachment

    stop-process -id $PID -Force

    อธิบายได้ดังนี้
    – ใน Powershell จะมีคำสั่งที่ใช้ในการส่งเมลคือ Send-MailMessage ซึ่งจะประกอบไปด้วยพารามิเตอร์หลายค่าที่จะต้องระบุให้ถูกต้อง โดยด้านบนจะมีการสร้างตัวแปรต่าง ๆ เพื่อเก็บค่าไว้ นำไปใช้ในการส่งอีเมล
    – ข้อสังเกตคือ ด้านล่างสุดจะมีคำสั่ง stop-process -id $PID -Force คำสั่งนี้เป็นการสั่งให้ Powershell หยุดทำงานคือปิดตัวลงไปทันทีที่ทำงานเสร็จ เพราะเคยพบปัญหาว่าเมื่อมีการรัน Script นี้แล้ว Process Powershell จะยังคงเปิดอยู่ ทำให้ Script ทำงานผิดพลาด

    6. จะสร้าง Batch File Script ที่ชื่อ backup-docsdb.bat เอาไว้สำหรับระบุพื้นที่เก็บ Script ไฟล์ทั้งหมดและทำการเรียกไฟล์ neo4j-stop.bat ให้ทำงานเป็นลำดับแรก จะมีคำสั่งที่เขียน ดังนี้

    @echo off

    cd C:\admin-scripts

    call neo4j-stop.bat

    อธิบายได้ดังนี้
    – Script ที่เขียนทั้งหมดจะทำงานอยู่ที่ C:\admin-scripts รวมทั้ง log ไฟล์ก็จะเก็บอยู่ที่นี้

    7. เพื่อให้กระบวนการสำรองข้อมูลทำงานอัตโนมัติทุกคืนตอนเวลา 02:00 น. โดยจะต้องไปสร้าง Task Schedule ใน Windows แล้วเรียกไฟล์ backup-docsdb.bat ให้ทำงานอัตโนมัติ

    8. ตัวอย่างเมลที่ส่งมาแจ้งผู้ดูแล มีดังนี้

    ขอจบการเขียนบทความแต่เพียงเท่านี้ หวังว่าผู้อ่านคงได้ประโยชน์ไปไม่มากก็น้อย

    ขอบคุณครับ

  • วิธี Backup PSU Email ด้วย Thunderbird

    เนื่องจาก PSU Email ให้พื้นที่ปัจจุบัน 1GB ซึ่ง อาจจะไม่เพียงพอต่อความต้องการของผู้ใช้บางท่าน หรือ บางท่านต้องการสำรองข้อมูล Email เก็บไว้ในเครื่องคอมพิวเตอร์

     ซึ่งสามารถทำได้ โดยใช้งานผ่านโปรแกรม Mozilla Thunderbird เชื่อมต่อกับ PSU Email ด้วย IMAP อีกทั้ง สามารถส่ง Email ออกได้จากทั่วโลกผ่าน smtp2.psu.ac.th และ ตัวอย่างต่อไปนี้ จะสร้างพื้นที่จัดเก็บบนเครื่องคอมพิวเตอร์ ไว้ใน D:\MyBackup

    (รายละเอียดของ PSU Email สามารถอ่านได้ที่ http://www.cc.psu.ac.th/staffemail)

    มีวิธีการดังนี้

    1. Download Mozilla Thunderbird (รุ่นล่าสุด 24.3.0) จาก http://www.mozilla.org/en-US/thunderbird/

     

    คลิกที่ Thunderbird Free Download แล้ว Save File ลงเครื่อง

    2. Double Click ไฟล์ ที่ Download มา (Thunderbird Setup 24.3.0.exe)

    3. จากนั้น ใช้ Next Technology คือ Yes, Next, Next, Install และ Finish

    4. จากหน้านี้ คลิก Set as Default

     5. คลิก Skip this and use my existing email

    6. กรอกข้อมูล ให้ครบ แล้ว คลิก Continue แล้ว คลิก Manual Config

    7. กรอกข้อมูลตามนี้ แล้ว คลิก ปุ่ม Advanced Config

    8. คลิกที่ Local Folder, คลิก Browse แล้ว เลือก D:\MyBackup (แล้วแต่จะสร้าง Folder)

    9. หน้าต่างนี้ คลิก Restart

    10. ด้านขวามือ คลิกขวา ที่ Local Folders แล้ว คลิก New Folder ….

     

    11. ตั้งชื่อ PSUEmail แล้วคลิก Create Folder

     12. เมื่อต้องการ เก็บสำเนา (Copy) หรือ ย้าย (Move) จดหมายจาก INBOX ของ PSU Email มาเก็บไว้ใน Local Folders บนเครื่องคอมพิวเตอร์ของเท่าน ก็ให้ทำการเลือกจดหมายที่ต้องการ แล้ว คลิกขวา (Right Click) แล้ว เลือก Copy To หรือ Move To ไปยัง Local Folder > PSUEmail

    เท่านี้ ก็ สามารถ เก็บจดหมายที่ต้องการไว้ในเครื่องได้แล้ว และสามารถทำการ สำรอง D:\MyBackup เอาไว้ใน Handy Drive, DVD หรือ External Hard disk ได้

    13. เมื่อต้องการนำมาใช้งาน ก็เพียงแค่ Copy ลงไปในเครื่อง แล้ว ทำตามขั้นตอน ข้อ 8 และ 9 ก็จะสามารถใช้งาน Email ที่เก็บไว้ได้ ดังตัวอย่างนี้

    14. สำหรับ การใช้งาน ThunderBird ให้สามารถใช้ภาษาไทยได้อย่างถูกต้อง และเป็นสากล ต้องตั้งค่าให้ ภาษาไทยใช้ Character Encoding เป็น UTF-8 โดยคลิกที่ Menu > Options แล้ว คลิกที่ Display > Advanced แล้ว เปลี่ยน Font for เป็น Thai และ ตั้งค่า Outgoing mail, Incoming Mail เป็น UTF-8 ตามภาพ แล้วคลิก OK

    หวังว่าจะเป็นประโยชน์ครับ

  • วิธีตรวจสอบเว็บไซต์ที่โดน Hack #11

    ตั้งแต่ วิธีตรวจสอบเว็บไซต์ที่โดน Hack #1 เป็นต้นมา เป็นการแสดงให้เห็นถึง ปัญหา, การตรวจสอบ, การค้นหา หลังจากเกิดปัญหาแล้วทั้งสิ้น ก็จะเห็นได้ว่า ยุ่งยาก และเป็นเรื่องยากมาก ที่จะค้นหา Backdoor ให้หมด และการจะกำจัดให้หมดนั้นเป็นภาระอย่างมาก

    ในบทความนี้ จะกล่าวถึง การสำรองข้อมูลไว้ พร้อมๆกับ สามารถตรวจสอบได้ว่า มี Backdoor ใดเกิดขึ้น, มีการแก้ไขไฟล์เพื่อวาง Backdoor ไว้บ้าง, มีการเปลี่ยนแปลงไฟล์ของระบบเป็น Backdoor บ้างหรือไม่ และยังสามารถ กู้ระบบกลับมาได้ แล้วจึงดำเนินการป้องกันไม่ให้เกิดขึ้นซ้ำอีกได้

    การสำรองข้อมูล หรือการ Backup มี 2 แบบ

    1. Full Backup: สำรองทุกไฟล์และไดเรกทอรี่
    2. Incremental Backup: สำรอง “เฉพาะ” ไฟล์และไดเรกทอรี่ ที่มีการเพิ่ม หรือเปลี่ยนแปลง เท่านั้น

    เครื่องมือในการ Backup มีหลายอย่าง ในบทความนี้ ขอใช้ tar เพราะสามารถใช้งานได้ง่าย
    โดยยกตัวอย่าง เป็นการ Backup /var/www/joomla15

    1. Full Backup ทำได้โดยการสร้างไฟล์ fullbackup.sh และมีข้อมูลดังนี้

    d=$(date "+%Y%m%d%H%M%S")
    cp /dev/null joomla15.snar
    tar -zcvf joomla15-full-$d.tar.gz -g joomla15.snar /var/www/joomla15

    2. Incremental Backup ทำได้โดยการสร้างไฟล์ incrementalbackup.sh และมีข้อมูลดังนี้

    d=$(date "+%Y%m%d%H%M%S")
    tar -zcvf joomla15-inc-$d.tar.gz -g joomla15.snar /var/www/joomla15

    โดยคำสั่ง tar มีคำสั่งเพิ่มเติม เล็กน้อย คือ -g ตามตัว joomla15.snar ซึ่ง จะเก็บสถานะของการ Backup ล่าสุดเอาไว้ ทำให้สามารถทราบได้ว่า มีต้อง Backup ไฟล์ใดบ้าง, ส่วน ชื่อไฟล์ .tar.gz ก็จะนำหน้าด้วย วันเวลานาที ของการทำ backup ไว้

    เมื่อทำคำสั่ง

    sh fullbackup.sh

    จะได้ไฟล์นี้

    joomla15-full-20140105004433.tar.gz

    ต่อมา สมมุติ มีการโจมตี Joomla ด้วยช่องโหว่ของ JCE แบบนี้

    jce01

    เมื่อใช้คำสั่ง

    find /var/www/ -name "*.php" -type f | grep 'images/stories'

    ได้ผลดังนี้

    /var/www/joomla15/images/stories/0day.php

    และ สมมุติ Hacker ใช้งาน Backdoor 0day.php ดังกล่าวทาง URL

    http://localhost/joomla15//images/stories/0day.php

    และ แก้ไขไฟล์

    /var/www/joomla15/CREDITS.php

    ดังนี้

    jce02

    สรุปคือ Hacker สามารถ สร้างและเปลี่ยนแปลงไฟล์

    /var/www/joomla15/images/stories/0day.php
    /var/www/joomla15/CREDITS.php

    เมื่อใช้คำสั่ง

    sh incrementalbackup.sh

    จะได้ไฟล์

    joomla15-inc-20140105021906.tar.gz

    วิธีตรวจสอบ ไฟล์ที่เพิ่มเข้ามา และมีการเปลี่ยนแปลง ใช้คำสั่ง diff โดยเอารายการของไฟล็ใน .tar.gz มาเปรียบเทียบกัน ด้วยคำสั่ง

    diff <(tar -ztvf joomla15-full-20140105004433.tar.gz) <(tar -ztvf joomla15-inc-20140105021906.tar.gz) |grep '>'

    ผลที่ได้คือ จะทราบว่ามีไฟล์ ต่อไปนี้ เพิ่ม/เปลี่ยนแปลง

    > -rw-r--r-- www-data/www-data 15571 2014-01-05 02:10 var/www/joomla15/CREDITS.php
    > -rw-r--r-- www-data/www-data 14315 2014-01-05 01:55 var/www/joomla15/images/stories/0day.php

    หาก ต้องการไฟล์ต้นฉบับของ CREDITS.php ก็ใช้คำสั่ง

    tar -zxvf joomla15-full-20140105004433.tar.gz var/www/joomla15/CREDITS.php

    ก็สามารถกู้ไฟล์เดิมกลับมาได้ครับ

    ขอให้โชคดี

  • hands on backup joomla website and restore

    เรื่อง hands on backup joomla website and restore นี้จัดเตรียมโดยใช้ Oracle VM VirtualBox เพื่อฝึกปฏิบัติเกี่ยวกับการ backup website ในตัวอย่างจะใช้ joomla web site ซึ่งการ backup คงจะมีหลายแบบตามชนิดของการตั้ง website ในกรณีนี้ก็จะเป็นแบบตั้ง server เองแล้วใช้ apache web server + mysql server ที่ติดตั้งเอง

    สภาพแวดล้อมที่เตรียมมีดังนี้
    ubuntu router: มี Fix IP Address 10.0.100.1 (แจก DHCP IP Address ให้แก่ server1, server2 และ client)
    server1: 10.0.100.206 (joomla website รันบน apache web server)
    server2: 10.0.100.207 (backup)
    client: 10.0.100.205 (เพื่อใช้งาน ssh ผ่านทาง terminal และเพื่อใช้งาน firefox web browser)

    KM4-backup-diagram

    รูปภาพระบบทดสอบนี้

     

    การเตรียม VM
    ดาวน์โหลด [ ubunturouter-dhcp.ova  1.1GB ]  [ ubuntuserver-lamp.ova  1.2GB ] [ linuxmint15-live.ova 81KB]  [ linuxmint-15-mate-dvd-32bit.iso  1.0GB ] หรือได้รับแผ่น DVD ไฟล์ทั้งหมดนี้
    แล้วทำดังนี้
    1. ทำ import ไฟล์ ubunturouter-dhcp.ova ตั้งชื่อว่า ubuntu router ตั้ง network adapter1: NAT, ตั้ง network adapter2: internal network (ตั้ง name: intnet1)
    2. ทำ import ไฟล์ ubuntuserver-lamp.ova ตั้งชื่อว่า server1 ตั้ง network adapter1: internal network (ตั้ง name: intnet1)
    3. ทำ import ไฟล์ ubuntuserver-lamp.ova อีกครั้ง ตั้งชื่อว่า server2 ตั้ง network adapter1: internal network (ตั้ง name: intnet1)
    4. ทำ import ไฟล์ linuxmint15-live.ova ตั้งชื่อว่า client ตั้ง network adapter1: internal network (ตั้ง name: intnet1) และตั้งค่า Storage ใช้ CD/DVD ด้วยไฟล์ linuxmint-15-mate-dvd-32bit.iso

    หมายเหตุ เครื่อง 1,2 และ 3 เปิดเครื่องเข้าใช้ด้วย login mama / password 123456

    การเตรียมทำ joomla site ทดสอบ
    1. สร้าง database ที่ต้องการติดตั้ง ตัวอย่าง สร้าง database ชื่อ testdatabase ใช้คำสั่ง

    mysql -uroot -p123456 -e "CREATE DATABASE testdatabase CHARACTER SET 'UTF8';"

    2. กำหนดสิทธิ์การใช้ database testdatabase ให้แก่ user ตัวอย่างสร้าง user ชื่อ mamamysql โดยมีรหัสผ่านว่า mamapass ใช้คำสั่ง

    mysql -uroot -p123456 -e "grant all privileges on testdatabase.* to 'mamamysql'@'localhost' identified by 'mamapass' ;"

    3. เตรียมพื้นที่สำหรับติดตั้ง joomla ไว้ที่ /var/www/testjoomla ด้วยคำสั่ง

    sudo mkdir -p /var/www/testjoomla

    4. ดาวน์โหลดแฟ้ม joomla 2.5.9 มาเก็บไว้ด้วยคำสั่ง

    wget http://ftp.psu.ac.th/pub/joomla/Joomla_2.5.9-Stable-Full_Package.tar.gz -P /tmp

    แล้วแตกแฟ้มออกมาเก็บไว้ที่ /var/www/testjoomla ด้วยคำสั่ง

    sudo tar -zxvf /tmp/Joomla_2.5.9-Stable-Full_Package.tar.gz -C /var/www/testjoomla

    5. แล้วปรับสิทธิ์เจ้าของ /var/www/testjoomla ให้แก่ apache ด้วยคำสั่ง

    sudo chown -R www-data.www-data /var/www/testjoomla

    6. ต่อไปต้องติดตั้งปรับแต่งระบบ joomla ครั้งแรก เปิด browser (firefox, chrome, Internet Explorer ฯลฯ) แล้วพิมพ์

    http://10.0.100.206/testjoomla

    (หมายเหตุ 10.0.100.206 คือ ip address server ที่ติดตั้ง Joomla)

    ขั้นตอน 1 : Choose language (เลือกภาษา) ให้ click ปุ่ม Next (หรือต่อไป)
    ขั้นตอน 2 : Pre-Installation Check(ตรวจสอบระบบก่อนติดตั้ง) ให้ click ปุ่ม Next (หรือต่อไป)
    ขั้นตอน 3 : License(ลิขสิทธิ์) ให้ click ปุ่ม Next (หรือต่อไป)
    ขั้นตอน 4 : Database Configuration(การตั้งค่าฐานข้อมูล) ให้ใส่ค่าดังนี้ (อย่าลืมใส่ข้อมูลชิดซ้าย ห้ามมีช่องว่าง)
    Database type = mysqli(เลือกที่มี i) (ความแตกต่างระหว่าง mysqli และ mysql)
    Host Name = localhost
    Username = mamamysql
    Password = mamapass
    Database Name = testdatabase เสร็จแล้ว click Next (หรือต่อไป)
    ขั้นตอน 5 : FTP Configuration (ตั้งค่า FTP) ให้ click ปุ่ม Next (หรือต่อไป)
    ขั้นตอน 6 : Main Configuration (ตั้งค่าหลักของ เว็บ) ให้ใส่ค่าดังนี้
    Admin Username = ไม่ต้องแก้ไข ทิ้งไว้เหมือนเดิมคือ admin
    Admin Password = 123456
    Confirm Admin Password = 123456
    อย่าลืม ต้อง Click Install Sample Data (ติดตั้งข้อมูลตัวอย่าง) แล้วกด Next (หรือ ต่อไป)
    ขั้นตอนที่ 7 : Finish (เสร็จสิ้น) (ขั้นตอนสุดท้าย)

    7. แล้วปรับสิทธิ์เจ้าของ /var/www/testjoomla ให้แก่ user ที่ไม่ใช่ www-data ด้วยคำสั่ง

    sudo chown -R mama.mama /var/www/testjoomla

     

    การตั้งค่าการสำรองข้อมูลข้ามเครื่องโดยไม่ต้องถามรหัสผ่าน

    1. ใช้คำสั่งดังนี้คือ

    ssh-keygen -t dsa

    ได้ผลข้อความตัวอย่างว่า
    Generating public/private dsa key pair.
    Enter file in which to save the key (/home/User/.ssh/id_dsa):
    ให้ป้อน Enter จะได้ข้อความตัวอย่างว่า
    Enter passphrase (empty for no passphrase):
    ให้ป้อน Enter จะได้ข้อความตัวอย่างว่า
    Enter same passphrase again:
    ให้ป้อน Enter จะได้ข้อความตัวอย่างว่า
    Your identification has been saved in /home/User/.ssh/id_dsa.
    Your public key has been saved in /home/User/.ssh/id_dsa.pub.
    The key fingerprint is:
    66:ce:cc:8d:33:0d:49:9a:05:26:77:95:1a:3e:96:5f User1@Server1
    ถึงตอนนี้ ระบบจะสร้างแฟ้ม ~/.ssh/id_dsa และ ~/.ssh/id_dsa.pub ขึ้นมา

    2. ให้นำแฟ้ม ~/.ssh/id_dsa.pub จากเครื่องนี้ ไปเก็บไว้ที่ home ของ User2 ปลายทาง @server2
    ด้วยตัวอย่างคำสั่งว่า ssh-copy-id -i ~/.ssh/id_dsa.pub User2@Server2 เช่น

    ssh-copy-id -i ~/.ssh/id_dsa.pub mama@10.0.100.207

    อาจมีการถามรหัสผ่านของ User2@Server2 ให้ป้อนรหัสผ่านให้ถูกด้วย
    หากสำเร็จถูกต้อง ข้อมูลจะถูกเก็บที่ home ของ User2 ปลายทาง @server2 ในแฟ้ม ~/.ssh/authorized_keys

    3. เพื่อความปลอดภัย ให้กำหนดสิทธิ์เฉพาะเจ้าของจึงจะอ่านแฟ้มเหล่านีได้ ด้วยตัวอย่างคำสั่ง

    chmod 600 ~/.ssh/id_dsa ~/.ssh/id_dsa.pub

     

    การตั้งค่า cron เพื่อ backup server1 (10.0.100.206) ไปยัง server2 (10.0.100.207)

    1. ขั้นตอนนี้ต้องเข้าเป็น username root ด้วยคำสั่ง

    sudo su -

    2. สร้างแฟ้ม /etc/cron.d/cron-backup

    nano /etc/cron.d/cron-backup

    ใส่คำสั่งดังนี้

    0 4 * * * root sh /root/backup-joomla.sh

    3. สร้างแฟ้ม /root/mydaily.sh ด้วยคำสั่ง

    nano /root/backup-joomla.sh

    มีข้อมูลคำสั่งต่างๆที่ต้องการสั่งให้ทำงาน ดังนี้

      #!/bin/bash
      TODAY=$(date "+%Y%m%d%H%M")
      mysqldump -u mamamysql -pmamapass testdatabase > /root/testjoomla_${TODAY}.sql
      scp -i /home/mama/.ssh/id_dsa /root/testjoomla_${TODAY}.sql mama@10.0.100.207:backup_testjoomla
      tar -zcp -f /root/testjoomla_${TODAY}.tgz -C /var/www/testjoomla .
      scp -i /home/mama/.ssh/id_dsa /root/testjoomla_${TODAY}.tgz mama@10.0.100.207:backup_testjoomla

    4. เตรียมเสร็จ ให้ลองทดสอบระบบ

    login เข้าไปที่ server2 ด้วย ssh เพื่อสร้างไดเรกทอรี

    ssh -i /home/mama/.ssh/id_dsa mama@10.0.100.207 "mkdir backup_testjoomla"

    ทดสอบ run script นี้สัก 1 ครั้ง

    sh /root/backup-joomla.sh

    ตรวจสอบดูว่ามีการส่งไฟล์ไปเก็บจริงไม๊

    ssh -i /home/mama/.ssh/id_dsa mama@10.0.100.207 "ls -l backup_testjoomla"

    5. เสร็จแล้วสั่งให้ cron ทำงานใหม่ด้วยคำสั่ง

    service cron restart

    6. ออกจาก sudo su ด้วยคำสั่ง

    exit

     

    การ restore joomla web site

    1. สร้าง database ที่ต้องการติดตั้ง ตัวอย่าง สร้าง database ชื่อ testdatabase ใช้คำสั่ง

    mysql -uroot -p123456 -e "CREATE DATABASE testdatabase CHARACTER SET 'UTF8';"

    2. กำหนดสิทธิ์การใช้ database testdatabase ให้แก่ user ตัวอย่างสร้าง user ชื่อ mamamysql โดยมีรหัสผ่านว่า mamapass ใช้คำสั่ง

    mysql -uroot -p123456 -e "grant all privileges on testdatabase.* to 'mamamysql'@'localhost' identified by 'mamapass' ;"

    3. เตรียมพื้นที่สำหรับติดตั้ง joomla ไว้ที่ /var/www/testjoomla ด้วยคำสั่ง

    sudo mkdir -p /var/www/testjoomla

    4. แตกแฟ้มที่ backup นั้น (testjoomla_201309031231.tgz) ออกมาเก็บไว้ที่ /var/www/testjoomla ด้วยคำสั่ง

    sudo tar -zxvf backup_testjoomla/testjoomla_201309031231.tgz -C /var/www/testjoomla/

    5. import ข้อมูล เข้า ด้วยคำสั่ง

    mysql -uroot -p123456 testdatabase < backup_testjoomla/testjoomla_201309031231.sql

    6. แล้วปรับสิทธิ์เจ้าของ /var/www/testjoomla ให้แก่ user ที่ไม่ใช่ www-data ด้วยคำสั่ง

    sudo chown -R mama.mama /var/www/testjoomla

    7. ก็จะสามารถเข้า server2 ได้ที่ http://10.0.100.207/testjoomla

  • วิธีย้ายบล็อก wordpress ไปเครื่องใหม่ชื่อโดเมนเนมใหม่

    บันทึกขั้นตอน (ตัวอย่าง) ในการย้ายบล็อก wordpress จากเครื่องเดิม sysadmin.in.psu.ac.th ไปยังเครื่องใหม่ โดเมนเนมใหม่ sysadmin.psu.ac.th เนื่องจากเครื่องเดิมจะมี resources ไม่เพียงพอ และต้องการเปลี่ยนชื่อโดเมนเนมอันใหม่ที่หลายคนว่าดูเหมาะสมและชื่อสั้นกว่า งานนี้บอกได้เลยว่าเล่นเอาเหงื่อตกเลย เพราะคิดว่าย้ายแบบ Joomla! ก็น่าจะได้ ซึ่งเป็นวิธีที่ใช้ไม่ได้ครับ สุดท้ายสำเร็จกับการติดตั้ง Duplicator Plugin ไว้ที่เครื่องเดิมก่อน แล้วสร้าง backup ไว้นำมา restore ลงในเครื่องใหม่

    เนื้อหาค่อนข้างยาวสักนิด ผมมีเจตนาอยากให้เห็นว่าการทำเว็บไซต์ขึ้นมาหนึ่งอัน เราต้องใช้ความรู้พอสมควร และที่ทำส่วนใหญ่ก็อ่านจากเว็บไซต์ของพี่วิภัทร นั่นคือ opensource.psu.ac.th นี่แหล่ะครับ

    1. เริ่มต้นจากกำหนดจำนวน resources ที่จำเป็นใช้ เพราะว่าจะไปขอใช้ Virtual Machine ของศูนย์คอมพิวเตอร์ ที่ขอไว้คือ RAM 2 GB, Hard disk 40 GB, OS Ubuntu 12.04.1, TCP Port 80,443
      แล้วกรอกในแบบฟอร์ม
    2. งานบริการเซิร์ฟเวอร์ก็สร้าง VM ให้ที่ทำการอัปเดต OS ให้แล้ว แจ้ง username ให้เข้าใช้งานผ่าน ssh
    3. เมื่อ ssh เข้าได้แล้ว เข้าทำงานในสิทธิ root ด้วยคำสั่ง
      sudo su –
    4. ทำการติดตั้ง Apps ที่จำเป็น ผมเลือก LAMP คือชุดรวมของ Linux, Apache, MySQL และ PHP ที่จำเป็นต้องใช้กับ wordpress ด้วยคำสั่ง
      tasksel
      เลือก LAMP
      จะมีคำถาม รหัสผ่านของ MySQL root ให้ตั้งที่จะจำได้
    5. ติดตั้งส่วนเพิ่มเติมของ php เพิ่มด้วยคำสั่ง
      apt-get install php5-gd php5-imap php5-ldap php5-radius
    6. ติดตั้ง unzip เพิ่มด้วยคำสั่ง
      apt-get install unzip
    7. ปรับแต่ง apache2 ให้ใช้งานแบบ module rewrite
      sudo a2enmod rewrite
    8. ต่อไปก็มาถึงเรื่องการปรับแต่ง apache2 ให้มี Virtual host แบบเปิด port สำหรับ http และ redirect http โดยแก้ไขไฟล์ /etc/apache2/sites-available/default
      <VirtualHost *:80>
      ServerAdmin webmaster@localhost
      ServerName sysadmin.psu.ac.th           <==== เพิ่มบรรทัดนี้
      DocumentRoot /var/www/wordpress

      <Directory /var/www/wordpress>
      Options Indexes FollowSymLinks MultiViews
      AllowOverride All             <==== แก้ไขบรรทัดนี้จาก None เป็น All
      Order allow,deny
      allow from all
      </Directory>
      …     ที่เหลือเหมือนเดิม
      </VirtualHost>
      เพิ่มบรรทัดข้างล่างนี้ เพื่อให้ยังคงมีการ redirect ไปยังที่ใหม่หากใช้ชื่อเก่า
      <VirtualHost *:80>
      ServerName sysadmin.in.psu.ac.th
      Redirect / http://sysadmin.psu.ac.th/
      </VirtualHost>
    9. ต่อไปมาถึงเรื่องการปรับแต่ง apache2 ให้มี Virtual host แบบเปิด port สำหรับ https
      สั่งเปิด module ssl ด้วยคำสั่ง
      a2enmod ssl
      คัดลอกแฟ้ม PSU SSL certificates (file_a.crt, file_b.key และ file_c.ca-bundle) มาเก็บไว้ในไดเรกทอรีที่สร้างนี้
      mkdir -p /etc/apache2/ssl
      mv /home/username/file_* /etc/apache2/ssl/
      แล้วปรับเปลี่ยนสิทธิของแฟ้มด้วยคำสั่ง
      chown -R root:root /etc/apache2/ssl/file_*.*
      chmod 600 /etc/apache2/ssl/file_*.*
      แล้วแก้ไขไฟล์ /etc/apache2/sites-available/default เพื่อจัดการเกี่ยวกับ https และ Certificates
      เพิ่มบรรทัดต่อท้ายไฟล์
      NameVirtualHost *:443
      <VirtualHost *:443>
      DocumentRoot /var/www/wordpress
      ServerName sysadmin.psu.ac.th
      SSLEngine on
      SSLCertificateFile /etc/apache2/ssl/file_a.crt
      SSLCertificateKeyFile /etc/apache2/ssl/file_b.key
      SSLCertificateChainFile /etc/apache2/ssl/file_c.ca-bundle
      </VirtualHost>
    10. ต้องสั่งรีสตาร์ท apache2 ดังนี้
      service apache2 restart
      (more…)