วันอังคารที่ 31 ธันวาคม พ.ศ. 2562

Angular 8 - ข้อมูล Static กับ Component และ การแสดงผล

การเก็บข้อมูล Static เป็น Hard Code และการเอาออกมาแสดงที่ Component
เรายังทำตาม Tutorial Your First App ส่วนนี้จะเป็นเกี่ยวกับข้อมูลที่เก็บไว้ใน App ของเราโดยเป็นแบบ Static
เว็บหน้า Your First App https://angular.io/start


ในไฟล์ Component เวลาที่เราประกาศตัวแปรในการเก็บข้อมูลเราสามารถตั้งชื่อขึ้นมาได้เลยในไฟล์ "product-list.component.ts"

โดยสร้างตัวแปร "title" เก็บคำว่า "Product List" ก็เพิ่มลงไปใน Code เป็น title='Product List'; ตามตัวอย่าง
เมื่อต้องการเรียกออกมาแสดงโดยเรียกใน Template ให้ใช้ {{ }} ในการเรียก เป็น {{title}} ก็จะดึงค่ามาแสดง

import { Component, OnInit } from '@angular/core';

@Component({
  selector: 'app-product-list',
  templateUrl: './product-list.component.html',
  styleUrls: ['./product-list.component.css']
})

export class ProductListComponent implements OnInit {

  title = 'Product List';

  constructor() { }

  ngOnInit() {
  }

}
<h1>{{title}}</h1>

วันเสาร์ที่ 28 ธันวาคม พ.ศ. 2562

Angular 8 - Tutorial Your First App กับการสร้าง Component

ตัวอย่าง App แรกของ Tutorial อ่านได้จาก https://angular.io/start
เราจะเริ่มสร้าง Component โดยใช้ Tutorial Your First App เป็น Guide

โดยขั้นแรกเราจะทำ Title แล้วก็ปุ่ม Cart พร้อมกับ Product 1 บรรทัดตามรูป

เริ่มโดยใช้คำสั่ง ng generate component [component-name]
ng generate component top-bar
ng generate component product-list

วันพฤหัสบดีที่ 26 ธันวาคม พ.ศ. 2562

Angular 8 - ติดตั้ง Node.js และ Angular กับพื้นฐานโครงสร้าง

การใช้ Angular 8 ต้องติดตั้ง Node.js Version 10 อ้างอิงตาม https://angular.io/guide/setup-local
ติดตั้ง Node.js ไปโหลดตามนี่เลย https://nodejs.org/en/

หลังจากติดตั้ง Node.js เรียบร้อยแล้วให้ทำการติดตั้ง Angular
# npm install -g

# In global mode (ie, with -g or --global appended to the command), 
# it installs the current package context (ie, the current working directory) as a global package.

npm install -g @angular/cli

เมื่อทำการติดตั้งเรียบร้อยแล้วเราจะสามารถใช้คำสั่ง ng ในการสร้าง Project Angular ได้
คำสั่ง ng new สำหรับสร้าง Project และ ng serv เพื่อใช้รัน Angular
# new (n) Creates a new workspace and an initial Angular app.
ng new my-app

# serve (s) Builds and serves your app, rebuilding on file changes.
cd my-app
ng serve --open

เมื่อ Run Server เสร็จแล้วเปิด Browser ไปที่ http://localhost:4200 จะเจอหน้า Welcome แนะนำการเขียนเบื้องต้น

วันอาทิตย์ที่ 22 ธันวาคม พ.ศ. 2562

Laravel 5.8 - ระบบ Authentication

สร้าง Project ผ่าน PHP Composer ส่วนนี้ผมใช้ชื่อว่า laravel_authen
composer create-project --prefer-dist laravel/laravel . "5.8.*"

เสร็จแล้วเข้าไปดูที่ Folder /database/migrations เราจะเห็นไฟล์ที่ มีชื่อท้ายว่า create_users_table.php และ create_password_reset_table.php จะเป็นไฟล์สำหรับใช้สร้าง User Table และ Password Reset Table ให้เราทำการเชื่อต่อ Project ของเราเข้ากับ Database ก่อน โดยไปที่ไฟล์ /config/database.php และไฟล์ .env แล้วทำการแก้ไขค่าการเชื่อมต่อกับ Database
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=
'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel_Db'),
            'username' => env('DB_USERNAME', 'root'),
            'password' => env('DB_PASSWORD', ''),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

เมื่อทำการ Config ค่าการเชื่อมต่อกับ Database เรียบร้อยแล้ว ทำการสร้างตารางโดยสั่ง Migrate ผ่าน Artisan เมื่อสร้างเรียบร้อยแล้วให้เข้าไปตรวจสอบที่ Database ของเรา จะเห็นว่ามีตารางเพิ่มมา 2 - 3 ตารางคือ migrations, password_resets และ users
php artisan migrate

วันศุกร์ที่ 20 ธันวาคม พ.ศ. 2562

Laravel 5.8 - การเชื่อมต่อกับฐานข้อมูล MySQL

โครงสร้างใน Folder Project

- app : เก็บ Model และ Controller
- config : เก็บค่า Config ต่าง ๆ
- database : เก็บ Migration และ Seeding สำหรับสร้าง Table
- public : เก็บ CSS, JS ไฟล์ต่างๆ ที่ให้เข้าถึงได้ และ .htaccess ด้วย
- resource : เก็บส่วนการแสดงผล View
- routes : เก็บไฟล์ที่ใช้กำหนด Url
- storage : เก็บข้อมูล Caches, Session, ไฟล์ Blade Engine ที่ Complied
- tests : เก็บ Automated Test
- *.env : เก็บ Config Laravel กับ ฐานข้อมูล

การ Config ไฟล์

อ่านเพิ่มเติมได้ที่ https://laravel.com/docs/5.8/database
ไฟล์ที่เราต่อกับฐานข้อมูลจะใช้มี 2 จุด
1. project/config/database.php
2. .env

แก้ไขในส่วนของ Host, Port, DBName, Username และ Password ให้ถูกต้อง
'mysql' => [
            'driver' => 'mysql',
            'url' => env('DATABASE_URL'),
            'host' => env('DB_HOST', '127.0.0.1'),
            'port' => env('DB_PORT', '3306'),
            'database' => env('DB_DATABASE', 'laravel_db'),
            'username' => env('DB_USERNAME', 'laravel'),
            'password' => env('DB_PASSWORD', 'laravel'),
            'unix_socket' => env('DB_SOCKET', ''),
            'charset' => 'utf8mb4',
            'collation' => 'utf8mb4_unicode_ci',
            'prefix' => '',
            'prefix_indexes' => true,
            'strict' => true,
            'engine' => null,
            'options' => extension_loaded('pdo_mysql') ? array_filter([
                PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
            ]) : [],
        ],

แก้ไขให้ถูกต้องเหมือนกัน
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=

วันพุธที่ 18 ธันวาคม พ.ศ. 2562

Laravel 5.8 - การติดตั้ง Laravel และ MVC

ข้อมูลจาก บทเรียนจาก Kong Ruksiam

ก่อนอื่นให้ทำการติดตั้ง XAMPP
และ Composer

เมื่อทำการติดตั้งเสร็จแล้วตรวจสอบผ่าน Command โดยคำสั่ง
# แสดง Version ของ PHP
php -version
PHP 7.3.12 (cli) (built: Nov 19 2019 13:58:02) ( ZTS MSVC15 (Visual C++ 2017) x64 )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.3.12, Copyright (c) 1998-2018 Zend Technologies

# แสดง Version ของ Composer
composer --version
Composer version 1.9.1 2019-11-01 17:20:17

วันจันทร์ที่ 16 ธันวาคม พ.ศ. 2562

(Shortcut) Update NPM and Node.JS

คำสั่งที่ใช้ในการ Update npm
# แสดง Version ของ npm
npm -v 

# Upgrade npm เป็น Version ล่าสุด
npm install -g npm@latest 

คำสั่งที่ใช้ในการ Update node.js
# แสดง Version ของ node.js
node -v 

# Upgrade node.js เป็น Version ล่าสุด
npm install -g node 

วันพฤหัสบดีที่ 28 พฤศจิกายน พ.ศ. 2562

การล้างข้อมูลในฐานข้อมูลและโหลด Config ใหม่ให้ DSpace CRIS

การล้างข้อมูลนั้นเราทำหลายครั้งก่อนที่เราจะใช้งาน DSpace CRIS จริงๆ เพราะว่าต้องทดลองใช้งานหลาย ๆ อย่าง จึงทำให้ฐานข้อมูลมีข้อมูลที่เราไม่ใช้จำนวนมาก
sudo su - postgres

psql dspace -c "DROP EXTENSION pgcrypto;"
exit;

sudo /data/dspace/bin/dspace database info
sudo /data/dspace/bin/dspace clean


sudo su - postgres
psql dspace -c "CREATE EXTENSION pgcrypto;"
exit;
# - load-cris-configuration: Load CRIS configuration from an XLS file
# - export-cris-configuration: Export CRIS configuration from an XLS file

sudo /data/dspace/bin/dspace load-cris-configuration -f /data/upload/configuration.xls

การ Load Registry ครั้งแรกเมื่อทำการ Load แล้วให้เราทำการ Restart Server ก่อน 1 ครั้งสำหรับ Registry Schema ใหม่
sudo /data/dspace/bin/dspace registry-loader -metadata /data/upload/patent-types.xml

วันอาทิตย์ที่ 24 พฤศจิกายน พ.ศ. 2562

DSpace CRIS แก้ DC Type ที่เป็น All Theses ขึ้น ???

ข้อมูลจาก: DSpace Tech Support



เมื่อทำการทดสอบใช้งาน DSpace CRIS หลังจากติดตั้งไปสักพัก เมื่อทำการเพิ่ม Item แล้วเลือก DC Type เป็น Theses เราจะพบว่าหน้าแรกที่ใช้สรุปว่ามี Item ประเภทไหนบ้าง เราจะเจอความผิดพลาดที่ว่า All Theses หาข้อความไม่เจอ

วันศุกร์ที่ 22 พฤศจิกายน พ.ศ. 2562

PHP ปรับค่า File Upload และค่า Timeout

ข้อมูลจาก: Sitepoint | A2Hosting | Strackoverflow | Mediatemplate

แก้ไขไฟล์ "php.ini" ใน "etc/php/5.6/apache2/php.ini" เสร็จแล้วให้ Restart Apache2
# รองรับการอัพโหลดไฟล์ที่ 300MB
upload_max_filesize = 300M

# รองรับการส่งไฟล์ผ่าน POST ที่ 300MB
post_max_size = 300M

# เพิ่มเวลาในการ Execution และ Input เป็น 600 วินาที
max_execution_time = 600
max_input_time = 600

# เพิ่มหน่วยความจำให้ PHP
memory_limit = 512M

วันเสาร์ที่ 16 พฤศจิกายน พ.ศ. 2562

[Linux Container] - เปิดใช้ SSH ใน Linux Container

# Install OpenSSH Server
apt install openssh-server

# adduser 
adduser sarankon

# usermod -aG  
usermod -aG sudo sarnakon

แก้ไข Config File ที่ "/etc/ssh/ssh_config" โดยเปิด PasswordAuthentication yes
Host *
#   ForwardAgent no
#   ForwardX11 no
#   ForwardX11Trusted yes
    PasswordAuthentication yes
#   HostbasedAuthentication no
#   GSSAPIAuthentication no
#   GSSAPIDelegateCredentials no
#   GSSAPIKeyExchange no
#   GSSAPITrustDNS no
#   BatchMode no
#   CheckHostIP yes
#   AddressFamily any
#   ConnectTimeout 0


แก้ไข Config File ที่ "/etc/ssh/sshd_config" โดยเปิด PasswordAuthentication yes
# To disable tunneled clear text passwords, change to no here!
PasswordAuthentication yes
systemctl restart ssh

วันอาทิตย์ที่ 10 พฤศจิกายน พ.ศ. 2562

การติดตั้ง DSpace CRIS 5 ใน Ubuntu 18.04

การเตรีมเครื่องติดตั้ง DSpace CRIS 5 เราจะทำตามขั้นตอนตามเว็บ โดยปัญหาที่เจอคือ OpenJDK เป็น Version 11 จะไม่สามารถใช้ Maven สั่ง Package ได้ให้เราทำการ ลง OpenJDK เป็น Version 8 ก่อนแล้วทำการติดตั้ง Maven ที่หลัง เพราะหากทำการติดตั้ง Maven ก่อนจะเป็นการเลือกเอา OpenJDK Version ล่าสุดมา
แล้วทำไมต้องใช้ OpenJDK Version 8 ? คือว่า Maven ตอนที่เราสั่ง Package มันจะต้องใช้ไฟล์ tools.jar ในของ Java ที่อยู่ใน Folder /lib/ ใน Java ซึ่งใน OpenJDK Version 9 ขึ้นไปจะไม่มีแล้ว อันนี้เราไม่รู้นะว่าทำไม ?
sudo apt install openjdk-8-jdk
sudo apt install ant git maven 

เสร็จแล้วก็ทำการลง Tomcat8 และ PostgreSQL แล้วทำการตั้งค่าตาม Manual แต่ Command อาจไม่ตรงตามนั้นแต่ก็ได้เหมือนกัน
sudo apt install tomcat8 postgresql postgresql-contrib

เมื่อเตรีมเครื่องพร้อมแล้วก็ทำตามขั้นตอนได้
การติดตั้ง PostgreSQL อ่านที่นี้, การติดตั้ง DSpace CRIS

วันจันทร์ที่ 4 พฤศจิกายน พ.ศ. 2562

การเพิ่ม Admin และเพิ่ม Printer สำหรับ CUPS (Printer Server)

ข้อมูลจาก https://help.ubuntu.com/lts/serverguide/cups.html


การเพิ่ม Admin

เมื่อต้องการเพิ่ม Admin Account ให้ใช้คำสั่ง "sudo usermod -aG lpadmin [username]"
แล้วให้ทำการ Restart CUPS 1 ครั้ง จากนั้นเวลาใช้ให้เข้าผ่าน Protocal "https://" ไปที่ Administrator
เมื่อกดใช้ Function ต่างๆ ก็จะมี Pop-Up ขึ้นมาถาม Username กับ Password
#sudo usermod -aG lpadmin [username]
sudo usermod -aG lpadmin sarankon


วันอังคารที่ 1 ตุลาคม พ.ศ. 2562

Python 3 และ Flask พื้นฐาน

เมื่อปีก่อนเราใช้ Raspberry Pi Zero W เป็นเครื่อง Host เพื่อทำระบบ POS (Point of Sell) ใช้เองที่ร้าน โดยตัวระบบเขียนเป็นภาษา Python 3 โดยใช้ Framework Flask ซึ้งใช้งานง่ายมาก แต่ก็มีปัญหาเรื่องการ Deploy เพราะไม่ได้ศึกษาการ Deploy จริง ๆ จัง ๆ ตอนนี้ถึงเวลาที่ต้องมาทำการ Update ตัวระบบ POS ของตัวเอง ก็ลังเลอยู่นานว่าจะย้ายไป Django ดีไหม แต่ก็สรุปคือไม่ย้ายและต้องเอาของที่ทำอยู่แล้วมาแก้ เลยเป็นที่มาของหัวข้อในตอนนี้ Python 3 และ Flask ...

การติดตั้ง Python 3 และ Virtual Environment

sudo apt install python3 python3-venv

การอัพเดต PIP 3 version

python3 -m pip install --upgrade pip

การสร้าง Virtual Environment

python3 -m venv [environment-name]

การ Active ให้เราสั่ง source /bin/activate และ การ Deactivate เมื่ออยู่ใน venv แล้วให้พิมพ์ deactivate
source [environment-name]/bin/activate
deactivate

การจัดการ Package

pip3 search [package-name]
pip3 install [package-name]
pip3 install [package-name]==[version=number]
pip3 install --upgrade [package-name]

pip3 show [package-name]
pip3 uninstall [package-name]

pip3 list
pip3 freeze
pip3 freeze > requirement.txt
pip3 install -r requirement.txt

วันศุกร์ที่ 30 สิงหาคม พ.ศ. 2562

ตั้งค่า Network โดยใช้ "netplan" บน Ubuntu 18.04

คำสั่งไม่ยุ่งยาก แค่ 3 คำสั่ง ถ้าใครลง Ubuntu 18.04 ก็ข้าม "netplan generate" ได้เลย
sudo netplan generate

# แก้ไขไฟล์
sudo nano /etc/netplan/50-cloud-init.yaml

# สั่งให้ใช้ค่าใหม่
sudo netplan apply

ตัวอย่างที่ผมใช้เป็นประจำ
network:
    ethernets:
        ens3:
            addresses:
            - 10.1.4.137/24
            gateway4: 10.1.4.254
            nameservers:
                addresses:
                - 192.168.1.3
                - 8.8.8.8
            routes:
            - to: 10.0.0.0/8
              via: 0.0.0.0
        ens4:
            addresses:
            - 192.168.0.137/24
            gateway4: 192.168.0.254
            nameservers:
                addresses:
                - 192.168.1.3
                - 8.8.8.8
    version: 2

วันพุธที่ 28 สิงหาคม พ.ศ. 2562

Install PHPMyAdmin Manual

ก่อนที่จะทำการดาวโหลด์ PHPMyAdmin ไฟล์ลงมาติดตั้งเอง ให้เราทำการติดตั้งตัว Unzip ก่อน
sudo apt install unzip

ให้เราย้ายไปอยู่ที่โฟลเดอร์ /usr/share ก่อนดาวโหลด์ (ถ้าลง PHPMyAdmin ผ่าน apt ก็จะมาอยู่ที่นี่เหมือนกัน)
จากนั้นทำการดาวโหลด์ไฟล์ phpMyAdmin-4.9.0.1-all-languages.zip จากเว็บไซต์ https://phpmyadmin.net
cd /usr/share
sudo wget https://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.zip

# If Error Use This !
# sudo wget http://files.phpmyadmin.net/phpMyAdmin/4.9.0.1/phpMyAdmin-4.9.0.1-all-languages.zip

เสร็จแล้วแตกไฟล์ออกจาก zip และเปลี่ยนชื่อโฟลเดอร์เป็น phpmyadmin เพื่อให้ง่ายต่อการใช้งาน
แล้วทำการเปลี่ยนเจ้าของและสิทธิ์การใช้งาน
sudo unzip phpMyAdmin-4.9.0.1-all-languages.zip

sudo mv phpMyAdmin-4.9.0.1-all-languages.zip phpmyadmin
sudo rm phpMyAdmin-4.9.0.1-all-languages.zip

sudo chown -R www-data: phpmyadmin
sudo chmod -R 744 phpmyadmin

เปิดไฟล์ Config และแก้ไขจากไฟล์ตัวอย่างที่มีมาให้
sudo cp phpmyadmin/config.sample.inc.php phpmyadmin/config.inc.php
sudo nano phpmyadmin/config.inc.php

วันจันทร์ที่ 26 สิงหาคม พ.ศ. 2562

Install PHP5 and PHP7 on Ubuntu 18.04

การติดตั้ง PHP5 บน Ubuntu 18.04 นั้นเราไม่สามารถใช้ Package Repository ที่มากับ Ubuntu 18.04 ได้
อย่างตอนที่ผมลง Ubuntu 18.04 เราจะได้ PHP ที่เป็น เวอร์ชั่นค่อนข้างใหม่คือ PHP 7.2
เราเลยจำเป็นต้องเพิ่ม Package Repository อีกตัวเขาไปเพื่อให้เราสามารถติดตั้ง PHP5 ได้

ให้เราทำการเพิ่ม Repository "ppa:ondrej/php"

วันอาทิตย์ที่ 4 สิงหาคม พ.ศ. 2562

[Linux Container] - Container Device / Proxy Device

Proxy Device ! ใช้สำหรับการ Bind Port เพื่อให้เข้าไปยัง Container ได้ โดยเริ่มแรกที่เราใช้ Container นั้น
ตอนนั้นเรายังไม่รู้จัก เราก็ใช้ iptables ไปก่อน ก็ใช้งานได้นะ แต่ยังติดที่ว่า Port 21 กับ Port 22 ใช้ไม่ได้
และ iptables ตอนนั้นเราก็ยังไม่ได้ Save Config พอเครื่อง Server Restart ก็เจอปัญหาว่ามันลืมค่า

ตอนนี้เราจะมาดูกันว่า เวลาที่เราจะเปิดให้ข้างนอกเข้ามา Container ได้โดยใช้ Proxy Device นั้นทำยังไง
และจะลองทดสอบ Port ที่ใช้ทำ SSH ด้วยว่าใช้งานผ่าน Proxy Device ได้ไหม ? ปกติ Container เข้าไม่เปิด
การใช้งาน SSH เข้าไปใน Container

การเพิ่ม Proxy Device

ข้อมูลอ้างอิงจาก : https://lxd.readthedocs.io/en/latest/containers/
# listen ให้รอรับข้อมูลทางไหน ส่วนใหญ่ก็จะเป็น 0.0.0.0:80
# connect ให้ต่อเข้ากับช่องทางไหน ก็จะเป็น 127.0.0.1:80 
# type คือ Connection Type ก็พวก TCP, UDP

lxc config device add <container-name> <device-name> proxy \
  listen=<type>:<address>:&ltport> connect=<type>:<address>:<port>

# listen จะเป็น Port ของ Host
# connect จะเป็น Port ของ Container

# คำสั่งที่ใช้ในการลบ Config ออก
lxc config device remove <container-name> <device-name>

# ตัวอย่างการใช้
lxc config device add ubuntu-80 ubuntu-device-80 proxy \
  listen=tcp:0.0.0.0:80 connect=tcp:127.0.0.1:80

วันศุกร์ที่ 2 สิงหาคม พ.ศ. 2562

[Linux Container] - Storage Pool & LXC Storage

เรื่องของพื้นที่ เราจำได้ว่าครั้งนั้นเราทำพลาดที่ไม่ได้คิดว่า Storage นั้นจะโตขึ้นเรื่อยๆ และยังไม่ได้ศึกษาให้ดีก่อนการใช้งาน
และในที่สุดเราก็เจอปัญหาจากการที่ Container ใช้งาน Storage จนเต็มแล้วเราเองก็ขยายมันไม่เป็นเลยทำให้ต้องไปหาข้อมูลเพิ่ม
แล้วนำมาเขียนเก็บไว้ในตอนนี้ เรื่องของ Storage Pool กับ Linux Container

เราคิดว่า Storage Pool นั้นสำคัญเพราะเป็นพื้นที่ใช้งานหลักของ Container เลย และบางส่วนก็จะต่อออกไปที่ Host เพิ่มด้วย
Storage จะติดอยู่กับ Profile หนึ่งตัวในตอนที่เรา LXD Init ครั้งแรกนั้นเอง จากที่หาข้อมูล จะมีการแนะนำว่าให้ใช้ btrfs และ zsf

"Recommended setup : The two best options for use with LXD are ZFS and btrfs."
อ้างอิงจาก : https://lxd.readthedocs.io/en/latest/storage/
ข้อมูลเพิ่มเติม : https://medium.com/life-at-dek-d/


วันอาทิตย์ที่ 28 กรกฎาคม พ.ศ. 2562

ลองใช้งาน Jenkins ไว้ Backup ข้อมูลแบบอัตโนมัติ

Jenkins เป็น Automate ที่ช่วยทำเกี่ยวกับ Software เช่นการ Build, Test, Deliver แล้วก็ Deploy
แต่ความคิดที่จะใช้งานครั้งนี้คือเอามา Backup ระบบ ลองดูว่าจะสามารถใช้งานได้ดีไหม และเหมาะสมไหม



Install Jenkins

เริ่มด้วยการติดตั้งกันก่อน Jenkins ทำงานอยู่บน Java เราจำเป็นต้องติดตั้ง Java กันก่อน
ตอนนี้ผมใช้ OpenJDK 8 ในการรัน Jenkins | ข้อมูลจาก Jenkins - Getting Started
sudo apt install openjdk-8-jdk

wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
java -jar jenkins.war --httpPort=8080

# เราจะเห็นรหัส สำหรับใช้ในการ Login เพื่อเข้าไปทำการติดตั้งในหน้าเว็บต่อ

จากนั้นเข้าไปที่เครื่องโดยผ่าน Port 8080 ตามที่เรากำหนดไว้เพื่อทำตามขั้นต่อการติดตั้งต่อ
ให้เราใช้รหัสที่ได้จาก Console ตอนที่เราใช้คำสั่ง "java -jar jenkins.war --httpPort=8080"

วันศุกร์ที่ 26 กรกฎาคม พ.ศ. 2562

[Linux Container] - Basic Linux Container Command


รวมคำสั่งที่ใช้งานบ่อยๆ

คำสั่งที่ใช้ในการติดตั้ง

sudo snap install lxd
sudo lxd init
sudo usermod --append --groups lxd sarankon

การจัดการเกี่ยวกับ Container

# Create new container
lxc launch images:<alias-name> <container-name>
lxc launch images:alpine/3.10 alpine

# List the list of container 
lxc list 

# Show the info of container, *snapshot show here!
lxc info <container-name>

# Start and Stop container
lxc start <container-name>
lxc stop <container-name>

# Delete container
lxc delete <container-name>
lxc delete <container-name> --force

# Run command in container
lxc exec <container-name> -- <command>
# Run apt update command
lxc exec <container-name> -- apt update
# Use bash in container
lxc exec <container-name> -- bash

# Use default editor to edit file in container
lxc file edit <container-name>/<path/file.txt>

# Push file to container
lxc file push <file> <container-name>/<path>

# Create snapshot 
lxc snapshot <container-name> <snapshot-name>

# Restore snapshot
lxc restore <container-name> <snapshot-name>

# Delete snapshot
lxc delete <container-name>/<snapshot-name>

# Create container from snapshot
lxc copy <container-name>/<snapshot-name> <new-container-name>
# lxc start <container-name> // after create from snapshot

วันเสาร์ที่ 20 กรกฎาคม พ.ศ. 2562

Raspberry Pi Zero W กับการทำ Printer Server ด้วย CUPS

อยากได้ Printer ที่สั่งผ่าน WiFi ได้ ซึ่งเคยทำมานานแล้วครั้งหนึ่งแต่ตอนนั้นลง Driver ในตัว Pi เลยและสิ่งที่ไม่มีก็คือ Driver
ผ่านไปหลายปี ตอนนี้มี Pi Zero W อยู่สามตัวไม่ได้ทำอะไร ยังไม่ได้ทำเลยเอามาลองดูใหม่ว่าจะทำได้ไหมครั้งนี้
จากการ Search Google ก็พบกับคนที่ทำไว้แล้วก็เลยลองเข้าไปอ่านแล้วก็ทำตามเขาเลยครับ
ทำ Print Server ด้วย Raspberry Pi Zero W และขอขอบคุณเจ้าของบทความครับ

ปัญหาแรกที่เจอคือพยายาม Fix IP Address ของ WiFi ยังทำไม่ได้ ไม่รู้ว่าติดตรงไหน ขอข้ามไปละกันเดี๋ยวจะไม่ได้เริ่มสักที
***ตอนนี้ใช้ Fix IP ผ่านทาง Router แทน
# Update package และ ทำการ Install CUPS
sudo apt update
sudo apt install cups

# เราสามารถใช้คำสั่ง systemctl กับ cups ได้มี service ให้เหมือนกัน
# เช่น ดูสถานะของ cups ด้วยคำสั่ง sudo systemctl status cups

# แสดงข้อมูลของอุปกรณ์ด้วยคำสั่ง lpinfo
# lpinfo - show available devices or drivers

# sudo lpinfo -v
sudo lpinfo -v | grep usb:

# ข้อมูลอุปกรณ์ที่ต่อกับ Port USB ตามนี้ เราใช้ EPSON L360
direct usb://EPSON/L360%20Series?serial=5647444B3135373352&interface=1

# ทำการตั้งค่าอุปกรณ์โดนกำหนดชื่อ Destination และ URI ของ Printer เอาถึง Serials
# lpadmin - configure cups printers and classes
# sudo lpadmin -p {destination} -v {device-uri}

sudo lpadmin -p EPSONL360 -v usb://EPSON/L360%20Series?serial=5647444B3135373352

# จากนั้นดูข้อมูลสถานะของ Printer
# lpstat - print cups status information
# sudo lpstat -p {destination} -l
sudo lpstat -p EPSONL360 -l

# ปกติถ้าพึ่งใส่ข้อมูลจะเป็น Disable
printer EPSONL360 disable since Thu 18 Jul 2019 17:40:10 BST
        reason unknown

# ทำการ Enable Printer ด้วยคำสั่ง cupsenable
# cupsdisable, cupsenable - stop/start printers and classes
# sudo cupsenable {destination}
sudo cupsenable EPSONL360

# เสร็จแล้วลองดูข้อมูลเครื่อง Printer อีกครั้งด้วยคำสั่ง lpstat
sudo lpstat -p EPSONL360 -l

# ตอนนี้ Printer ของเราเป็น Enable แล้ว
printer EPSONL360 is idle.  Enable since Thu 18 Jul 2019 17:45:10 BST

วันอังคารที่ 2 กรกฎาคม พ.ศ. 2562

Error ที่เจอกับ PHPMyAdmin และวิธีแก้ไข

Warning in ./libraries/sql.lib.php#613

ตอนนี้ใช้ PHP Version 7.2.19 บน Ubuntu 18.04 โดย PHPMyAdmin เป็น Version 4.6.6deb5 แล้วเจอ Warning

Warning in ./libraries/sql.lib.php#613
count(): Parameter must be an array or an object that implements Countable

เสร็จแล้วลองเอาไปค้นหาใน Internet ดูว่าใครเจอบ้าง ได้วีธีการแก้ปัญหามา 2 วีธี
1. แก้ไขไฟล์ sql.lib.php หรือ 2. Upgrade PHPMyAdmin
เราใช้วิธีที่ 2 แก้ไขไฟล์เพราะอ่านแล้วทำง่ายกว่าลองดูก่อนถ้าไม่ได้ผลค่อยอัพ Version

วันศุกร์ที่ 10 พฤษภาคม พ.ศ. 2562

Install Apache Tomcat 8.5 on Ubuntu Server 18.04

# Search Package Apache Tomcat 8
sudo apt update
sudo apt search tomcat8*

# List
tomcat8/bionic-updates,bionic-security 8.5.39-1ubuntu1~18.04.1 all
  Apache Tomcat 8 - Servlet and JSP engine

tomcat8-admin/bionic-updates,bionic-security 8.5.39-1ubuntu1~18.04.1 all
  Apache Tomcat 8 - Servlet and JSP engine -- admin web applications

tomcat8-common/bionic-updates,bionic-security 8.5.39-1ubuntu1~18.04.1 all
  Apache Tomcat 8 - Servlet and JSP engine -- common files

tomcat8-docs/bionic-updates,bionic-security 8.5.39-1ubuntu1~18.04.1 all
  Apache Tomcat 8 - Servlet and JSP engine -- documentation

tomcat8-examples/bionic-updates,bionic-security 8.5.39-1ubuntu1~18.04.1 all
  Apache Tomcat 8 - Servlet and JSP engine -- example web applications

tomcat8-user/bionic-updates,bionic-security 8.5.39-1ubuntu1~18.04.1 all
  Apache Tomcat 8 - Servlet and JSP engine -- tools to create user instances

# Install Apache Tomcat 8, It will install [jre] and [tomcat8-common] with.
sudo apt install tomcat8

# Check Apache Tomcat 8 Status
sudo systemctl status tomcat8

# File Location
/var/lib/tomcat8/
/etc/tomcat8/

Check http://your-domain:8080 at your web browser

วันพุธที่ 8 พฤษภาคม พ.ศ. 2562

แนะนำ Git Extensions ใช้ Git ง่ายๆ ผ่าน GUI

การใช้งาน Git แต่เดิมใช้เป็น Command Line จนชินแล้ว แต่พอจะใช้ผ่าน SSH เลยต้องหาตัวช่วยเพื่อให้ใช้งานง่ายขึ้น
เข้าไปโหลดโปรแกรม 3 ตัวนี้เลยจ้า แนะนำให้ติดตั้งใหม่ ตั้งแต่ Git เลย Next ยาวเลยไม่ปรับอะไรทั้งนั้น
- https://git-scm.com/ ( version 2.21.0 64-bit)
- http://kdiff3.sourceforge.net/ ( version 0.9.98)
- https://gitextensions.github.io ( version 3.0.2)




การใช้ SSH กับ Git

วันจันทร์ที่ 15 เมษายน พ.ศ. 2562

Install MySQL 5.7 on Ubuntu 18.04

Install MySQL Server 5.7

การติดตั้ง MySQL Server 5.7

Reference: Install MySQL | Install phpMyAdmin
# Install MySQL Server
sudo apt update
sudo apt install mysql-server

# Check MySQL Status
sudo systemctl status mysql
# Initial Server
sudo mysql_secure_installation

Securing the MySQL server deployment.

Connecting to MySQL using a blank password.

VALIDATE PASSWORD PLUGIN can be used to test passwords
and improve security. It checks the strength of password
and allows the users to set only those passwords which are
secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:
Please set the password for root here.

New password:

Re-enter new password:
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

 ... skipping.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

 ... skipping.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

 ... skipping.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

 ... skipping.
All done!

วันศุกร์ที่ 12 เมษายน พ.ศ. 2562

Install PostgreSQL 11 on Ubuntu 18.04

การติดตั้ง PostgreSQL 11


*ถ้าไม่ต้องการติดตั้ง Version 11 จะลงตาม Version ที่มากับ Repository Linux ให้ข้ามไปตรง #Install PostgreSQL ได้เลยครับ

Official: PostgreSQL Installation
Reference: Install PostgreSQL, Install pgAdmin4, Getting Started
# Install PostgreSQL 
sudo apt update
sudo apt install wget gnupg2

Create the file /etc/apt/sources.list.d/pgdg.list and add repository
deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main
# Import repository signing key, then update package lists
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update

# Install PostgreSQL, ถ้าไม่ทำตามขั้นตอนข้างบนจะติดตั้งตาม Version ที่มากับ Repository ของ Linux
sudo apt install postgresql postgresql-contrib

# Check PostgreSQL Status
sudo systemctl status postgresql

ทำการทดสอบโดยใช้ user postgres
# Connect to PostgreSQL
sudo su - postgres
psql
-- Show your connection information

\connifo
-- You are connected to database "postgres" as user "postgres" 
-- via socket in "/var/run/postgresql" at port "5432".

-- Show help
\?

-- Quit
\q

วันพฤหัสบดีที่ 11 เมษายน พ.ศ. 2562

Knowage 6.2 Config Datasource (JDBC)

Oracle 11g

Stop Knowage and Download Oracle JDBC Driver
Copy file ojdbc6.jar to library directory and Start Knowage
Dialect: Oracle
Read Only: Read Only
Type: JDBC

URL: jdbc:oracle:thin:@//host:port/servicename
Username: username
Password: password

Driver: oracle.jdbc.driver.OracleDriver



PostgreSQL 11

!! Please set your PostgreSQL 11 allow remote connection
Stop Knowage and Download PostgreSQL JDBC Driver
Copy file postgresql-42.2.5.jar to library directory and Start Knowage
Dialect: PostgreSQL
Read Only: Read Only
Type: JDBC

URL: jdbc:postgresql://host:port/databasename
Username: username
Password: password

Driver: org.postgresql.Driver



MySQL 5.7.25

!! Please set your MySQL 5.7.25 allow remote connection
Stop Knowage and Download MySQL JDBC Driver (Connector J)
Copy file mysql-connector-java-8.0.15.jar to library directory and Start Knowage
* By default MySQL JDBC Driver is already have in library directory please check !
Dialect: MySQL/MariaDB
Read Only: Read Only
Type: JDBC

URL: jdbc:mysql://host:port/databasename
Username: username
Password: password

Driver: com.mysql.jdbc.Driver

วันเสาร์ที่ 6 เมษายน พ.ศ. 2562

Knowage 6.2 Installer in Ubuntu 18.04

I will follow this step for make sure it can work correctly


This video use Knowage 6.2.1 on Ubuntu 18 and Use Oracle JDK 8 and MySQL Server 5.7

Step 1. Install Java / Step 2. Configure System Variables

sudo apt install software-properties-common
sudo add-apt-repository ppa:webupd8team/java
sudo apt update

sudo apt install oracle-java8-installer
sudo apt install oracle-java8-set-default

# Setup JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export PATH=$JAVA_HOME/bin:$PATH

# Verify JDK is Installed
java -version

# java version "1.8.0_201"
# Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
# Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
Reference: Command [add-apt-repository] Missing | Install Java 8 | Setup System Variables

[Linux Container] - How to use LXC Snapshot


คำสั่งที่เกี่ยวข้องกับ lxc snapshot จะมี lxc restore, lxc rename, lxc delete, lxc info
Usage:
  lxc [command]
 
Available Commands:
  delete      Delete containers and snapshots
  info        Show container or server information
  remote      Manage the list of remote servers
  rename      Rename containers and snapshots
  restore     Restore containers from snapshots
  snapshot    Create container snapshots

วันศุกร์ที่ 5 เมษายน พ.ศ. 2562

[Linux Container] - How to use LXC Network


ใช้คำสั่ง lxc network เราจะเห็นว่ามีคำสั่งอะไรบ้างให้เราใช้งาน
sarankon@ubuntu:~$ lxc network

Description:
  Manage and attach containers to networks

Usage:
  lxc network [command]

Available Commands:
  attach         Attach network interfaces to containers
  attach-profile Attach network interfaces to profiles
  create         Create new networks
  delete         Delete networks
  detach         Detach network interfaces from containers
  detach-profile Detach network interfaces from profiles
  edit           Edit network configurations as YAML
  get            Get values for network configuration keys
  list           List available networks
  list-leases    List DHCP leases
  rename         Rename networks
  set            Set network configuration keys
  show           Show network configurations
  unset          Unset network configuration keys

Global Flags:
      --debug         Show all debug messages
      --force-local   Force using the local unix socket
  -h, --help          Print help
  -v, --verbose       Show all information messages
      --version       Print version number

Use "lxc network [command] --help" for more information about a command.

วันเสาร์ที่ 2 มีนาคม พ.ศ. 2562

django==1.10 ตอน 2

การสร้าง Model

แก้ไขไฟล์ models.py ที่ Application
from django.db import models

# Create your models here.
class Topic(models.Model):
   top_name = models.CharField(max_length=264, unique=True)

   def __str__(self):
      return self.top_name

class Webpage(models.Model):
   topic = models.ForeignKey(Topic)
   name = models.CharField(max_length=264, unique=True)
   url = models.URLField(unique=True)

   def __str__(self):
      return self.name

class AccessRecord(models.Model):
   name = models.ForeignKey(Webpage)
   date = models.DateField()

   def __str__(self):
      return str(self.date)

# return value on admin interface

วันพฤหัสบดีที่ 28 กุมภาพันธ์ พ.ศ. 2562

django==1.10 ตอน 1

ติดตั้ง Django Framework

pip install django==1.10

สร้าง Django Project

# django-admin startproject [project-name]
django-admin startproject first_project

วันอังคารที่ 26 กุมภาพันธ์ พ.ศ. 2562

ติดตั้ง XFCE4 และ VNC4Server บน Ubuntu 18.04

Desktop GUI ใช้ xfce4
VNC Server ใช้ vnc4server
sudo apt install xfce4 xfce4-goodies xfonts-thai
sudo apt install vnc4server

ก่อนใช้งานครั้งแรกเราต้องสร้างรหัสผ่านสำหรับเชื่อมต่อ VNC Server เสร็จแล้วสั่งให้ VNC Server ทำงานหนึ่งครั้ง
เสร็จแล้วเราจะได้ไฟล์ xstartup ขึ้นมา จากนั้นทำการปิด VNC Server แล้วเข้าไป แก้ไขไฟล์ xstartup ใน ~/.vnc/xstartup
vncpasswd
vncserver
vncserver -kill :1

nano ~/.vnc/xstartup
#!/bin/bash
startxfce4 &

เมื่อทำการแก้ไขค่าเรียบร้อยแล้วให้ทำการ Save แล้วสั่งให้ VNC Server ทำงานอีกครั้ง
พิมพ์ ss -ltn เพื่อตรวจสอบว่ามี Port 5901 เปิดใช้งานอยู่ แสดงว่า VNC Server ทำงานแล้ว
vncserver
ss -ltn

วันศุกร์ที่ 22 กุมภาพันธ์ พ.ศ. 2562

Python3 กับ Virtual Environment / PIP

ติดตั้ง "python3" และ "python3-venv" ก่อนใช้งาน
sudo apt install python3 python3-venv

การสร้าง Virtual Enviroment
python3 -m venv [enviroment-name]

การ Activate ให้เราสั่ง source /bin/activate และ Deactivate เมื่ออยู่ใน venv แล้วให้พิมพ์ deactivate
source (venv)/bin/activate
decactivate

วันพุธที่ 16 มกราคม พ.ศ. 2562

[Ubuntu] การใช้งาน Screen และ Terminal Multiplexer

ปกติแล้วเวลาเราทำการ Secure Shell เข้าไปเพื่อทำงานบ้างอย่าง พอเราออกมา Process พวกนั้นก็จะถูก Terminate ไปด้วย
หากเราต้องการจะให้มันทำงานต่อไปเรื่อยๆ แม้เราจะออกมาแล้วจะทำยังไง ผมได้ไปค้นหาข้อมูลดูก็เจอ 2 ตัวนี้คือ screen และ tmux
เท่าที่ผมรู้ตัว screen เป็นตัวเก่ามีมานานแล้ว พอลองไปเล่นที่เครื่องดูก็พบว่าติดตั้งไว้ให้อยู่แล้ว แต่พอหัดใช้สักพักรู้สึกงงๆ
ผมเลยลองเล่นอีกตัวที่เขาแนะนำมาคือ tmux ชื่อเต็มๆ คือ Terminal Multiplexer ครับ