มารู้จักกับ CoreOS Linux และวิธีติดตั้ง CoreOS Linux บน Vmware

CoreOS Linux คืออะไร เอาไปใช้ทำอะไร              ในโลกของ Containner ในปัจจุบันมีหลายตัวเลือกให้ใช้งาน แต่การใช้งานที่สมบูรณ์จำเป็นต้องมี 3 อย่างรวมกันคือ Containner (ยกตัวอย่าง Docker,Rocket,Lxd), OS ขนาดเล็ก (ยกตัวอย่าง CoreOS, RancherOS, PhotonOS, Snappy Ubuntu Core, Redhat Project Atomic), และสุดท้ายคือโปรแกรมบริหารจัดการ Containner (ยกตัวอย่าง Kubernete, Admiral, Rancher, Kitematic)              สำหรับ CoreOS[1] เองรองรับการงานทั้งใน Cloud(AWS,Digital Ocean,Azure,Google Cloud Platform) หรือใน Virtualization Platform (ยกตัวอย่าง OpenStack, VMWare, Vagrant) และยังสามารถติดตั้งลงบนเครื่อง Physical (Bare Metal) ได้อีกด้วย              CoreOS มีจุดเด่นอีกอย่างคือระบบ CoreOS Cluster[2] ที่สามารถออกแบบเป็น Cluster ช่วยให้สามารถบริการ Docker Containner กระจายไปยัง Node ต่าง ๆ โดยใช้ etcd ในการจัดการระบบและใช้ fleet ในการสร้าง Docker ที่อยู่บน CoreOS Cluster ซึ่งจะกล่าวต่อไปในบทความต่อไปครับ              การติดตั้ง ติดตั้งได้หลากหลายช่องทาง เขียนแผ่นติดตั้งก็ได้ ผ่าน iso ก็ได้ แต่ถ้าเป็น Image จะไม่มี User (จริง ๆ มีแต่ไม่มี Password) ต้องสร้างด้วยสิ่งที่เรียกว่า cloud-config ซึ่งจำเป็นต้องตั้งค่าก่อนติดตั้ง หรืออีกแบบที่จะขอแนะนำ เป็นวิธีที่ใช้สำหรับ Image ที่เป็น ova ของ Vmware ซึ่งใช้วิธี Bypass เข้า Auto Login Mode[1] แล้วเข้าไป Add User เอาเองภายหลัง (สามารถนำไปประยุกต์กับวิธีติดตั้ง Image แบบอื่นได้เช่นเดียวกัน)  การติดตั้ง CoreOS ด้วย OVA Image ผ่าน vSphere Client 6.0[3] โหลดไฟล์ติดตั้งจาก https://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_ova.ova (ุถ้า Link เปลี่ยนไปหาดูเอาเองนะครับ) เปิด vSphere Client เลือก deploy OVF Template จากนั้นทำการ Browse File เลือกเครื่อง เลือก DataStore ตามปกติ   เมื่อถึงหน้าตั้งค่าใส่ Hostname และการตั้งค่า Network เบื้องต้น (ในที่นี้ผมใส่แค่ Hostname และ ชื่อ Network Interface โดยรับ IP จาก DHCP) จากนั้นเมื่อสร้างเสร็จและเปิดเครื่องขึ้นมารีบกดปุ่มลูกศรลงในหน้า Grub ป้องกัน Auto Boot (เร็วมาก ถ้าไม่ทันก็ให้รีเครื่องใหม่) จากนั้นให้เลือก CoreOS default แล้วกด e และพิมพ์ coreos.autologin (ไม่ต้องพิมพ์ \ ก่อนขึ้นบรรทัดใหม่ ระบบจะใส่ให้เอง) จากนั้นกด F10 ก็จะทำการ Boot และ ได้ Prompt สำหรับ adduser ตั้งรหัสผ่านได้เลย

Read More »

การเชื่อมต่อ OAuth2 ด้วย .NET C#

อยาก  Login ด้วย OAuth2 กับ .NET C# ต้องทำอย่างไร              สำหรับตัวอย่างนี้เอามาจาก GitHub Project : https://github.com/titarenko/OAuth2[1] ซึ่งเป็น Code ตัวอย่างนำมาเพิ่ม ในส่วนของการเชื่อมต่อ PSU Passport ดังนี้ เพิ่ม class file ใน project OAuth2->Client->Impl ชื่อ PassportClient.cs เนื้อหาดังนี้ using Newtonsoft.Json.Linq; using OAuth2.Configuration; using OAuth2.Infrastructure; using OAuth2.Models; namespace OAuth2.Client.Impl { /// <summary> /// Passport authentication client. /// </summary> public class PassportClient : OAuth2Client { /// <summary> /// Initializes a new instance of the <see cref=”PassportClient”/> class. /// </summary> /// <param name=”factory”>The factory.</param> /// <param name=”configuration”>The configuration.</param> public PassportClient(IRequestFactory factory, IClientConfiguration configuration) : base(factory, configuration) { } /// <summary> /// Defines URI of service which issues access code. /// </summary> protected override Endpoint AccessCodeServiceEndpoint { get { return new Endpoint { BaseUri = “https://oauth.psu.ac.th”, Resource = “?oauth=authorize” }; } } /// <summary> /// Defines URI of service which issues access token. /// </summary> protected override Endpoint AccessTokenServiceEndpoint { get { return new Endpoint { BaseUri = “https://oauth.psu.ac.th”, Resource = “?oauth=token” }; } } /// <summary> /// Defines URI of service which allows to obtain information about user which is currently logged in. /// </summary> protected override Endpoint UserInfoServiceEndpoint { get { return new Endpoint { BaseUri = “https://oauth.psu.ac.th”, Resource = “?oauth=me” }; } } /// <summary> ///

Read More »

Workshop : PSU Passport OAuth2

มีวิธี Authen แบบอื่นนอกจาก LDAP กับ Web Service ไหม             ด้วยยุคสมัยเปลี่ยนไป ด้วยเทคโนโลยี OAuth2 ทำให้เราจำเป็นต้องศึกษาหาความรู้เพิ่มเติมกันอีกครั้งครับ หมายเหตุ : เนื่องจากต้องการให้เป็น Blog เปิดเผยได้ จึงขอไม่ระบุชื่อ Server จริง ๆ ลงไปนะครับ  โดยรวบรวม Blog แบ่งเป็น 7 Blog ดังนี้ Blog ที่ ชื่อ Blog      1 เรียนรู้เทคโนโลยี OAuth2      2 การติดตั้ง Postman      3 ทดสอบเชื่อมต่อ OAuth2 ด้วย Postman      4 การเชื่อมต่อ OAuth2 ด้วย Joomla      5 การเชื่อมต่อ OAuth2 ด้วย Wordpress      6 การเชื่อมต่อ OAuth2 ด้วย .NET C#      7 การเชื่อมต่อ OAuth2 ด้วย PHP (กำลังดำเนินการ) บทความและ Link เพิ่มเติม [1] การยืนยันตัวตนและกำหนดสิทธิ์ Apache UserGrid 2.x [2] รวม Code สำหรับเชื่อมต่อ OAuth ทุกภาษา 1 : https://oauth.net/code/ [3] รวม Code สำหรับเชื่อมต่อ OAuth ทุกภาษา 2 : https://developer.byu.edu/docs/consume-api/use-api/follow-sample-code

Read More »

การยืนยันตัวตนและการกำหนดสิทธิ์ 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 ที่ต้องการ  

Read More »

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

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

Read More »