วันจันทร์ที่ 23 ธันวาคม พ.ศ. 2556

รวมเครื่องมือทำ E-Book

ช่วงนี้อยากทำ E-Book ในแบบที่ไม่เคยทำ ก็เลยพยายามหาวิธีอยู่หลายวิธีว่ามีแนวทางไหนบ้าง ก็เลยรวบรวมวิธีการต่างๆ มาให้ E-Book มีรูปแบบอยู่หลายอย่างขึ้นอยู่กับการนำเสนอ วิธีการอ่าน เครื่องมือในการอ่านก็แตกต่างกัน รูปแบบไฟล์ที่เป็นมาตรฐานกลางของไฟล์ในการอ่านหรือใช้งานร่วมกันได้ ได้แก่ไฟล์ในรูปแบบ EPUP และ PDF ซื้อหนังสือในรูปแบบ E-Book ก็จะเจอไฟล์รูปแบบนี้เยอะ ไม่นับของ Kindle นะครับ มาลงเรื่องเครื่องมือกันบ้าง




  • LibreOffice โปรแกรมชุดสำนักงานสามรถแปลงไฟล์เป็น PDF ได้ในตัวไม่ต้องพึ่งความสามารถอื่น สามารถทำ E-Book ในรูปแบบ PDF ได้ง่ายๆ

  • Writer to EPUB Extension สำหรับแปลงไฟล์ Writer เป็นไฟล์รูปแบบ EPUB

  • Sigil โปรแกรมสร้างหนังสือรูปแบบ EPUB

  • Calibre โปรแกรมคลังหนังสืออิเลคทรอนิกส์สามารถจัดการหนังสือ E-Book แถมความสามารถในการแปลงไฟล์ E-Book ได้อีกด้วย

  • Pandoc เป็นโปรแกรมแปลงไฟล์ครอบจักรวาลสามารถแปลงไฟล์เอกสารเป็น PDF, EPUB, HTML หรือแม้กระทั่ง Kindle ได้ง่ายๆ



ชอบเครื่องมือตัวไหนก็สามารถเลือกเอามาใช้งานได้ สำหรับนักพัฒนาสามารถใช้ Make ควบคู่กับ Pandoc ในการสร้างเอกสารจากรูปแบบต้นฉบับไปเป็นเอกสารในรูปแบบอื่นๆ ได้ ลองดูตัวอย่างโครงการได้ที่ github.com/evangoer/pandoc-ebook-template


วันจันทร์ที่ 16 ธันวาคม พ.ศ. 2556

มาสร้างหนังสือ EPUB จาก Markdown กัน

ผมอยากทำหนังสือ EPUB สีกเล่ม พยายามหาเครื่องมืออยู่และได้ทดลองใช้อยู่หลายตัว เช่น ใช้ word2epub ของ LibreOffice เป็นตัวแปลงไฟล์ Writer เป็น EPUB หรือแม้กระทั่งใช้ Calibre เป็นตัวแปลงจาก Writer เป็น EPUB ก็เคยลองแล้ว ลองใช้บริการ Cloud Convert แต่ก็ยังไม่ถูกใจสักเท่าไร เนื่องจากเอกสารต้นฉบับส่วนใหญ่ของผมไม่ได้อยู่ในรูปแบบ Writer หรือ HTML แต่เป็น Markdown ดังนั้นเครื่องมือข้างต้นช่วยผมไม่ได้สักเท่าไร ก็เลยต้องหาเครื่องมืออื่น หลายคนอาจจะสงสัยว่าทำไมผมเขียน Markdown สาเหตุก็เนื่องจากเอกสาร Markdown สะอาดและอ่านรู้เรื่อง สามารถแปลงไปเป็นรูปแบบอื่นๆ ได้ง่าย ถ้าใครใช้ Github อยู่แล้วจะทราบว่าเขียน Markdown แล้วแปลงไปเป็น Website ด้วย Github Page ทำได้ง่ายมากๆ แต่ถ้าอยากแปลงเป็น EPUB ก็เริ่มยากละ ปัญหาของผมคือเอกสาร Markdown แปลงไปเป็น EPUB หรือเอกสารรูปแบบอื่น หลังจากที่ค้นหาข้อมูลก็พบเครื่องมือที่ถูกใจมาก มีชื่อว่า pandoc ซึ่ง pandoc สามารถแปลงเอกสารได้หลายรูปแบบ ทั้ง HTML, EPUB, Doc, Docx, Mobi, LaTex, Markdown เรียกได้ว่าครบวงจร และที่สำคัญใช้ lua ในการจัดรูปแบบเอกสารได้



มาลงมือกัน สำหรับ Mac, Windows ติดตั้ง pandoc จากหน้าดาวน์โหลดครับ ถ้าใช้ Ubuntu ก็ติดตั้งได้จาก Software Center หรือใช้คำสั่ง



sudo apt-get install pandoc



หลังจากได้เครื่องมือกันแล้ว มาลองสร้างหนังสือ EPUB สักเล่ม ให้ดาวน์โหลดตัวอย่างจาก github/anoochit/pandoc-example มาลองดูครับ



git clone https://github.com/anoochit/pandoc-example.git



cd pandoc-example



จากนั้นลองสร้างเอกสาร EPUB ดูด้วยคำสั่ง



pandoc --toc --epub-stylesheet=style.css --epub-cover-image=cover.jpg --epub-metadata=book.yaml
-o sample.epub title.txt chaptor01.md chaptor02.md chaptor03.md
chaptor04.md chaptor05.md chaptor06.md



เท่านี้เราก็จะได้เอกสาร EPUB ชื่อ sample.epub มาแล้ว :) ง่ายมากๆ สำหรับคนที่ใช้เครื่องมืออย่าง CI สามารถตั้งค่าเพื่อดึงเอกสารจาก Git Repository เอามาสร้างเป็นเอกสารในรูปแบบต่างๆ ได้เลย เช่น EPUB, HTML, PDF เป็นต้น เอาเอกสารที่ได้มาลองอ่านใน iBook ดูครับว่าใช้ได้หรือไม่









อ่านบน Google Book แบบเว็บ ก็ได้นะครับ





หรืออ่านบน Android Tablet ก็ใช้ได้












วันอังคารที่ 26 พฤศจิกายน พ.ศ. 2556

มาเล่น Ubuntu MaaS กัน

MaaS หรือ Metal as a Service เป็นเครื่องมือจัดการเครื่องเซิร์ฟเวอร์ในการ provisioning, config และ deploy application โดยใช้แนวคิดของ Cloud Computing มาประยุกใช้กับเครื่องเซิร์ฟเวอร์จริงๆ ซึ่งเป็นแนวคิดแบบใหม่ในการจัดการเซิร์ฟเวอร์เลยทีเดียว MaaS สามารถใช้งานร่วมกับ Juju ได้ทำให้คุณสามารถใช้ Charm ในการ config และ deploy application ได้ง่ายๆ เลยทีเดียว



MaaS มีมาตั้งแต่ Ubuntu 12.04 LTS และหลังจากผมเป็นหนูทดลองมา 6 รุ่น 12.04, 12.04.1, 12.04.2. 12.03, 12.10 และ 13.04 ดูเหมือนว่ารุ่น 13.10 มีความสเถียรมากขึ้น และ Juju ก็รุ่นสำหรับ Mac OSX และ Windows แล้วและทำงานได้ดีขึ้นก็เลยได้โอกาสกลับมาเล่น MaaS อีกรอบ (รอบที่ 7)



โครงสร้างเน็ตเวิร์คที่ผมใช้เป็นแบบนี้ เอาคร่าวๆ เราจะมี MaaS Controller + Region 1 ตัว และ Node อีก X ตัว ผมหาได้แค่ 3 เครื่องเอามาทดลองจากแผนภาพผมพยายามแยก เน็ตเวิร์คออกจากเน็ตเวอร์ภายในเพราะเราจะใช้วิธีการ PXE Boot เพื่อ register node, config และติดตั้ง Ubuntu Server เพื่อรอใช้งานร่วมกับ Juju





เริ่มที่เครื่อง MaaS Controller ก่อน NIC มี 2 ขา ขานอกต่อออกเน็ตได้และอยู่ในวงเดียวกับเครือข่ายภายใน ส่วนอีกขาต่อกับเครื่อง Node 3 เครื่อง ใช้ Ubuntu 13.10 Server amd64 ติดตั้ง MaaS Controller ดังนี้ เมื่อบูตเครื่องเลือก Multiple Server Install with MAAS





รอโปรแกรมอ่านแผ่นตอบคำถามโน่นนี่จากนั้นตัวติดตั้งจะถามว่าจะติดตั้งเครื่องนี้จาก MaaS Server หรือติดตั้ง MaaS Server ใหม่ลงเครื่องนี้ ก็เลือกอันที่ 2 ครับ





ติดตั้งไปเรื่อยๆ เครื่องจะแจ้งหมายเลข ip address และ service endpoint ของ api ให้ตรวจสอบและติดตั้งให้เสร็จ จากนั้นให้ config เน็ตเวิร์คขาในให้เป็น static ip แล้วสร้าง superuser ให้กับ MaaS ดังนี้



sudo maas createsuperuser



จากนั้นติดตั้ง maas-dhcp และ maas-dns เพื่อให้ MaaS Server เป็นตัวจัดการเรื่อง dhcp และให้เครื่อง Node boot ผ่าน network เข้ามา เปิดเบราเซอร์ไปที่ Web Console ของ MaaS Server (172.16.29.147) ดังนี้ http://172.16.29.147/MAAS ใส่ username, password ตามที่ได้ตั้งค่าเอาไว้ เปิดไปที่ user preference เพิ่ม ssh key ให้เรียบร้อย





เปิดไปที่ Setting กำหนด รุ่นของ Ubuntu ที่ต้องการใช้งาน แนะนำให้เลือก Ubuntu 12.04 เอาไว้เนื่องจาก Charm ส่วนใหญ่อิง Ubuntu 12.04 ครับ อ้ออย่าลืมกำหนด repo ใกล้บ้านไว้ด้วย





ตั้งค่า Cluster Controller เพิ่ม NIC ขาในให้คุม DHCP







จากนั้นมาตั้งค่า config ในไฟล์ /etc/maas/importpxefiles ดังนี้



RELEASES="precise saucy"



ARCHES="i386/generic amd64/generic"



LOCALE="en_US"



IMPORT_EPHEMERALS=1



และ ในไฟล์ /etc/maas/import_ephemerals ดังนี้



DATA_DIR="/var/lib/maas/ephemeral"



RELEASES="precise saucy"



ARCHES="i386/generic amd64/generic"



สาเหตุที่ต้องมาแก้ไขไฟล์ทั้ง 2 เพื่อกำหนดรุ่นของ Ubuntu และ architecture ที่เราต้องการจริงๆ ต้องการ precise, saucy ทั้ง i386 และ amd64 จากนั้นใช้คำสั่ง



maas-import-pxe-files



เพื่อสั่งให้ download ไฟล์สำหรับใช้ boot ผ่าน network หรือที่เรียกว่า pxe boot เมื่อดาวน์โหลดไฟล์สำหรับ boot เสร็จโปรแกรมจะดาวน์โหลด ephemeral image ต่อ ประมาณ 1.2GB ได้แก่ precise i386, amd64 และ saucy i386, amd64 ถ้าใช้เฉพาะ amd64 ก็ไปแก้ config ข้างต้นได้ครับ รอจนดาวน์โหลดเสร็จ



จากนั้นให้คุณทะยอยเปิดเครื่อง Node ทีละเครื่องแล้วสั่งให้ Boot ผ่าน LAN ถ้าจะให้ดีตั้งค่า boot order ไว้อันดับแรกๆ เมื่อเครื่อง Node boot ก็จะได้รับ IP Addres ที่เครื่อง MaaS Controler จ่ายมาพร้อม Boot ผ่านเน็ตเวิร์ค สถานะของ Node เมื่อ boot และ config ค่าเบื้องต้นเสร็จเราจะเรียกว่า Commisioning เมื่อผ่านสถานะนี้ จะเข้าสถานะ Ready และจะมีข้อมูลของ Node อยู่ในหน้า Node จากนั้นเครื่อง Node จะ Sleep ในกรณีที่เครื่อง Node สนับสนุน Wake on LAN เราจะสามารถปลุกเครื่อง Node ได้เมื่อสั่ง Start ที่หน้า Web Console หรือสั่ง Juju bootstrap ถ้าเครื่อง Node ไม่มีคุณสมบัติที่ว่านี้ ต้องเปิดเครื่องเองอีกรอบเพื่อเข้าสู่สถานะ Ready อีกครั้ง คุณจะพบว่าเครื่อง Node ติดตั้ง Ubuntu Server เรียบร้อยหมดแล้ว





ลืมบอกไปว่าถ้าเราใช้ pxe boot แบบปกติ MaaS จะติดตั้ง Ubuntu Server ผ่าน net install ซึ่งจะช้ามาก ให้เรากำหนดให้ใช้ ephemeral image เป็นตัวติดตั้งจะเร็วกว่ามาก วิธีการง่ายๆ ก็คือไปหน้ารายการ Node แล้วเลือกทั้งหมด แล้วกำหนดให้ใช้ fast installer จากนั้น reboot เครื่อง Node อีกรอบ คราวนี้็ MaaS จะติดตั้ง Ubuntu Server ให้เร็วมากขึ้น กลับไปดูหน้า Web Console เราจะพบว่าเรามี 1 Node แล้ว ทีนี้ทะยอย Boot เครื่อง Node มาเรื่อยๆ จนครบ





จากนั้นก็ติดตั้ง Juju ตามปกติ ตั้งค่าใช้ MaaS ในไฟล์ ~/.juju/environments.yaml




  • maas-server เอาค่า IP Addres หรือ FQDN มาใส่

  • maas-oauth เอา MaaS Key มาใส่

  • admin-secret กำหนดรหัสผ่านที่คุณจำได้ เอาไว้ config application ตอน deploy



จากนั้นใช้คำสั่ง



juju switch maas



เพื่อเปลี่ยนไปใช้ config ของ MaaS จากนั้นก็ใช้คำสั่ง bootstrap ตามปกติดังนี้



juju bootstrap



ให้รอสักพัก Juju จะไปหา Node สักเครื่องแล้วติดตั้ง MongoDB เพื่อใช้เก็บค่าสถานะของ node ที่อยู่ใน cluster ถ้ากลับไปดูที่หน้า Web Console เราจะพบว่า Juju ยึดเครื่องเราไปแล้ว 1 ตัว





เมื่อใช้คำสั่ง juju status ก็จะพบว่ามี Node พร้อมทำงานแล้ว





จากนั้นก็ใช้ Juju deploy application ตามปรกติ ถ้าใช้ command line แล้วดูยุ่งยากก็สามารถติดตั้ง Juju GUI เอาไว้ใช้งานได้ครับ :)


วันอังคารที่ 19 พฤศจิกายน พ.ศ. 2556

มาเล่น Docker กัน

เขียนเรื่อง Docker คร่าวๆ ไว้เมื่อเดือนกรกฎาคมที่ผ่านมา ไม่ได้แนะนำการใช้งาน ครั้งนี้มาลงในรายละเอียดกันว่าจะเล่นอะไรได้บ้าง เนื้อหาของจะครอบคลุมดังนี้




  • ติดตั้ง Docker

  • ใช้งาน Docker เบื้องต้น

  • สร้าง Image จาก Dockerfile

  • ใช้ Hipache ทำ redirect + loadbalance ไปยัง Docker container



มาเริ่มจากการติดตั้งกันก่อน ใช้ Ubuntu 12.04 LTS เหมือนเดิม อัพเกรดให้เรียบร้อย จากนั้นมาติดตั้ง Docker กัน Docker ต้องใช้ kernel ที่มี cgroup ซึ่งใน Ubuntu 12.04 ในส่วนของ kernel ยังไม่มี cgroup เพราะฉะนั้นต้องอัพเกรด kernel และ reboot เครื่อง :)





apt-get update



apt-get upgrade



sudo apt-get install linux-image-generic-lts-raring linux-headers-generic-lts-raring



sudo reboot



หลังจาก reboot เครื่องเราก็จะได้ kernel ใหม่กันแล้ว มาเริ่มติดตั้ง Docker กันต่อได้



sudo sh -c "wget -qO- https://get.docker.io/gpg | apt-key add -"



sudo sh -c "echo deb http://get.docker.io/ubuntu docker main > /etc/apt/sources.list.d/docker.list"



sudo apt-get update



sudo apt-get install lxc-docker



จากนั้น กำหนดให้ผู้ใช้อยู่ในกลุ่ม docker ดังนี้



sudo gpasswd -a <username> docker



sudo service docker restart



มาทดลองกัน โดยใช้คำสั่ง



docker run -i -t ubuntu /bin/bash



คุณจะพบว่า Docker จะทยอยดาวน์โหลด image และสั่ง run bash เป็น process หนึ่ง แล้ว Docker ก็จะพาคุณเข้าไปยัง container จะได้ shell prompt ดังนี้





คุณสามารถใช้คำสั่ง Linux ปกติได้ใน container โดยไม่มีผลกระทบใดๆ กับเครื่อง host ที่เราทำงานอยู่ มาลองคำสั่งที่ต้องใช้งานกันประจำกันก่อนดีกว่า ตอนนี้ docker run container จาก base image ที่ชื่อ ubuntu ให้คุณเปิด terminal ขึ้นมาอีก 1 หน้าต่างแล้วใช้คำสั่ง



docker ps



จะได้ผลลัพท์ออกมาแบบนี้





docker ps เป็นคำสั่งที่เอาไว้แสดงรายการ container ที่ทำงานอยู่ ในกรณีนี้เรามี container 1 ตัวที่กำลังทำงาน โดยกำลังทำงานโดยคำสั่ง /bin/bash นั่นเอง การจัดการกับ container ก็จะเหมือนกับการจัดการกับ virtual machine คุณสามารถสั่ง start, stop, run, kill ได้ด้วย



การใช้งาน Docker เราจะต้องมี Docker image ซึ่งการที่จะได้ image มานั้นมี 3 ช่องทางคือ




  1. สร้าง image จาก Dockerfile

  2. สั่ง pull, run เพื่อดาวน์โหลด image จาก Docker index

  3. สร้างจาก image ที่มีอยู่เดิม



เราจะเล่นวิธีง่ายๆ กันก่อน ลองใช้คำสั่ง docker search เพื่อค้นหา image ที่ต้องการ



docker search



ผลลัพท์ที่ได้ออกมาแบบนี้





เราจะพบว่ามี image ที่เกี่ยวข้องกับ wordpress เยอะมาก แลัวจะเลือกตัวไหนดี ? คำตอบง่ายๆ ก็คือเลือกตัวที่มี ดาวเยอะๆ และ TRUSTED ครับ ถ้าอยากดูรายละเอียดก็สามารถดูจากหน้าเว็บได้ที่ http://index.docker.io ครับ





ก็ลองค้นหา image กันได้ เมื่อได้ image แล้ว สั่งให้ ​download image wordpress มาไว้ที่เครื่องเราดังนี้



docker pull jbfink/wordpress





ลองสั่ง docker images เพื่อดูว่าเรามี image อะไรบ้าง



docker images





จะพบว่าเรามี image wordpress มาแล้ว ให้ลองสั่ง run พร้อมระบุเลข port ที่ต้องการ map เข้าไปใน container



docker run -d -p 80 -p 22 jbfink/wordpress





Docker จะคืน shell prompt มาให้เราพร้อม ID ของ container ลองใช้คำสั่ง logs เพื่อดูว่า container ทำงานอะไรไปแล้วบ้าง



docker logs 4216aa1cba8c





ในส่วน ID นี้สามารถระบุแบบเต็มหรือแบบย่อโดยพิมพ์ 3-4 ตัวอักษรแรกก็ได้ image นี้จะ random password ของ user, mysql root ฯลฯ มาให้ให้ลองดูจาก log เมื่อ container run เสร็จแล้วเราจะได้ port เลขยาวๆ map ไปยัง port ต่างๆ ของ container ให้ลองใช้คำสั่ง docker ps ดู





ตามรายละเอียด คุณสามารถใช้คำสั่ง ssh เข้าไปใน container ได้โดยใช้ port 49153, Web Server ทำงานบน port 49154 ให้ลองเข้าเว็บตาม port ที่ Docker ระบุมาให้ ก็จะเข้าสู่หน้าติดตั้ง Wordpress ดังนี้ ตั้งค่านิดหน่อยคุณก็จะได้ Wordpress ใช้งานแล้ว :)





เอาพอสนุกสนาน ทีนี้มาลองสร้าง image กันบ้าง อย่างที่บอกข้างต้น เรามีวิธีการสร้าง image อยู่หลายวิธี แต่เบื้องหลังของการทำ image จะเป็นการสร้าง file system ซ้อนกันเป็น layer ดังนั้นเพื่อความสะดวก ตรวจสอบได้ง่าย ผมแนะนำให้สร้างจาก Dockerfile ครับ Dockerfile เป็น config เบื้องต้นสำหรับ image ที่เราต้องการสร้าง ซึ่งเราไม่จำเป็นต้องสร้างจาก base image ที่มีทั้ง service และ application เราจะใช้หลักการของ Docker ในเรื่อง filesystem layer เป็นตัวช่วย โดยดึง base image ที่เป็นระบบปฏิบัติการต่างๆ เอามาต่อยอดโดยการติดตั้ง service ที่เราต้องการลงไป ตั้งค่า config ต่างๆ และ expose port สำหรับเปิดให้ใช้งาน โครงสร้าง Dockerfile แบบง่ายๆ มีดังนี้




  • FROM ระบุว่า image จาก base image ใด

  • MAINTAINER ระบุชื่อของผู้ดูแล image นี้

  • RUN สั่งให้ run คำสั่งที่ต้องการ เช่น apt-get install xxx และ commit image ทุกๆ ครั้งที่ใช้คำสั่งนี้

  • EXPOSE เปิด port ที่ต้องการใช้งาน

  • CMD ใช้คำสั่งบน command line



เพื่อความเข้าใจ มาลงมือสร้าง image กันดีกว่า ให้ clone project จาก github.com/anoochit/docker-apache2 ดังนี้



git clone git@github.com:anoochit/docker-apache2.git



จากนั้นสั่ง build image ดังนี้



cd docker-apache2



docker build -t apache2 .



รอไปเรื่อยๆ จน build เสร็จ คุณจะได้ image ID ยาวๆ มา 1 ตัว







ลองใช้คำสั่ง docker images ดูก็จะพบว่าคุณมี image apache2 เพิ่มขึ้นมาแล้ว





ลองสั่ง run ดูครับ



docker run -d -p 80 apache2





ทีนี้ลองเปิด browser ดูครับว่า apache ทำงานมั๊ย อย่าลืมระบุ port นะครับ เราก็จะได้หน้าเว็บเปล่าๆ มาดังนี้





มาลองเล่นอะไรสนุกๆ กันอีกนิดหน่อย เราสามารถระบุ part ของเครื่อง host เพื่อ map ไปยัง directory ภายใน container ได้ ใน project ที่ clone มาจะมีไดเรคทอรี www อยู่ เอามาเล่นได้เลยครับ



WWW_DIR=`pwd`\www



docker run -d -p 80 -v $WWW_DIR:/var/www apache2



ทีนี้ลองเปิด browser ใหม่ เราจะได้หน้าเว็บอย่างนี้





มาลองเล่นอีกอย่างหนึ่ง กรณีที่คุณสร้าง image แล้วต้องการนำไปเผยแพร่บน Docker Index สามารถทำได้ 2 วิธีคือ




  • สั่ง push image

  • สั่งสร้างจาก github



ซึ่งทั้ง 2 กรณีนี้จะต้องเป็นสมาชิกของ Docker Index ก่อน ส่วนสร้าง image จาก GitHub สามารถเพิ่ม project ของคุณผ่านหน้าเว็บ Docker Index ได้เลย ซึ่งง่ายมาก แต่ในกรณีที่เราต้องการใช้งาน Docker Registry ของตัวเอง วิธีการง่ายๆ ดังนี้





วิธีการง่ายๆ มีแค่นี้ ผมได้ตั้ง Docker Registry ของผมเองชื่อ registry.redex.net ทำงานบน port 5000 (default) สามารถสั่ง push และ pull image ได้ง่ายๆ ดังนี้ การ push image ไปยัง registry ให้ tag image id ที่คุณต้องการก่อน จากนั้นค่อยสั่ง push



docker tag 850607808486 registry.redex.net:5000/myweb



docker push registry.redex.net:5000/myweb



กรณีที่คุณอยู่ Host อื่นที่มี Docker ติดตั้งอยู่ คุณก็สามารถ pull image จาก Docker Registry มาใช้งานได้ ดังนี้



docker pull registry.redex.net:5000/myweb





ถ้าชื่อ image มันยาวไปก็สั่ง tag จาก image ID ได้ จากนั้นก็สั่ง run ได้ตามปกติ :)



docker tag a6f2023aa5f9 myweb



docker run -d -p 80 -p 22 myweb



มาลองทำ Load Balance กับ container แบบง่ายๆ กันดูบ้าง ที่เครื่อง host ติดตั้ง hipache และ redis server ให้เรียบร้อย หรือจะใช้ docker ก็ได้ครับ



docker run -d -p 6379:6379 -p 80:80 samalba:hipache supervisord -n



จากนั้นตั้งค่า Hipache ผ่าน Redis



redis-cli -h 172.17.42.1 -p 6379 rpush frontend:www.redex.net myweb



สั่ง run container เพิ่มสัก 2-3 ตัว ด้วยคำสั่ง



ID=$(docker run -d -p 80 -p 22 myweb)



PORT=$(sudo docker port $ID 80)



redis-cli -h 172.17.42.1 -p 6379 rpush frontend:www.redex.net http://172.17.42.1:$PORT



คำสั่งข้างต้น run container หา port ที่ผูกกับ port 80 แล้วลงทะเบียนใน redis จากนั้นใช้คำสั่ง



redis-cli -h 172.17.42.1 -p 6379 lrange frontend:www.redex.net 0 -1





ทีนี้มาลองทดสอบ Hipapche กัน อย่าลืมกำหนด DNS Record ให้เป็นแบบ Wildcard เพื่อให้ Hipache ทำ redirect ไปยังเว็บที่ถูกต้องให้ ให้ทดลองเปิด browser ดูแล้วลอง refresh หลายๆ รอบ จะได้ผลลัพท์ดังนี้









จะเห็นว่า Hipache พยายามทำ Load Balance ให้ด้วย สำหรับท่านที่สนใจ Hipache ก็หาข้อมูลเพิ่มเติมได้ที่ dotCloud


วันศุกร์ที่ 15 พฤศจิกายน พ.ศ. 2556

พลาดไม่ได้! วันรวมพลคนใช้จูมล่าในประเทศไทยครั้งที่ 6 Joomla!Day™ Bangkok 2013

Joomla!Day™ Bangkok 2013 งานสัมมนาที่ท่านจะได้พบกับนักพัฒนา Joomla! ตัวจริงจากต่างประเทศและในประเทศ ที่จะมาแนะนำ Joomla! เวอร์ชันล่าสุด, ระบบเสริมต่างๆ และ Showcase การใช้งาน Joomla! หลากหลายรูปแบบ นอกจากนี้ผู้จัดงานยังได้จัดหาวิทยากร ที่มีความเชี่ยวชาญมากมาย อาทิ การบริหารจัดการ Social Network โดยคุณอภิศิลป์ จาก Pantip.com, คุณณัฐกร ผู้เชี่ยวชาญ SEO/SEM , คุณศิระ (ฮันท์) นักพัฒนาระดับแถวหน้าของวงการ ที่จะมาพูดถึงการพัฒนาด้วย Node.js , Mr.Sam Moffatt ที่มาเป็น Speaker กับเราทุกครั้ง ปีนี้เขาจะมาเล่าให้ฟังว่าการสร้าง Infrastructure เพื่อรอง Mobile Application ขนาดใหญ่ ด้วย Open Source นั้นเขาใช้อะไรบ้าง , มาตรฐาน WCAG 2.0 ที่เว็บภาครัฐจะต้องทำให้รองรับ รวมถึง Web Security และเทคโนโลยีใหม่ๆ ในอนาคตอีกมากมาย



วิทยากรมีใครบ้าง




  • Mr.Sam Moffatt Joomla! Production Leadership Team and Development Coordinator - Joomla.org (วิทยากรจากประเทศ สหรัฐอเมริกา)

  • Mr. Emmanuel Danan FLEXIcontent Free CCK for Joomla lead developer (วิทยากรจากประเทศ ฝรั่งเศส)

  • Mr. Mark Lee StackIdea.com (วิทยากรจากประเทศ มาเลเซีย)

  • คุณอัครวุฒิ ตำราเรียง นายกสมาคมศึกษาและพัฒนาโอเพ่นซอร์ส (OSEDA) / Joomla Bug Squad - Joomla.org

  • คุณศิวัฒน์ เชาวรียวงษ์ นายกสมาคมโฆษณาดิจิตอลไทย (DAAT)

  • คุณอภิศิลป์ ตรุงกานนท์ นายกสมาคมผู้ดูแลเว็บไทย (TWA)

  • คุณศิระ สัจจินานนท์ CTO & Co-fouder Jitta.com and Managing Director Webiz!

  • คุณณัฐกร รัตนชัยสิทธิ์ Managing Director Predictive Co.,Ltd.

  • คุณกิติศักดิ์ จิรวรรณกูล Information Security Specialist สำนักงานรัฐบาลอิเล็กทรอนิกส์ (องค์การมหาชน) (สรอ)

  • คุณชัยวุฒิ พรหมบุตร (มาสเตอร์อึ่ง) ผู้จัดการฝ่ายออกแบบและพัฒนา สถาบัน EWTC

  • คุณศุภชัย แต่สกุล ผู้จัดการโครงการอาวุโส บ.มาร์เวลิค เอ็นจิ้น จก./ Joomla Translation Team - Joomla.org

  • คุณสณาวิน ติณสุวรรณ์ Product Manager บ.มาร์เวลิค เอ็นจิ้น จก. / Joomla Bug Squad - Joomla.org

  • และวิทยารับเชิญอีกมากมาย



ค่าใช้จ่ายเท่าไรและจะได้รับอะไรบ้าง



ค่าใช้จ่ายสำหรับการเข้าร่วมงาน




  • สำหรับผู้ชำระเงินภายในวันที่ 10 ตุลาคม - 31 ตุลาคม 2556 ราคาพิเศษ 790 บาท

  • สำหรับผู้ชำระเงินภายในวันที่ 1 พฤศจิกายน - 17 พฤศจิกายน 2556 ราคา 890 บาท

  • สำหรับผู้ชำระเงินภายในวันที่ 18 พฤศจิกายน 2556 เป็นต้นไป ราคา 990 บาท



โดยจะได้รับ




  • สิทธิ์ในการรับฟังสัมมนาจากวิทยากรผู้ทรงคุณวุฒิ ทั้ง 2 วัน

  • เสื้อยืดสุดเท่ สกรีนโลโก้จูมล่า (ลายลิขสิทธิ์ของแท้) ฟรี 1 ตัว (สำหรับผู้ชำระเงินภายในวันที่ 12 พฤศจิกายน 2556 รับสิทธิ์สามารถเลือกไซส์เสื้อได้)

  • อาหารกลางวัน 2 มื้อ , 4 Coffee Break

  • สิทธิ์ในการร่วมชิงรางวัลในงาน



ลงทะเบียนอย่างไร




  • ลงทะเบียนออนไลน์ที่ http://www.joomladay.in.th/th/registration

  • ลงทะเบียนทางโทรศัพท์ ที่หมายเลข 02 7171120-1

  • ลงทะเบียนทางอีเมล์ โดยแจ้ง ชื่อ ที่อยู่ และเบอร์ติดต่อกลับ ส่งมาที่ info [at] Joomladay.in.th



ที่มา - Joomla Corner


วันพุธที่ 13 พฤศจิกายน พ.ศ. 2556

มาติดตั้ง OpenShift Origin PaaS เล่นกัน

OpenShift เป็น Platform as a Service พัฒนาโดย RedHat ซึ่งนำแนวคิดการพัฒนา PaaS โดยไม่พึ่งพาการทำ Multi Tenant โดยใช้ VM แต่ใช้ Kernel Control Group, Namespace และ SELinux เป็นตัวแบ่ง Tenant ให้แต่ละ Application ทำงานแทนการใช้ VM ทำให้โครงสร้างของ OpenShift แตกต่างจาก PaaS ตัวอื่นๆ อย่างชัดเจน OpenShift ใช้ Gear แทน Application ของผู้ใช้ ซึ่งใน 1 Gear จะมีส่วนประกอบไปด้วย Code ของ Application, Git Repository, Application Environment และ Cargtride ที่เป็น Application Runtime, ฐานข้อมูล, Jenkins Server สำหรับทำ CI และ HA Proxy สำหรับทำ Load balance ระหว่าง Gear และรองรับการทำ Elastic Scale ผ่าน HA Proxy นอกจากนี้ยังสร้าง domain name จาก namespace ที่กำหนดให้โดยผู้ใช้ให้อีกด้วย ใครสนใจเรื่อง Architecture เข้าไปอ่านในเว็บ OpenShift กันได้



OpenShift แบ่งรุ่นบริการออกเป็น 3 รุ่น คือ




  • OpenShift Origin เป็นโอเพนซอร์สสามารถเข้าร่วมพัฒนาได้

  • OpenShift Enterprise เป็นรุ่น Enterprise ติดตั้งผ่าน RHEL Repository

  • OpenShift Online เป็นบริการออนไลน์บน openshift.com



OpenShift สามารถติดตั้งได้บน RedHat Enterprise Linux และ Fedora สำหรับ Linux Distribution อื่น เอา ไฟล์ spec+source ไป build package เอาเอง T_T



วิธีการติดตั้ง OpenShift ทำได้ 2 วิธี





ถ้าอยากลองเล่น OpenShift ก็สามารถลงทะเบียนเข้าใช้งานที่ OpenShift Online ได้ฟรี สำหรับการติดตั้งแบบง่ายๆ ก็คงหนีไม่พ้น Puppet ครั้งนี้ใช้ Fodora 19 ติดตั้งแบบ Command Line และ Developer Tools อ้อ ลืมบอกไปว่าเราจะติดตั้งแบบง่ายที่สุดคือมี broker+node+console ในเครื่องเดียวกัน ใครสนใจติดตั้งแบบอื่น ตามลิงค์ได้ที่ท้ายบทความ หลังจากติดตั้ง Fedora 19 แล้วก็ติดตั้ง Puppet ดังนี้



yum install -y --nogpgcheck http://yum.puppetlabs.com/puppetlabs-release-fedora-19.noarch.rpm



เนื่องจากเราจะใช้ mcollective และ activemq ของ OpenShift Origin ดังนั้นต้องไปตั้งค่า exclude ไว้ใน repo ของ puppet โดยแก้ไขไฟล์ /etc/yum.repo.d/puppetlabs.repo ใส่ค่า exclude=*mcollective* activemq ต่อท้ายทุกๆ repo ในไฟล์ puppetlabs.repo จากนั้นตั้งติดตั้ง puppet และเครื่องมือที่ต้องใช้



yum install -y puppet facter tar httpd-tools



จากนั้นติดตั้ง puppet module ดังนี้



puppet module install puppetlabs/ntp



puppet module install puppetlabs/stdlib



puppet module install openshift/openshift_origin



ติดตั้ง Bind และสร้าง TSIG Key



yum install -y bind



สร้าง TSIG Key ให้ domain ของคุณ ในกรณีนี้ใช้เป็น example.com ถ้าไม่ชอบก็สามารถเปลี่ยนเป็น domain ที่คุณต้องการได้



/usr/sbin/dnssec-keygen -a HMAC-MD5 -b 512 -n USER -r /dev/urandom -K /var/named example.com



cat /var/named/Kexample.com.*.key | awk '{print $8}'



คุณจะได้ค่า Key หน้าตาแปลกๆ แบบนี้ Mczfz277B5ykcPB4mAurZtZMhmXV6g== ให้จดเอาไว้ แล้วสร้าง config ชื่อ openshift_origin.pp ดาวน์โหลดจาก link ได้ครับ แก้ไข config ตามที่คุณต้องการ เช่น domain, bind key เป็นต้น ใน config ผมกำหนดให้ puppet ติดตั้ง Cartridge แค่ PHP, PHPMyAdmin, MariaDB และ HAProxy เพื่อความรวดเร็ว เมื่อได้ไฟล์ config กันแล้ว ก็สั่งให้ puppet ทำงานดังนี้



puppet apply --verbose openshift_origin.pp



ระหว่างนี้ก็นั่งรอครับ ประมาณครึ่งชั่วโมง T_T ถ้าไม่มี Error ตัวแดงๆ ก็เป็นอันใช้ได้ เมื่อติดตั้งเสร็จให้ reboot เครื่องแล้ว เปิด browser ไปที่ http://broker.example.com/console





OpenShift จะถาม username และ password ใส่ openshift, password จากนั้นก็ใช้งานตามปกติ



ลิงค์ที่น่าสนใจ




วันอาทิตย์ที่ 3 พฤศจิกายน พ.ศ. 2556

Jelly Bean มีส่วนแบ่งเวอร์ชันแอนดรอยด์เกินครึ่งแล้ว

กูเกิลเผยสถิติเวอร์ชันแอนดรอยด์รอบใหม่ (นับถึง 1 พฤศจิกายน) ล่าสุด Jelly Bean ทุกเวอร์ชันรวมกันมีส่วนแบ่งตลาดเกินครึ่งของแอนดรอยด์ทั้งหมดแล้ว




  • Jelly Bean 52.1%

  • Ice Cream Sandwich 19.8%

  • Honeycomb 0.1%

  • Gingerbread 26.3%

  • Froyo 1.7%



แต่ถ้าแตกเวอร์ชันย่อยของ Jelly Bean จะแบ่งได้เป็น 4.1 37.3%, 4.2 12.5%, 4.3 2.3%





ที่มา - Blognone


วันพฤหัสบดีที่ 31 ตุลาคม พ.ศ. 2556

แหล่งความรู้ OpenStack ภาค Networking

หลังจาก blog เรื่องแหล่งความรู้ OpenStack ไป ก็นึกสนุกทำ OpenStack Cheat Sheet ไป 2 เวอร์ชั่น และมีปัญหาจุกจิกกับ Neutron (Quantum) ที่ Lab Cloud Specialist เนื่องจาก Network Architecture ของ Lab ผิดไปจากที่ OpenStack Guid แนะนำไว้ก็เลยทำให้เกิดอาการงงกับ Neutron และปัญหาหนึ่งที่พยายามจะ Debug ก็คือ OpenVSwitch ซึ่งมันก็ดีนะ แต่ Debug งงมาก ก็เลยไปค้นคำถามจาก RedHat OpenStack ได้ข้อมูลที่น่าสนใจดังนี้




  • PackStack All-in-One DIY Configuration อธิบายว่าเกิดอะไรขึ้นกับ OpenVSwitch ในแต่ละขั้นตอนและวิธีการ Debug

  • Networking in too much detail อันนี้อธิบายแต่ละจุดของ Network ในส่วน Instance, Compute Host และ Network Host

  • OpenStack Networking with Neutron on RDO อันนี้เป็น Video อธิบาย้กี่ยวกับ Neutron เครื่องมือในการตรวจสอบและ Debug OpenVSwitch


เก็บตก AWS Cloud Kata Bangkok 2013

วันนี้ลางานไปงานสัมนา AWS Cloud Kata for Start-ups and Developer งานนี้จัดขึ้นที่โรงแรม Centerpoint Hotel & Resident ติดกับ Terminal 21 สิ่งที่ผมสนใจในงานนี้มี 2 อย่าง อันแรกคือระบบลงทะเบียนผ่าน PeaTix ผมชอบมากๆ สะดวกและรวดเร็ว แค่ลงทะเบียนผ่านหน้าเว็บหรือผ่าน Mobile App คุณก็จะได้ QR Code มา 1 อันพร้อมหมายเลขที่นั่ง ทำให้ผมสงสัยว่าตอนเข้างานสัมนาเขาจะทำยังไง จะ Scan QR Code มั๊ยหรือยังไง สิ่งที่น่าสนใจอย่างที่ 2 คือเนื้อหาของสัมนาของ AWS Kata มักจะเน้นไปที่เปิดโอกาสให้ได้ลองเล่นและทดลองใช้งาน AWS และอย่างที่บอกงานนี้เหมาะสำหรับ Start-ups และ Developers ทำให้ยิ่งอยากรู้ว่า ทีม AWS APAC จะทำอย่างไรหรือมีแนวทางนำเสนออย่างไร นอกจากนี้ก็เป็นเรื่องเกี่ยวกับ Start-ups ล้วนๆ ในเรื่องของ Venture Capital, Funding และ Pitching



พอเข้าไปในงานเจอผู้นำแก๊ง Joe Ziegler ผมเคยฟัง Joe บรรยายในงาน AWS Summit ที่อินเดีย ก็รู้เลยว่างานนี้สนุกแน่ เปิดงานด้วยใครใช้ Amazon บ้าง เริ่มจากวิดีโอ NASA JLP และแคมเปนจ์ใหม่ชื่อ Activate เมื่อเช้าเพิ่งดูใน Youtube T_T เป็นแคมเปนจ์เพื่อช่วยเหลือ Start-up ในการเข้าถึงแหล่งข้อมูลและเครื่องไม้เครื่องมือต่างๆ ในการใช้งาน AWS หลังจากนั้นก็เข้าสู่ช่วง Customer Speaker มี Stamp มาเล่าเกี่ยวกับการเริ่มใช้ AWS ว่าเริ่มอย่างไร และ Wongnai มาเล่าเรื่องการใช้งาน Elastic Scaling ของ Wongnai และบริการอื่นๆ ที่ Wongnai เล็งไว้ว่าจะใช้งานในอนาคต หลังจากนั้นก็เข้าเนื้อหาของ Markku Lepistö มาอธิบายเกี่ยวกับ AWS ว่ามีบริการอะไรบ้าง จะใช้งานขั้นเริ่มต้นได้อย่างไร (MVP:Minimum Viable Product) แล้ว Lean Start-up กับ AWS ทำได้อย่างไร อ้อแนะนำหนังสือ Lean Start-up ลองหามาอ่านนะครับสนุกมาก ตบท้ายด้วย Joe Ziegler มา Live Demo เรื่องทำ App พร้อมรองรับ Elastic Scaling แบบไม่ต้องสนใจเรื่อง Infrastructure บลาๆ มากนัก ด้วย Elastic Beanstalk อันนี้ช่วยให้เข้าใจเกี่ยวกับ Benefit ของ Cloud และ AWS ได้ง่ายมากคุณมีหน้าที่แค่เขียน App เท่านั้นส่วนอื่นๆ Elastic Beanstalk จัดการให้ และ Live Demo ก็สนุกสไตล์ Joe Ziegler ล่ะครับ



เนื่องจากเวลาสัมนาช้ากว่ากำหนดมากและเย็นมากแล้ว ผมก็เลยไม่ได้อยู่สัมนาต่อ ในหัวข้อ Getting to Profitability on AWS ที่จะพูดถึงเรื่อง Total Cost of Ownership (TCO), The six best practices for cost aware architecting ซึ่งเรื่อง Cost Aware Architecting เป็นหัวข้อที่เป็นคำตอบที่ว่าใช้ AWS อย่างไรไม่ให้เสียตังค์เยอะนั่นเอง เรื่องนี้เคยเข้า Live Webinar มาแล้วรอบนึงก็เลยกลับบ้านก่อน แฮะๆ



แปะ Slide AWS Cloud Kata ที่ฮ่องกงเอาไว้ให้ เพราะคล้ายๆ กันกับ AWS Cloud Kata ที่กรุงเทพ







Slide ของ Pieter Kemps มีเนื้อหาครอบคลุมแทบจะทุกเรื่อง รวมไปถึงเรื่อง Cost Aware Architecting ด้วย







ไหนๆ ก็จะ blog เรื่อง AWS แล้วก็เอาให้หมดเลยละกัน อันนี้เป็น Video + Webinar



A Walk through the AWS Cloud App Hosting on AWS





How to Reduce Your Spend on AWS





Total Cost of (Non) Ownership in the Cloud




วันเสาร์ที่ 19 ตุลาคม พ.ศ. 2556

มาคำนวณฮาร์ดแวร์สำหรับ OpenStack กัน

OpenStack เป็น Cloud Management ตัวนึงที่กำลังมาแรง ด้วยโครงสร้างการออกแบบที่ทำงานร่วมกันของแต่ละโมดูลทำให้ OpenStack แตกต่างจาก Cloud Management ตัวอื่นๆ อย่างชัดเจน โครงสร้างของ OpenStack จะต้องมีอย่างน้อย 2 ส่วนหลักๆ ได้แก่




  • Control Node

  • Compute Node



เครื่องมือช่วยคำนวณก็คือ BOM นั่นเอง สำหรับ BOM ตัวนี้พัฒนาจากบริษัทที่รับติดตั้งและพัฒนา OpenStack โดยตรงถือว่าเชื่อถือได้ครับ เครื่องมือใช้งานง่าย มีสิ่งที่ต้องกำหนด ได้แก่




  • อยากได้ Server ค่ายไหน DELL, HP, IBM, Super Micro

  • ระบบที่คุณจะทำสนับสนุน HA มั๊ย (3 Controllers)

  • อยากได้อุปกรณ์ Network ค่ายไหน DELL, Cisco, HP, Arista, Juniper, Brocade

  • ขนาดของ vCPU และ Memory โดยเฉลี่ยในระบบ

  • จำนวน VM ทั้งหมดที่คุณต้องการ

  • เลือกผลลัพท์ได้ว่าจะกรองตามจำนวนเซอร์ฟเวอร์หรือราคาที่ต้องจ่าย



มาดูผลลัพท์ของผมกันบ้าง สิ่งที่ผมต้องการคือ




  • ใช้อุปกรณ์ Server และ Network ของ DELL

  • ไม่มี HA

  • ขนาดของ VM โดยเฉลี่ยคือ 2 vCPU และ RAM ขนาด 1 GB

  • จำนวน VM ที่ต้องการ 4000 VMs



ดูราคากันก่อน (ผมเลือกตัวเลือกแรกเพราะราคาถูกที่สุด)











จากผลลัพธ์เราจะทราบข้อมูลเบื้องต้นในส่วนของฮาร์ดแวร์ทั้งจำนวนและราคา แต่น่าเสียดายที่ไม่มีการคำนวณในส่วน storage สำหรับ Glace, Cinder และ Swift และที่สำคัญไม่มีการคำนวณในส่วนของ Neutron ด้วย สำหรับท่านที่อยากทดลอง เข้าไปลองคำนวณกันได้ที่ Mirantis Hardware Bill of Materials Calculator for OpenStack


วันศุกร์ที่ 18 ตุลาคม พ.ศ. 2556

Ubuntu 14.04 ได้ชื่อ Trusty Tahr

Mark Shuttleworth ประกาศโค้ดเนมของ Ubuntu รุ่นหน้า 14.04 LTS ที่จะออกเดือนเมษายน 2014 คือ Trusty Tahr



Tahr หรือ Himalayan Tahr เป็นสัตว์สายพันธุ์เดียวกันกับแพะป่าในสกุล Hemitragus ส่วนมากอาศัยอยู่ในพื้นที่เทือกเขาหิมาลัยในทางตอนใต้ของธิเบต, ทางภาคเหนือของอินเดีย และ เนปาล เป็นต้น โดยสัตว์ชนิดนี้ยังถูกใช้เป็นสัญลักษณ์แห่งความกล้าหาญอย่างแน่วแน่และมั่นคง นั่นเอง



ส่วน Ubuntu รุ่นถัดไปนั้นจะใช้โค้ดเนมที่ขึ้นด้วยตัวอักษร U โดยมีการคาดเดาว่าอาจใช้ชื่อ Unhorned Unicorn หรือว่า Umbrella Uniform (อันนี้เป็นความคิดเห็นของผู้เขียนเอง) ก็เป็นได้ โดยสามารถเข้าไปดูรายชื่อโค้ดเนมได้ที่เว็บ Ubuntu Wiki



ที่มา - Blognone


วันพฤหัสบดีที่ 10 ตุลาคม พ.ศ. 2556

ติดตั้ง OpenStack แบบง่ายๆ กัน

ผมได้มีโอกาสไปเรียน Cloud Computing Specialist ทำให้ผมพบว่า การติดตั้ง OpenStack มันยุ่งจัง ยิ่ง service ของ OpenStack ยิ่งมากขึ้น ก็ต้อง config มากขึ้น อืมมม จริงๆ ก็ไม่ใช่เรื่องแปลกอะไรอ่ะนะ แต่สำหรับคนที่ต้องการสนองความอยากรู้อย่างผม เจ้าหมี Grizzly ก็เล่นเอาถอดใจเหมือนกัน วันนี้็เลยอยากมาแนะนำวิธีการติดตั้งแบบง่ายๆ สำหรับคนที่อยากรู้ว่า OpenStack เป็นยังไงเพื่อจะได้ทดลองเล่นได้ ก่อนจะถึงขั้นตอนติดตั้ง ต้องแนะนำสักหน่อยว่า OpenStack เป็น Cloud Management Platform ประกอบไปด้วย service ที่ทำหน้าที่แตกต่างกัน ดังนี้




  1. Nova ทำหน้าที่จัดการส่วน Compute และ Orchestration อะไรที่ต้องยุ่งกับ VM ก็ดูตัวนี้

  2. Glance ทำหน้าที่เป็นตัวจัดการ Image Respository ของ VM ที่เราจะเอามาใช้งาน

  3. Cinder ทำหน้าที่เป็นตัวจัดการ Block Storage เอาไว้แปะกับ VM เพิ่ม Disk และเก็บข้อมูล

  4. Keystone ทำหน้าที่เป็น Identity Management และ Tenant ให้กับระบบ

  5. Swift ทำหน้าที่เป็น Object Storage เก็บไฟล์ หรือทำ Archive Block Storage ได้

  6. Neutron ทำหน้าที่เป็น Network Sevice จัดการเรื่อง Virtual Switch/Router/Network ได้

  7. Ceilometer ทำหน้าที่เป็น Meter วัดการใช้งาน resources ไม่ว่าจะเป็น CPU, Memory, Storage และ Network ได้

  8. Heat ทำหน้าที่เป็น Orchestration Tools โดยเตรียม Config ต่างๆ ไว้เป็น Template ใช้ในการ Deploy App ได้ง่ายๆ อันนี้ลอกมาจาก Cloud Formation ของ Amazon AWS

  9. Horizon เป็น Dashboard ทำงานผ่านเว็บ ช่วยให้เราไม่ต้องใช้ Command Line เยอะจนเกินไป



สำหรับผู้ที่อยากลองเล่น OpenStack มี 3 ช่องทางให้เลือก คือ




  1. ติดตั้งเอง

  2. ลองเล่นจาก TryStack

  3. ลองเล่นจาก Cloud Provider อย่าง Rackspace, HP Cloud เป็นต้น




สำหรับผู้ที่อยากติดตั้งเองมีอีก 3 ช่องทางให้เลือก




  1. ติดตั้งจาก Package ที่ Linux Distribution มีให้แล้ว Config ทีละ Service ไปเรื่อยๆ Config เหนื่อย ถ้าขยันก็อาจเลือกวิธีนี้ได้ :)

  2. ติดตั้งจากเครื่องมือ DevOps อย่าง เช่น Chef, Puppet, Juju, Crowbar, Foreman เป็นต้น

  3. ติดตั้งจากเครื่องมือสำหรับนักพัฒนาอย่าง DevStack วิธีนี้เหมาะสำหรับ คนที่อยากรู้เฉยๆ restart เครื่องแล้ว service หายนะจ๊ะ



เยอะไปหรือเปล่า T_T เอาเป็นว่าผมเลือกวิธีง่ายๆ และสามารถเอาไปลองเล่นได้นานๆ วิธีที่ว่าคือ การติดตั้งผ่านเครื่องมือ DevOps ซึ่ง RedHat ได้เลือกใช้ Puppet มาเป็นเครื่องมือสำหรับการติดตั้ง OpenStack บน RedHat Enterprise Linux, Fedora 19+ และ CentOS มาดูวิธีการติดตั้งกัน สิ่งที่ต้องมี ได้แก่




  1. RedHat Enterprise Linux 6 Mini หรือ CentOS 6.4 Mini ก็ได้

  2. เครื่องคอมพิวเตอร์ที่มี CPU 2 Cores, RAM 2GB, HDD 160GB เป็นอย่างต่ำ มีสัก 2 เครื่อง ต่อ LAN และออกเน็ตได้



โดย LAN เป็น Network 192.168.0/24 เครื่อง Controller มี IP เป็น 192.168.0.10 เครื่อง Node 1 มี IP เป็น 192.168.0.11



เริ่มจาก Cluster Controller (All in One)



ติดตั้ง CentOS 6.4 Mini ให้เรียบร้อย จากนั้นติดตั้ง RedHat OpenStack Repository ดังนี้



sudo yum install -y http://rdo.fedorapeople.org/openstack-grizzly/rdo-release-grizzly.rpm



จากนั้นติดตั้ง PackStack เครื่องมือที่ใช้ติดตั้ง OpenStack



sudo yum install -y openstack-packstack



เพื่อความแน่ใจ reboot เครื่อง 1 รอบ ให้ Kernel ใหม่ทำงาน จากนั้นก็ ติดตั้ง OpenStack ได้เลยโดยใช้คำสั่ง



packstack --allinone --os-quantum-install=n



รอจนกว่าการติดตั้งจะเสร็จ ตัวติดตั้งจะแจ้งว่าเข้าใช้งาน Dashboard ได้จาก URL อะไร และ Username, Password อะไร



สำหรับเครื่อง Node ทำแบบเครื่อง Controller ติดตั้ง packstack จากนั้น copy file packstack-answer-XXXXXX-XXXX.txt มาไว้ที่เครื่อง Node แก้ไขไฟล์นี้ในส่วน CONFIG_NOVA_COMPUTE_PRIVIF, CONFIG_NOVA_NETWORK_PRIVIF จาก lo เป็น eth0 , CONFIG_NOVA_COMPUTE_HOSTS เป็น IP ของเครื่อง Node คือ 192.168.0.11 แก้ CONFIG_NOVA_NETWORK_FLOATRANGE จาก 10.3.4.0/22 เป็น 192.168.0.128/26 จากนั้นสั่งติดตั้งตาม answer file ดังนี้



packstack --answer-file=packstack-answer-XXXXXX-XXXX.txt



หลังจากการติดตั้งเสร็จ มาลอง Service กันหน่อย ใช้คำสั่ง



source keystone_admin



เพื่อเปิด console และตั้งค่า Environment ให้เครื่องมือบน Command Line จากนั้นใช้คำสั่ง



nova-manage service list



เพื่อดูว่า service ทั้งหมดทำงาน หรือใครอยากจะทดสอบ เป็นราย service โดยการ list ข้อมูลออกมาก็ได้ เช่น nova list, glance index, cinder list เป็นต้น ถ้าลองแล้วไม่มี Error ก็ถือว่าใช้ได้ ลืมบอกไปว่าถ้าจะทำให้ VM ที่สร้างขึ้นมา ต่อกับโลกภายนอกได้ ต้องตั้ง Floating IP แต่ PackStack กำหนดค่าให้เราสำเร็จ ซึ่งเป็นค่าที่ผิด T_T ต้องมาแก้กันก่อน โดยลบของเก่าออกก่อน



nova floating-ip-bulk-delete 10.3.4.0/22



และเพิ่ม Floating IP ที่ถูกต้องลงไป



nova floating-ip-bulk-create 192.168.0.128/26



จากนั้นสร้าง SSH Key สำหรับใช้งานกัน :)



nova keypair-add mykey > mykey.pem



ดาวน์โหลด VM Image สมมติว่าเป็น Ubuntu ละกัน



wget http://cloud-images.ubuntu.com/precise/current/precise-server-cloudimg-amd64-disk1.img



และลงทะเบียนเข้าไปใน Glance ดังนี้



glance image-create --name 'precise' --disk-format qcow2 --container-format bare --is-public true < precise-server-cloudimg-amd64-disk1.img



กำหนด security group ให้ ssh และ ping ได้



nova secgroup-add-rule default icmp -1 -1 0.0.0.0/0



nova secgroup-add-rule default tcp 22 22 0.0.0.0/0



เมื่อมีของครบแล้วก็เริ่ม start vm กันได้ โดยใช้คำสั่ง



nova image-list



ดูว่า precise image id เป็นเท่าไร จากนั้นสั่ง boot ด้วยคำสั่ง



nova boot --image <image-id> --key-name mykey --flavor m1.small --security-groups default myprecise



ใช้คำสั่ง nova list ก็จะพบว่า vm ชื่อ myprecise กำลังเริ่ม start แล้ว เมื่อเข้าสู่สถานะ running ก็สามารถ ssh เข้าไปได้ อ้อ ก่อนอื่นกำหนด Floating IP ให้ VM เสียก่อน โดยใช้คำสั่ง



nova add-floating-ip myprecise 192.168.0.129



ใช้คำสั่ง nova list ดูว่า floating ip ไปเกาะกับ vm ของเราหรือยัง ถ้าเกาะเรียบร้อยแล้วก็สามารถ ssh เข้าไปได้โดยใช้คำสั่ง



ssh -i mykey.pem ubuntu@192.168.0.129



เอาแค่นี้ก่อน คุณสามารถใช้งาน OpenStack จาก Dashboard ได้นะครับ



สำหรับใครที่อยากใช้ OpenStack แบบจริงๆ จังๆ หรือต้องการทำ Private Cloud ใช้ในองค์กร แนะนำให้ไปเรียนกับ ClusterKit หรือ อ.อาณัติ หรือ ซื้อบริการ RedHat OpenStack, Ubuntu OpenStack ได้จากตัวแทนจำหน่ายใกล้บ้านท่านครับ :)


วันอาทิตย์ที่ 6 ตุลาคม พ.ศ. 2556

Hot Deploy PHP App บน OpenShift

หลายคนอาจเจอปัญหาอาการ 503 Service Unavailable บน OpenShift หลังจาก Deploy PHP App ทุกครั้งที่มีการ Deploy app ผ่าน git push OpenShift จะเอาไฟล์ที่ push ไปวางแทนที่ revision เดิมและเริ่มกระบวนการ Deploy และจะทะยอย Stop และ Start Service ต่างๆ ใน Cartridge ที่เรามี เช่น Web Server, MySQL เป็นต้น เนื่องจาก OpenShift จะต้องรอ Service ในแต่ Cartridge เริ่มทำงานก่อน ทำให้เราเจอหน้า 503 Service Unavailable ในการ Deploy PHP App ไม่จำเป็นต้อง Stop และ Start Service ใน Cartridge ต่างๆ ก็ได้เพราะภาษา PHP เป็นภาษา Script เราสามารถแก้ปัญหานี้ได้ง่ายๆ โดยใช้วิธีที่เรียกว่า Hot Deploy



การทำ Hot Deploy จะเป็นการสั่งให้ OpenShift ไม่ต้องสนใจเรื่อง Start/Stop Cartridge มีวิธีการง่ายๆ คือ สร้างไฟล์ hot_deploy ใน markers



$ touch YourAppName/.openshift/markers/hot_deploy



$ git commit -am "Adding hot deploy marker"



$ git push


วันพุธที่ 2 ตุลาคม พ.ศ. 2556

OpenStack Cheat Sheet

ผมได้กลับมาใช้ OpenStack อีกรอบ หลังจากที่เคยใช้รุ่น Essex เป็นรุ่นที่ Horizon เพิ่งเสร็จใหม่ๆ ก่อนหน้านี้ก็ใช้ command line มาตลอดจำได้เพราะใช้บ่อย ผ่านไปเกือบ 2 ปีกลับมาใช้รุ่น Grizzly ที่เคยใช้คำสั่งใน command line ได้ก็ลืมหมด ก็เลยคิดว่าทำ Cheat Sheet ไว้สักหน่อยน่าจะดี ผมก็เลยถือโอกาส แชร์เอาไว้ให้ได้ดาวน์โหลดไปแปะข้างฝาละกันนะครับ สำหรับท่านที่สนใจร่วมทำ Cheat Sheet ก็ขอ Share เอกสารผ่าน Google Drive ได้ครับ




วันพุธที่ 25 กันยายน พ.ศ. 2556

พลาดไม่ได้กับสัมนา Cloud Computing พร้อมอัพเดทเทคโนโลยีจาก RedHat ภาค 2

พลาดไม่ได้! กับงานสัมนาพร้อมอัพเดทเทคโนโลยี Hybrid Cloud และ Platform ในการพัฒนา Cloud Application อย่าง RedHat JBOSS งานนี้ท่านจะได้พบกับแนวทางการพัฒนา Cloud Application หรือ Software as a Service การพัฒนาระบบเทคโนโลยีสารสนเทศเพื่อรองรับการทำงานร่วมกันระหว่าง Public Cloud และ Private Cloud โดยใช้เครื่องมือ Cloud Form ของ RedHat เพื่อให้เกิด Hybrid Cloud อย่างสมบูรณ์แบบ! ห้ามพลาด งานสัมนาทั้ง 2 หัวข้อนี้




  • Foundation of software innovation and agility by using Red Hat Enterprise JBoss Middleware - วันที่ 16 ตุลาคม 2556 เวลา 13.00-16.00

  • The Real Future Cloud The Real Hybrid Cloud (Red Hat Enterprise CloudForm) - วันที่ 13 พฤศจิกายน 2556 เวลา 13.00-16.00



สนใจกรุณาลงทะเบียนสำรองที่นั่งล่วงหน้า ด่วน! มีจำนวนจำกัด


วันพฤหัสบดีที่ 19 กันยายน พ.ศ. 2556

LibreOffice กับแม่แบบเอกสารราชการ

ช่วงนี้มีของเล่นใหม่จาก OS Dev ได้พัฒนาแม่แบบเอกสารราชการและเครื่องมืออำนวยความสะดวกหลายอย่างมาเพิ่มความสามารถ ทำให้การทำงานเอกสารราชการบน LibreOffice ได้ง่ายมากขึ้น พร้อมทั้งเปิดเว็บไซต์ชุมชน รวบรวมเนื้อหาแนะนำการใช้งาน การแก้ปัญหาการใช้งานเบื้องต้น ตลอดจนวิดีโอสอนการใช้งานอีกด้วย สำหรับท่านที่สนใจสามารถติดตามได้ที่ libreofficeclub.com ภายในเว็บมีลิงค์เพื่อให้ดาวน์โหลด LibreOffice รุ่นต่างๆ พร้อม Extension ที่น่าสนใจหลายตัว ครั้งนี้จะมาแนะนำ RTG Extension สำหรับเอกสารราชการกันครับ



หลังจากติดตั้ง LibreOffice รุ่น RTG Extension แล้วคุณจะพบว่าหน้าตา LibreOffice ของคุณจะเปลี่ยนแปลงไปเล็กน้อย จะเห็นได้ว่ามีเมนู RTG Template เพิ่มขึ้นมาดังภาพ





ภายในเมนูนี้จะประกอบไปด้วยเครื่องมือที่เกี่ยวข้องกับแม่แบบเอกสารราชการ เช่น ทำสำเนา, ทำสำเนาพร้อมตราประทับ, จัดตำแหน่งคำลงท้าย เป็นต้น นอกจากนี้ยังมีชุดแม่แบบสำหรับเอกสารราชการที่ใช้กับพลเรือนและทหารแยกกันอย่างชัดเจน ซึ่งในแต่ละชุดมีแม่แบบเอกสารกว่า 10 แบบ





หากมาดูในส่วนของ extension ที่เพิ่มเข้ามาจะพบว่ามี extenstion เสริมเข้ามาอีกมากกว่า 10 ตัว และ extension สามารถอัพเดทออนไลน์ได้อีกด้วย ทำให้คุณได้รับอัพเกรดความสามารถใหม่ๆ ได้อีกด้วย





สำหรับท่านที่ใช้ Mac OSX และ Linux สามารถติดตั้งเสริมเหล่านี้ได้เช่นกัน ผมใช้ Mac OX ก็สามารถความสามารถนี้ได้เช่นกันครับ :)