Thursday, September 24, 2020

ลบ cert-name ของ Let's Encrypt by Certbot

  • ประเด็นมีอยู่ว่า
  • ลองพยายามมั่วทำ wildcard certificate ของ Let's Encrypt ด้วยคำสั่งประมาณนี้

$ sudo certbot certonly --cert-name example.com

$ sudo certbot certonly --cert-name www.example.com

$ sudo certbot certonly --cert-name *.example.com

  • ที่นี้ตอน renew มันก็สร้าง Cer สำหรับ 3 คอนฟิกนี้เลย ซึ่งเราต้องการใช้แค่ cert-name ตัว root ตัวเดียวคือ example.com
  • เราจะลบได้โดย

$ sudo certbot delete --cert-name www.example.com

$ sudo certbot delete --cert-name *.example.com

เพิ่มเติม

  • เมื่อลบแล้วมีปัญหาตอน 

sudo certbot renew --dry-run

  • แล้วมันขึ้น error ว่าประมาณว่าไม่พบพาธเมื่อ excute /etc/apache2/site-available/example.com.conf
  • แก้ปัญหาโดยแก้ไขคอนฟิกไฟล์นั้นเรื่องพาธให้ถูกต้องจบ

Ref

  • https://certbot.eff.org/docs/using.html#changing-a-certificate-s-domains

เพิ่ม Virtual Host และ เพิ่ม new domain name สำหรับ Let's Encrypt Certificate

Env

  • Ubuntu 18.04
  • Apache
  • Let's Encrypt Certificate by Certbot

เรื่องมีอยู่ว่า

  • คือตอนนี้เราใช้ https ของ Let's Encrypt อยู่แล้วของ root domain name
  • จะเพิ่ม sub domain ให้ใช้ https โดยให้ Cer ของ Let's Encrypt อีกสักตัว
  • แล้วไปสร้าง Virtual Host รองรับและตั้งค่าให้ใช้ https ได้ด้วย โดยชี้ไปพาธใหม่เลยของ sub domain นี้

Step

  • เพิ่ม sub domain ให้คอนฟิกสำหรับร้องขอ Let's Encrypt Cer โดย

$ sudo certbot certonly --cert-name xxx.go.th -d xxx.go.th,www.xxx.go.th,mail.xxx.go.th,api.xxx.go.th

-------------------------------------------------------------------------

How would you like to authenticate with the ACME CA? เลือก

1: Apache Web Server plugin - Beta (apache)

Did you intend to make this change?

(U)pdate cert/(C)ancel: u

-------------------------------------------------------------------------

  • Update cert อันใหม่สำหรับ vhost เรา
  • ซึ่งคำสั่งนี้ มี option dry-run เราจะได้ Cer ใหม่จาก Let's Encrypt เลย

$ sudo certbot renew --dry-run

  • สร้าง Virtual Host สำหรับ Sub domain อันใหม่

$ sudo mkdir /var/www/api.xxx.go.th/html

$ sudo chmod -R 775 /var/www/api.xx.go.th

$ sudo nano /var/www/api.xxx.go.th/html/index.html

  • เพิ่มโค้ดในไฟล์ index.html สำหรับทดสอบ

--------

Hello new domain name

--------

  • คัดลองไฟล์  apache config ของ domain name ปัจจุบัน หรือ จะเอาจาก default ก้ได้เหมือนกัน

sudo cp /etc/apache2/site-available/xxx.go.th.conf /etc/apache2/site-available/api.xxx.go.th.conf

sudo cp /etc/apache2/site-available/xxx.go.th-le-ssl.conf /etc/apache2/site-available/api.xxx.go.th-le-ssl.conf

  • จากนั้นแก้ไขค่าใน api.xxx.go.th.conf, api.xxx.go.th-le-ssl.conf เช่น ServerName หรือ พาธต่างๆ
  • จากนั้นเปิดใช้งาน vhost โดย

$ sudo a2ensite api.xxx.go.th

$ sudo a2ensite api.xxx.go.th-le-ssl

  • อย่าลืมตั้งค่า dns ให้ api.xxx.go.th ชี้ไอพีให้ถูกต้อง
  • ทดสอบเข้าเว็บ http://api.xxx.go.th , https://api.xxx.go.th

Ref
  • https://www.digitalocean.com/community/tutorials/how-to-set-up-apache-virtual-hosts-on-ubuntu-18-04-quickstart
  • https://www.digitalocean.com/community/tutorials/how-to-create-a-self-signed-ssl-certificate-for-apache-in-ubuntu-18-04
  • https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-18-04
  • https://certbot.eff.org/docs/using.html#changing-a-certificate-s-domains

Monday, September 21, 2020

ลองเขียน RESTful API ด้วย Python

Env

  • Ubuntu 18.04
  • Python3

Step

$ pip3 install flask

  • สร้างไฟล์เพื่อแสดงคำว่า hello word ผ่าน url http://localhost:8080

$ touch hello.py

  • รันโปรแกรมของเรา

$ python3 hello.py

  • ทดสอบใช้ crul

$ curl http://localhost:8080/

  • เราจะได้ผลลัพธ์ Hello world แสดงออกมา
  • ทดสอบ Accessing Data Using GET in REST API:

$ touch get.py

  • รันโปรแกรม
$ python3 get.py
  • ทดสอบเข้าเปิด browser แล้วเข้า http://localhost:8080/accounts
  • ผลลัพธ์ มันจะแสดง json data ออกมาประมาณนี้
  • อีกตัวอย่าง รับค่าผ่าน get เพือแสดงผลตามเงื่อนไข
  • รันโปรแกรม
  • รัน url นี้ 
$ curl http://127.0.0.1:8080/account/1
$ curl http://127.0.0.1:8080/account/2
  • ตัวอย่างสุดท้ายจาก Adding Data Using POST in REST API:

  • แล้วสั่งดูข้อมูลที่เราเพิ่มด้วย POST มันเข้ามั้ยโดย
  • http://localhost:8080/accounts

  •  ภาพประกอบทั้งหมด เอามาจากอ้างอิง อ่านไม่รู้เรื่อง ไปดูที่อ้างอิงได้เลยคับ

Ref

  • https://linuxhint.com/rest_api_python/

Rewrite URLs with mod_rewrite for Apache on Ubuntu 18.04

  • เค้ามีมาตั้งนานมากแล้วพึ่งหัดทำ RESTful service จริงๆ จังๆ ก็วันนี้
  • server เป็น ubuntu 18.04 จะทำด้วย php
  • แต่ติดปัญหาเรื่อง URL มันไม่สวยตามรูปแบบ RESTful 
  • ดูตามอ้างอิงแล้วลองมั่วๆ เอานิดหน่อยก็ได้แล้ว url rewrite
  • ในที่นี้เรามี LAMP เรียบร้อยร้อยแล้ว

Step

  • เปิดใช้งาน mod_rewrite

$ sudo a2enmod rewrite

$ /etc/init.d/apache2 restart

  • ต่อมาถ้าเราใช้ config เริ่มต้นจะอยู่ที่

$ sudo nano /etc/apache2/sites-available/000-default.conf

  • เพิ่ม AllowOverride All และ Require all granted ไปไว้ใน tag ดังตัวอย่าง

  • ตัวอย่างนี้ใช้ https ของ vhost

  • หรือถ้าเราจะใช้ใน alias เราก็เอาแค่ 


  • เราตั้งค่าด้านบนไปที่พาธใหนก็ไปเพิ่ม .htaccess ตามพาธนั้นๆ
  • เช่นเราต้องการเปลี่ยน https://myhost.com/it/jui.html (เราต้องสร้าง jui.html ไว้ตามพาธ /var/xxx/it/jui.html)
  • เราจะเปลี่ยนให้เข้าเป็น https://myhost.com/it/jui
  • ให้เราสร้าง /var/xxx/it/.htaccess แล้วเพิ่ม

RewriteEngine on

RewriteRule ^jui$ jui.html [NC]

  • เปลี่ยนสิทธิ์ให้อย่างน้อย read ได้

$ sudo chmod 444 /var/xxx/it/.htaccess

  • อีกตัวอย่างของ .htaccess เราจะแสดงค่า จาก query string เช่น https://myhost.com/it/jui.php?id=2
  • เปลี่ยนให้เป็น https://myhost.com/it/jui/2
  • ตัว .htaccess ภายใต้พาธนี้จะเป็นประมาณนี้

RewriteEngine on

RewriteRule ^jui$ juuier.php [NC]


RewriteCond %{REQUEST_FILENAME} !-f

RewriteCond %{REQUEST_FILENAME} !-d

RewriteRule ^/?jui/(.*?)/?$ /jui.php?id=$1 [L]

RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /jui\.php\?id=([^\&\ ]+)

RewriteRule ^/?jui\.php$ /jui/%1? [L,R=301]

Note
  • ดูจากอ้างอิงแล้วใส่แค่ AllowOverride All โดยไม่ต้องใส่ Require all granted
  • ไว้ภายใต้ root tag หรือ alias tag ก็น่าจะเพียงพอสำหรับเปิดใช้งาน mod_rewrite แล้วคับ
Ref

  • https://www.tutsmake.com/how-to-mod_rewrite-enable-in-apache-ubuntu-18-04/
  • https://www.digitalocean.com/community/tutorials/how-to-rewrite-urls-with-mod_rewrite-for-apache-on-ubuntu-18-04
  • https://hostadvice.com/how-to/how-to-enable-apache-mod_rewrite-on-an-ubuntu-18-04-vps-or-dedicated-server/
  • https://begamatan.site/2/how-to-enable-mod-rewrite-on-ubuntu-1804-lts
  • https://tecadmin.net/enable-apache-mod-rewrite-module-in-ubuntu-linuxmint/
  • https://www.taniarascia.com/rewrite-query-string-to-path-with-htaccess/

Popular Posts