Author: jatuporn.ch

  • การยืนยันตัวตนและการกำหนดสิทธิ์ Apache UserGrid 2.x

    ติดตั้ง UserGrid เสร็จแล้ว ถ้าจะใช้งานต้องทำอย่างไร

                 จากที่เคยกล่าวไปแล้วเบื้องต้นในวิธีติดตั้ง Apache UserGrid [1][2] จะมี Port สำหรับเรียกด้วย Rest Service คือ port 8080 ส่วนหน้าสำหรับบริหารจัดการจะเป็น 80 ซึ่งเบื้องต้นจะไม่ใช่ ssl ถ้าต้องการความปลอดภัยต้องไปปรับแต่งเพิ่มเติม (ถ้าใช้ ha-proxy ก็ทำ ssl เฉพาะด้านหน้าก็ได้ครับ) โดยอาจจะต้องปรับแต่งที่ตัว Tomcat อ่านเพิ่มเติมได้ที่ https://usergrid.apache.org/docs/installation/ug1-deploy-to-tomcat.html 

                 ในส่วนของบทความต่อไปนี้จะกล่าวถึง Authentication และ Permission ซึ่งรายละเอียดทั้งหมดอยู่ใน Web Usergrid : https://usergrid.apache.org/docs/security-and-auth/app-security.html

                   โดยระบบยืนยันตัวตนของ UserGrid จะใช้ OAuth 2.0 ซึ่งสรุปสั้น ๆ คือ Client ขอตั๋วเข้าใช้งาน (Token) โดยได้หลังจากยืนยันตัวตน จากนั้น Server ก็จะให้ตั๋วมาเมื่อยืนยันว่าเป็นตัวจริง จากนั้น Client ก็เอาตั๋วไปยื่นขอใช้งานระบบต่าง ๆ ต่อ โดยมีอีก 3 สิ่งที่ต้องรู้ดังนี้
    – Groups : คือการกำหนดกลุ่มของ User เพื่อกำหนดสิทธิ์ให้กลุ่ม แทนที่ต้องมากำหนดสิทธิ์ให้ทีละคน
    – Roles : คือการกำหนดสิทธิ์ว่าให้เข้าถึง Resource ใดได้บ้าง (User Profile, Application Data) ซึ่งสิ่งนี้จะเป็นตัวที่ต้องกำหนดให้แต่ละคน หรือแต่ละ Group
    – Permission : เมื่อมีสิทธิ์ใน Resource นั้นแล้วจะมีสิทธิ์ทำอะไรกับ Resource นั้นบ้าง (Select, Insert, Delete, Update)
    สำหรับการจัดการ Group, Role, Permission สามารถจัดการผ่าน Rest API ได้หมด แต่ในตัวอย่างที่จะเสนอจะทำการจัดการผ่าน UserGrid Admin Portal ดังนี้

    ตัวอย่างการเพิ่ม User ใหม่เข้าไปยัง Application ที่ต้องการ
    1) เลือก Application ที่ต้องการ จากนั้นเลือก User และกดปุ่มเพิ่ม

    2) กรอกรายละเอียดจากนั้นกด Create (รหัสผ่านเงื่อนไขเยอะจะตั้งยากหน่อย)

    ตัวอย่างการเพิ่มบัญชี test01 เข้าไปอยู่ใน Group CCStaffs

    1) สร้าง Group CCStaffs ขึ้นมาก่อน ดังรูป

      

    2) ทำการเพิ่ม User เข้าไปยัง Groups ซึ่งจริง ๆ แล้วทำได้ 2 แบบ คือ เข้าไปที่ User แล้วเพิ่ม Group หรือ เข้าไปที่ Group แล้วเพิ่ม User ดังรูป


    ตัวอย่างการเพิ่มบัญชี test01 เข้าไปอยู่ใน Role Guest
    1) เบื้องต้นจะมี Role ให้เลือก 3 Role แต่จะเลือก Role Guest ซึ่งจริง ๆ แล้วเป็นเหมือน Permission Template เพราะเราสามารถกำหนดสิทธิ์เพิ่มเติมนอกเหนือที่ระบุใน Role ได้อีกในภายหลัง (GET=Select,POST=Insert,PUT=Update,DELETE=Delete)

    2) ทำการเพิ่ม User เข้าไปยัง Roles ที่ต้องการ

                   ในส่วนของ DATA เมนูจะใช้ในการจัดการข้อมูล กล่าวง่าย ๆ คือ Database ของ App ซึ่งทั้งระบบ UserGrid จะเก็บเป็น Cassandar NoSQL Database ดังที่กล่าวไว้ในตอนก่อนหน้า โดยการเรียกใช้งาน หรือ Update ข้อมูลจะใช้ในรูปแบบ JSON ซึ่งเราสามารถ สร้าง แก้ไข ลบข้อมูลผ่าน Usergrid Admin Portal หรือจะทำผ่าน Rest API ก็ได้ แต่ถ้าผ่าน Rest API จะได้สิทธิ์ตาม Permission ที่ตั้งไว้

                   ในส่วนต่อไปจะกล่าวถึงวิธีการเรียก Authentication ผ่าน OAuth2 โดยจะทดสอบเรียกผ่าน curl (จะเรียกผ่าน Postman plugin chrome ก็ได้ครับ ตามสะดวกครับ) ก่อนอื่นมาทราบกันก่อนครับว่าเราจะยืนยันสิทธิ์แบบใดได้บ้าง (Organization->Application->User จากใหญ่ไปย่อย ๆ)

    • Application user : ใช้สิทธิ์ตามที่กำหนดในแต่ละ User
    • Application client : ให้สิทธิ์ทุกอย่างภายใต้ Application นั้น ๆ
    • Organization client : ให้สิทธิ์ทุกอย่างภายใต้ Organization นั้น ๆ
    • Admin user : ให้สิทธิ์ทุกอย่างในทุก ๆ Organization และ และ ทุก ๆ Application

    ตัวอย่างการเรียกใช้แบบ User Authentication (User Login)

    • ทำการเรียกผ่าน curl โดยต้องใส่ username และ password เข้าไปด้วย
    curl -X POST "https://api.usergrid.com/my-org/my-app/token" -d '{"grant_type":"password", "username":"john.doe", "password":"testpw"}'

    • ซึ่งเราสามารถนำ access_token เพื่อใช้ในการเข้าถึง path ต่าง ๆ ได้แล้ว แต่จะมีเวลา แค่ 604800 (24ชม.) สำหรับ token ดังกล่าว (วิธีเปลี่ยนลองถาม Google ดูครับ) ยกตัวอย่างต้องการดู User ทั้งหมดรวมทั้ง Profile ของทั้ง Application สามารถสั่งได้ดังนี้ (สามารถใส่ token ไปใน Header เลยก็ได้ ศึกษาเพิ่มเติมได้ที่ https://usergrid.apache.org/docs/security-and-auth/authenticating-api-requests.html)
    curl -X GET "https://api.usergrid.com/my-org/my-app/users?access_token=[access-token]"

    • จะเห็นว่าระบบฟ้องว่าเราไม่มีสิทธิ์ ซึ่งถ้าเราย้อนกลับไปดู Role Guest จะพบว่าเราไม่มีสิทธิ์ในการ GET ค่า path /users  ให้ทำการเพิ่มสิทธิ์ใน Permission ก่อน

    • ลองเรียกอีกครั้งจะได้ดังนี้

    ตัวอย่างการเรียกใช้แบบ Organization client authentication (ไม่แนะนำให้ใช้กับ Client->Server เหมาะกับ Server->Server มากกว่า)

    • จะต่างกับ User Authentication ตรงที่แทนที่จะส่ง User Password แต่จะส่ง Client ID และ Secret เพื่อขอ token แทน โดยจะได้สิทธิ์ทั้งหมดใน Application นั้น ๆ
      curl -X POST "https://api.usergrid.com/my-org/my-app/token" -d '{"grant_type":"client_credentials", "client_id":"[client-id]", "client_secret":"[client-secret]"}'
    • โดยเราสามารถดู Client ID และ Secret ได้ดังนี้

    • จากนั้นทดสอบขอ token ดังนี้

                 สำหรับการ Authentication แบบ Application นั้นค่อนข้างจะยุ่งยากกว่า ยังหาไม่ได้จาก Usergrid Admin Portal ต้องเรียกผ่าน curl ตั้งแต่สร้าง ถ้าใครจะศึกษาเพิ่มเติมหาได้ที่นี่ https://usergrid.apache.org/docs/orgs-and-apps/application.html (ผมขอยอมแพ้ในขั้นนี้)

                 ในการ Logout จะใช้วิธีการ Revoke token นั่นคือการทำให้ token หมดอายุนั่นเอง สามารถทำได้ง่าย ๆ ดังนี้

    curl -X PUT https://api.usergrid.com/your-org/your-app/users/someUser/revoketokens

    ตัวอย่างการเรียกใช้ Rest Service เพื่อ Logout

    ขอจบเพียงเท่านี้ก่อนครับ นี่ขนาดยังไม่เอาไปใช้จริงนะครับ (เห็นแล้วจะมีใครอยากใช้ไหมเนี้ย 555)

    =================================================

    References :
    [1] https://sysadmin.psu.ac.th/2017/04/07/usergrid-docker-containner/

    [2] https://usergrid.apache.org/docs

  • ติดตั้ง Piwik บน Ubuntu 16.04

    ถ้าอยากมี Web Analytic ใช้เอง ทำไงได้บ้าง

                PIWIK [1] เป็นโปรแกรมที่เป็น Opensource ใช้สำหรับทำ Web Analytic โดยมีจุดเด่นใหญ่ ๆ คือมีข้อมูลอยู่ในองค์กรเอง และรองรับมุมมองต่าง ๆ ครบถ้วนตามที่ควรจะมี (จริง ๆ ใช้ Google Analytic ก็ได้ครับ ขอเสนอเป็นทางเลือกในกรณีที่ต้องการอะไรที่ private หน่อย) การติดตั้งลักษณะก็จะเป็นการติดตั้ง mysql (หรือ mariadb), php, apache (หรือ nginx) ดังนี้ครับ

    1. ทำการติดตั้ง Ubuntu 16.04[2]
    2. ทำการติดตั้ง nginx+mariadb+php (สามารถติดตั้งเป็น apache+mysql+php[3]ก็ได้ครับ)
      MariaDB

      sudo apt install mariadb-server mariadb-client
      

      Nginx

      sudo apt install nginx

      PHP

      sudo apt install php-fpm php-mysql php-curl php-gd php-cli php-geoip php-zip php-mbstring php-dom php-xml
    3. ทำการตั้งค่า nginx เพื่อใช้งานกับ php-fpm
      sudo vim /etc/php/7.0/fpm/php.ini

      แก้ไข php config (uncomment cgi.fix_pathinfo และแก้ค่าเป็น 0)

      [...]
      ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI.  PHP's
      ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok
      ; what PATH_INFO is.  For more information on PATH_INFO, see the cgi specs.  Setting
      ; this to 1 will cause PHP CGI to fix its paths to conform to the spec.  A setting
      ; of zero causes PHP to behave as before.  Default is 1.  You should fix your scripts
      ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED.
      ; http://php.net/cgi.fix-pathinfo
      cgi.fix_pathinfo=0
      [...]
      

      แก้ไขไฟล์ nginx.conf

      sudo vim /etc/nginx/sites-available/default
      

      ตั้งค่า fastcgi_pass ให้เรียกใช้งาน php7.0-fpm

      [...]
       index index.html index.htm index.nginx-debian.html index.php;
      
       server_name _;
      
       location / {
       # First attempt to serve request as file, then
       # as directory, then fall back to displaying a 404.
       try_files $uri $uri/ =404;
       }
      
       # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
       #
       location ~ \.php$ {
       include snippets/fastcgi-php.conf;
       #
       # # With php7.0-cgi alone:
       # fastcgi_pass 127.0.0.1:9000;
       # # With php7.0-fpm:
       fastcgi_pass unix:/run/php/php7.0-fpm.sock;
       }
      
       # deny access to .htaccess files, if Apache's document root
       # concurs with nginx's one
       #
       location ~ /\.ht {
        deny all;
       }
      }
      [...]
    4. ทำการ Restart Service
      sudo systemctl restart php7.0-fpm
      sudo systemctl restart nginx
      
    5. ทำการตั้งค่า Mariadb ดังนี้
      sudo mysql_secure_installation

      ทำการตั้งค่าต่าง ๆ รวมถึง Password ของ root

      Set root password? [Y/n] Y

      ใส่ password และ password ใหม่ที่ต้องการ

      Remove anonymous users? [Y/n] Y
      
      Disallow root login remotely? [Y/n] Y
      
      Remove test database and access to it? [Y/n] Y
      
      Reload privilege tables now? [Y/n] Y
    6. ทำการสร้าง User, Password ใหม่ใน Mariadb เพื่อใช้งานกับ Piwik
      sudo mysql -u root -p

      จากนั้นทำการสร้าง DB และกำหนด User, Password ที่ใช้ในการเข้าถึง (piwikuser@ ให้แทนที่ด้วยรหัสผ่าน)

      create database piwikdb;
      create user piwikuser@localhost identified by 'piwikuser@';
      grant all privileges on piwikdb.* to piwikuser@localhost identified by 'piwikuser@';
      flush privileges;
      quit;
    7. ติดตั้งโปรแกรม Piwik
      sudo apt install git
      cd /var/www/html
      sudo mkdir piwik
      sudo git clone https://github.com/piwik/piwik .
      cd /var/www/html/piwik
      sudo git checkout 3.0.3
      sudo git submodule update --init --recursive
      sudo curl -sS https://getcomposer.org/installer | sudo php  
      sudo php composer.phar install --no-dev
      sudo chown -R www-data:www-data /var/www/html/piwik
      sudo find /var/www/html/piwik -name "*.php" -exec chmod 755 {} \;
    8. ทำการแก้ default web path ให้ชี้เข้าไปใน folder /var/www/html/piwik ดังนี้
      sudo vim /etc/nginx/sites-available/default

      แก้ไขไฟล์ดังนี้

      [...]
      # include snippets/snakeoil.conf;
      
      root /var/www/html/piwik;
      [...]
    9. สั่ง Restart Service
      sudo systemctl restart nginx
    10. จากนั้นทำการติดตั้งผ่านหน้า Web ดังรูป
    11. หน้าต่าง system check ตรวจสอบว่าลงครบหรือไม่ กด Next
    12. หน้าต่าง Database Setup กรอกรายละเอียด Adapter เลือก mysqli จากนั้นกด Next
    13. หน้าต่าง Creating the Tables ถ้าไม่มีอะไรผิดปกติจะขึ้น Tables created with success กด Next
    14. หน้าต่าง Super User ให้ตั้งค่าบัญชี รหัสผ่าน ที่ต้องการ Login เข้าใช้งาน
    15. ตั้งค่า Website
    16. หน้าต่าง JavaScript Tracking Code จะให้ Code ที่เอาไปวางในหน้าต่าง ๆ ของ WebSite ที่ต้องการ Monitor ซึ่งสามารถกลับมาดูทีหลังได้จาก Menu ให้กด Next
    17. หน้าต่างสุดท้ายจะเป็นหน้าแสดงความยินดีในการติดตั้งสำเร็จให้กด Continue to PIWIK
    18. Login เข้าสู่ระบบตาม User, Password ที่ตั้งไว้ในข้อ 14
    19. วิธีการใช้งานไม่ยากอะไรมากครับ ลองทดสอบใช้งานดูครับ มี Feature มากมายครับ พร้อม plugin มากมายทั้งฟรี และเสียตังค์ แต่สำหรับตัวฟรีติดตั้งหมดแล้วด้วยคำสั่ง git submodule update –init –recursive

      เมื่อทำการตั้งค่าอีเมล์เรียบร้อยแล้ว เราสามารถให้ส่งรายงานสรุป Per Site ให้ Admin แต่ละ site ตรวจสอบได้รายวัน และเมื่อมี Version ใหม่ ก็จะมีเมล์แจ้งเช่นกัน โดยวิธีการ Update จะสามารถทำผ่านหน้า Web แต่สุดท้ายจะมีให้รันคำสั่งบน Command Line เพื่อ Upgrade Database แต่จะมีวิธีทำอธิบายไว้ละเอียดอยู่แล้วครับ ขอให้สนุกกับการใช้งานครับปล. ผมข้ามขั้นตอนการตั้งค่า SSL[4] ซึ่งแนะนำให้ตั้งค่าด้วยครับ 

    =================================================

    References :
    [1] https://piwik.org/

    [2] http://opensource.cc.psu.ac.th/%E0%B8%95%E0%B8%B4%E0%B8%94%E0%B8%95%E0%B8%B1%E0%B9%89%E0%B8%87_ubuntu_16.04_server

    [3] http://joelradon.com/installing-lamp-on-ubuntu-16-04/

    [4] https://www.digicert.com/ssl-certificate-installation-nginx.htm

  • ติดตั้ง UserGrid ด้วย Docker Container

    อยากสร้าง App บนมือถือ แต่ไม่อยากยุ่งยากจัดการ User, ทำระบบ Login, ฐานข้อมูล, เขียนเชื่อมต่อฐานข้อมูล แถมต้องใช้ได้กับทุก Platform มีอะไรที่จัดการให้หมดเลยไหม

                 Apache usergrid [1] เป็นทางออกหนึ่งสำหรับผู้ที่ไม่อยากยุ่งยากในการจัดการในส่วนของ Server-Side Code และเน้นในการเขียน Application ในการใช้งานเพียงอย่างเดียว โดย usergrid ชื่อก็บอกเป็นนัย ๆ อยู่แล้วครับ ว่าเป็นระบบจัดการ User ทั้งการเข้าถึงรวมถึงการกำหนดสิทธิในการใช้งาน แต่จะมีในส่วนของระบบฐานข้อมูล Application ไว้ให้ใช้งานด้วย โดยฐานข้อมูลจะเป็น nosql ซึ่งจะมีเครื่องมือในการ query เบื้องต้น, Rest Service และ SDK สำหรับพัฒนาในอุปกรณ์มือถือ และสามารถใช้ในการพัฒนา Application ด้วยภาษาต่าง ๆ มากมาย สามารถเข้าไปอ่านเพิ่มเติมได้ที่ http://usergrid.apache.org/

                สำหรับวิธีลงมีหลายแบบ แต่ที่จะแนะนำจะเป็นการติดตั้งเป็น Container ด้วย Docker[2] ซึ่งสิ่งที่ต้องการใช้งานมีดังนี้

    • Java – Ubuntu base image with Oracle JVM : สำหรับใช้ Run ระบบ เท่าที่ติดตั้งไม่ลงตัวนี้ก็สามารถใช้งานได้
    • Cassandra : ระบบฐานข้อมูล nosql
    • Elasticsearch : ระบบค้นหาแบบ distributed search ลองนึกถึงการ search ที่ทุก field ทำ index ไว้หมดซึ่งเร็วแน่นอน
    • Usergrid : ระบบ Core Engine ซึ่งจะให้บริการผ่าน RESTful API (เทียบได้กับ Web Service แต่ยืนหยุ่นกว่าและคุยด้วย json)
    • Usergrid Admin Portal : เป็น Web Site ที่ใช้ในการบริหารจัดการข้อมูล กำหนดสิทธิ์ และสามารถ Query ข้อมูลเบื้องต้นได้ 

    1. ทำการติดตั้ง OS และ Docker (อ่านเพิ่มเติมได้จาก sysadmin.psu.ac.th[3]) แต่จากตัวอย่างจะรันด้วย PhotonOS[4] เนื่องจากมีขนาดเล็กและเหมาะกับการใช้งานกับ Vmware มากกว่า (ติดตั้งด้วย .ova) แต่สามารถติดตั้งผ่าน Linux Distribution อื่นได้ด้วยคำสั่งเดียวกัน

    2. ติดตั้งฐานข้อมูล cassandra ด้วยคำสั่งดังนี้ (ในกรณีที่ต้องการติดตั้งแบบ cluster สามารถศึกษา option ได้จาก website ข้างต้น[2])

    docker run --detach --name cassandra --volume $(pwd)/cassandra-data:/var/lib/cassandra yep1/usergrid-cassandra

                โดยสำหรับ option –volume หน้า : คือ path ของเครื่อง Host, หลัง : จะเป็น path ใน containner ในกรณีที่ลบ containner หรือ update software  ใน containner ข้อมูลในฐานข้อมูลจะได้ไม่หาย

    2. ติดตั้งระบบค้นหา Elasticsearch ด้วยคำสั่งดังนี้

    docker run --detach --name elasticsearch --volume $(pwd)/elasticsearch-data:/data yep1/usergrid-elasticsearch
    

    3. ติดตั้ง Usergrid ด้วยคำสั่งดังนี้

    docker run --detach --name usergrid --env ADMIN_PASS=password --env ORG_NAME=org --env APP_NAME=app --link elasticsearch:elasticsearch --link cassandra:cassandra -p 8080:8080 yep1/usergrid

                ให้ตั้งค่า ADMIN_PASS ซึ่งเมื่อตั้งแล้วจะเป็นเป็นรหัสผ่านเดียวกับ Usergrid-Portal ในส่วนของ ORG_NAME จะเป็นการแบ่ง Zone ของโปรแกรมที่เกิดขึ้นเมื่อมีการใช้งานจริง เราสามารถกำหนดผู้ใช้งานให้เห็นแค่ Zone ตัวเองได้ ในส่วนของ APP_NAME ไว้สำหรับสร้าง Application ย่อย ๆ ใน Zone นั้น ๆ -p ใช้สำหรับกำหนด Port ข้างในข้างนอก ไม่แนะนำให้ตั้ง 80 หรือ 443 เพราะยังต้องติดตั้ง Usergrid-Portal เป็นหน้าบริหารจัดการที่ควรใช้ได้ใช้ port 80,443 มากกว่า

                ซึ่งการติดตั้ง Usergrid Core Engine จะ require cassandra และ elasticsearch ที่ได้ติดตั้งไว้แล้ว โดยใช้ผ่านคำสั่ง –link จะเห็นว่าแต่ละโปรแกรมแยกออกจากกัน โดยอาจจะรันบนคนละ containner os หรือคนละสภาพแวดล้อมก็ได้ โดยไม่เกี่ยวข้องกัน แต่จะมีการเรียกใช้ผ่าน port ตามปกติ แค่เปรียบเสมือนอยู่กันคนละเครื่อง (เหมือนลงบน VM หลาย ๆ  VM แต่ถ้าเป็น VM จะใช้ Resource เยอะ เพราะหมดไปกับ OS ที่สำคัญแต่ละโปรแกรมต้องลงเองทั้งหมด ไม่ได้มีคนทำ software มาเป็น image ที่เปิดใช้งานได้เพียงไม่กี่วินาทีเหมือนใน containner)

    4. สุดท้ายคือทำการติดตั้ง Usergrid-Portal ซึ่งเป็น Web ที่ใช้สำหรับการตั้งค่าในส่วนต่าง ๆ และมีเครื่องมือ Query เบื้องต้นให้ใช้งาน

    docker run -d --env USERGRID_HOST=192.168.x.y:8080 -p 8088:80 yep1/usergrid-portal

                 Host ให้ตั้งเป็น IP Public ในกรณีที่มีการ Nat ไปยัง IP จริง หรือทำ HA-PROXY เพื่อเข้าถึงจากเน็ตภายนอกได้ (ในกรณีที่ไม่แยกวงภายใน ภายนอกก็สามารถใช้งาน IP ของ Host ได้เลย) จากคำสั่งอธิบายได้ดังนี้

    -d ==> เนื่องจากคนทำ image สั่งให้รัน debug หลังจาก start image ถ้าไม่ใส่จะค้างไม่ออกมาจาก debug จึงต้องรันแบบ background
    -p 8088:80 ==> ให้ map หน้า web จาก port 80 ใน containner ไปเป็น port 8088 บนเครื่อง Host

    USERGRID_HOST=192.168.x.y:8080 ==> เมื่อเปิดหน้า web มาแล้วด้วย port 8088 หลังจาก Login เสร็จให้ไปเรียก Core Engine ผ่าน port 8080


    หมายเหตุ
     : การเปิด port ในตัว containner เปิดกี่ port ก็ได้ตามสบาย แต่ port บน host ต้องไม่ชนกัน ดูได้จากคำสั่ง docker ps

     

    หน้าตาโปรแกรม

     

    ในตอนหน้าจะมาพูดถึงวิธีการใช้งานกันครับ……

    =================================================

    References :
    [1] http://usergrid.apache.org

    [2] https://github.com/yep/usergrid-docker

    [3] https://sysadmin.psu.ac.th/2017/01/03/docker-ubuntu-16-04/

    [4] https://vmware.github.io/photon/

  • วิธีการติดตั้ง Docker บน Ubuntu 16.04

    “อยากติดตั้ง Docker บน Ubuntu 16.04 ทำอย่างไร”

             นอกจาก containner ที่เป็น lxd ของ Ubuntu แล้ว ก็ยังสามารถใช้ในรูปแบบ Docker เช่นเดียวกัน แต่ค่อนข้างยุ่งยากกว่าเล็กน้อย โดยถ้าเทียบประสิทธิภาพแล้วในส่วนของ lxd จะดีกว่าแต่ในแง่ของ Image ทาง Docker ยังมีมากกว่า (แต่อนาคตอะไรก็ไม่แน่นอน ขึ้นอยู่กับจะเอามาใช้ทำอะไรมากกว่า และมีคนทำมาให้ใช้อันไหนมากกว่า หรือถนัด Image เองแบบไหนมากกว่า สรุปชอบอันไหนใช้อันนั้นแล้วกันครับ)

    วิธีการติดตั้ง (Ubuntu 16.04)

    *Ref : https://docs.docker.com/engine/installation/linux/ubuntulinux/

    • เนื่องจากไม่มี docker ใน Ubuntu Package โดยตรง จึงต้องเพิ่ม source.list ก่อนดังนี้
      sudo apt-get update
      sudo apt-get install apt-transport-https ca-certificates
      sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
      echo "deb https://apt.dockerproject.org/repo ubuntu-xenial maindeb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docket.list
      deb https://apt.dockerproject.org/repo ubuntu-xenial maindeb https://apt.dockerproject.org/repo ubuntu-xenial main
    • จากนั้น Update Package ให้ล่าสุดอีกครั้ง
      sudo apt-get update
    • จากนั้นทำการติดตั้ง Linux Kernel Extra
      sudo apt-get install linux-image-extra-$(uname -r) linux-image-extra-virtual
    • ทำการติดตั้ง Docker Engine ดังนี้
      sudo apt-get install docker-engine
    • จากนั้นทำการ Start Docker Service
      sudo service docker start
    • ทำการทดสอบติดตั้ง Image Hello-World ดังนี้
      sudo docker run hello-world

    • จากนั้นสามารถใช้คำสั่งตรวจสอบ Version Docker ได้ดังนี้
      sudo docker version

    จะเห็นว่าเพียงแค่นี้ก็ได้ Docker มาใช้งานแล้วครับ แถมอัพเดต Version ให้ตลอดด้วยครับ

  • วิธีการติดตั้ง Docker บน Windows Server 2016

    “อยากติดตั้ง Docker บน Windows Server 2016 ทำอย่างไร”

             Feature ใหม่ของ Windows Server 2016 คือการใช้งาน Docker ที่สมบูรณ์มากขึ้น โดยใช้การจัดการผ่าน PowerShell Command แต่ยังไงก็ตามก็ยังไม่พ้นหน้าจอฟ้า ๆ ที่ใช้ในการติดตั้ง และตรวจสอบสถานะต่าง ๆ แต่เนื่องด้วยการรองรับที่สมบูรณ์มากขึ้น การใช้งานก็จะมีประสิทธิภาพไม่แตกต่างจากการรันบนระบบปฎิบัติอื่น ๆ เหมาะกับการนำมาใช้เพื่อลดการบริโภคทรัพยากร ช่วยให้ใช้สมรรถนะของเครื่อง Server เต็มประสิทธิภาพ และเหมาะสำหรับการใช้งาน Application ที่แตกตัวเพิ่มได้ตามจำนวนการใช้งานที่เพิ่มขึ้น จุดเด่นที่สำคัญอีกจุดคือ Windows Nano Server สำหรับผู้อยากใช้งาน Windows Server Container Image ขนาดเล็ก ซึ่งจะเขียนในหัวข้อต่อ ๆ ไปครับ

    วิธีการติดตั้ง (Windows Server 2016)

    *Ref : https://docs.microsoft.com/th-th/virtualization/windowscontainers/quick-start/quick-start-windows-server

    • ทำการติดตั้ง OneGet PowerShell Module (ให้รันบน PowerShell ที่ Run As Administrator) 
    • เมื่อขึ้นถามว่าจะติดตั้งหรือไม่ .ให้กด Y ตามด้วย Enter
    Install-Module -Name DockerMsftProvider -Repository PSGallery -Force

    • จากนั้นใช้ OneGet ในการติดตั้ง Docker Version ล่าสุด
    • เมื่อขึ้นถามว่าจะติดตั้งหรือไม่ กด A ตามด้วย Enter
    Install-Package -Name docker -ProviderName DockerMsftProvider

    • จากนั้นทำการ Restart เครื่อง
    • หลังจาก Restart มาจะเห็นว่าสามารถใช้คำสั่ง Docker บน Powershell ได้แล้วดังนี้

    *หมายเหตุ : ในกรณีที่รันแล้ว error เกี่ยวกับ open //./pipe/docker_engine ให้เปิด firewall port 2375 ผ่าน powershell ที่รันด้วย administrator ดังนี้

    # Open firewall port 2375
    netsh advfirewall firewall add rule name="docker engine" dir=in action=allow protocol=TCP localport=2375
    
    # Configure Docker daemon to listen on both pipe and TCP (replaces docker --register-service invocation above)
    Stop-Service docker
    dockerd --unregister-service
    dockerd -H npipe:// -H 0.0.0.0:2375 --register-service
    Start-Service docker
    • สำหรับการติดตั้ง Image ต่าง ๆ ถ้าไม่ได้ทำ Image เองสามารถหาจาก Docker Hub ได้ โดยขอยกตัวอย่าง Image ที่เป็น .net core ที่รันอยู่บน Nano Server ดังนี้
    docker run microsoft/dotnet-samples:dotnetapp-nanoserver

    **Image ที่ทดสอบลงให้ดูไม่สามารถใช้ทำอะไรได้นะครับ สำหรับการใช้งานจริงก็จะประมาณสั่ง Run + Option ต่าง ๆ เพื่อบอกว่าให้ทำอะไร ซึ่งจะยกตัวอย่างใน Blog ถัด ๆ ไป อันนี้แค่ติดตั้ง Docker เพื่อใช้งานอย่างเดียวครับ

  • การติดตั้ง Remote Desktop Service สำหรับให้บริการ Windows Application Online

    “อยากให้บริการ Application กลางสักอันเวลาอัพเดตแล้วจะได้ของใหม่พร้อมกันไม่ต้องคอยไล่ลงทีละเครื่อง”

    Remote Desktop Service (Remote Apps) คือ Application ที่รันภายใต้ Remote Desktop แต่ไม่ต้อง Remote เข้าไป แต่เพียงแค่รัน Icon ที่โหลดมากจากหน้า Web ใส่ User Password เท่านั้น ซึ่งสะดวกกว่าการไล่ติดตั้งโปรแกรมทุกเครื่อง แถมอัพเดตทีเดียวได้ Version ใหม่เหมือนกันทุกคน

        * บทความนี้เป็นบทความปิด เพราะเราไม่ได้มีลิขสิทธิ์โดยตรงที่จะใช้งานได้ แต่เป็นการนำไปใช้งานเพื่อการศึกษาเท่านั้น ถ้าจะใช้งานจริงต้องซื้อ Remote Desktop Service License เองครับ (มหาลัยไม่เคยซื้อ Windows License นะครับ ที่ใช้กันอยู่ Microsoft แถมมากับ Windows Desktop และ Office ซึ่งให้มาจำนวนน้อยมาก โดยตั้งแต่ Windows Server 2016 จะไม่มีแล้วครับ) ถ้าจะใช้งาน(เพื่อการศึกษา)สามารถติดต่อสอบถามได้ที่ 2082 หรือ email : support@cc.psu.ac.th

     สิ่งที่ควรทราบก่อนติดตั้ง

    • ต้องทำการติดตั้ง Windows Server 2012 R2 ซึ่งจะไม่รวมอยู่ในบทความนี้ (อนาคตจะเพิ่มบทความติดตั้งให้ครับ)
    • ต้องทำการติดตั้ง Remote Desktop License เพื่อให้สามารถ Remote ได้ไม่จำกัดจำนวนก่อน
    • บริการนี้เครื่อง Server ต้อง Join Domain ก่อน
    • ใช้ PSU Passport ในการเข้าระบบ
    • การเข้าใช้งานเยอะ ๆ จะมีผลต่อ RAM ในเครื่อง Server ที่ใช้งาน (ยิ่งเยอะยิ่งกินแรม)
    • ในกรณีที่รันพร้อมกันหลาย ๆ คน ไม่สามารถแบ่ง CPU ให้เท่ากันได้ จะเป็นในลักษณะการแย่งกันรันตามจำนวน License ของ Application นั้น ๆ เหลือให้รัน (ยกตัวอย่างโปรแกรมซื้อมา License รันได้ 16 Core คนที่รันต่อจะถูกแจ้งเตือนว่า License หมดก็ต้องรอไป)

     ขั้นตอนการติดตั้ง

    • ทำการ Add Role ดังรูป

    2016-11-08_155032

    • เลือกติดตั้ง Remote Desktop Services

    2016-11-09_155828

    • เลือกติดตั้งแบบ Standard

    2016-11-09_155928

    • เลือกสภาพแวดล้อมการใช้งานแบบ Session-based desktop

    2016-11-09_160131

    • จะปรากฎหน้าจอแจ้งว่าจะลงอะไรให้บ้าง และอธิบายว่าแต่ละบริการที่ลงทำงานอะไรบ้าง สรุปสั้น ๆ คือมีตัวรับ Remote Connection, Web สำหรับโหลด Apps คล้าย ๆ Shortcut ไปรัน, และตัวควบคุมเรื่อง Session ในการเชื่อมต่อ

    2016-11-09_160415

    • หน้าจอต่อไปใช้ในการระบุ Remote Desktop Connection Broker ในกรณีที่อยากแยกบริการแต่ละบริการข้างต้นคนละ Server แต่ในที่นี่จะติดตั้งลงที่เครื่องเดียวกันทั้งหมด (Standalone Server)

    2016-11-09_160816

    • หน้าต่างต่อไปให้ติกเลือก Install the RD Web เครื่องเดียวกับ RD Connection Broker Server

    2016-11-09_161019

    • ในส่วนของ Session Host Server ก็ติดตั้งลงบนเครื่องเดียวกัน

    2016-11-09_161233

    • หน้าต่างสุดท้ายจะถูกบังคับให้ติก Restart เครื่องหลังอัตโนมัติถ้าต้องการ

    2016-11-09_161447

    • จากนั้นรอจนกว่าจะติดตั้งเสร็จ

    2016-11-10_032936

     

    • จากนั้นกลับมาดูที่หน้า Server Manger -> Remote Desktop Services -> Overview พบว่ายังต้องติดตั้ง RD Gateway และ RD Licensing เพิ่มเติม

    2016-11-10_033414

    • ทำการติดตั้ง RD Licensing เพิ่มเติมดังรูป จากนั้นกด Next->Add

    2016-11-10_034020

    • รอจนติดตั้งเสร็จ

    2016-11-10_034334

    • จากนั้นติดตั้ง RD Gateway

    2016-11-10_034606

    • จะปรากฎหน้าต่างให้ใส่ชื่อ Server โดยต้องตรงกับชื่อ URL (เปลี่ยนทีหลังได้)

    2016-11-10_0347462016-11-10_034858

    • หลังจากติดตั้งเสร็จยังไม่ได้ตั้งค่า Certificate แต่ทำการตั้งค่าทีเดียวกับบริการอิ่นในข้อถัดไป

    2016-11-10_035709

    • ทำการตั้งค่าได้ที่หัวข้อ Edit Deployment Properties

    2016-11-10_040233

    • ข้ามในส่วนตั้งค่า RD Gateway ไปในส่วนของการตั้งค่า RD Licensing โดยตั้งค่าเชื่อมต่อกับ Server Remote Desktop License ที่มีอยู่แล้ว (ถ้าตั้งเองต้องใช้ License ที่ออกให้โดย Microsoft)

    2016-11-10_040747

    • ในส่วนของ RD Web Access ค่าเริ่มต้นจะอยู่ที่ Path /RdWeb ต้องไปตั้งค่า Redirect เอาเองถ้าไม่ต้องการพิมพ์มือจาก URL หลัก ยกตัวอย่าง Web Site เมื่อเข้าใช้งานดังรูป

    2016-11-10_041233

    • กลับมาตั้งค่าในส่วน Certificate ใหม่โดยให้ใส่ Certificate ทั้งหมด ถ้าไม่มีให้สร้าง Self-Signed ขึ้นมาใช้เองดังรูป

    2016-11-10_041732

    • แต่ละหัวข้อเลือกแล้วให้กด Apply ทุกครั้งทำไปเรื่อย ๆ จนหมด

    2016-11-10_042015

    • จากนั้นทำการสร้าง Session Collection เพื่อกำหนดว่าจะให้ใครเข้าใช้งานได้บ้าง

    2016-11-10_060848

    • ตั้งชื่อ Collection Name

    2016-11-10_061013

    • เลือก Session Host

    2016-11-10_061051

    • เลือก User Groups ที่ต้องการให้เข้าใช้ (xxx\Domain Users ความหมายคือผู้ใช้ทั้งหมดที่อยู่ภายใต้ Domain xxx)

    2016-11-10_061152

    • ในส่วนของ User Profile ให้ติกออก

    2016-11-10_061216

    • จากนั้นจะปรากฎหน้ายืนยันข้อมูลที่เลือกไปทั้งหมด จากนั้นทำการสร้าง

    2016-11-10_061303

    • หลังจากนั้นทำการตั้งค่า Remote App ที่ต้องการให้บริการดังรูป

    2016-11-10_061819

    • ทำการเลือก App ที่ต้องการ

    2016-11-10_061947

    • จากนั้นทำการ Publish

    2016-11-10_062003

    • กลับมายังหน้า Web (เปิดที่ Client ไม่ใช่ที่ Server) ในกรณีที่ใช้ Self Signed Cer ต้องทำการติดตั้ง Cer ก่อนซึ่ง Cer ดังกล่าวสามารถ Export จาก Server ให้ Client ไปลงเองดังรูป

    2016-11-10_0631292016-11-10_063148

    • จากนั้นทำการ Login จะได้ Remote App ดังที่เห็นในรูป ให้คลิกไปที่ Icon เพื่อ Download ไฟล์สำหรับใช้งาน

    2016-11-10_062216

    • จะปรากฎหน้าแจ้งเตือนดังรูป ให้เลือกไม่ต้องถามอีกจะได้ไม่ต้องกดหน้านี้ทุกครั้งที่ใช้งาน

    2016-11-10_062435

    • ใส่ Username, Password จะได้โปรแกรมดังภาพ โดยไม่ต้องติดตั้งในเครื่อง Client และใช้ License ที่ Server รวมถึงเวลารันโปรแกรมก็จะรันที่ Server ไม่ได้รันที่ Client (ถ้า Server แรง ก็จะรันได้เร็วกว่า)2016-11-10_065049

    การตั้งค่า Quota Disk สำหรับใช้งานพื้นที่ร่วมกัน

    • เลือก Drive ที่ต้องการทำการตั้งค่า Quota ดังรูป

    2016-11-10_051047

    • ทำการตั้งค่า Quota ของ Disk ถ้าไม่เลือก Deny disk space to user exceeding quota limit ผู้ใช้จะไม่ถูกแจ้งเตือนในกรณีที่ใช้งานเกิน Limit

    2016-11-10_053724

    • ทำการตั้งค่า Quota ของแต่ละ User โดยเลือกที่ Quota Entries

    2016-11-10_051405

    • สามารถตั้งให้แต่ละคนได้ไม่เท่ากันได้ ดังรูป

    2016-11-10_051611

    • หลังจากเปิดระบบ Quota เราจะสามารถดูได้ทั้งหมดว่าแต่ละ User ใช้พื้นที่ไปเท่าไหร่บ้าง

    2016-11-10_052120

    • ในกรณีที่ใช้งานเต็มจะแจ้ง User ประมาณในรูป

    2016-11-10_053610

    จบแล้วครับ หวังว่าเป็นแนวทางใหม่ ๆ อีกแนวทางหนึ่งครับ (ตอนนี้อาจจะยังนึกไม่ออกว่าจะเอามาใช้อย่างไร แต่สำหรับคนที่ซื้อ License อะไรสักอย่างแล้วใช้งานได้แค่เครื่องเดียวจะเข้าใจดีครับว่ามีประโยชน์อย่างไร)

  • วิธีการตรวจสอบราคาเครื่องที่ให้บริการบนระบบ Public Cloud

    “จะมีวิธีคิดราคา Public Cloud แต่ละเจ้าได้อย่างไรว่าต้องจ่ายเท่าไหร่ต่อเดือน”

    ในปกติแล้ว Cloud แต่ละเจ้าจะมีให้ทดสอบเลือกเครื่อง spec ที่ต้องการและคิดค่าใช้จ่ายคร่าว ๆ ซึ่งตัวเครื่องโดยมากคิดเป็นรายเดือน แต่ส่วนที่คิดตามการใช้งานจริงจะเป็น IOP ของการใช้งาน Storage และการส่งข้อมูลออก หรืออาจจะเป็นจำนวน Traffic สำหรับให้บริการ (นำเข้าข้อมูลไม่เสียตังค์) โดยขอสรุปเป็นบทความดังนี่้ครับ
    Target : ต้องใช้เครื่องประมาณ CPU 4 Core, RAM 4-8GB, HDD 100GB รัน Windows Server เพื่อรันระบบที่เขียนด้วย .NET Framework

    • ราคา ณ วันที่ 19 มิถุนายน 2559

    AWS Pricing Calculator
    https://calculator.s3.amazonaws.com/index.html

    price1 price2 price3
    จะเห็นว่าใช้เงินประมาณ $193.98 ต่อเดือน คิดเป็นเงิน 6799.75 บาทต่อเดือน ซึ่งจากการประเมินราคาใน Private Cloud ปัจจุบันที่มหาลัยให้บริการจะคิดที่ 3200 บาทต่อเดือน (4 CPU,8 GB,SAS 100G (Multi-Site Raid 5-Network RAID 1 ราคานี้ไม่รวมค่า OS) แต่ทางมหาวิทยาลัยยังไม่มีบริการ Storage ที่เป็น SSD ซึ่งถ้าเอาตามการใช้งานจริงที่ไม่ใช่ Database Server, File Server ยังไม่จะเป็นต้องใช้ถึง SSD แต่ในปัจจุบันราคา SSD ของ Server ก็ลดลงมาเยอะมาก โดยที่การจัดซื้ออนาคตคงจะเปลี่ยนเป็น ซื้อ SSD สำหรับทำ Private Cloud แทน ซึ่งราคานี้ยังไม่รวม EBS ที่ไว้สำหรับทำ Snapshot สำรองข้อมูล, Data Transfer ซึ่งดูแล้วที่จะขึ้นได้ในตอนนี้น่าจะมีแค่ Web Server ที่เป็นพวก CMS เพราะการโอนข้อมูลขึ้นลงไม่มากนัก (ยกเว้นที่เว็บที่เน้นการใช้งาน CMS Document Sharing ที่ใช้งานหนัก ๆ อาจจะไม่เหมาะ เพราะใช้ Traffic ขาออกเยอะจากการดาวน์โหลด)

    Azure Pricing Calculator
    https://azure.microsoft.com/en-us/pricing/calculator/
    price4 price5

    จะเห็นได้ว่าราคาใกล้เคียงกับ AWS แต่ได้เนื้อที่น้อยกว่า
    price6 price7
    ถ้าเพิ่ม Storage อีก 16G จะต้องเพิ่มเงินอีก $1..28 ต่อเดือน รวมเป็น $191.74

    Google Cloud Platform Pricing Calculator
    https://cloud.google.com/products/calculator/

    price8 price9 price10 price11
    จะเห็นได้ว่าถูกที่สุดแล้วเมื่อเทียบกับอีก 2 เจ้า

    Digital Ocean Pricing Calculator
    https://www.digitalocean.com/pricing/

    price12 price13

    ขอยกมาอีกเจ้าที่ใช้งานกันเยอะเนื่องจากราคาถูกจะเห็นว่าถูกที่สุด แต่สำหรับเจ้านี้จะไม่มี Windows ให้ใช้งาน

    สรุปค่าใช้จ่าย

    price14
    จากที่เขียนไว้ข้างต้นยังไม่สามารถสรุปได้ว่าเจ้าไหนดีกว่า เพราะมีปัจจัยอีกเยอะที่ไม่ได้ยกมาเช่น Data Transfer, ราคา Discount ซึ่งเหมือน Google จะมีส่วนลดสำหรับเครื่องที่สอง, Downtime, Speed จึงยกมาเป็นตัวอย่างวิธีพิจารณาคร่าว ๆ ส่วนถ้าซื้อจริงก็คงต้องเตรียมแผนให้สามารถย้ายได้ด้วยในกรณีที่ Cloud ที่ใช้อยู่บริการได้ไม่ตรงกับความต้องการ

  • Cloud Computing การบริการประมวลผลจากเครื่องคอมพิวเตอร์บนเครือข่าย Internet

    “อะไรคือ Cloud Computing และมันน่าใช้ยังไง แล้วต้องเลือกแบบไหนถึงจะเหมาะกับองค์กร”

    • ขอขอบคุณข้อมูล Sipa จากการอบรม Cloud Computing รุ่นที่ 1
    • และขอขอบคุณข้อมูลจากท่านวิทยากร ผศ.ดร.ภุชงค์ อุทโยภาส ม.เกษตรศาสตร์

      แนวคิดและความหมายของ Cloud Computing

    cloud1

    Cloud Computing เป็นบริการประมวลผลจากเครื่องคอมพิวเตอร์บนเครือข่ายอินเทอร์เน็ต รวมถึงการ
    ใช้งานทรัพยากรเครื่องคอมพิวเตอร์ร่วมกันโดยไม่มีข้อจำกัด โดยสามารถเลือกปรับแต่งการใช้งานได้ตามต้องการ และสามารถเข้าถึงได้จากที่ใดก็ได้
    ซึ่งสามารถสรุปคุณสมบัติเป็นข้อ ๆ ตามคำนิยามของ NIST (National Institute of Standards and Technology) * ได้ดังนี้
    On-demand self-service – สามารถใช้งานทรัพยากรได้ตามที่ต้องการ
    Broad network access – สามารถเข้าถึงจากที่ใดก็ได้
    Resource pooling – สามารถนำทรัพยากรหลาย ๆ อย่างมารวมกันเพื่อใช้งานร่วมกัน
    Rapid elasticity – สามารถปรับเปลี่ยนได้ตลอดเวลาที่ต้องการ
    Measured Service – สามารถวัดปริมาณการใช้งานได้ทุกบริการ (เพื่อสามารถนำไปคิดค่าใช้จ่ายได้ด้วย)cloud2

    Reference : * The NIST Definition of Cloud Computing, http://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-145.pdf

    สถาปัตยกรรม Cloud Ecosystem

    cloud3

    ตามคำนิยามของ NIST ได้มีการกำหนด Cloud Ecosystem หรือเรียกว่า Cloud Service Model ได้ 3 รูปแบบดังนี้
    Software As A Service (SAAS)
    เป็นบริการใช้งานซอฟต์แวร์ประยุกต์ (Application) ที่ผู้ให้บริการจัดหาให้ โดยสามารถเข้าถึงได้จาก
    Web Browser รวมถึง Application ทั้งที่อยู่ในเครื่องคอมพิวเตอร์หรืออุปกรณ์มือถือ การบริการรูปแบบนี้ผู้ใช้จะไม่สามารถจัดการเครื่องหรือระบบปฏิบัติการได้ ทุกอย่างผู้ให้บริการจัดการให้ทั้งหมด
    Platform As A Service (PAAS)
    เป็นบริการเครื่องมือสำหรับพัฒนาระบบ โดยผู้ใช้ไม่สามารถเข้าถึงการจัดการโครงสร้างพื้นฐานใด ๆ ได้ เช่นระบบเครือข่าย เครื่องเซิร์ฟเวอร์ ระบบปฏิบัติการ โดยผู้ให้บริการจะจัดการให้ทั้งหมด
    Infrastructure As A Service (IAAS)
    เป็นบริการที่ผู้ใช้สามารถจัดการระบบปฏิบัติการ ระบบเครือข่าย รวมถึงจัดหาโปรแกรมประยุกต์ เพื่อสามารถดูแลควบคุมการปรับแต่งระบบให้สามารถรองรับความต้องการที่หลากหลาย แต่การจัดหาทรัพยากร รวมถึงโครงสร้างพื้นฐานยังเป็น
    หน้าที่ของผู้ให้บริการจัดหาให้ตามความต้องการของผู้ใช้

    รูปแบบของการให้บริการ

    สามารถแบ่งรูปแบบการให้บริการ (Deployment Models) ออกแบบ 4 รูปแบบได้ดังนี้
    Private cloud
    เป็นการใช้งานระบบภายใต้โครงสร้างพื้นฐานขององค์กร ผู้ใช้อาจเป็นผู้ดูแลด้วยตนเอง หรือจ้างบุคคลที่สามดูแลก็ได้ อุปกรณ์อาจจะติดตั้งภายในสำนักงานหรืออยู่ภายนอกทั้งหมด หรือบางส่วนก็ได้
    Community cloud
    เป็นการใช้งานระบบภายใต้การร่วมการของกลุ่มสมาชิก โดยมีข้อปฏิบัติร่วมกัน ตามเงื่อนไขของรัฐ หรือขององค์กร โดยสมาชิกดูแลบริหารจัดการโครงสร้างด้วยสมาชิกเอง หรือทำผ่านบุคคลที่สาม โดยอุปกรณ์อาจจะติดตั้งภายในสถานที่ของชุมชน หรือนอกสถานที่ก็ได้
    Public cloud
    เป็นการใช้งานระบบร่วมกันกับสาธารณะชน องค์กรทั่วไปและกลุ่มองค์กรขนาดใหญ่ โดยผู้ให้บริการเป็นผู้ลงทุนโครงสร้างพื้นฐานไอทีและระบบซอฟต์แวร์ที่เกี่ยวข้องทั้งหมด
    Hybrid cloud
    เป็นการใช้งานผสมผสานระหว่าง Private cloud, Public cloud หรือ Hybrid cloud โดยขึ้นอยู่กับผู้ใช้บริการต้องการด้านใด โดยอาจจะทำงานเป็นอิสระ หรือมีการเชื่อมโยงเข้าหากัน แต่จะต้องสามารถทำงานร่วมกันในระดับข้อมูลและระบบซอฟต์แวร์ประยุกต์ได้ โดยการใช้งานทั่วไปมักจะใช้ Private cloud ก่อน จนเมื่อต้องการเพิ่ม Capacity ชั่วคราวจึงใช้ Public cloud เพิ่มเติม

    โครงสร้างของระบบ Cloud

    cloud4

    โดยมีการแบ่งออกเป็น Front End และ Back End เชื่อมต่อกันด้วยอินเทอร์เน็ต โดยแบ่งอุปกรณ์พื้นฐาน ได้ดังนี้
    1) Server
    2) Storage
    3) Network
    4) Cloud runtime ซึ่งจะเป็น Middleware ที่ใช้บริหารจัดการใน Back End
    ซึ่งจะมีระบบ Management และ Security ช่วยบริหารจัดการอุปกรณ์ต่าง ๆ ให้สามารถทำงานได้เป็น เนื้อเดียวกันและมีความปลอดภัยในการเข้าถึง

    บริการ Virtualization
    cloud8

    เมื่อก่อนระบบใดอยู่บนเครื่องใดแล้ว ถ้าเสียก็จะเสียไปด้วย ต้องหาเครื่องใหม่มาทดแทน โดยต้องทำการติดตั้งระบบใหม่ นำเข้าข้อมูลจากที่สำรองไว้ แถมเครื่องซื้อมาใช้งานไม่เต็มประสิทธิภาพ จึงมีการสร้างระบบ Virtualization ขึ้นมาเพื่อแก้ไขปัญหาดังกล่าวโดยจะมี Middleware ระหว่าง OS กับ Resource ที่เรียกว่า Virtualization software หรือ Hypervisor โดยข้อดีคือแต่ละบริการในเครื่องเดียวกันสามารถมี OS หรือ Application เป็นของตนเอง และแยกอิสระออกจากกัน สามารถติดตั้งโปรแกรมที่มีความต้องการเฉพาะได้ รวมถึงสามารถใช้พื้นที่กลางในการจัดเก็บข้อมูล เพื่อในกรณีที่เครื่องมีปัญหาสามารถย้ายไปรันเครื่องอื่นได้โดยกระทบต่อการบริการน้อยที่สุด ทำให้การใช้เครื่องเต็มประสิทธิภาพมากขึ้น โดยเราสามารถนำเครื่องที่มี Peak Load คนละช่วงเวลามารวมในเครื่องเดียวกันได้ โดยไม่กระทบต่อการให้บริการโดยรวม

    วิวัฒนาการของ Virtualization

    cloud9

    1st Generation : Full virtualization (Binary rewriting)
    – ใช้ Software จัดการทั้งหมด
    – มีปัญหาที่ต้องมีการ Compile กับ Kernel เมื่อมีการเปลี่ยน Kernel ใหม่จะไม่สามารถใช้งานต่อได้ ต้องทำการ Patch Kernel ก่อน
    2nd Generation : Paravirtualization
    – มีการเขียน Hypervisor ขึ้นมาคั่นก่อนเข้าถึง Hardware
    – ข้อเสียคือช้ากว่า 1st Gen และเมื่อผู้ผลิต CPU หรืออุปกรณ์อื่น ๆ ต้องการเพิ่ม Feature ไม่สามารถทำได้ทันทีต้องทำการแก้ Hypervisor ให้รองรับ Feature ใหม่ ๆ
    3rd Generation : Silicon-based (Hardware-assisted)
    – ไม่จำเป็นต้องแก้ Hypervisor ให้รองรับ Feature ใหม่ ๆ ผู้ผลิต CPU หรืออุปกรณ์อื่น ๆ ออกแบบให้รองรับ Virtualization มาให้เลย โดยมีการใส่เข้าไปในอุปกรณ์ให้เลย
    – ทำงานด้วย Hardware ทำให้รวดเร็วกว่า 2nd Gen

    ประโยชน์ของ Virtualization

    – สามารถใช้ Hardware ได้อย่างมีประสิทธิภาพ
    – ลดพื้นที่ของ Data Center ในการต้องวางเครื่องจำนวนเยอะที่ใช้งานได้ไม่เต็มประสิทธิภาพ (ประหยัดเครื่องลง)
    – ใช้พลังงานน้อยลง เพราะเครื่องมีจำนวนน้อยลง
    – สามารถเพิ่มเครื่องได้อย่างรวดเร็ว ไม่ต้องรอซื้อเครื่องนาน
    – สามารถสร้างระบบทดสอบ หรือเครื่องสำหรับพัฒนาได้ง่าย และรวดเร็ว

    การเลือกใช้บริการ Cloud

    cloud5

    ในส่วนของ Private cloud ในประเทศไทย มีการใช้งานเกิน 50% โดยมีความต้องการใช้งาน Vmware, Microsoft, Openstack ตามลำดับ

    โดยมีการใช้งาน SaaS เป็นหลักรองลงมาจะเป็น IaaS และ ทุกท้ายจะเป็น PaaS โดย เหตุผลหลักที่ใช้ Cloud คือต้องการลดค่าใช้จ่าย และมีความยืดหยุ่นนการใช้งาน ส่วนสาเหตุที่ใช้ Public cloud เนื่องมาจากราคาถูกกว่าลงทุนเองในระยะยาว และไม่ต้องซื้อเครื่องแพง ๆ ที่มี Peak Load แค่บางช่วง ช่วงที่ไม่ได้ใช้งานจะไม่คุ้มกับราคาที่ลงทุน

    บริการ Cloud ที่มีในปัจจุบัน

    Amazon AWS
    มีการให้บริการหลาย Service ดังนี้
    AWS Compute :
    – EC2 : ให้บริการ Virtual Machine
    – Elastic Load Balance (ELB) : ให้บริการกระจายโหลดระหว่าง EC2
    AWS Storage :
    – S3 : ให้บริการพื้นที่ Storage
    – Elastic Block Store : ให้บริการพื้นที่ Storage เพิ่มเติมสำหรับ EC2
    AWS Database :
    – Relational Database Service (RDS) : ให้บริการฐานข้อมูลประเภท Relational Database เช่น MySQL
    – DynamoDB : ให้บริการฐานข้อมูล NoSQL
    AWS Analytic :
    – Elastic MapReduce : ให้บริการ Big Data Processing
    AWS Machine Learning :
    บริการ Machine Learning
    AWS loT
    บริการ Internet of Things

     

    Google Cloud Platform

    cloud6Compute :
    – Compute Engine เป็นบริการ Virtual Maching
    – App Engine เป็นบริการแบบ PaaS
    Storage :
    – Cloud Storage เป็นบริการ Storage
    – Cloud SQL เป็นบริการฐานข้อมูล
    App Services :
    – ให้บริการ Application Service รวมถึง Development Application รวมถึง Cache Service

     

    Microsoft Azure

    cloud7App Services :
    ให้บริการ Application ในกลุ่มของ Microsoft และในกลุ่มของ Linux โดยครอบคลุมทุกบริการของ
    Microsoft เป็นหลัก และเพิ่มบริการของ Linux เพิ่มมากขึ้นเรื่อย ๆ
    Compute :
    ให้บริการเครื่อง Virtual Machine รองรับทั้ง Website, Cloud services และ Mobile services
    Storage :
    ให้บริการฐานข้อมูล SQL Database โดยเฉพาะในส่วนของ Microsoft SQL Server ทั้งนี้รองรับในส่วน
    ของฐานข้อมูลอื่น ๆ ด้วย เช่น HDInsight ทั้งในส่วนของ SQL และ NoSQL

    6 ข้อดีของการใช้ Cloud Computing

    1) ไม่ต้องลงทุน Infrastructure เอง จ่ายราคาตามปริมาณที่ใช้ได้
    2) ผู้ให้บริการลงทุนมหาศาล บริการให้คนมหาศาล ทำให้ค่าบริการต่อหัวลดลงมาก
    3) เลิกคาดเดาว่าเราจะต้องการทรัพยากรเท่าไหร่ถึงจะพอ หรืออาจจะซื้อมามากเกินไปหรือเปล่า
    4) สามารถเพิ่มความเร็วในการจัดหาทรัพยากร์
    5) หยุดใช้เงินในการจัดการ Data Center
    6) สามารถ Deploy Application ให้ใช้ได้ทั่วโลกได้อย่างรวดเร็ว โดยรวมถึงคนทั่วโลกสามารถ Access ได้อย่างรวดเร็ว

    การนำ Cloud มาใช้งาน

    – ผู้บริหารต้องเห็นด้วย และเป็นผู้ผลักดันในการใช้งานให้เกิดเป็นรูปธรรม
    – โดยในแต่ละธุรกิจ หรือแต่ละองค์กรมีวิธีการใช้งานในรูปแบบที่แตกต่างกันตามลักษณะงานที่ทำ
    – การเปลี่ยนแปลงจะต้องเปลี่ยนในสิ่งต่อไปนี้
    1) งานที่ทำ
    2) ความสามารถ ทักษะ ที่ต้องการเพิ่มขึ้นในองค์กร
    3) ความสัมพันธ์ระหว่างคนในองค์กรและผู้บริหารระบบไอที
    4) กระบวนการทำงาน
    – ระดับของการใช้งาน Cloud มีทั้งแบบ ไม่มีใช้งาน, ใช้งานภายใน, ใช้งานภายนอกทั้งหมด ซึ่งสุดท้ายแล้วจะไม่มีผู้ดูแลระบบภายในเหลืออยู่เลย
    – แต่ก็ยังต้องมีฝ่าย IT ภายในองค์กร แต่จะใช้ในการดูแลเรื่องความปลอดภัยของการเข้าถึงข้อมูล การจัดการบริการ Cloud และการเฝ้าระวัง
    – การเริ่มที่ง่ายที่สุด ต้องเริ่มจากความซับซ้อนน้อยที่สุด
    – สิ่งที่ควรนำขึ้น Cloud ก่อนคืองานที่ใช้ทดสอบหรือพัฒนา, งานที่ไม่กระทบต่อธุรกิจโดยรวม, งานที่รันเป็น Batch
    – สุดท้ายแล้วงานที่จะขึ้น Cloud ช่วงหลังก็จะเป็นงานที่มีโหลดสูง, งานที่มีการใช้งานร่วมกัน, งานที่ต้องใช้กับ Desktop, งานทั้งที่เป็นงานทั่วไป และงานสำคัญ

    ความเสี่ยงในการใช้งาน Cloud

    – ข้อมูลสูญหาย
    – การใช้บริการของที่หนึ่งแล้วจำเป็นต้องย้ายไปยังอีกผู้ให้บริการ
    – Data lock-in ข้อมูลอาจจะไม่สามารถย้ายไปใช้กับ Application อื่นได้
    – ขนาดของเครื่อง ซึ่งผู้ให้บริการไม่สามารถจัดหาให้ได้
    – เครื่องมือจัดการระบบ Cloud ซึ่งการที่ย้ายไปยังผู้บริการอื่นใช้เงินลงทุนที่สูง

    การป้องกันความเสี่ยงในการใช้งาน Cloud

    – Data lock-in ใช้รูปแบบมาตรฐานของข้อมูลเช่น JSON, XML
    – VM lock-in ใช้รูปแบบมาตรฐานของ VM Image
    – App lock-in ใช้รูปแบบ API มาตรฐาน
    – การยืนยันตัวตนให้ใช้มาตรฐาน เช่น OAuth, OpenID, Facebook Authentication

  • การตั้งค่า IPV6 ให้กับ Apache Web Server สำหรับ Ubuntu Linux

    “อยากตั้งค่า Apache Web Server ให้เปิดใช้ IPv6 ต้องทำอย่างไร”

    • สำหรับวิธีเปิดใช้งาน IPv6 บน Apache จะขอยกตัวอย่างบน Ubuntu ซึ่งจริง ๆ แล้วสามารถตั้งเป็น IPv6 only ก็ได้ แต่ในที่นี่จะตั้งให้สามารถใช้ได้ทั้ง IPv4 และ IPv6
      1. เปิดไฟล์ /etc/apache2/ports.conf
        sudo vim /etc/apache2/ports.conf
      2. ทำการแก้ไขโดยเพิ่มในส่วนของ IPv6 Config ดังนี้ (xxx yyy ไปหามาใส่เอาเองนะครับ เป็นแค่ค่าสมมุติ)
        Listen 192.168.xxx.yyy:80
        Listen [2001:xxxxxx:101]:80
      3. สั่ง Restart Web Service เป็นอันเรียบร้อยครับ
        sudo /etc/init.d/apache2 restart
      4. สามารถตรวจสอบผ่านคำสั่ง netstat ได้ดังนี้ครับ
        netstat -na | grep ":80"
    • การทดสอบในกรณียังไม่ได้จด DNS6 เราไม่สามารถพิมพ์ URL เป็น IPv6 ตรง ๆ บน Browser ได้ ถ้าจดแล้วสามารถทดสอบผ่าน http://ipv6-test.com/validate.php ดูได้ครับ