เราสามารถใช้งาน juju เพื่อทำการ deploy application ไปยัง cloud ของ Microsoft Azure ได้ โดยจะต้องกำหนดค่า config เพื่อเชื่อมต่อก่อน

เริ่มต้นโดยการติดตั้ง juju ก่อน (สำหรับบน Ubuntu) โดยใช้คำสั่ง
$ sudo add-apt-repository ppa:juju/stable
$ sudo apt-get update && sudo apt-get install juju-core
จากนั้นให้ generate ไฟล์ config สำหรับ juju โดยใช้คำสั่ง

$ juju generate-config
Continue reading

ก่อนหน้านี้ผมเคยพูดถึงการติดตั้ง wordpress ด้วย juju โดยเชื่อมต่อกับ AWS มาแล้ว วันนี้ผมจะมาพูดถึงการติดตั้ง joomla ด้วย juju ซึ่งครั้งนี้ผมลองเชื่อมต่อกับ Azure กันบ้างนะครับ

หลังจากที่รันคำสั่ง

$ juju bootstrap

เพื่อสร้าง environment เรียบร้อยแล้ว ให้รันคำสั่งเพื่อติดตั้ง joomla

$ juju deploy joomla


Continue reading

หลังจากเตรียมความพร้อมก่อนติดตั้งกันไปแล้ว เรามาต่อในส่วน keystone กัน OpenStack Keystone เป็นบริการสำหรับการยืนยันตัวตน ก่อนที่เราจะทำอะไรเกี่ยวกับ OpenStack Components ต่าง ๆ เราต้องมีสิทธิ์ในการเข้าถึงก่อน โดย keystone เองก็มีส่วนประกอบ ดังนี้

  • Endpoints : บริการ OpenStack ทุกส่วน(Nova, Swift, Glance) ต้องรันผ่าน URL , port  ซึ่งการเข้าถึงผ่าน URL และ Port นั้น เราเรียกว่า endpoint
  • User : User ที่มีสิทธิ์ในการเข้าถึงบริการ OpenStack
  • Token : ชุดตัวอักษรหรือตัวเลขที่จะช่วยให้เข้าถึงแต่ละบริการ โดยจะขึ้นอยู่กับ role ของ user
  • Service : แต่ละ component ที่มีการเชื่อมต่อผ่าน keystone
  • Tenant : เป็นกลุ่มของ user
  • Role: ระดับการเข้าถึงของแต่ละ user

เมื่อเรารู้จักส่วนประกอบของ keystone แล้วก็มาเริ่มติดตั้งกัน คำสั่งสำหรับติดตั้ง keystone คือ

sudo apt-get install keystone python-keystone python-keystoneclient

หลังจากติดตั้งเรียบร้อยแล้วก็มาแก้ไขค่า keystone.conf กัน โดยเข้าไปแก้ไขใน /etc/keystone/keystone.conf ดังนี้

  1. เปิดคอมเมนต์ admin_token = ADMIN และแก้ไขค่า admin_token เป็นอะไรก็ได้  ในที่นี้จะใช้ admin admin_token = admin
  2. เนื่องจากเราใช้ MySQL Database ให้แก้ไขค่า connection เพื่อเชื่อมต่อ database โดยแก้ไขค่าจาก
  3. connection = sqlite:////var/lib/keystone/keystone.db

    เป็น

    connection=mysql://KEYSTONE_USER:KEYSTONE_DBPASS@IPADDRESS/keystone

    ดังตัวอย่าง

    connection = mysql://keystonedbadmin:keystonesecret@192.168.102.137/keystone

    หลังจากแก้ไขค่าคอนฟิกไฟล์แล้วก็ต้องรีสตาร์ท service เพื่อปรับค่าที่ได้แก้ไขไปโดย

    sudo service keystone restart

    จากนั้นสร้าง keystone database schema โดยใช้คำสั่ง

    sudo keystone-manage db_sync

    และทำการเซตค่า environment ในไฟล์ ~/.bashrc โดย default admin port คือ 35357  ดังนี้

    export SERVICE_TOKEN=admin
    export SERVICE_ENDPOINT="http://localhost:35357/v2.0"

    environment variable

    เมื่อติดตั้งปรับแต่ง keystone เรียบร้อยแล้วต่อไปเราต้องใส่ข้อมูลให้กับ keystone โดยมี 6 ส่วนดังที่ได้อธิบายไปด้านบน ดังนี้

    1. Tenants
    2. Users
    3. Roles
    4. Role ของ User ใน Tenants
    5. Services
    6. Endpoint ของ service

    การสร้าง Tenants

    การสร้าง Tenants ทำได้โดยใช้คำสั่ง keystone tenant-create –name TENANT_NAME ซึ่งตัวอย่างจะสร้าง 2 tenants คือ admin และ service

    สร้าง tenants admin โดยใช้คำสั่ง ดังรูป
    Create tenant

    สร้าง tenants service โดยใช้คำสั่ง ดังรูป
    Create tenant service

    การสร้าง User

    ในตัวอย่างเราจะสร้าง users 4 user ได้แก่ admin, nova, glance และ swift โดยใช้คำสั่งดังนี้

    keystone user-create --name admin --pass admin --email admin@osdev.co.th
    keystone user-create --name nova --pass nova --email nova@osdev.co.th
    keystone user-create --name glance --pass glance --email glance@osdev.co.th
    keystone user-create --name swift --pass swift --email swift@osdev.co.th
    รูปด้านล่างคือตัวอย่างการสร้าง User
    Create User admin

    การสร้างกฏ (Roles)

    ในตัวอย่างจะทำการสร้างกฏ 2 กฏ คือ admin และ Member ดังนี้

    keystone role-create --name admin
    keystone role-create --name Member

    รูปแสดงตัวอย่างการสร้างกฏ
    Create admin role

    การแสดงรายการ Tenants, Users และ Roles

    เราสามารถเรียกดู Tenants, Users และ Roles ที่สร้างได้โดยใช้คำสั่ง ดังนี้

    List Tenants:
    List Tenants
    List Users:
    User List
    List Roles:
    List Roles
    *** ให้สังเกตเลข id ซึ่งเราจะใช้เมื่อระบุ role ให้ user ในแต่ละ tenant

    การเพิ่ม Roles สำหรับ Users ใน Tenants

    ต่อไปเราจะมาเพิ่ม role ให้กับ user ที่เราสร้างขึ้น โดยการใช้คำสั่ง ดังนี้

    keystone user-role-add --user $USER_ID --role $ROLE_ID --tenant_id $TENANT_ID

    จะเห็นว่าเราต้องใช้ค่า “id” ซึ่งเราได้มาจากคำสั่ง keystone user-list, keystone tenant-list, keystone role-list ที่แสดงให้ดูก่อนหน้านี้

    โดยเราจะเพิ่มกฏ ‘admin’ ให้กับ user ‘admin’ ใน tenant ‘admin’ ดังตัวอย่าง

    keystone user-role-add --user b69096ec14a5495ebedb4abf0cf9dade --role 29517c06e7024316a1d47a23787b3943 --tenant_id c82a58d2957d43c2a86a7aadbf16f031

    ต่อไปเราจะเพิ่ม role admin ให้ user ‘nova’, ‘glance’ และ ‘swift’ ใน tenant service จะใช้คำสั่งดังนี้
    assign role

    การสร้าง Services

    ต่อไปเราจะมาสร้าง services ซึ่ง user จะตรวจสอบก่อนใช้บริการ ในตัวอย่างจะสร้าง service nova-compute, nova-volume, glance, swift, keystone และ ec2 โดยคำสั่งที่จะใช้ คือ

    keystone service-create --name service_name --type service_type --description ’Description of the service’
    ดังนี้

    keystone service-create --name nova --type compute --description 'OpenStack Compute Service'
    keystone service-create --name volume --type volume --description 'OpenStack Volume Service'
    keystone service-create --name glance --type image --description 'OpenStack Image Service'
    keystone service-create --name swift --type object-store --description 'OpenStack Storage Service'
    keystone service-create --name keystone --type identity --description 'OpenStack Identity Service'
    keystone service-create --name ec2 --type ec2 --description 'EC2 Service'

    แต่ละ service ที่สร้างก็จะได้ ‘id’ เฉพาะ เพื่อใช้ระบุ endpoint ของ service แต่ละตัว โดยใช้คำสั่ง keystone service-list ดังนี้
    Ketstone service list

    การสร้าง Endpoint สำหรับ Service

    endpoint สำหรับ service สร้างโดยใช้คำสั่งดังนี้

    keystone endpoint-create --region region_name --service_id service_id --publicurl public_url --adminurl admin_url --internalurl internal_url

    การสร้าง endpoint สำหรับ nova-compute ใช้คำสั่งดังนี้

    keystone endpoint-create --region myregion --service_id 5013c9cfcd344ed6a3f11a098b20dd10 --publicurl 'http://192.168.0.102:8776/v1/$(tenant_id)s' --adminurl 'http://192.168.0.102:8774/v2/$(tenant_id)s' --internalurl 'http://192.168.0.102:8774/v2/$(tenant_id)s'

    ตัวอย่าง ดังรูป
    ketstone endpoint create
    จากนั้นก็สร้าง endpoint ของ service แต่ละอันให้ครบ ดังนี้

    endpoint สำหรับ nova-volume:

    keystone endpoint-create --region myregion --service_id d842895c8e144a428b70a48fbf57d04e --publicurl 'http://192.168.0.102:8776/v1/$(tenant_id)s' --adminurl 'http://192.168.0.102:8774/v2/$(tenant_id)s' --internalurl 'http://192.168.0.102:8774/v2/$(tenant_id)s'

    endpoint สำหรับ glance:

    keystone endpoint-create --region myregion --service_id 4588944458bc482f83d897fe97157fb2 --publicurl 'http://192.168.0.102:8776/v1/$(tenant_id)s' --adminurl 'http://192.168.0.102:8774/v2/$(tenant_id)s' --internalurl 'http://192.168.0.102:8774/v2/$(tenant_id)s'

    endpoint สำหรับ swift:

    keystone endpoint-create --region myregion --service_id b60e854ac822454dac56563b13ce8717 --publicurl 'http://192.168.0.102:8776/v1/$(tenant_id)s' --adminurl 'http://192.168.0.102:8774/v2/$(tenant_id)s' --internalurl 'http://192.168.0.102:8774/v2/$(tenant_id)s'

    endpoint สำหรับ keystone:

    keystone endpoint-create --region myregion --service_id 9337b0a9102a4e6195013ae42eb6f446 --publicurl 'http://192.168.0.102:8776/v1/$(tenant_id)s' --adminurl 'http://192.168.0.102:8774/v2/$(tenant_id)s' --internalurl 'http://192.168.0.102:8774/v2/$(tenant_id)s'

    endpoint สำหรับ ec2:

    keystone endpoint-create --region myregion --service_id bdc9d51883584837b75f59ab7ad16703 --publicurl 'http://192.168.0.102:8776/v1/$(tenant_id)s' --adminurl 'http://192.168.0.102:8774/v2/$(tenant_id)s' --internalurl 'http://192.168.0.102:8774/v2/$(tenant_id)s'

    เรียบร้อยสำหรับ keystone ในบทความต่อไปเราจะมาติดตั้ง Glance กันต่อ

เมื่องาน OSSFestival 2014 ที่ผ่านมา มี workshop เกี่ยวกับ Arduino DIY ได้รับความสนใจมากจากหลายคนที่สนใจด้าน OpenSource Hardware ซึ่งโครงการอย่าง Arduino และ Raspberry Pi เป็นโครงการ OpenSource Hardware ที่ประสบความสำเร็จมาก เรียกได้ว่าใช้เครื่องมือทุกอย่างที่เป็น OpenSource ในการทำงานได้ ตั้งแต่การประกอบแบบ DIY,Arduino Bootloader สำหรับ Burn ลงในชิบ ATMEGA328, IDE ที่ใช้เขียนโปรแกรมและระบบปฏิบัติการที่ใช้งานได้ เรียกได้ว่าใช้งานเครื่องมือแบบ OpenSource ได้ในทุกกระบวนการเลยทีเดียว ดีจัง :) ใน workshop ได้แนวคิดหลายอย่าง ไม่ว่าจะเป็นบอลลูนติด Arduino ควบคุมด้วย Remote Control แบบ Infra Red หรือการใช้งาน Arduino DIY กับ RFID เป็นต้น เรียกได้ว่าทำได้หลายอย่างมากๆ

ในตอนแรกคิดว่าจะลองทำบอลลูนควบคุมด้วย Arduino แต่ต้องถอดใจก่อนเพราะไม่มีลูกโป่งและก๊าซฮีเลียม แนวคิดนี้ก็เลยขอพักไว้ก่อน ลองทำอะไรง่ายๆ ก่อนน่าจะดีกว่า อย่างเช่น Robot เอ่อ…ต้องเรียกรถ 2 ล้อน่าจะถูกกว่าเพราะมี 2 ล้อสำหรับควบคุมทิศทางและล้ออิสระอีก 2 ล้อเอาไว้พยุงตัวรถเท่านั้นเอง อุปกรณ์ที่ต้องใช้มีดังนี้ครับ

  • Robot Chassis Kit (Chassis + Motor + Wheel)
  • Arduino UNO
  • Motor Drive Shield (L298P)
  • Bluetooth Module HC-05
  • Battery ขนาด AA 6 ก้อน
  • Battery Box ขนาด AA 6 ก้อน


Continue reading

Juju คือเครื่องมือสำหรับ Deploy, Manage, Maintain โครงสร้าง Infrastructure ของคุณไปยัง Cloud ทั้ง public, private รวมถึง hybrid cloud ทั้งผ่านทาง GUI และ command line

แต่สำหรับบทความนี้ผมจะพูดถึงการใช้ Juju ในการ deploy ด้วย command line บนเครื่อง local ก่อนนะครับ เพื่อแนะนำวิธีการใช้งาน Juju โดยในบทความถัดๆ ไปจะกล่าวถึงการเชื่อมต่อกับ cloud service อื่นๆ บ้างนะครับ
Continue reading

ก่อนที่จะทำความรู้จัก OpenStack นั้น เราต้องทำความรู้จักเทคโนโลยี cloud กันก่อน

ถ้าพูดถึง Cloud Computing หลายคนอาจจะนึกไม่ออกว่าคืออะไร คำแปลสุดฮิตของเจ้า Cloud Computing ก็คือ การประมวลผลบนกลุ่มเมฆ พูดง่าย ๆ ก็คือ บริการที่ให้เราเลือกใช้ทรัพยากรคอมพิวเตอร์ได้ตามความต้องการ โดยสามารถปรับเพิ่ม ลด ปริมาณการใช้งานได้ง่ายและรวดเร็วผ่าน web interface

ซึ่งรูปแบบบริการ Cloud Computing ก็จะแบ่งได้ 3 รูปแบบ ดังนี้

  • Infrastructure as a Service (IaaS) – ให้บริการในส่วน Physical หรือทรัพยากรคอมพิวเตอร์ เช่น CPU, Memory, Operating System, Storage เป็นต้น ตัวอย่าง Amazon
  • Platform as a Service (PaaS) – ให้บริการในส่วนทรัพยากรและเครื่องมือสำหรับนักพัฒนา เช่น Google Apps Engine, IBM Mashup Hub, Microsoft Azure
  • Software as a Service (SaaS) – ให้บริการในส่วนข้อมูลหรือ Application เช่น Google Apps, Picasa, Youtube, Facebook


Continue reading

บางครั้งเราต้องการดูว่ามีการ Access ของ Client มากน้อยเพียงใดตัว Gluster ก็มี I/O Information ให้เราสามารถดูได้โดย สมมติเราใช้งาน GlusterFS โดยสร้างเป็น Replicated Volume ชื่อว่า data-replicated โดยมี Architecture ดังนี้

  1. node1 192.168.1.100
  2. node2 192.168.1.101
  3. node3 192.168.1.102

จากนั้นหากเราต้องการดู I/O ของ Volume ดังกล่าวสามารถทำได้โดยขั้นแรกให้ Start volume profile ก่อนโดยพิมพ์คำสั่ง
Continue reading

บน Alfresco เราสามารถเปลี่ยน Alfresco data เป็น path อื่นได้เช่น mount มาจาก SAN/NAS storage คราวนี้เรามาเปลี่ยน Alfresco data ให้ใช้ Gluster กัน

ขั้นแรกสมมติว่าเราติดตั้ง GlusterFS เสร็จเรียบร้อยแล้วโดยตัวอย่างนี้ติดตั้งแบบ replicated x3 โดยมี Architecture ดังนี้

  1. node1 192.168.1.100
  2. node2 192.168.1.101
  3. node3 192.168.1.102

บนเครื่อง Alfresco เมื่อเราติดตั้ง Alfresco เสร็จแล้วให้เราติดตั้ง glusterfs-client ก่อน
sudo apt-get install glusterfs-client
Continue reading

Google นำเสนอการออกแบบ Application ใหม่ ชื่อ Material Design และจะถูกใช้งานบน Android L ภายใต้แนวคิดการออกแบบในลักษณะนี้ทำให้ Application อยู่ในรูปแบบ responsive มากขึ้น สามารถแสดงผลได้บนทุกๆ อุปกรณ์ และที่สำคัญคือมี Animation อัตโนมัติแทบจะทุกๆ widget เลย แนวคิดแบบนี้สามารถนำเอามาปรับใช้กับการพัฒนา Mobile App หรือ Web App ได้ ไม่จำเป็นต้องเป็น Android App นะครับ ในส่วนของ Web App ทาง Google มีโครงการ Polymer เป็น platform ในการพัฒนา Web App ในรูปแบบของ Web Component สามารถใช้งาน Meterial Design ได้เลย ผ่าน Component ต่างๆ ที่มีให้ สำหรับท่านที่สนใจ Material Design ก็ไปศึกษาข้อมูลเพิ่มเติมกันได้ครับ

เรามาลองสร้าง Layout ในแบบ Material Design โดยใช้ Polymer กันครับ อันดับแรกต้องมี Polymer กันก่อน วิธีง่ายที่สุดคือการใช้ paper element ในรูปแบบ zip file แต่วิธีที่ Google แนะนำคือใช้ Bower ติดตั้ง component ที่จำเป็นต้องใช้จะทำให้ Web App ที่ได้มีขนาดเล็ก เราจะมาใช้วิธีที่ง่ายที่สุดแล้วกันครับ เข้าไปที่ Getting The Code คลิกที่ Get The Paper Elements จากนั้นจะมี dialog ขึ้นมาให้เราเลือกว่าเราจะดาวน์โหลดจากที่ไหน ให้เลือก Download Zip เมื่อได้ไฟล์แล้ว ให้แตกไฟล์นี้ลงในไดเรคทอรีของโปรเจค

mkdir hello-polymer

cd hello-polymer

curl -o elements.zip https://bowerarchiver.appspot.com/archive?paper-elements=Polymer/paper-elements

unzip elements.zip


Continue reading