Thursday, December 23, 2021

ทดสอบสร้าง docker base on LAMP

Env HOST

  • Ubuntu 21.10
  • MySQl 8
  • PHP 8

Step

  • ติดตั้ง docker service และ docker-compose ให้เรียบร้อย

$ sudo apt install docker docker-compose

  • start docker service และ กำหนดมันให้เป็น service จะได้ start ตอนบูตระบบทุกครั้ง ด้วยคำสั่ง

$ systemctl enable --now docker

  • เตรียม folder project เราจะไปสร้างไว้ที่ home ของ user เราใช้งานปัจจุบันโดย

  • สร้าง directory ใหม่แบบ พาธเลย โดยใช้ option p (ในที่นี้เรายังไม่มี linuxconfig และ www folder ถ้าเราไม่ใช้ -p มันจะบอกว่าไม่พบ folder linuxconfig แบบนี้แหละ)

$ cd ~ && mkdir -p linuxconfig/www

  • จากนั้นสร้างไฟล์ docker-compose ไว้พาธนี้

$ nano linuxconfig/docker-compose.yml

  • เพิ่มประมาณนี้ในไฟล์

  • จากนั้นสร้าง Dockerfile อีกอันเอาไว้แก้ปัญหา php mysql driver การเชื่อมต่อระหว่าง php กับ mysql

$ nano linuxconfig/Dockerfile

  • จากด้านบน เราสร้าง container 3 อัน (services 3 ชื่อ www, database, phpmyadmin) โดยทำ link ให้ container เห็นกันได้เลย
  • สร้างไฟล์ทดสอบ phpinfo โดย

$ echo "<?php phpinfo();" > ~/linuxconfig/www/index.php

  • จากนั้นสั่งให้ build container ทั้งหมดผ่าน docker-compose โดยคำสั่ง

$ cd linuxconfig && sudo docker-compose up -d

  • เพิ่มเติมใส่ -d เพราะทำให้มันเป็น daemon (background service สั่งรันคำสั่งนี้แล้วสามารถ รับคำสั่งอื่นต่อไปด้าน โดยไม่แสดง output ของ service นี้)
  • รันได้ไม่มีปัญหาก็จะแสดง done ประมาณนั้น
  • ทดสอบโดยเข้า http://host_ip:8001/index.php

Note

  • คำสั้งสำหรับ stop project ของเรา

$ sudo docker-compose stop

  • คำสั่งในกรณีเราแก้ docker-compose.yml หรือ แก้ Dockerfile เราต้อง build container ใหม่ด้วยคำสั่ง

$ sudo docker-compose up -d --build
  • อธิบายคอนฟิกที่สำคัญ

command: --default-authentication-plugin=mysql_native_password 

  • เอาไว้แก้ไขปัญหานี้

the server requested authentication method unknown to the client [caching_sha2_password]

  • ส่วนที่เราต้องมี Dockfile เอาไว้เพิ่มคำสั่ง load library ที่จำเป็นสำหรับ php library mysql pdo
  • ในไฟล์ docker-compose เราจะเห็น build: . คือ ตัว service www เราจะมีการเรียก Dockerfile ใน path ปัจจุบันที่มันทำงานอยู่ด้วย 
  • อีกเรื่องใน dockerfile มีคำสั่งแบบนี้ RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" 
  • เอาไว้แก้ปัญหาเรื่อง json response มี php warning ออกมาด้วย มันจะ ajax error เป็นการใช้ php.ini ด้วย production config ไปเลย คล้ายกับ php framework ที่เปิดใช้งาน production env นั่นแหละคับ

Ref

  • https://linuxconfig.org/how-to-create-a-docker-based-lamp-stack-using-docker-on-ubuntu-20-04
  • https://blog.devgenius.io/docker-php-pdo-mysql-how-to-8c0aee437539 
  • https://javakoon.blogspot.com/2020/11/docker-compose-lamp-stack-linux-apache.html
  • https://arnondora.in.th/docker-tip-lamp-stack-docker/
  • https://medium.com/touch-technologies/%E0%B8%97%E0%B8%B3%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81-docker-compose-b6688fc98c6f
  • https://medium.com/@somprasongd/docker-compose-%E0%B8%84%E0%B8%B7%E0%B8%AD-fc8b35e0c8bc
  • https://sysadmin.psu.ac.th/2017/09/19/get-started-with-docker-part-11-docker-compose-ldap-services/


Wednesday, December 15, 2021

Set static ip Ubuntu Server 21.10

Env

  • Ubuntu 21.10 in Vbox and set bridge network

Solved

  • ก่อนแก้คอนฟิก ควรสำรองไว้ก่อน

$ sudo cp /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.old

  • จากนั้นเริ่มคอนฟิกได้

$ sudo vim /etc/netplan/00-installer-config.yaml

  • และกดปุ่ม  i สำหรับ vim edit แบบ insert
  • ค่าเริ่มต้นจะประมาณนี้


  • แก้ไขโดยไม่รับ ip จาก dhcp เปลี่ยนจาก true เป็น no
  • และกำหนดค่า ip, gateway, dns จะได้ประมาณนี้

  • จากนั้น save ไฟล์ให้เรียบร้อย (Esc => Shift + : => พิมพ์ wq 
  • ตัวอย่างคือ กำหนด static ip เป็น 192.168.1.85
  • สุดท้าย apply change ด้วยคำสั่ง

$ sudo netplan apply

เพิ่มเติม

  • ที่ต้องใช้ vim หรือ vi มันจะแก้ปัญหาเรื่อง เว้นวรรค (indent) สำหรับแต่ละบรรทัด เราต้องวรรคให้ถูก format เค้ามันจะคล้ายกับ python เลย อันใหนเป็นซับของอะไรประมาณนั้น
  • การเว้นวรรคแนะนำให้ใช้ tab ไม่ควรใช้ spacebar

Ref

  • https://linuxconfig.org/how-to-configure-static-ip-address-on-ubuntu-18-10-cosmic-cuttlefish-linux
  • https://linuxize.com/post/how-to-configure-static-ip-address-on-ubuntu-20-04/

Monday, December 13, 2021

Enable userdir mod Ubuntu 21.10

Env

  • Ubuntu 21.10 in Vbox
  • and set bridge network 
Enable userdir mod

$ sudo a2enmod userdir
$ sudo systemctl restart apache2
$ mkdir ~/public_html
$ chmod 711 /home/user1
$ chmod 755 /home/user1/public_html
$ echo "hello world" >> ~/public_html/index.html  

Exam

  • http://localhost/~user1/index.html
ปัญหาหลังจาก enable userdir mod
  • http://localhost/~user1/index.php 
  • มันรันไฟล์ php ไม่ได้ engine php ไม่ทำงานสำหรับ mod นี้หว่า
  • แก้ปัญหาโดย (ในอ้างอิงเค้าบอกเป็นพาธนี้ /etc/apache2/mods-enabled/php5.conf แต่ของเราใช้อีกพาธเพราะ php หรือ ubuntu คนละเวอร์ชั่นหว่า)
$ sudo nano /etc/apache2/mods-available/userdir.conf
  • แก้ไข php_admin_value engine จาก Off เป็น On 
<IfModule mod_userdir.c>
    <Directory /home/*/public_html>
        php_admin_value engine On
    </Directory>
</IfModule>
  • หรือในคอนฟิกไม่มีค่านี้ ก็เพิ่ม php_admin_value engine On  เข้าไปใน tag directory ดังตัวอย่าง
  • สุดท้ายก็ restart apache service ซะหน่อย
$ /etc/init.d/apache2 restart

Ref

  • https://www.server-world.info/en/note?os=Ubuntu_21.04&p=httpd&f=4
  • http://devplant.net/2010/05/04/linux-php-not-working-in-userdir-public_html/
  • https://stackoverflow.com/questions/35928184/php-in-userdir-not-working

Ubuntu 21.10 set allow remote access to MySQL

  • อันนี้กล่าวถึง mysql นะ ไมใช่ mariadb  คอนฟิกพาธ ของ 2 ตัวนี้ อาจอยู่คนละที่กันแล้วแต่ version อีกต่างหาก
  • ติดตั้ง MySQL (คำสั่งด้านล่างจะไม่ระบุเวอร์ชั่น คือ มันจะเอาเวอร์ชั่น ล่าสุดของระบบ Ubuntu)

sudo apt install mysql

  • ในที่นี้ ubuntu 21.10  MySQL 8 แก้ไขที่

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

  • หาคอนฟิกประมาณนี้ (ค่าเริ่มต้นคือ อนุญาตให้  ip loopback เชื่อมต่อได้เท่านั้น)

bind-address  = 127.0.0.1

  • เราจะเปิดให้ client ip ? เชื่อมต่อได้ก็ใส่เป็น ip นั้นได้เลย เช่น client เราคือ 192.168.1.2

bind-address = 192.168.1.2

  • หรือเราจะเปิด client ทุกเครื่องเชื่อมต่อเข้ามาก็นะให้ใส่ได้แบบนี้ *, :: หรือ 0.0.0.0

bind-address = *

  • หรือ bind-address = ::
  • หรือ bind-address = 0.0.0.0
  • เลือกเอาแบบใหนตามที่ชอบได้เลย
  • สุดท้าย restart service ซะหน่อย

sudo systemctl restart mysql

  • หรือ sudo /etc/init.d/mysql restart

Ref

  • https://www.digitalocean.com/community/tutorials/how-to-allow-remote-access-to-mysql
  • https://dev.to/rakeshgsekhar/how-to-allow-remote-connections-to-mysql-database-on-ubuntu-20-04-4nc2

Barrier kvm software

  • เขียนไว้เยอะ นานเล็กน้อยถึงปานกลาง แต่ก่อนชื่อ synergy รู้สึกว่ามันจะกลายเป็นโปรแกรมเสียตังค์ซะแล้ว
  • Barrier อันนี้น่าจะเป็น fork ของ synergy เพราะหน้าตามันคล้ายๆ กันนั่นแหละ

Install on Ubuntu 21.04

sudo apt-get -y install barrier 

Client

  • check ที่ Client (use.... keyboard):
  • ใส่ค่า ip ของ server ที่เราจะใช้ mouse และ keyboard ของเค้า
  •  screen name ค่านี้จะต้องไปอ้างอิงที่ฝั่ง server ต่อ
  • รอ server start ก่อน ฝั่ง client จึง start ทีหลังนะ

Server


  • check ที่ Server (share ... keyboard):
  • จากนั้นคลิกที่ ปุ่ม Configure Server...
  • ลาก icon มุมขวาบน วางบนตำแหน่ง ที่ต้องการ

  • ดับเบิ้ลคลิกที่  icon client

  • ตั้งค่า screen name อันนี้ได้มาจากโปรแกรมฝั่ง client

  • และ กดปุ่ม Ok
  • กลับมาหน้าแรก กดปุ่ม Start
  • รอ client เชื่อมต่อเข้ามเป็นอันเรียบร้อย

Add

  • ทดลองระหว่าง Server เป็น Ubuntu 20.04 และ Client เป็น Mac Monterey (version 12) ใช้งานได้ไม่พบปัญหา

Related

  • https://juuier.blogspot.com/2014/01/microsoft-garage-mouse-without-borders.html
  • https://juuier.blogspot.com/2011/09/how-to-use-synergy-part-2.html
  • https://juuier.blogspot.com/2011/09/how-to-use-input-director.html 
  • https://juuier.blogspot.com/2011/09/how-to-use-synergy-part-3.html
  • https://juuier.blogspot.com/2011/09/how-to-use-synergy-part-4.html
  • https://juuier.blogspot.com/2011/09/control-multi-monitor-with-one-keyboard.html
  • https://juuier.blogspot.com/2014/01/synergy-kvm-software.html

Ref

  • https://installati.one/ubuntu/21.04/barrier/
  • https://github.com/debauchee/barrier