GCP #01 วิธีการสร้าง Virtual Machine บน Google Cloud Platform

ขั้นตอน มี Google Account ไปที่ https://console.cloud.google.com/start สำหรับคนที่ใช้ครั้งแรก ควรจะใช้สิทธิ์ Free Trial 300 USD / 12 Month ในการใช้งาน จะต้องมี Billing Account โดยต้องกรอกข้อมูล บัตร Credit/Debit ซึ่งต้องเป็น VISA/MasterCard เท่านั้น และต้องไม่ใช่ Prepaid ด้วย https://cloud.google.com/billing/docs/how-to/payment-methods#add_a_payment_method เมื่อเสร็จแล้วจะได้ Credit อย่างนี้ ต่อไป สร้าง Virtual Machine กัน ไปที่ เมนู > Cloud Launcher จะเห็นได้ว่า ตอนนี้ระบบจะสร้าง “My First Project” ไว้ให้ ซึ่งเราสามารถ สร้าง Project ใหม่ก็ได้ แต่ตอนนี้ใช้อย่างนี้ไปก่อน ต่อไป จะลองสร้าง Ubuntu Server ขึ้นมาใช้งาน ในที่นี้จะสร้าง Ubuntu 14.04 พิมพ์ Ubuntu ในช่องค้นหา แล้ว เลือก Ubuntu 14.04 จากนั้น คลิก Launch on Compute Engine ตั้งชื่อตามต้องการ (ถ้าต้องการ) สามารถเลือก Zone และ Machine Type ได้ตามความเหมาะสม ซึ่งจะมีราคาแตกต่างกัน ค่าเริ่มต้น Machine Type: n1-standard-1 จะให้ 1 vCPU, 3.75 GB RAM และ 10 GB standard persistent disk หากต้องการ Disk เพิ่ม สามารถคลิก Change เพื่อเพิ่มได้​ (standard persistent disk จะราคาถูกกว่า ssd มาก) ต่อไป กำหนดเรื่องเของ Firewall ถ้าให้บริการ HTTP/HTTPS ก็คลิกเลือกได้เลย ในกรณีที่ต้องการกำหนดค่าอื่นๆ เช่น Disk, Network, SSH Key ให้คลิก “Management, disks, networking, SSH keys” เสร็จแล้วกดปุ่ม Create รอสักครู่ ก็จะได้ VM มาใช้งานแล้ว ในที่นี้ จะได้ External IP ซึ่งใช้ในการติดต่อจาก Internet มา แต่หากมีการ Restart/Stop IP address นี้ก็จะเปลี่ยนไป (การ Fix มีค่าใช้จ่ายนิดหน่อย) และ การติดต่อไปยัง VM ก็สามารถทำได้ โดยการคลิก SSH ซึ่งสามารถเข้าถึงได้จาก Console นี้ หากต้องการใช้งานจาก Client อื่นก็ทำได้ แต่ต้องกำหนด SSH Key กันนิดหน่อย ซึ่งจะกล่าวในภายหลัง เพิ่มเติม ในกรณีต้องการเปิด Port เพิ่มที่ไม่ใช่ HTTP/HTTPS ให้คลิกที่ Menu > Network Services > Firewall Rules แล้วกำหนดค่าตามต้องการ โดยการ Create Firewall Rule หวังว่าจะเป็นประโยชน์ครับ

Read More »

วิธีทำ Password-less SSH บน Ubuntu

ในการทำงานกับ Server Cluster ขนาดใหญ่ ซึ่งประกอบด้วย Ubuntu Server จำนวนมาก หากต้องแก้ไขระบบทั้งหมด โดยการ Secure Shell หรือ SSH เข้าไปทีละเครื่อง “โดยต้องเป็น root ด้วย” จะเป็นงานที่ใช้เวลาอย่างมาก เค้าจึงมีระบบที่เรียกว่า Password-less SSH โดยการแลกเปลี่ยน Public Key แทนที่จะต้อง Login ด้วย Username/Password และเนื่องจาก Ubuntu โดย Default ไม่มีการสร้าง root password (มี root แต่ไม่มี password –> ก็เลย Login ไม่ได้ด้วย Password) ซึ่งก็ดีในเรื่องของ Security แต่ทำให้การทำงานยุ่งยากนิดหน่อย บทความนี้จะกล่าวถึงวิธีการทำ Password-less SSH รวมไปถึง การที่ไม่ต้องถาม Known Host ในครั้งแรกที่เข้าใช้งานด้วย โดยระบบจะประกอบด้วย server01 เป็นเครื่องที่จะสั่งการเครื่อง server02 … serverNN ในสิทธิ์ root และในระบบนี้ ทุกเครื่องมี user ชื่อ mama ซึ่งมีสิทธิ์ sudo ที่เครื่อง server01 ใช้คำสั่งต่อไปนี้ เพื่อสร้าง Public/Private rsa key pair ssh-keygen จะได้ผลดังนี้ ซึ่งจะได้ไฟล์มา 2 file อยู่ใน directory: ~/.ssh – id_rsa – id_rsa.pub เพื่อไม่ให้การ SSH ไปยังเครื่องใหม่ๆ มีการถาม Known Host แบบนี้ แล้วก็ต้องคอยตอบ yes ทุกเครื่องไป ก็ให้สร้างไฟล์ .ssh/config ว่า (วิธีนี้จะมีผลเฉพาะ mama เท่านั้น) หรือสร้างใน /etc/ssh/ssh_config เพื่อให้มีผลทั้งระบบ Host * StrictHostKeyChecking no UserKnownHostsFile=/dev/null จากนั้น ให้เอาไฟล์ Public Key คือ  .ssh/id_rsa.pub  ไปยังเครื่องปลายทาง ในที่นี้คือ server02 (ใช้วิธี scp ไปยัง mama@server02) scp .ssh/id_rsa.pub mama@server02:~ ในครั้งแรกนี้ ยังต้องใส่ Password ของ mama บนเครื่อง server02 อยู่ จากนั้น ไปดำเนินการต่อใน server02 ที่เครื่อง server02 ใน home directory ของ mama บน server02 จะมีไฟล์ id_rsa.pub อยู่ ลองตรวจสอบโดยใช้คำสั่ง ls -l /home/mama/id_rsa.pub เปลี่ยนเป็น root ด้วยคำสั่ง sudo su แล้ว เข้าไปใน root home directory ด้วยคำสั่ง cd สร้าง directory .ssh และ สร้างไฟล์ .ssh/authorized_keys โดยนำข้อมูลในไฟล์ /home/mama/id_rsa.pub มาต่อท้าย mkdir .ssh cat /home/mama/id_rsa.pub >> .ssh/authorized_keys เพื่อความปลอดภัย ตั้งค่า Permission ให้ถูกต้อง chmod 700 .ssh chmod 600 .ssh/authorized_keys   จากนั้น ลองทดสอบ ssh จาก

Read More »

เตาะแตะไปกับ Docker ตอนที่ 12 Clone Docker Files From GitHub

จากบล็อกเรื่อง “เตาะแตะไปกับ Docker” ในตอนที่แล้ว เราได้เรียนรู้ขั้นตอนในการสร้างและรัน LDAP services อย่างละเอียด ก่อนที่ผมจะเขียนบทความในตอนนี้ผมได้นำไฟล์ทุกไฟล์นั้นขึ้นไปไว้บน GitHub เพื่อให้พวกเราไม่ต้องสร้างไฟล์เหล่านั้นเอง แต่จะทำด้วยคำสั่ง git clone ครับ เรายังคงทดสอบด้วย VM โดยตั้งค่า network เป็น NAT network เพราะว่า เราใช้ domain สมมติ คือ ldap.example.com และทดสอบในสภาพแวดล้อมที่เป็นเครือข่ายภายใน ขั้นตอนดังนี้ 1. ติดตั้ง Ubuntu 16.04 64 bit แล้วติดตั้ง docker 17.06.2-ce แล้วต้องเปลี่ยนชื่อ hostname เป็น ldap.example.com จากนั้นรีบูตเครื่อง 2. ติดตั้ง docker-compose 1.8.0-2 (ถ้ายังไม่ได้ทำ) ด้วยคำสั่งดังนี้ sudo apt install docker-compose 3. ทำการ Clone project จาก github ด้วยคำสั่ง git clone https://github.com/woonpsu/ex1-openldap.git 4. ทำคำสั่งตามนี้ cd ex1-openldap docker-compose up -d หมายเหตุ หากยังไม่มี image ชื่อ ubuntu:16.04 ก็จะใช้เวลานานสักหน่อยเมื่อรันคำสั่ง docker-compose เพราะว่าจะมีการสร้าง image ubuntu:16.04 ให้ใหม่ 5. ใช้คำสั่งเหล่านี้เพื่อตรวจสอบ docker images docker ps docker volume ls 6. เพิ่ม users ตัวอย่าง sudo apt install ldap-utils ldapadd -H ldap://ldap.example.com -f ./openldap/src/create-users.ldif -x -D “cn=admin,dc=example,dc=com” -w 123456 7. ทดสอบเข้าใช้งานเว็บจากเครื่องใน NAT network เดียวกัน หรือที่เครื่อง VM server ที่ผมได้ติดตั้ง Desktop Environment ไว้แล้ว ก็ต้องเปลี่ยนจาก text เป็น graphic ด้วยคำสั่ง $ startx เข้า browser ไปที่ http://ldap.example.com:8080/phpldapadmin/   สำหรับวิธีการทำ GitHub Repository ชื่อ ex1-openldap ของผมอย่างคร่าว ๆ คือ 1. เข้า browser ไป sign up แบบ free ที่ github.com ด้วย username ชือ woonpsu 2. สร้าง Repository ชื่อ ex1-openldap 3. ไปที่เครื่อง server ใช้คำสั่ง git clone https://github.com/woonpsu/ex1-openldap.git 4. เตรียมไฟล์ cd ex1-openldap git init 5. สร้างไฟล์ docker-compose.yml และไดเรกทอรี openldap กับ phpldapadmin ให้เสร็จ 6. ทำการส่งขึ้นไปไว้บน github git add . git commit -m “This is a first commit” git push -u origin master

Read More »

เตาะแตะไปกับ Docker ตอนที่ 11 Docker Compose (LDAP services)

เราจะมาเรียนรู้ การใช้ docker compose รัน service 2 services คือ OpenLDAP และ phpLDAPadmin ซึ่ง docker จะมองว่าการใช้ docker compose คือ เรากำลังรัน project ที่ประกอบด้วย service หลาย ๆ service ให้แน่ใจว่าอยู่ที่ home directory ให้ใช้คำสั่งนี้ $ cd สร้างไดเรกทอรีของ project สมมติตั้งชื่อว่า ex1 $ mkdir ex1 $ cd ex1 สร้างไดเรกทอรี openldap ภายในมี dockerfile และไดเรกทอรีที่เกี่ยวข้อง ทำตามบล็อกเรื่อง “เตาะแตะไปกับ Docker ตอนที่ 9 Dockerfile (OpenLDAP)” สร้างไดเรกทอรี phpldapadmin ภายในมี dockerfile และไดเรกทอรีที่เกี่ยวข้อง ทำตามบล็อกเรื่อง “เตาะแตะไปกับ Docker ตอนที่ 10 Dockerfile (phpLDAPadmin)” สร้างไฟล์ docker-compose.yml ด้วยเอดิเตอร์ที่ถนัด เช่น vi หรือ nano ก็ได้ $ vi docker-compose.yml version: ‘2’ services: openldap: build: ./openldap container_name: openldap volumes: – ldapdatavol:/var/lib/ldap – ldapconfigvol:/etc/ldap/slapd.d ports: – “389:389” – “636:636” restart: always phpldapadmin: build: ./phpldapadmin container_name: phpldapadmin environment: HNAME: “openldap” ports: – “8080:80” depends_on: – openldap restart: always volumes: ldapdatavol: external: false ldapconfigvol: external: false อธิบายได้ดังนี้ ไฟล์ docker-compose.yml นี้ จะมี service แรกคือ openldap จะ build image จากไดเรกทอรี ./openldap เมื่อรันเป็น container จะตั้งชื่อว่า openldap โดยมีที่เก็บข้อมูลถาวรคือ ldapdatavol จะ mapped ไปยัง /var/lib/ldap ใน container และที่เก็บคอนฟิก ldapconfigvol จะ mapped ไปยัง /etc/ldap/slapd.d ใน container เช่นเดียวกัน โดย Host และ container เปิด port ตรงกัน คือ เปิด port TCP 636(LDAPS) และ 389(LDAP) และ container นี้จะทำงานทุกครั้งเมื่อเปิดเครื่อง ต่อมา service ที่สองคือ phpldapadmin จะ build image จากไดเรกทอรี ./phpldapadmin เมื่อรันเป็น container จะตั้งชื่อว่า phpldapadmin มีการตั้งค่าตัวแปร HNAME เป็นชื่อ container อันแรก คือ openldap โดยที่ Host จะเปิด port TCP 8080 ไปยัง port TCP 80

Read More »

เตาะแตะไปกับ Docker ตอนที่ 10 Dockerfile (phpLDAPadmin)

ในตอนที่แล้วเราใช้งาน openldap ด้วยคำสั่ง เช่น ldapsearch หรือ ldapadd ได้แล้ว วันนี้เราจะเรียนรู้การใช้ dockerfile สร้าง image ชื่อ phpldapadmin เพื่อใช้เป็น web interface ในการเข้าไปจัดการ LDAP database ของ container ชื่อ openldap โดยที่ phpLDAPadmin นี้คือการรัน php บน apache2 แล้วเราจะติดต่อระหว่าง container กันได้อย่างไร มาดูกันครับ เช่นเดียวกับครั้งที่แล้ว ผมจะแยกเป็น 3 ขั้นตอน คือ 1.ขั้นตอนเตรียมไฟล์ที่เกี่ยวข้อง 2.ขั้นตอนสร้างไฟล์ dockerfile และ 3.ขั้นตอนการรัน container   1.ขั้นตอนเตรียมไฟล์ที่เกี่ยวข้อง ให้แน่ใจว่าอยู่ที่ home directory ให้ใช้คำสั่งนี้ $ cd สร้างไดเรกทอรีของ image ที่เราจะสร้าง $ mkdir phpldapadmin $ cd phpldapadmin $ mkdir src เราจะเตรียมไฟล์ชื่อ apache2-foreground ให้เปิดไฟล์จากที่นี่ https://github.com/docker-library/php/blob/master/5.6/jessie/apache/apache2-foreground แล้วคัดลอกทุกบรรทัด นำมาสร้างไฟล์ ด้วยเอติเตอร์ที่ถนัด เช่น vi หรือ nano ก็ได้ $ vi ./src/apache2-foreground   2.ขั้นตอนสร้างไฟล์ dockerfile ตอนนี้ก็มาถึงขั้นตอนการเขียน dockerfile ด้วยเอดิเตอร์ที่ถนัดเช่น vi หรือ nano ก็ได้ $ vi dockerfile # Composer: Wiboon Warasittichai FROM ubuntu:16.04 # Change apt source RUN sed -i ‘s/\/us.archive/\/th.archive/g’ /etc/apt/sources.list && \ sed -i ‘s/\/archive/\/th.archive/g’ /etc/apt/sources.list # Update ubuntu, then install packages RUN apt-get update && \ DEBIAN_FRONTEND=noninteractive apt install -y php-ldap phpldapadmin ldap-utils # Timezone Asia/Bangkok RUN apt-get install -y tzdata && \ ln -sf /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && \ dpkg-reconfigure -f noninteractive tzdata # Cleaning RUN apt-get autoremove -y && apt-get clean -y EXPOSE 80 CMD RUN ulimit -n 1024 ENV HNAME ${HNAME} ADD ./src/startup.sh /startup.sh COPY ./src/apache2-foreground /usr/local/bin/ RUN chmod +x /usr/local/bin/apache2-foreground ENTRYPOINT [“/bin/bash”,”/startup.sh”]   ภายในไฟล์ dockerfile เราได้อ้างถึงการนำไฟล์ชื่อ startup.sh ก็ให้สร้างไฟล์นี้ด้วย $ vi ./src/startup.sh #!/bin/bash sed -i “s/127.0.0.1/$HNAME/g” /etc/phpldapadmin/config.php /usr/local/bin/apache2-foreground จุดน่าสนใจในไฟล์ dockerfile

Read More »