Menu

Thursday, December 26, 2019

[Laravel - Blade Template] การใช้งาน Loops ประเภทต่างๆ
[Laravel - Blade Template] How to Use Each Loop Types

For Loop

@for ($i = 0; $i < 10; $i++)
    The current value is {{ $i }}
@endfor

ForEach Loop

@foreach ($users as $user)
    This is user {{ $user->name }}
@endforeach

ForElse Loop - ForEach with handling for empty inputs

@forelse ($users as $user)
    This is user {{ $user->name }}
@empty
    No users
@endforelse

[Laravel - Blade Template] การตรวจสอบเงื่อนไขใน Blade Template
[Laravel - Blade Template] How to Use Conditional Statement

If Statement

@if (count($record) > 0)

@elseif (count($record) < 0)

@else

@endif

Unless Statement

@unless (count($record)< 0)

@endunless

[Laravel - Blade Template] การตรวจสอบการเข้าใช้งานและการตรวจสอบสิทธิ์การใช้งาน
[Laravel - Blade Template] Authentication and Authorization

การตรวจสอบการเข้าใช้งาน 

มี 2 แบบดังนี้
  • ตรวจสอบว่า user ได้เข้าสู่ระบบแล้ว
  • @auth
    
    @else
    
    @endauth
    
  • ตรวจสอบว่า user ยังไม่ได้เข้าสู่ระบบแล้ว
  • @guest
    
    @else
    
    @endguest
    

[Laravel - Blade Template] การสร้าง Layout และการ Extend Layout
[Laravel - Blade Template] How to Create and Extend Layout

การสร้าง Layout

การสร้าง Layout เป็นการสร้างเว็บเพจด้วย HTML เช่นเดียวกับหน้าเว็บทั่วไป แต่แทนค่าส่วนต่างๆที่จะใช้โดย child view ด้วย directives ซึ่งมี directives ที่เกี่ยวกับ Layout ดังนี้
  • @section ใช้ประกาศ section ในส่วนของเนื้อหา
  • @show ใช้ประกาศ section และใช้แสดงเนื้อหาของ section นั้น
  • @yield ใช้แสดงเนื้อหาของ section ที่ระบุ
ตัวอย่าง เช่น
@section('sidebar')
    This is the master sidebar.
@show

<div class="container">
    @yield('content')
</div>

Wednesday, December 18, 2019

[Docker] การใช้ Docker สำหรับทำ Host เว็บไซต์หลายเว็บบน server เครื่องเดียว
[Docker] How to Use Docker to Host Multiple Websites in One Server

การใช้ Server เพียงเครื่องเดียวในการ host หลายเว็บไซต์ เราจำเป็นต้องใช้ Reverse Proxy

ในที่นี้เราจะใช้ NGINX Proxy ในการจัดการ Proxy ให้เรา โดยมีวิธีการติดตั้งดังนี้
  1. สร้าง docker network
  2. docker network create nginx-proxy
    
  3. สร้างไฟล์ docker-compose.yml โดยใช้ไฟล์ตั้งต้นจาก https://github.com/jwilder/nginx-proxy/blob/master/docker-compose.yml
  4. เพิ่ม code ข้างล่าง ใน docker-compose.yml ของ nginx-proxy
  5. networks:
      default:
        external:
          name: nginx-proxy
    
  6. รัน nginx-proxy ด้วยคำสั่งดังนี้
  7. docker-compose up -d
    

[Docker] การ Deploy Wordpress ด้วย Docker
[Docker] How to Deploy Wordpress with Docker

ขั้นตอนในการสร้าง docker-compose.yml สามารถอ่านได้ที่ Quickstart: Compose and WordPress

เมื่อสร้าง docker-compose.yml เสร็จแล้ว ให้แก้ไขไฟล์ดังนี้
  1. ให้แก้ volumes ใน service db ดังนี้ เพื่อให้เก็บ mysql data ใน folder เดียวกับ docker-compose.yml
  2. volumes:
        - ./db_data:/var/lib/mysql
    
  3. ให้เพิ่ม volumes ใน service wordpress ดังนี้ เพื่อให้เก็บข้อมูล web ใน folder เดียวกับ docker-compose.yml
  4. volumes:
        - ./html:/var/www/html    
    
ไฟล์ docker-compose.yml หลังจากแก้ไขแล้ว จะเป็นดังนี้
version: '3.3'

services:
   db:
     image: mysql:5.7
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: somewordpress
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: wordpress

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     volumes:
       - ./html:/var/www/html    
     ports:
       - "8000:80"
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: wordpress
       WORDPRESS_DB_NAME: wordpress
หลังจากนั้นให้ build project ตามเว็บข้างต้นได้เลย

หมายเหตุ เพื่อความปลอดภัย ควรเปลี่ยน user และ password ต่างๆในส่วนของ environment ให้ต่างไปจาก code ตัวอย่าง

Sunday, December 15, 2019

[System] การตั้งค่าการเข้าใช้งาน โดยใช้ SSH Key บน Linux Server
[System] How To Configure SSH Key-Based Authentication on a Linux Server

สมมติว่า เรามี id_rsa.pub เป็น Public Key เรามีวิธีตั้งค่าการเข้าใช้งานดังนี้
  1. คัดลองข้อมูล key ในไฟล์ id_rsa.pub 
  2. Remote เข้าเครื่อง Server ด้วย user ที่มีสิทธิ์ root
  3. เปิดไฟล์ ~/.ssh/authorized_keys
  4. นำข้อมูล key จากข้อ 1 ไปเพิ่มต่อจาก key ที่มีอยู่ แล้วทำการบันทึก

[Security] การสร้าง SSH Key ใหม่
[Security] How to Generate New SSH Key

  1. เปิด Git Bash หรือ PowerShell
  2. รันคำสั่งดังนี้
  3. ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
  4. เมื่อขึ้น Enter a file in which to save the key สามารถกด Enter ได้เลย ถ้าต้องการบันทึกไฟล์ตาม path ที่แสดง
  5. เมื่อขึ้น Enter passphrase สามารถกด Enter ได้เลย ถ้าไม่ต้องการระบุ passphrase
ตัวอย่างผลการรันคำสั่งเป็นตามด้านล่าง
เมื่อรันคำสั่งสร้าง SSH Key จบแล้ว จะมีไฟล์เกิดขึ้นที่ตาม path ที่เรากำหนดในข้อ 3 ดังตัวอย่างข้างล่าง

Wednesday, December 11, 2019

[Laravel - Package] วิธีการใช้งาน Laravel Modules
[Laravel - Package] How to Use Laravel Modules

Modules

การสร้าง Module ใหม่

php artisan module:make module_name
ยกตัวอย่าง เช่น
php artisan module:make Projects

การตั้ง namespace ของ Class

namespace namespace_name\module_name\Http\Controllers;
ยกตัวอย่าง เช่น
namespace Modules\Projects\Http\Controllers;

[Laravel - Blade Template] การนำเข้า Template อื่นพร้อมกับกำหนด Parameter สำหรับ Template นั้น
[Laravel - Blade Template] How to Include Other Template with Parameters

โดยปกติแล้ว เวลาเราต้องการเพิ่ม template อื่นใน template หลักของเรา เราจะใช้โค้ดดังนี้
@include('menu.index')
Template ดังกล่าวถูกทำขึ้น เพื่อนำเข้าไปใช้ประโยชน์ในหลาย template หลัก เช่น template ของส่วนเมนูที่ต้องนำไปเพิ่มเข้าทุก template ที่ต้องการแสดงส่วนของเมนู

แต่ในบางครั้ง เราต้องการส่ง parameter เข้าไปยัง template ดังกล่าวด้วย เช่น การกำหนดว่า template หลักที่เพิ่ม template นั้นๆเข้ามาเป็น template เกี่ยวกับอะไร เพื่อแสดงเมนูในส่วนที่เกี่ยวข้องแตกต่างจากส่วนอื่น เป็นต้น เราสามารถใช้โค้ดดังนี้
@include('menu.index', ['group'=> 'users'])
จากตัวอย่าง เราส่ง parameter ชื่อ group เข้าไปยัง template menu.index ทำให้ใน template ดังกล่าว เราสามารถใช้ตัวแปร $group ได้

[Ubuntu] วิธีการเพิ่มผู้ใช้งานใหม่และกำหนดให้เข้าใช้งานผ่าน SSH บน Ubuntu
[Ubuntu] How to Add New User and Set to Login by SSH on Ubuntu

  1. เพิ่มผู้ใช้งานในระบบ
  2. adduser <username>
  3. แก้ไขไฟล์ config สำหรับ SSH
  4. vim /etc/ssh/sshd_config
  5. ตั้งค่าอนุญาตให้ Login ด้วย password ได้
  6. # Change to no to disable tunnelled clear text passwords
    PasswordAuthentication yes
  7. กำหนด User ที่อนุญาตให้ login ผ่าน SSH ได้ (จะกำหนดหรือไม่ก็ได้)
  8. AllowUsers <username>
    คำเตือน!!! กรณีที่ตั้งค่า AllowUsers และต้องการให้ root สามารถ login ได้จำเป็นต้องใส่ root ในส่วนของ username ด้วย
    AllowUsers root userA
  9. กำหนด User ที่ไม่อนุญาตให้ login ผ่าน SSH ได้ (จะกำหนดหรือไม่ก็ได้)
  10. DenyUsers <username>
  11. Restart SSH service
  12. service ssh reload
หมายเหตุ อ่าน config เพิ่มเติมของ SSH ได้ที่ FreeBSD Manual Pages - sshd_config

Friday, December 6, 2019

[Security] การเข้ารหัสและถอดรหัสไฟล์โดยใช้ Public และ Private Keys
[Security] File Encryption and Decryption by Using Public and Private Keys


สมมติว่า มีไฟล์ที่เกี่ยวข้องดังนี้
  • key.pem เป็นไฟล์ Private key
  • pub.pem เป็นไฟล์ Public key
  • data.txt เป็นไฟล์ข้อความที่ต้องการเข้ารหัส
หมายเหตุ กรณีที่ยังไม่มีไฟล์ key.pem และ pub.pem อ่านวิธีสร้างได้ที่ การสร้าง Private Key และ Public Key ด้วย OpenSSL

[Bash Script] วิธีการใช้ Environment Variables จากไฟล์ .env ใน Bash Script
[Bash Script] How to Use Environment Variables from .env File in Bash Script

สมมติว่า Bash script ที่เราจะกำลังเขียนใหม่อยู่ใน folder เดียวกับไฟล์ .env และไฟล์ .env มีข้อมูลดังนี้
DOMAIN="code2now.com"
เราสามารถเขียน script ของเรา เพื่อใช้งานข้อมูลในไฟล์ .env ดังนี้
# Set allexport option 
set -a
. ./.env
set +a

echo $DOMAIN
คำอธิบายเพิ่มเติม

set -a และ set +a เป็นการเปิดและปิด feature ที่ทำให้ตัวแปรที่ถูกประกาศระหว่าง 2 บรรทัดนี้ ถูก export เป็น environment variable

. ./.env เป็นการโหลด source จากไฟล์ .env

echo $DOMAIN เป็นตัวอย่างการใช้งาน environment variable จากไฟล์ .env

[Security] การสร้าง Private Key และ Public Key ด้วย OpenSSL
[Security] How to Create Private Key and Public Key with OpenSSL


สมมติว่า ได้ติดตั้ง OpenSSL ไว้ภายในเครื่องแล้ว และเราต้องการสร้าง Private key ชื่อ key.pem และ Public key ชื่อ pub.pem

วิธีการสร้าง Private key และ Public key เป็นดังนี้
  1. สร้าง Private key โดยรันคำสั่งดังนี้
  2. openssl genrsa -out key.pem 1024
    
  3. เรียกดูข้อมูล Private key ที่ถูกสร้างขึ้นด้วยคำสั่งดังนี้
  4. openssl rsa -in key.pem -text -noout
    
  5. สร้าง Public key จาก Private key ที่เพิ่งสร้าง โดยรันคำสั่งดังนี้
  6. openssl rsa -in key.pem -pubout -out pub.pem
    
  7. เรียกดูข้อมูล Public key ที่ถูกสร้างขึ้นด้วยคำสั่งดังนี้
  8. openssl rsa -in pub.pem -pubin -text -noout
    

[Security] การติดตั้ง OpenSSL บน Windows
[Security] OpenSSL Installation on Windows


OpenSSL เป็นเครื่องมือสำหรับ Transport Layer Security (TLS) และ Secure Sockets Layer (SSL) protocols

วิธีการติดตั้ง

  1. Download OpenSSL installer (Win64 OpenSSL v1.1.1d Light) จาก https://slproweb.com/products/Win32OpenSSL.html 
  2. ติดตั้งโปรแกรมที่ C:\Program Files\OpenSSL-Win64
  3. เพิ่มค่า Path ใน Environment variable ด้วย C:\Program Files\OpenSSL-Win64\bin

วิธีการทดสอบ

  1. เปิด Windows PowerShell
  2. รันคำสั่ง openssl

Tuesday, December 3, 2019

[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Debugbar
[Laravel - Package] How to Install and Config Laravel Debugbar

Laravel Debugbar เป็น package ที่รวม PHP Debug Bar เข้ากับ Laravel เพื่อใช้แสดงข้อมูลจากส่วนต่างๆของ Application

วิธีการติดตั้ง

  1. สั่งติดตั้ง Laravel Modules package
  2. composer require barryvdh/laravel-debugbar --dev
  3. สร้างไฟล์ config ของ package ใน project
  4. php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"
    

[Laravel - Package] วิธีการติดตั้งและตั้งค่า Laravel Modules
[Laravel - Package] How to Install and Config Laravel Modules

Laravel Modules เป็น package ที่สร้างขึ้น เพื่อจัดการ Laravel application ที่มีขนาดใหญ่ โดยการแบ่งเป็น module ย่อยๆ

วิธีการติดตั้ง

  1. สั่งติดตั้ง Laravel Modules package
  2. composer require nwidart/laravel-modules
  3. สร้างไฟล์ config ของ package ใน project
  4. php artisan vendor:publish --provider="Nwidart\Modules\LaravelModulesServiceProvider"