Tag: business

  • ทำความรู้จัก n8n: ระบบ Workflow Automation

    ทำความรู้จัก n8n: ระบบ Workflow Automation

    ตั้งแต่ช่วงต้นปีที่ผ่านมา ผมเชื่อว่าทุกคนต้องเคยเลื่อนผ่าน ไม่ว่าจะเป็น Youtube Short, Facebook Reel , Instragram หรือ เจ้าแม่ short video อย่าง Tiktok ผมเชื่อว่าทุกคนต้องเคยเห็นคลิปวีดิโอที่ทำมาจาก AI ต่างๆนานา อย่างแน่นอนใช่ไหมครับ

    ด้วยความสงสัย และ ใคร่รู้ว่า เอ้ย คนพวกนี้เขาทำกันยังไงนะ ละแบบเขามาโพสต่อเนื่องกันได้ทุกวี่ทุกวันเลยหรอ ละแบบ แต่ละคลิปก็ดูไม่ค่อยซ้ำกันเลยคิดได้ไงนะ

    ด้วยเหตุนี้ผมจึงตัดสินใจที่ลองหาข้อมูล ละก็ไปเจอว่า เออ มันมี Tools ตัวหนึ่งที่เอาไว้ทำ Workflow Automation ชื่อ n8n (เอน-เอ็ท-เอน) นั้นเอง

    ผมจึงหยิบเจ้าซอฟแวร์ตัวเนี้ย ไหนมาลองเล่นบ้างสิ ไปๆมาๆ ก็รู้สึกว่า มันเป็น Low Code ที่สะดวกมากกกกก และสามารถเชื่อมต่อกับโลกอินเตอร์เน็ตได้อย่างไร้ขีดจำกัดเลยทีเดียว

    และมันก็ทำให้ผมสามารถนำไปประยุกต์ใช้กับงานราชการได้อย่างดีเยี่ยมเลยละครับ ระบบงานที่ขึ้นชื่อเรื่องความเยอะ และ ต้องลีนยิ่งกว่า Startup เสียอีก 555+

    เนื้อหาในบทความนี้ผมจะมาเล่า และ อธิบายว่า n8n คืออะไรแล้วมันดียังไงกันครับ และแถมด้วยการพาดู Workflow แบบ basic ที่ใครๆก็สามารถนำไปลองทำได้

    Table of Content

    1. ทำความรู้จัก N8N
    2. ทำไม n8n ถึงเหมาะกับงานราชการ
    3. n8n ให้บริการรูปแบบไหนบ้าง ( Cloud & Self-hosted )
    4. ข้อควรระวังในการใช้งานข้อมูล
    5. มาลองติดตั้ง n8n กันเถ๊อะ
    6. ทดลองทำ Workflow ง่ายๆ 1 อัน
    7. บทสรุป

    1. ทำความรู้จัก n8n

    n8n (เอ็น-เอท-เอ็น) เป็นระบบให้บริการทางด้านซอฟแวร์สำหรับการทำกระบวนการอัตโนมัติ (Workflow Automation) ที่ผสมผสานความสามารถของ AI กับกระบวนการทางด้านธุรกิจได้อย่างลงตัว

    ด้วยความที่ซอฟแวร์ไม่ต้องพึ่งพาทักษะในด้านการเขียนโปรแกรมมากนัก ทำให้รอยต่อระหว่างฝั่งธุรกิจ (business) และ ฝั่งนักพัฒนา (developer) นั้นแคบลง และช่วยให้เกิดความหยืดยุ่นเป็นอย่างมากกับบริษัท

    บน n8n นั้น มีสิ่งที่เรียกว่า Nodes เพื่อใช้ในการเชื่อมโยงแพลทฟอร์มอื่นๆมากกว่า 500 รายการซึ่งจะช่วยให้คุณสามารถเข้าถึงและเชื่อมโยงสิ่งๆต่างรอบตัวคุณได้อย่างมีประสิทธิภาพสุดๆ

    2. ทำไม n8n ถึงเหมาะกับงานราชการ

    หลายท่านที่ทำงานในราชการมันทั้งจำเจ วกวน และวุ่นวายแค่ไหน ?

    ทั้งงานเอกสาร การประชุม การส่งไปอบรม และอื่นๆอีกร้อยแปดพันเก้าที่แสนจะวุ่นวาย

    ไหนจะจำนวนคนที่น้อย อย่างผมทำงานด้านคอมพิวเตอร์ มีคนอยู่หยิบมือ แต่งานกองเท่าภูเขาเลากา ทำไปก็บ่นไป ด้วยเหตุนี้ถ้าเราสามารถลดงานเรานี้ได้และผลักภาระงานสุดแสนจะน่าเบื่อนี้ให้ ใครเป็นคนทำมันจะดีกว่าไหมละ ?

    ลองจินตนาการตามผมนะครับ คุณมีเวลาให้ตัวเองมากขึ้น สามารถพัฒนาคุณภาพชีวิตตัวเองเอ่ย คุณภาพทีมของคุณเอ่ย หรือไปจนถึงพัฒนาการทำงานในระดับองค์กรดูสิ

    หรือไม่ต้องพัฒนาลงพัฒนาอะไรหรอก เอาแค่มีเวลาได้นอนตีพุงอยู่บ้าน ดู Netflix ชิวๆ และเลิกงานตรงเวลา แค่นี้ชีวิตก็โคตรจะสบายแล้วครับผมว่า

    ผมลองมาคิดคร่าวๆ ซัก 5-10 ไอเดีย ที่จะช่วยลดงานข้าราชการทั้งด้านเอกสาร ด้านภาคบริการประชาชน และด้านพัฒนาตนเอง เช่น

    1. Workflow ที่จะช่วยงานของทีม HR ในการเพิ่มผู้ใช้งานระบบได้เร็วขึ้น (Onboarding Workflow Automation)
    2. Workflow สำหรับแจ้งเตือนเมื่อระบบมีปัญหา (Alerting Workflow)
    3. Workflow สำหรับแจ้งซ่อมผ่านทางระบบแชทไลน์ (Support Service Automation Workflow)
    4. Chatbot สำหรับถามตอบให้ลูกค้าไปยังระบบได้ถูกต้อง (Intelligence Chatbot) ที่กรมบังคับคดี เรามีระบบเยอะมาก เยอะจนงง เยอะจนคนในยังลืมว่าระบบอะไร Silo ไปอี๊กกก
    5. Workflow สำหรับทำเรื่องเปลียนรหัสผ่านสำหรับผู้ใช้งานภายใน (Forget Password Automation Workflow).

    เห็นไหมครับ ? ถ้าเราเอามาลดงานพวกนี้น้า เราจะมีเวลาไปทำอย่างอื่น หรือพักผ่อนได้อีกเยอะเลย แถมอาจจะช่วยให้เรารู้สึกเครียดน้อยลงได้อีกด้วย

    เอาละหลังจากเราสาธยายความดีงามของมันมามากพอละ ปะ ไปดูว่า n8n มีแบบไหนบ้าง

    3. n8n ให้บริการรูปแบบไหนบ้าง ( Cloud & Self-hosted )

    n8n มีรูปแบบการให้บริการหลัก ๆ สองแบบได้แก่ Self-hosted และ Cloud Subscription เรามาเริ่มกันที่ Cloud Subscription กันก่อน

    Cloud Subscription

    สำหรับเวอร์ชั่นนี้เป็น iPaaS (Integration Platform as a Service) เหมือนกับพวก Make หรือ Zapier เลย ก็คือเราเสียเงินค่า Subscription เราก็สามารถเข้าไปใช้งานได้ทันทีเลย เรียกได้ว่าใช้เงินแก้ปัญหา

    ข้อดีเด่น ๆ ของ Cloud Subscription คือ:

    เริ่มงานได้ไว: ช่วยให้คุณสามารถโฟกัสกับการสร้าง Workflow ได้ทันที โดยไม่ต้องเสียเวลาไปกับการตั้งค่าระบบพื้นฐาน

    ความสะดวกสบาย: คุณไม่ต้องกังวลเรื่องการติดตั้งเซิร์ฟเวอร์, การดูแลความปลอดภัย, การจัดการ SSL Certificate ประจำปี หรือการอัปเดตเวอร์ชันซอฟต์แวร์ เพราะ n8n เป็นผู้ดูแลจัดการให้ทั้งหมด

    ทีนี้เราลองมาดูด้าน Self-hosted กันบ้างดีกว่า ว่ามันต่างกันอย่างไร

    Self-hosted

    บริการนี้จะเป็นการที่เรา ติดตั้ง n8n เองตั้งแต่ ตั้งค่า Virtual Machine หรือ VM ติดตั้ง Tools ต่างๆ จนไปถึงลง ซอฟแวร์ n8n เองทั้งหมด

    แม้ฟังดูเหมือนว่าจะฟรี แต่มันก็ไม่ได้ฟรีแบบจริงๆร้อยเปอร์เซ็นต์หรอกครับ ที่บอกว่าเหมือนจะฟรี ก็เพราะ n8n เขาจดสิทธิบัตร software ของเขา โดย based on fair-code model. นั้นเอง

    Fair Code Model คือการจด license แบบที่เราสามารถเอา sourcecode ของเขาไปใช้ได้ แก้ไขปรับปรุงได้ แต่ก็อาจจะมีเงื่อนไขบางอย่างที่ไม่ได้รับการรับรองจากทาง OSI Approved Licenses เช่นการเก็บข้อมูลเป็นต้น

    อย่างไรก็ตาม การเลือกใช้ Cloud Subscription หรือ Self-hosted นั้น ก็ขึ้นอยู่กับหลายปัจจัย อาทิ เช่น ความปลอดภัย การธรรมาภิบาลข้อมูล (Data Governance) และระดับความลับของข้อมูลเป็นต้น

    เพราะฉะนั้นแล้ว เรามาดูกันดีกว่าว่า n8n แต่ละแบบมีการเก็บข้อมูลอย่างไรกันบ้าง เพื่อใช้ประกอบการตัดสินใจในการเลือกวิธีการใช้งาน

    4. ข้อควรระวังในการใช้งานข้อมูล

    สำหรับ n8n แบบ Self-hosted

    1. รหัสข้อผิดพลาดและข้อความ (Error codes & Messages): สำหรับการรันเวิร์กโฟลว์ที่ล้มเหลว ( Failed Executions ) โดยจะไม่เก็บข้อมูล Payload และข้อมูลจาก Custom Nodes (เช่น หากคุณมี Web Server Node ที่เรียกใช้บน n8n)
    2. รายงานข้อผิดพลาด (Error Reports): สำหรับกรณีที่ แอพ n8n เกิดข้อผิดพลาดร้ายแรง หรือปัญหาเชิงเทคนิคของ API
    3. โครงสร้างของเวิร์กโฟลว์ (Workflow Structure): เช่น สำหรับ Workflow นี้ใช้ Node อะไรบ้างเป็นต้น เช่น Gmail, Azure เป็นต้น
    4. พารามิเตอร์ของ Node (Node Parameters): จะเก็บ Operation กับ Resource เท่านั้น (ถ้ามี) และ สำหรับ HTTP Request Node ก็จะเก็บ Domain, Path และ Method โดยข้อมูลส่วนบุคคลจะทำให้เป็นแบบปกปิดข้อมูลแทน
    5. สถานะการทำงานของเวิร์กโฟลว์ (Workflow Execution Data):
      • สถานะผลลัพธ์การทำงาน (เช่น 200 OK, 404 Not Found, 500 Internal Server Error)
      • รหัสผู้ใช้งานที่เรียกใช้ Workflow นั้นบน n8n
      • การโหลดข้อมูลครั้งแรกของเวิร์กโฟลว์จากแหล่งข้อมูลภายนอก
      • การรันเวิร์กโฟลว์ที่ประสบความสำเร็จครั้งแรกในโหมด Production (ไม่ใช่การรันด้วยตนเอง)
    6. Domain ของ Webhook Calls (หากมีการระบุ): โดยไม่รวม Subdomain
    7. รายละเอียดการใช้งานหน้าจอผู้ใช้ (UI Usage): เช่น การนำทาง (Navigation) หรือการค้นหาใน Nodes Panel
    8. ข้อมูลการวินิจฉัย (Diagnostic Information): เช่น n8n version, การตั้งค่าที่เลือก (Selected Settings) อย่าง DB_TYPE, N8N_VERSION_NOTIFICATIONS_ENABLED, N8N_DISABLE_PRODUCTION_MAIN_PROCESS, ตัวแปรการรัน (Execution Variables), ระบบปฏิบัติการ (OS), RAM, และ CPU, Anonymous Instance ID, และ IP Address
    9. IP Address

    จะเห็นได้ว่าถึงแม้ n8n จะพยายามหลีกเลี่ยงการเก็บข้อมูลส่วนบุคคลที่อาจขัดต่อ พ.ร.บ. คุ้มครองข้อมูลส่วนบุคคล (PDPA) หรือ GDPR แต่ก็ยังมีการเก็บข้อมูลทางเทคนิคและการใช้งานอยู่พอสมควร ซึ่งคุณควรพิจารณาในบริบทขององค์กรของคุณ

    สำหรับ n8n แบบ Cloud Subscription

    ในส่วนของ Cloud Subscription นั้น n8n จะมีการเก็บข้อมูลพื้นฐานเช่นเดียวกับ Self-hosted ทุกประการ และจะ เพิ่มเติม การเก็บข้อมูลบางส่วนเพื่อวัตถุประสงค์ในการปรับปรุงบริการและประสิทธิภาพของ AI ดังนี้:

    1. การจับการใช้งานหน้าจอ (Screen Recording Capture) เพื่อดูว่าผู้ใช้งานมีการเรียกใช้ node หรือการแสดงค่าอย่างไรบ้าง โดยปราศจากการเก็บข้อมูลส่วนบุคคล (ลบภายใน 21 วัน)
    2. การให้ AI chat เรียนรู้ ข้อมูล ณ​ ปัจจุบัน อย่าง workflow, context data I/O และ โค้ด ที่เขียนลงไปใน n8n เพื่อเพิ่มประสิทธิภาพในด้านประสบการณ์ผู้ใช้งาน (ลบภายใน 30 วัน)

    5. มาลองติดตั้ง n8n กันเถ๊อะ

    ก่อนอื่นเลยเราต้องมาอธิบายกันก่อนว่าอะไรคือ Docker และ อะไรคือ Docker Compose เพื่อที่เราจะได้เข้าใจเครื่องมือพื้นฐานสำคัญก่อนดำดิ่งสู่ของจริง

    Docker คืออะไร ?

    • Docker เป็น Open-Platform รูปแบบหนึ่งที่ให้นักพัฒนาสามารถที่จะ พัฒนา ใช้คำสั่ง และ ย้าย Application ของพวกเขาได้อย่างรวดเร็ว
    • Docker ช่วยให้เราสามารถรัน Applications ของเราแยกกันบนโครงสร้างพื้นฐาน (Infrastructure)เดียวกันได้ ช่วยห้เราสามารถ deliver งานได้ไวขึ้นและสามารถทำให้เราใช้สิ่งที่คนอื่นสร้างไว้แล้ว อย่าง Image เพื่อทำให้ขึ้นงานได้ไวอีกด้วย

    Docker Compose

    • เป็นเครื่องมือที่ใช้ในการกำหนดและรัน container หลายๆอันพร้อมๆกันได้
    • โดยปกติ เราจะต้องมานั่งรัน docker build และ docker run ทีละ Dockerfile ใช่ไหมครับ มันช้า เขาก็เลยสร้างเครื่องมือตัวนี้ให้เราสามารถเขียน docker-compose.yml ไฟล์เดียวแล้วรัน containers ขึ้นมาพร้อมกันๆหลายๆอันได้เลย

    สำหรับบทความนี้เราจะไม่ได้อธิบายวิธีการติดตั้ง Docker และ Docker Compose นะครับ แต่ทุกท่านสามารถดูวิธีการติดตั้งได้โดยคลิกที่นี้

    DigitalOcean Droplet

    ใน Tutorial นี้เพื่อให้เหมือนกับของจริงเวลาคุณได้เครื่อง VM จาก Cloud ภาครัฐ GDCC หรือ Cloud จากทีม Network ของคุณสร้างให้ เราจะใช้ VM จากทาง DigitalOcean Droplets นะครับ

    DigitalOcean Droplets

    • Virtual Machine ที่เป็น linux-based ออนไลน์อยู่บน hardware เสมือนจริงที่ทาง DigitalOcean เป็นคนสร้างให้

    สำหรับบทความนี้เพื่อนๆสามารถดูวิธีการติดตั้ง Droplet โดยคลิกลิ้งค์นีได้เลยนะครับ หากไม่สะดวกภาษาอังกฤษ ผมแนะนำว่าให้ Copy เนื้อหาแล้วเอาไปแปะให้ AI แปลให้จะสะดวกมากๆเลยครับ

    สมมติว่าคุณได้ Droplet มาเรียบร้อยแล้ว ขั้นตอนแรกคือการเชื่อมต่อไปยังเซิร์ฟเวอร์ของคุณผ่าน Terminal

    ssh -i ~/.ssh/<public_ssh_key> <username>@<droplet_ip>
    

    ถ้าคุณเลือกว่าจะใส่ passphrase ระบบก็จะถามเราก็ใส่ passphrase ให้ถูกตามที่เรากรอก หรือถ้าเราเป็นคนขี้เกียจก็ ssh-add <ssh_private_key> ไปก็จะไม่ต้องใส่ passphrase ทุกรอบ

    เมื่อ log in เข้ามาแล้ว ผมแนะนำว่าให้สร้าง user ใหม่แทนนะครับเพื่อความปลอดภัย และหลีกเลี่ยงการใช้ Root user

    สมมติว่าคุณได้ Droplet มาเรียบร้อยแล้ว ขั้นตอนแรกคือการเชื่อมต่อไปยังเซิร์ฟเวอร์ของคุณผ่าน Terminal:

    adduser <username>
    

    ระบบก็จะให้เรากรอกข้อมูลต่างๆ เราก็ค่อยๆกรอกไป ก็จะมีทั้ง รหัสผ่าน, ชื่อ, ที่ทำงาน, เบอร์โทรศัพท์ เป็นต้น

    จากนั้นเราก็ให้สิทธิ์ admin กับ user ของเรา

    usermod -aG sudo <username>
    

    ทีนี้เราก็สามารถเรียกใช้คำสั่งที่ต้องอาศัยสิทธิ์​ super user ได้แล้ว โดยสามารถใส่ sudo ด้านหน้าเพื่อใช้ง

    จากนั้นเราก็ทำการสร้าง ssh key อันใหม่สำหรับ user นี้เพื่อที่เราจะได้ ssh จากเครื่องเราได้และไม่ต้องผ่าน root อีกต่อไป Add Public Key Authentication.

    เมื่อทำเสร็จแล้วก็ exit ออกจากเครื่อง Vm และทำการ ssh เข้าไปใหม่ด้วย user ที่เราสร้างนั้นเอง

    ssh -i ~/.ssh/id_n8n_admin <username>@<droplet_ip>
    

    Clone Project และเตรียม Docker Volumes

    เอาหละเมื่อได้ user ใหม่แล้วเราก็ต้องทำการ clone project ลงมา

    git clone https://github.com/n8n-io/n8n-docker-caddy.git
    

    เมื่อ clone เสร็จแล้ว เราก็​จะทำการเปลี่ยน directory ก่อน

    cd n8n-docker-caddy
    ls
    

    สำหรับตรงจุดเดี๋ยวเราจะวนกับมาอธิบายเพิ่มเติมหลังจากที่เราได้เปิดดู docker-compose.yml


    เพื่อให้เวลาเรา build docker container เป็นไปอย่างรวดเร็วและข้อมูลคงอยู่ถาวร เราควรสร้าง Docker Volume เก็บไว้ โดยในที่นี้เราจะสร้าง 2 ตัว นั้นคือสำหรับ caddy เพื่อเก็บ cache และ n8n_data นั้นเอง

    sudo docker volume create caddy_data
    sudo docker volume create n8n_data
    

    จากนั้นเพื่อให้ n8n ของเรารันในฐานะ Web Application ได้ เราก็จะต้องเปิด port 80 สำหรับ non-secure traffic และ 443 สำหรับ secure traffic ด้วยการเรียกใช้คำสั่งด้านล่างจะเป็นการเปิด port ใน Firewallครับ

    sudo ufw allow 80
    sudo ufw allow 443
    

    ละก็มาถึงส่วนที่สำคัญที่สุดนั้นคือไฟล์ docker-compose.yml

     version: "3.7"
    
    services:
      caddy:
        image: caddy:latest
        restart: unless-stopped
        ports:
          - "80:80"
          - "443:443"
        volumes:
          - caddy_data:/data
          - ${DATA_FOLDER}/caddy_config:/config
          - ${DATA_FOLDER}/caddy_config/Caddyfile:/etc/caddy/Caddyfile
    
      n8n:
        image: docker.n8n.io/n8nio/n8n
        restart: always
        ports:
          - 5678:5678
        environment:
          - N8N_HOST=${SUBDOMAIN}.${DOMAIN_NAME}
          - N8N_PORT=5678
          - N8N_PROTOCOL=https
          - NODE_ENV=production
          - WEBHOOK_URL=https://${SUBDOMAIN}.${DOMAIN_NAME}/
          - GENERIC_TIMEZONE=${GENERIC_TIMEZONE}
        volumes:
          - n8n_data:/home/node/.n8n
          - ${DATA_FOLDER}/local_files:/files
    
    volumes:
      caddy_data:
        external: true
      n8n_data:
        external: true
    

    services: ส่วนนี้ใช้กำหนดบริการ (Services) ต่างๆ ที่จะถูกสร้างเป็น Container โดยในที่นี้คือ Caddy (Web Server/Reverse Proxy) และ n8n

    volumes: กำหนด External Volumes ที่เราสร้างไว้ก่อนหน้านี้ (caddy_data และ n8n_data) เพื่อใช้เป็น Persistent Storage ให้กับ Container

    image: ระบุ Docker Image ที่จะใช้สำหรับสร้าง Container ซึ่งจะดึงมาจาก Docker Hub

    restart: เป็น Tag ที่กำหนดพฤติกรรมการ Restart ของ Container หากหยุดทำงาน

    • unless-stopped (สำหรับ Caddy): Container จะ Restart อัตโนมัติ ยกเว้นคุณเป็นคนสั่งหยุดเอง
    • always (สำหรับ n8n): Container จะ Restart อัตโนมัติเสมอ ไม่ว่าจะหยุดทำงานด้วยสาเหตุใดก็ตาม
    • ข้อแตกต่างคือ หากคุณใช้คำสั่ง docker compose stop แบบ always จะรีสตาร์ทเองทันที แต่ unless-stopped คุณต้องสั่ง docker compose up ใหม่

    ports: ใช้กำหนดการเชื่อมโยง Port ระหว่าง Container ภายใน กับ Port ของเครื่อง VM ภายนอก (เช่น - 80:80 คือ Port 80 ภายนอกเชื่อมไป Port 80 ภายใน Container)

    environment: ใช้กำหนดตัวแปรสภาพแวดล้อม (Environment Variables) ภายใน Container ซึ่งจำเป็นสำหรับการตั้งค่าการทำงานของ n8n (เช่น Host, Port, Protocol, Timezone และ Webhook URL)

    เรามาดูกำหนดค่าใน .env แต่ละอันกันดีกว่าครับ

    # Replace <directory-path> with the path where you created folders earlier
    DATA_FOLDER=/<directory-path>/n8n-docker-caddy
    
    # The top level domain to serve from, this should be the same as the subdomain you created above
    DOMAIN_NAME=example.com
    
    # The subdomain to serve from
    SUBDOMAIN=n8n
    
    # DOMAIN_NAME and SUBDOMAIN combined decide where n8n will be reachable from
    # above example would result in: https://n8n.example.com
    
    # Optional timezone to set which gets used by Cron-Node by default
    # If not set New York time will be used
    GENERIC_TIMEZONE=Europe/Berlin
    
    # The email address to use for the SSL certificate creation
    SSL_EMAIL=example@example.com
    

    ถ้าเป็นของผม ผมก็จะกรอกแบบนี้ ข้อควรระวัง ตอนติดตั้งจริงๆ เนี้ยควรใช้ เป็น /etc เพื่อความปลอดภัยนะครับ

    # Replace <directory-path> with the path where you created folders earlier
    DATA_FOLDER=/demo/n8n-docker-caddy # ผมแนะนำว่าให้สร้างที่อื่นนะครับของจริง ผมสร้างใน /etc
    
    # The top level domain to serve from, this should be the same as the subdomain you created above
    DOMAIN_NAME=patrawi.com
    
    # The subdomain to serve from
    SUBDOMAIN=n8n
    
    # DOMAIN_NAME and SUBDOMAIN combined decide where n8n will be reachable from
    # above example would result in: https://n8n.example.com
    
    # Optional timezone to set which gets used by Cron-Node by default
    # If not set New York time will be used
    GENERIC_TIMEZONE=Asia/Bangkok
    
    # The email address to use for the SSL certificate creation
    # SSL_EMAIL=example@example.com
    

    เมื่อกำหนดเสร็จแล้วเราก็ต้องเข้าไปแก้ใน Caddy ต่อ เพื่อที่ Caddy จะได้ Reverse Proxy ทุก Ports ไปยัง Port 5678

    n8n.<domain>.<suffix> {
        reverse_proxy n8n:5678 {
          flush_interval -1
        }
    }
    

    สำหรับตรงนี้ผมก็จะแก้เป็น n8n.patrawi.com ที่เป็น domain ที่ผมซื้อไว้นั้นเอง อย่างไรก็ตาม หากเป็นการใช้งานในหน่วยงานของท่าน คุณจะต้องแจ้งทีม Network ให้เขากำหนด subdomain และ DNS recordให้เราอีกทีนะครับ เพื่อที่ DNS มองเห็น IP Address ของ VM ของคุณครับ

    เริ่มต้นและตั้งค่า DNS

    เมื่อแก้ Config ทั้งหมดเสร็จแล้ว ได้เวลา Spin up Container ของเราแล้วเย้

    sudo docker compose up -d
    

    แต่ว่าพอคุณ เปิดไปที่ dns ที่คุณกำหนดแล้ว คุณก็จะพบว่าข้อความ Can’t Reach This Server สาเหตุก็เป็นเพราะว่า DNS ของเรานั้นยังไม่ได้นำไปผูกกับ IP Address ที่ DigitalOcean นั้นเองเราก็จะต้องไปทำตรงนั้นกันก่อน


    *หมายเหตุ ถ้าเราให้ทีม network ของหน่วยงานเราเป็นคนสร้าง vm ขึ้นมาให้ตรงจุดนี้จะไม่มีปัญหานะครับ แต่จะไปมีปัญหาเรื่อง SSL/TLS แทนเดี๋ยวผมจะวนมาอธิบายให้ฟังอีกทีครับ

    ขั้นตอนการตั้งค่า DNS บน DigitalOcean (หรือผู้ให้บริการ DNS ของคุณ):

    1. เข้าไปที่ Dashboard ของ Droplet และเลือก Networking

    2. เลือก Tab Domains และใส่ Domain ที่ซื้อมา

    3. กรอก Domain ที่คุณซื้อมาลงในช่องว่าง

    4. สร้าง A Record แล้วเขียน Hostname เป็น n8n.patrawi.com (หรือ Subdomain ที่คุณต้องการ) และ Value ก็เลือกเป็น IP Address ของ VM ที่เราสร้าง

    เนื่องจากว่าปัจจุบัน blog นี้เป็น blog ที่บริหารและดูโดย WordPress รวมไปถึง Domainname ด้วย เพราะฉะนั้นผมจึงเลือกให้ WordPress เป็นคนบริหาร Domainname ด้วยเหตุนี้ผมจึงไม่มี NS Record ที่ชี้ไปที่ DigitalOcean

    ถ้าเป็นของทุกคนที่มาทำครั้งแรก จะมี NS ที่ชี้ไปที่ digitalocean อยู่ 3 อันให้ทำการลบออกด้วยนะครับ ถ้ากรณีจะให้ผู้ให้บริการเจ้าอื่น บริหารตรงจุดนี้

    หลังจากที่คุณตั้งค่า DNS ที่ผู้ให้บริการ Domain ของคุณเรียบร้อยแล้ว (เช่นในกรณีของผมที่ซื้อ Domain ผ่าน WordPress) คุณจะต้องแจ้งผู้ให้บริการ DNS ทราบว่า การเรียก Subdomain n8n นี้ ให้ Redirect ไปยัง IP Address ของ Droplet ของคุณ

    เมื่อดำเนินการเสร็จสิ้น คุณจะต้องรอสักระยะเพื่อให้ DNS Server ต่าง ๆ ทั่วโลกอัปเดตข้อมูล (Propagation) คุณสามารถตรวจสอบสถานะได้โดยใช้คำสั่ง

    dig <dns_name>
    

    หากขึ้นว่า NXDOMAIN หมายความว่า DNS Server นั้นยังไม่รู้จัก Domain ของคุณ ต้องรอต่อไปจนกว่าจะขึ้นว่า NOERROR นั่นแปลว่าคุณพร้อมใช้งานแล้วครับ!

    ทดสอบการติดตั้งและข้อสังเกตเกี่ยวกับ SSL/TLS

    เมื่อคุณลองเข้าถึง DNS Server ดังกล่าว และเห็นหน้าตาดังกล่าว:

    ยินดีด้วย! คุณติดตั้ง n8n server สำเร็จแล้ว!

    แต่เดี๋ยวก่อน! ก่อนที่เราจะจบบทความส่วนนี้ จำเรื่อง SSL/TLS ที่ผมทักไว้ได้ไหมครับ? ปัญหาคือ ปกติเมื่อเราใช้บริการผู้ให้บริการ DNS และ Server อย่าง DigitalOcean หรือ WordPress (ในกรณีของผม) พวกเขาจะดูแลจัดการเรื่อง SSL/TLS (ใบรับรองความปลอดภัย) ให้เรียบร้อย ทำให้ไม่มีปัญหาอะไร

    แต่ถ้าในกรณีที่คุณติดตั้ง n8n บนเครื่อง VM ที่คุณ Hypervise บน Hardware ของคุณเองล่ะ?

    ใช่ครับ! คุณจะต้องเป็นคนจัดการส่วนนี้เองทั้งหมด (เช่น การขอใบรับรอง SSL/TLS และการตั้งค่าให้ Web Server ใช้งาน) แต่ส่วนตัวผมคิดว่าหากลงรายละเอียดส่วนนี้ไปในตอนนี้ บทความจะยาวเกินไป และอาจทำให้เนื้อหาหลักเรื่องการติดตั้ง n8n เสียโฟกัสครับ

    สำหรับโพสต์นี้ การติดตั้ง n8n บน VM ถือว่าเสร็จสมบูรณ์แล้วครับ! และในส่วนสุดท้ายของบทความนี้ เมื่อเราติดตั้งสำเร็จแล้ว ก็ถึงเวลาที่จะมาลองสร้าง Workflow ง่ายๆ กันบ้าง เพื่อให้คุณเห็นภาพการทำงานจริงครับ

    6. ทดลองทำ Workflow ง่ายๆ 1 อัน

    ในส่วนนี้ ผมจะพาทำ Workflow ง่ายๆอย่างการดึงฟีดข่าวจาก Blognone แล้วนำไปโพสต์ใน Discord เพื่อที่เราจะได้ติดตามข่าวสารได้อย่างตลอดเวลาและตามทันโลกที่หมุนเร็วเสียยิ่งกว่าอะไร

    หลังจากที่เรากรอก Username, Password, Email ของ Admin เราก็จะเข้ามาที่หน้า Dashboard ที่หน้าตาอาจจะไม่เหมือนกับของผมหรอก แต่องค์ประกอบโดยรวมน่าจะคล้ายๆกัน

    1. สร้าง Workflow ใหม่

    จากนั้นให้เพื่อนๆคลิกไปที่ปุ่ม Create Workflow เพื่อสร้างหน้า Workflow อันใหม่ครับ

    ทุกคนจะได้หน้า freeform แบบนี้ครับผม โดยมี สี่เหลี่ยมบวกอยู่ตรงกลาง

    2. ตั้งชื่อ Workflow

    คลิกตรง My workflow เพื่อทำการเปลี่ยนชื่อให้สื่อความหมาย เพราะเวลาเรากลับมาแก้เราจได้รู้ว่าอันไหนเป็นอันไหนนะครับ

    แก้เสร็จแล้วก็ กดปุ่มตรงกลางได้เลยยย

    3. ตั้งค่า Trigger (RSS Feed)

    เมื่อกดแล้วจะมี แทบขึ้นมาด้านขวาใช่ไหมครับ ตรงส่วนนี้เราเรียกว่า Trigger อธิบายแบบง่ายก็คือเราจะให้ Workflow นี้เริ่มทำงานอย่างไร เดี๋ยวผมจะมีอีก โพสที่มาขยายความตรงนี้นะคับ แต่เบื้องต้นให้ทุกคนเลือก On App Event

    เมื่อคลิกไปแล้วก็จะได้ ช่อง Search มาพร้อมกับหลายชื่อ Node ต่างๆ สำหรับการ Integration นะครับ สำหรับเนื้อหาวันนี้ขอให้พิมพ์​ RSS ในช่องค้นหาครับผม และเลือก RSS Feed Trigger

    จากในรูปนี้ให้เราอย่าพึ่งไปสนใจตัว Poll Times โฟกัสไปที่ Feed URL ก่อน สำหรับในช่องนี้ ผมเลือกใช้ RSS Feed ของทาง blognone

    จากนั้นก็ลองกด Fetch Test Event เพื่อทดสอบผลลัพธ์

    เมื่อกดแล้วด้านขวาก็จะเป็น json ที่เราเรียกออกมานั้นเอง

    แต่อย่างที่ทุกคนเห็นเรายังไม่สามารถเอาลักษณะนี้ไปใช้ได้ เราต้องมีการจัดรูปแบบ JSON ก่อน ให้เพื่อนๆปิด ฟอร์มนี้ไปก่อนนะครับแล้วกด + เพื่อเพิ่มเมนู Data Transformation ต่อไป

    4. จัดรูปแบบข้อมูลด้วย Data Transformation (Edit Fields)

    การทำ Data Transformation คือการที่เราแก้ไข กรอง และแปรงข้อมูลให้อยู่ในรุปแบบต่างๆแทนนะครับ

    ในหน้า Data Transformation ให้เลือก “Edit Field”

    ในฟอร์มนี้ คุณสามารถ Drag & Drop Field ที่คุณต้องการใช้จากข้อมูล JSON ทางด้านซ้าย มาวางในช่องว่างตรงกลางได้เลยครับ

    ว่าแต่ แล้ว JSON คืออะไร ผมขอแวะอธิบายตรงนี้นิสสนึงนะครับ เพื่อไม่ให้เพื่อนๆสงสัย

    JSON คืออะไร

    JSON ย่อมาจาก JavaScript Object Notation เป็นรูปแบบข้อมูลประเภทหนึ่งที่นิยมใช้ในการส่งผ่านข้อมูลบน Protocol HTTP นั้นเอง โดยจะมีลักษณะการเก็บข้อมูลเป็น Key (ชื่อข้อมูล) และ Value (ค่าของข้อมูล)

    ตัวอย่างเช่น: หากมี Key คือ “Title” และ Value เป็น “Alibaba Cloud อัปเดตโมเดล Qwen3-235B-A22B เขียนโค้ดได้ระดับเดียวกับ Kimi K2 แต่ต้นทุนถูกลง” นั่นหมายความว่าหัวข้อข่าวคือข้อความนั้นนั่นเอง

    5. เชื่อมต่อและส่งข้อมูลไปยัง Discord

    โอเคเรากลับมาต่อที่เนื้อหากันดีกว่า หลังจากที่เราได้ มา 2 Node แล้วทีนี้ก็ถึงเวลาส่งข้อมูลกันแล้วครับ

    ให้เพื่อนๆ กด + แล้วก็จะได้หน้าตาแบบด้านล่างมาใช่ไหมครับ

    พิมพ์ลงไปว่า discord ดังรูป และเลือก เมนู Discord

    จากนั้นให้ทำการมองหาคำว่า Send a Message แล้วคลิกไปได้เลยครับ

    เพื่อนจะได้หน้าตา มาแบบนี้ใช่ไหมครับ ให้เพื่อนๆ เลือก ตรง Connection Type แล้วมองหาคำว่า Webhook

    ถามว่าทไมต้องเป็ฯ Webhook นอกจากจะเป็นวิธีที่เร็วและสะดวกที่สุดในการทำ RSS Feed Message Channel แล้ว ยังเป็นวิธีที่ง่ายที่สุดเมื่อเทียบกับอีก 2 ข้อนั้นเองครับ

    เมื่อเลือกมาแล้วให้เพื่อนๆ คลิก Create new Credential

    6. สร้าง Webhook URL จาก Discord

    ตอนนี้เราต้องสลับไปที่แอปพลิเคชัน Discord เพื่อไปคัดลอก Webhook URL มา

    เข้าไปที่ Text Channel ที่เราสนใจ และคลิกตรงรูปฟันเฟือง

    เลือก Tab Integration แล้ว กด Webhook

    หลังจากนั้นให้กด New Webhook

    เปลี่ยนชื่อ และ กด Copy Webhook URL

    7. วาง Webhook URL และจัดรูปแบบข้อความใน n8n

    Paste Webhook URL ที่คัดลอกมาจาก Discord ลงในช่องว่าง

    จัดรูปแบบข้อความที่จะโพสต์ใน Discord Node ของคุณ (เช่น การดึง Field Title หรือ Link จากขั้นตอน Data Transformation มาใช้ในข้อความ)

    สิ้นสุด Workflow แรก!

    และเราก็ทำ Workflow แรกเสร็จเรียบร้อยแล้ว หลังจากที่คุณตั้งค่าและจัดรูปแบบข้อความเสร็จ อย่างลืมกด Save และเปิดใช้งาน Workflow กันด้วยนะครับ

    7. บทสรุป

    เป็นอย่างไรกันบ้างครับ กับของเล่นใหม่ที่ผมอธิบายในวันนี้ ผมหวังว่าเพื่อนๆจะสามารถนำไปประยุกต์ใช้กันได้อย่างหลากหลาย และ สร้างสรรค์นะครับ

    ถ้าเพื่อนๆสงสัยอะไร สามารถสอบถามได้ใน Comment ได้เลยครับ ยินดีตอบครับผม

    แล้วในบทความถัดไป ผมจะมีเรื่องอะไรมาอธิบาย อย่าลืมติดตามกันนะครับ

    Related Article

    1. https://data-espresso.com/install-n8n-local-with-docker/
    2. https://docs.n8n.io/hosting/
    3. https://docs.n8n.io/hosting/installation/server-setups/digital-ocean/
    4. https://www.blognone.com/node/feed

  • ใช้ Google AI Studio แปลง PDF เป็น CSV

    ใช้ Google AI Studio แปลง PDF เป็น CSV


    ตั้งแต่อดีตจนถึงปัจจุบัน นักวิทยาศาสตร์ข้อมูล หรือ Data Scienctist ล้วนแล้วแต่ต้องเคยเจอปัญหาที่ว่าข้อมูลนั้นอยู่ในรูปกายภาพ(physical) แทนที่จะเป็นลักษณะดิจิตอล (digital) 

    ซึ่งข้อมูลเหล่านี้สร้างความรำคาญให้แก่พวกเขาเป็นอย่างมาก ในอดีต ก่อนที่จะมีนวัตกรรมอย่าง OCR (Optical Character Recognition) ที่เกิดจากการประยุกต์ใช้ Machine Learning เหล่า Data Scientist ต้องรับมือกับข้อมูลกายภาพด้วยการคีย์ข้อมูลด้วยมือ ไม่ว่าจะผ่านหน้าจอ Console, Web Application หรือ GUI ต่างๆ

    วิธีดังกล่าวนั้นมีโอกาสเกิด Human Error เป็นอย่างสูง ลองจินตนาการดูสิ คุณกำลังนั่งกรอกข้อมูลเหล่านี้ประมาณ ตี 2-3 อดหลับอดนอน นั่งกรอกตารางข้อมูลเหล่านี้มากกว่า 100 หน้ามาแล้ว 3 วัน 

    คุณที่กำลังขมักเขม้นกรอกข้อมูล

    ซึ่งมันแทบจะเป็นไปไม่ได้เลยที่คุณจะกรอกโดยไม่ผิด และเมื่อกรอกเสร็จคุณก็ต้องมาเสียเวลานั่งแก้ข้อมูลเหล่านี้ เสียทั้งเวลา เสียทั้งค่าใช้จ่าย และอื่นๆที่จะตามมาอีกมากมาย

    ความยุ่งยากในการนำเข้าข้อมูลนี้ ทำให้หลายคนเลือกที่จะละทิ้งข้อมูลไปอย่างน่าเสียดาย เพราะมองว่ายากเกินกว่าจะนำไปใช้ประโยชน์ได้ สุดท้ายข้อมูลอันมีค่าเหล่านี้ก็กลายเป็นเพียง ‘ขยะดิจิทัล’ ที่ไม่มีใครสามารถนำไปประยุกต์ใช้ได้เลย

    แล้วถ้าเกิดว่าวันนึง มันดันมีเทคโนโลยีที่สามารถแก้ปัญหาตรงนี้ได้ละ เทคโนโลยีที่จะช่วยให้เราสแกนเอกสารและทำออกมาเป็นไฟล์พร้อมนำเข้าข้อมูล บนโปรแกรต่างๆไม่ว่าจะเป็น Spreadsheet, Excel หรือ โปรแกรมจากการเขียนโค้ดอย่าง python หรือ R คุณลองคิดดูสิว่าขยะเหล่านี้จะมีค่าแค่ไหน ? เพราะฉะนั้น วันนี้ผมจะพาทุกท่านมารู้จักกับ AI จากทาง Google อย่าง Gemini Flash 2.5 ที่เราสามารถทดสอบ บนGoogle AI Studio ซึ่งจะเข้ามาช่วยแก้ปัญหาและอุด Pain Point นี้กันครับ

    ในช่วงแรกที่เหล่า Data Scientists ต้องแก้ปัญหานี้ พวกเขาก็พยายามค้นหาวิธีการต่างๆ อาทิเช่น การ Scan ข้อมูลเหล่านั้นเป็น PDF Copy/Paste บ้างละ ใช้โปรแกรม online สำหรับแปลง PDF ไปเป็น CSV บ้างละ ไปจนถึงขั้นยอมเสียเงินจำนวนมากเพื่อซื้อโปรแกรมมาปิดจุดอ่อนนี้ 

    วิธีเหล่านั้นล้วนสามารถแก้ปัญหาขั้นเบื้องต้นได้แต่ก็มีจุดอ่อนในตัวเช่นกัน เช่นการ Copy/Paste นั้นในระยะยาวนั้นจะไม่เป็นผลดีต่อเวลาเป็นอย่างมาก การใช้โปรแกรมออนไลน์ก็ดูเป็นวิธีที่เวิร์ค แต่ถ้าเกิดมีไฟล์เป็นจำนวนมากก็คงจะไม่ไหว และการใช้ซอฟแวร์สำเร็จรุปนั้นก็อาจจะให้ผลลัพธ์ที่ไม่ดีหากข้อมูลของเรานั้นซับซ้อน

    ด้วยการมาถึงของยุคที่ Generative AI เป็นที่รู้จักแพร่หลาย บริษัท Google ก็ไม่น้อยหน้าปล่อย แพลทฟอร์ม ออกมาให้ผู้ใช้งานอย่างเราๆได้ทดลองใช้ฟรี โดยเราสามารถเข้าไปลองเล่น Model ต่างๆของทาง Google ผ่านทาง Google AI Studio 

    ทำไมต้อง Google AI Studio ทั้งๆ ที่เจ้าอื่นก็มีแพลตฟอร์มทดลองให้ใช้เหมือนกัน? คำตอบง่ายๆ คือ ‘เพราะมันฟรี’ ผู้ใช้งาน Gemini เวอร์ชั่นปกติอาจเข้าถึงได้แค่ Gemini Flash แต่ใน Google AI Studio คุณสามารถใช้งาน Gemini Pro ได้ฟรีไม่จำกัด นี่คือข้อได้เปรียบสำคัญที่ไม่อาจมองข้าม

    แถมเรายังสามารถปรับแต่งค่าต่างๆเพื่อให้ AI ตอบคำถามตามความต้องการของเราได้ เช่น ตั้งค่า Temperature ต่ำ หรือ สูง เพื่อกำหนดความสร้างสรรค์ของ AI กำหนด output length ว่าจะให้ตอบได้ไม่เกินครั้งละเท่าไหร่ ไปจนถึงการกำหนด Top P เพื่อควบคุมความหลากหลายของคำตอบ โดยให้ AI เลือกจากกลุ่มคำที่มีความน่าจะเป็นสูงสุด

    อีกหนึ่งสิ่งที่ น่าประทับใจมากๆของ Google AI Studio ก็คือจำนวน Context window ที่ให้มาอย่างจุใจถึง 1 ล้าน ส่งผลให้การคุยของผู้ใช้งานนั้นราบรื่นอย่างไร้ปัญหา และด้วยเหตุนี้ Google AI Studio จึงเหมาะมากที่เราจะใช้เพื่อ POC concept ของเราสำหรับประยุกต์ใช้ในอนาคตนั้นเอง

    สำหรับจุดประสงค์ในการทำครั้งนี้ก็คือการที่เราสามารถอ่านไฟล์สแกน PDF ได้เป็นจำนวนมากเพื่อที่จะดึงข้อมูลจากกระดาษออกมาและ insert เข้าฐานข้อมูล

    ด้วยเหตุนี้ เพื่อให้ได้มาซึ่ง tools ที่ตอบโจทย์เรามากที่สุด จึงมีความจำเป็นว่าเราต้องทดลองใช้ Model ที่กูเกิ้ลมีนั้นมาทดสอบเสียก่อน โดยในเคสนี้เราจะทดสอบด้วยโมเดล 2.5 Flash และ 2.5 Pro

    ความแตกต่างระหว่าง Pro Model & Flash Model 

    Pro Model – เป็น โมเดลที่ถูกสร้างมาสำหรับการคิดอย่างเป็นตรรกะ (reasoning), การโค้ดดิ้ง (Coding) และความเข้าใจในหลากหลายมิติ ( Multimodal understanding ) เพื่อใช้ในการคิดวิเคราะห์ปัญหาที่ซับซ้อน ส่งผลให้มีค่า Latency ที่สูงเพราะ Model จำเป็นต้องคิดไปทีละ Step ก่อนที่จะได้รับคำตอบ

    Flash Model – สำหรับ Flash Model นั้นถูกออกแบบมาให้ใช้กับงานประมวลผลเป็นจำนวนมากเช่น ไฟล์ PDF หลายๆไฟล์ งานที่ต้องการ latency ตำ่และรับ input ได้เยอะ, หรือ agentic use cases

    จากข้อมูลข้างต้นเราจึงควรเลือกใช้ Flash Model เพราะด้วยความที่ Latency ต่ำ + กับเหมาะทำงานซ้ำๆ ถือว่าตอบโจทย์ของเราเป็นอย่างมาก

    หลังจากที่เลือก Model เรียบร้อยแล้วเรามาดูขั้นตอนในการทำงานก่อนดีกว่า

    Flowchart

    จาก Flowchart ข้างต้นในขั้นตอนแรกนั้นเราต้องสแกนเอกสารก่อนและข้างล่างนี้ก็คือเอกสารที่เราต้องการอ่านนั้นเอง

    ใน ช่วง Proof cf Concept นั้น เราไม่จำเป็นที่จะต้องใช้ API_KEY โดยเราสามารถ Log in Gmail และใช้งานบน แพลทฟอร์ม Google AI Studio ได้เลย

    ⁠จากนั้นทำการอัพโหลดรูปภาพเข้าไป และพิมพ์ System Instruction ดังนี้

    จากนั้นทำการกด Run และรอผลัพธ์

    จะเห็นได้ว่าเราได้ข้อมูลในรูปแบบ CSV พร้อมนำไปใช้ในขั้นตอนต่อไปได้ทันที! แต่หากเราไม่ได้กำหนด System Instruction หรือ Prompt ที่ชัดเจนและรัดกุมแล้วละก็ เราอาจได้ข้อมูลในรูปแบบที่ไม่ใช่ CSV หรือได้ Format ที่ไม่น่าพึงพอใจ เพราะฉะนั้น ‘หลักการ Prompt Engineering’ จึงสำคัญอย่างยิ่งมากในการดึงศักยภาพของ AI ออกมาใช้ได้อย่างเต็มที่.

    สิ่งที่ใช้ในการคำนวณและวิเคราะห์เอกสาร PDF เหล่านี้ แท้จริงแล้วก็คือ โมเดลภาษาขนาดใหญ่ (LLM) อย่าง Gemini ที่ทำหน้าที่หลักในการแปลงข้อมูลจากไฟล์ให้มาเป็น CSV ตาม Prompt ที่เรากำหนด

    อย่างไรก็ตาม กว่าที่จะมาเป็น CSV อย่างที่เราเห็นนั้น ตัว Google AI Studio ก็ต้องแปลงไฟล์แนบในรูป PDF ให้ AI ‘เข้าใจ’ ได้ก่อน

    โดยในขั้นแรก ระบบจะทำการตรวจสอบว่า Input ที่ส่งมาเป็นไฟล์แนบ (เช่น PDF หรือรูปภาพ) หรือไม่ ถ้าใช่ ระบบจะส่งไฟล์นั้นไปประมวลผลด้วย OCR (Optical Character Recognition) ก่อน กระบวนการ OCR นี้จะแปลงภาพของตัวอักษรใน PDF ให้กลายเป็น ข้อความดิจิทัล (Text) ที่คอมพิวเตอร์อ่านได้

    จากนั้น ข้อความดิจิทัลที่ได้จะถูกนำเข้าสู่กระบวนการ Tokenization ซึ่งเป็นการแบ่งข้อความยาวๆ ออกเป็นหน่วยย่อยๆ ที่เรียกว่า ‘โทเคน (Tokens)’ (เช่น คำ, ส่วนของคำ, หรือเครื่องหมายวรรคตอน)

    ต่อมา โทเคนเหล่านี้จะถูกแปลงไปสู่รูปแบบที่ AI สามารถประมวลผลได้ ซึ่งก็คือ ‘Embedding’ ครับ พูดง่ายๆ คือ Embedding คือการแปลงโทเคนแต่ละหน่วยให้เป็นตัวเลขเวกเตอร์ ซึ่งเป็นชุดตัวเลขที่แสดงถึงความหมายและความสัมพันธ์ของโทเคนนั้นๆ ในเชิงคณิตศาสตร์ ทำให้ AI สามารถเข้าใจ และ วัดความใกล้เคียง ของความหมายระหว่างคำต่างๆ ได้

    หลังจากนั้น ข้อมูลที่เป็นตัวเลขเวกเตอร์ (Embeddings) เหล่านี้จะถูกส่งเข้าสู่ โมเดล AI ซึ่งโดยทั่วไป จะประกอบด้วยส่วนหลักๆ คือ Encoder และ Decoder

    • Encoder ทำหน้าที่ประมวลผล Input (ในที่นี้คือ Embeddings ของข้อความจาก PDF) เพื่อสร้างความเข้าใจบริบทและความหมายทั้งหมดของข้อความนั้นๆ
    • Decoder จะใช้ความเข้าใจที่ได้จาก Encoder และคำสั่งจาก Prompt ของเรา (เช่น แปลงเป็น CSV) เพื่อสร้าง Output ออกมาเป็นลำดับของโทเคน ซึ่งต่อมาจะถูกแปลงกลับเป็นข้อความในรูปแบบที่เราต้องการหรือข้อความที่มนุษย์อ่านได้ (เช่น CSV) นั่นเอง

    ทุกสิ่งทุกอย่างข้างต้นนั้นล้วนเกิดจากข้อมูลมหาศาลที่โมเดลได้รับการเรียนรู้มาแล้วล่วงหน้า ผสมผสานกับวิธีทางคณิตศาสตร์ที่ซับซ้อน ส่งผลให้ AI สามารถวิเคราะห์และคาดเดาได้อย่างแม่นยำว่าข้อมูลที่อยู่บน PDF เหล่านั้นคืออะไร และควรจะจัดเรียงออกมาในรูปแบบใด

    พูดกันมาขนาดนี้แล้ว ละ OCR คืออะไร? OCR (Optical Character Recognition) คือหนึ่งในกระบวนการสำคัญของ Machine Learning ที่ทำหน้าที่แปลง รูปภาพของตัวอักษร (เช่น ตัวอักษรบนไฟล์ PDF ที่มาจากการสแกน) ให้กลายเป็น ข้อความดิจิทัล ที่คอมพิวเตอร์สามารถอ่านและประมวลผลได้ โดยมันจะวิเคราะห์แพทเทิร์นของพิกเซลในรูปภาพเพื่อระบุว่าเป็นตัวอักษรใด แล้วจึงแปลงให้เป็นข้อความที่แก้ไขหรือค้นหาได้

    หลังจากนั้นก็รับค่านั้นและทำการแปลงกับออกมาเป็นรูปด้วย library ต่างๆ เช่น opencv เป็นต้น 

    หลักจากที่ได้อธิบายว่า AI นั้นมันน่าอัศจรรย์มากขนาดไหน เพราะหลังจากนี้เราไม่จำเป็นต้องหามรุ่งหามค่ำนั่งกรอกข้อมูลกันเป็นพันลวันแล้ว เรายังสามารถต่อยอดทำให้มัันอัตโนมัติได้ยิ่งขึ้นไปอีกด้วยนะAIM

    หากเราเข้าไปที่ตรงหน้า chat ที่เราคุยกับ gemini ใน google ai studio

    เราสามารถเปลี่ยน chat ที่เราคุยกับ gemini ให้เป็น code ที่ใช้รันผ่าน Terminal, หน้าเว็บไซต์ หรือจะเป็นยิงผ่าน Postman ก็ได้เหมือนกัน

    แต่ว่าการที่จะทำให้โค้ดนี้สมบูรณ์ได้นั้นเราต้องใช้ GEMINI_API_KEY ซึ่งถือเป็นอีกหนึ่งปัจจัยสำคัญเลย โดยการที่จะหามาได้นั้นเราก็แค่กดปุ่มด้านบนที่เขียนว่า Get API Key

    หลังจากนั้นให้ทำการกด + Create API Key google ai studio จะทำการค้นหา Google Cloud Project

    หากเพื่อนๆ พึ่งเคยสร้างโปรแกรมนี้ครั้งแรก เราแนะนำว่าให้เข้าไปสมัครและเปิดใช้งานในหน้า Google Cloud Project ก่อน  https://cloud.google.com/?hl=en  และเลือกไปที่ Console หากเราได้ทำการล้อคอิน Gmail เรียบร้อยแล้ว

    เลือกเมนู New Project

    ทำการตั้งชื่อ Project name และเลือก Location (สามารถใช้ no organization เป็น default ได้)

    รอจนหน้า Google Cloud Project แจ้งว่าเสร็จแล้วให้เราค้นหาในช่องค้นหาด้านบนว่า Gemini API และทำการ Enable ซะ

    หลังจากที่ Enable แล้วให้กลับไปที่หน้า Google AI Studio และทำตามขั้นตอนการ Get API Key

    ทีนี้เราก็จะเห็น Project ที่พึ่งสร้างแล้วกดคลิกเพื่อเลือกและกด Create API key in existing project

    และเราก็จะได้ API Key เพื่อใช้เรียก service แล้ว แต่ระวังไว้ด้วยนะว่าอย่าเผลอแชร์ให้คนอื่นละไม่งั้นคุณจะโดนบิลอ่วมเลยละ

    หลังจากนั้นก็กลับมาที่โค้ด copy และ วางในเครื่อง local เพื่อทดสอบเสียก่อน โดยเราสามารถเอา API_KEY ที่ได้วางแทนตรงนี้ได้เลยย

    แต่การทำอย่างงั้นเรียกได้ว่าไม่ปลอดภัยเอาซะเลย เพราะฉะนั้นเราควรที่จะใช้ library อย่าง dotenv เพื่อมาอุดปัญหานี้โดย dotenv จะทำอ่านค่าบางอย่างจากไฟล์ที่ชื่อว่า .env ซึ่งเป็นไฟล์ที่เก็บตัวแปรต่างๆที่เราไม่อยากให้คนนอกรู้นั้นเอง

    ทีนี้เราก็สามารถทดสอบโค้ดที่ google ai studio ให้มาได้แล้ว เย้

    # To run this code you need to install the following dependencies:
    # pip install google-genai
    
    import base64
    import os
    from google import genai
    from google.genai import types
    
    
    def generate():
        client = genai.Client(
            api_key=os.environ.get("GEMINI_API_KEY"),
        )
    
        model = "gemini-2.5-pro-preview-05-06"
        contents = [
            types.Content(
                role="user",
                parts=[
                    types.Part.from_text(text="""INSERT_INPUT_HERE"""),
                ],
            ),
        ]
        generate_content_config = types.GenerateContentConfig(
            response_mime_type="text/plain",
            system_instruction=[
                types.Part.from_text(text="""Extract data into CSV format where | separates columns. Use this exact column order:  
    {'|'.join(CSV_COLUMNS)}.  
    
    Rules:  
    1. Keep f1 always 0.  
    1.1 Always keep {NUM_COLUMNS} columns 
    2. Extract doc_no as the second column and datedoc as the fourth. Do not swap these.  
    3. Blank fields must contain 0.  
    4.  If which row  you can't understand skip it.
    Example:
    {'|'.join(CSV_COLUMNS)}
    1|01038/2559|0|1/7/2559|รายงานการสำรองข้อมูลประจำเดือน มิย.59|งานสารบรรณ (สบ.)|กองบริหารการคลัง (กค.)|เดินเรื่องเอง เดินเรื่องเอง|0
    2|กบ0026/1222|0|30/6/2559|ขอส่งเงินค่าไฟฟ้าที่พักอาศัยเจ้าหน้าที่ ประจำเดือน พค.59|งานสารบรรณ (สบ.)|กองบริหารการคลัง (กค.)|0|0
    Always make it {NUM_COLUMNS} columns
    Ensure the output always aligns exactly to this structure."""),
            ],
        )
    
        for chunk in client.models.generate_content_stream(
            model=model,
            contents=contents,
            config=generate_content_config,
        ):
            print(chunk.text, end="")
    
    if __name__ == "__main__":
        generate()
    

    อย่างไรก็ดีโค้ดที่ gemini ให้มานั้นยังทำงานได้แค่กับการ pass ค่า text เข้าไปได้เท่านั้นแถมยังเป็นการรันแบบ ถามตอบแค่ครั้งเดียว ซึ่ง โค้ดดังกล่าวนั้นยังไม่ตอบโจทย์ที่เราต้องนำมาแก้ไขเลย ผมก็เลยมีการแก้โค้ด โดยทำการเพิ่ม method ที่สามารถรับไฟล์เข้าไปเพื่อให้ Gemini Flash Model อ่านผ่าน OCR ได้นั้นเอง

    และเมื่อทำการอ่านค่าได้แล้วเราก็ต้องเพิ่มโค้ดอีกนิดนึงว่าแทนที่จะอ่านทีละไฟล์เราก็สร้าง loop ให้โค้ดของเราอ่านผ่านโฟลเดอร์ที่เก็บไฟล์เอาไว้จนกว่าจะหมดแปลงค่าออกมาเป็น csv format ให้เรานั้นเอง

    เมื่อ ถอดค่าจากไฟล์สแกนได้แล้ว เราก็บันทึกลง .csv ที่เตรียมไว้เพื่อที่เราจะเอาข้อมูลดังกล่าวไปใช้ในขั้นตอน INSERT ข้อมูลลงฐานข้อมูลได้ต่อไปนั้นเอง

    Sourcecode 

    จากการที่เรานำ AI มาประยุกต์ใช้ทำให้ผมไม่ต้องมานั่งกรอกข้อมูลทีละบรรทัดและสามารถอัพข้อมูลเสร็จได้ทั้งสิ้น 265062 ไฟล์ โดยใช้เวลาเพียงแค่ 5 วัน ในการรันโค้ดทั้งหมด แทนที่จะใช้เวลาหลายเดือนนั้นเอง

    ผมได้ทดลองให้คุณดูแล้วว่า AI นั้นมีประโยชน์มากแค่ไหนหากเราเข้าใจและใช้มันได้อย่างมีประสิทธิภาพ ผมว่ามันถึงตาคุณแล้วละที่จะต้องลองนำไปประยุกต์ใช้ เพื่อให้งานราชการของเรามีประสิทธิภาพมากขึ้นครับ คุณอาจจะลองเริ่มจากลองใช้ Google AI Studio ก่อนก็ได้ครับมันฟรี ลดกำแพงการศึกษาไปอี๊ก อยากให้คุณได้ลองสัมผัสนะครับ ละจะติดใจแน่นอน

    References

    For Gemini API – https://ai.google.dev/gemini-api/docs

    For Encoder/Decoder – https://www.youtube.com/watch?v=Q7mS1VHm3Yw&t=7834s

  • การใช้ FileZilla เพื่อจัดการไฟล์อย่างมืออาชีพ

    การใช้ FileZilla เพื่อจัดการไฟล์อย่างมืออาชีพ


    Table of Content


    บทนำ: เริ่มต้นการเดินทางกับ FileZilla

    ห่างหายกันไปนานเลยนะครับกับบล็อก! วันนี้ผมกลับมาพร้อมกับคู่มือแนะนำวิธีการใช้โปรแกรม FileZilla ซึ่งเป็นเครื่องมือที่ทรงพลังมากสำหรับการจัดการไฟล์ พร้อมทั้งจะขออธิบาย Architecture ที่อยู่เบื้องหลังให้เข้าใจกันมากขึ้นด้วยครับ พอดีผมต้องเขียนเอกสารถ่ายทอดงานให้ทีมอยู่แล้ว ก็เลยถือโอกาสนี้เรียบเรียงและนำมาแบ่งปันในบล็อกนี้ด้วยเลยครับ หวังว่าจะเป็นประโยชน์กับเพื่อนๆ นะครับ

    ก่อนอื่นเลย เพื่อนๆ คงเคยได้ยินคำว่า FTP หรือ File Transfer Protocol กันมาบ้างใช่ไหมครับ? FTP เป็นเทคโนโลยีที่ถูกสร้างขึ้นมาเพื่อปฏิวัติวงการการจัดเก็บและโอนย้ายไฟล์เลยก็ว่าได้ และเจ้า FTP นี่แหละครับ คือเทคโนโลยีสำคัญที่อยู่เบื้องหลังการทำงานของ FileZilla นั่นเอง

    FTP และ FileZilla คืออะไร? ทำความเข้าใจพื้นฐาน

    FTP หรือ File Transfer Protocol เป็นโปรโตคอล (Protocol) หรือข้อกำหนดมาตรฐานรูปแบบหนึ่งที่ใช้ในการส่งผ่านไฟล์ระหว่างคอมพิวเตอร์สองเครื่องผ่านเครือข่ายอินเทอร์เน็ตหรือ LAN โดย FTP เคยเป็นโปรโตคอลที่ใช้กันอย่างแพร่หลายและถือเป็นมาตรฐานของอุตสาหกรรมอยู่ยุคหนึ่งเลยทีเดียวครับ จนกระทั่งการมาของ SFTP (SSH File Transfer Protocol) ซึ่งมีความปลอดภัยสูงกว่า FTP แบบดั้งเดิมมาก ทำให้ความนิยมของ FTP แบบเดิมลดน้อยลงไป แต่ก็ยังมีการใช้งานกันอยู่ครับ

    FileZilla เป็นซอฟต์แวร์ (Software) ประเภท Open-Source ที่พัฒนาโดยคุณ Tim Kosse และทีมงาน FileZilla ถูกออกแบบบนสถาปัตยกรรมแบบ Client-Server ทำหน้าที่หลักในการอำนวยความสะดวกในการโอนย้ายไฟล์ระหว่างเครื่องคอมพิวเตอร์ของผู้ใช้ (Local) กับเครื่องเซิร์ฟเวอร์ (Server) หรือในทางกลับกันก็ทำได้เช่นกัน FileZilla นั้นมีให้เลือกใช้ทั้งแบบฟรี (FileZilla Client และ FileZilla Server) และแบบเสียเงิน (FileZilla Pro) ซึ่งมีฟีเจอร์เพิ่มเติมสำหรับผู้ใช้งานระดับสูงครับ

    เมื่อเข้าใจคอนเซ็ปต์คร่าวๆ แล้ว เรามาเริ่มติดตั้ง FileZilla Client กันเลยดีกว่าครับ!

    มาเริ่มต้นกันเลย! (วิธีติดตั้ง FileZilla Client)

    1. ดาวน์โหลดโปรแกรม: ขั้นแรก ให้เพื่อนๆ ทำการดาวน์โหลดโปรแกรม FileZilla Client จากเว็บไซต์ทางการโดยตรง เพื่อความปลอดภัยและได้เวอร์ชันล่าสุดครับ (แนะนำ: https://filezilla-project.org/)

    https://filezilla-project.org/

    2. เริ่มการติดตั้ง: เมื่อดาวน์โหลดไฟล์ติดตั้ง (.exe สำหรับ Windows หรือไฟล์ที่เหมาะสมสำหรับ OS อื่นๆ) มาแล้ว ให้ดับเบิลคลิกเพื่อเริ่มกระบวนการติดตั้งครับ ให้ทำตามขั้นตอนที่ Wizard แนะนำไปเรื่อยๆ โดยส่วนใหญ่เราสามารถกด “Next” หรือ “Agree” ได้เลยครับ

    3. เสร็จสิ้นการติดตั้ง: เมื่อติดตั้งเสร็จสิ้นแล้ว เราก็พร้อมเปิดโปรแกรม FileZilla Client ขึ้นมาใช้งานกันได้เลยครับ! หน้าตาโปรแกรมเมื่อเปิดครั้งแรกจะเป็นประมาณนี้

    คู่มือย้ายไฟล์: จาก Web Server (Local) สู่ File Server (Remote) ด้วย FileZilla

    ในสถานการณ์นี้ เราจะจำลองว่า FileZilla Client ของเรากำลังทำงานอยู่บน Web Server (หรือเครื่องที่เราเข้าถึงไฟล์ของ Web Server ได้โดยตรง) ซึ่งจะแสดงผลเป็น “Local Site” (ฝั่งซ้าย) ใน FileZilla และเราต้องการย้ายไฟล์จาก Web Server นี้ไปยัง File Server ปลายทาง ซึ่งเราจะเชื่อมต่อและให้แสดงผลเป็น “Remote Site” (ฝั่งขวา) ครับ

    เพื่อให้เห็นภาพรวมของขั้นตอน ผมขอวาดเป็น Flowchart ง่ายๆ ด้วยภาษา Mermaid ให้ดูกันก่อนนะครับ:

    Code snippet

    graph TD
        A[เริ่มต้น] --> B(เปิดโปรแกรม FileZilla บน Web Server)
        B --> C{เชื่อมต่อ File Server ปลายทางผ่าน Site Manager}
        C --> D[เลือกไฟล์/โฟลเดอร์บน Web Server (Local Site) ที่ต้องการย้าย]
        D --> E[ลากไฟล์/โฟลเดอร์จาก Web Server (Local Site) ไปยัง File Server (Remote Site)]
        E --> F[ตรวจสอบความเรียบร้อยและสิ้นสุด]
    

    เอาล่ะครับ มาดูขั้นตอนแบบละเอียดกันเลย:

    1. เชื่อมต่อ File Server ปลายทาง (Remote Site):

    2. หากยังไม่เคยสร้าง Site มาก่อน หรือต้องการเพิ่มการเชื่อมต่อใหม่ ให้คลิกที่ปุ่ม New Site ครับ (ภาพปุ่ม New Site)จากนั้น ตั้งชื่อ Site ของคุณ (เช่น “My File Server”) แล้วกรอกรายละเอียดการเชื่อมต่อที่สำคัญในแท็บ “General” ครับ:

    • Host: ป้อน IP Address หรือชื่อ Hostname ของ File Server ปลายทาง
    • Username: ชื่อผู้ใช้สำหรับเข้า File Server
    • Password: รหัสผ่านสำหรับเข้า File Server

    3. ทำความเข้าใจโปรโตคอลก่อนเชื่อมต่อ (สำคัญมาก!): ก่อนที่เราจะกด “Connect” ผมอยากให้เราทำความเข้าใจเกี่ยวกับ “Protocol” (โปรโตคอล) ที่จะใช้เชื่อมต่อกันสักนิดครับ เพราะมีผลต่อความปลอดภัยของข้อมูลเรามากๆ

    • SFTP (SSH File Transfer Protocol): ชื่อเต็มคือ SSH File Transfer Protocol (คนละตัวกับ FTPS นะครับ!) ตัวนี้จะแตกต่างจาก FTP โดยสิ้นเชิงครับ SFTP ไม่ได้ทำงานบนฐานของ FTP แต่ทำงานผ่านโปรโตคอล SSH (Secure Shell) ซึ่งมีความปลอดภัยสูงมาก โดยปกติเราจะใช้พอร์ต 22 (พอร์ตเดียวกับ SSH) ในการเชื่อมต่อ วิธีนี้ปลอดภัยกว่า FTP มาก เพราะมีการเข้ารหัสข้อมูลทั้งหมดที่ส่งผ่าน ทำให้มั่นใจได้ว่าข้อมูลของเราปลอดภัยครับ ผมแนะนำให้เลือกใช้ SFTP หาก File Server ของคุณรองรับครับ

    • Storj (Decentralized Cloud Storage): ตัวเลือกนี้เป็นโปรโตคอลสำหรับการเชื่อมต่อกับบริการ Cloud Storage แบบกระจายศูนย์ที่ชื่อว่า Storj ครับ ซึ่งมักจะเป็นฟีเจอร์ใน FileZilla Pro (เวอร์ชันเสียเงิน) แทนที่จะเป็นการโอนไฟล์ไปยัง Remote Server แบบเดิมๆ ก็จะเป็นการโอนไฟล์ไปยัง Cloud Storage ตาม Region ต่างๆ แทนครับให้เพื่อนๆ เลือก Protocol ที่เหมาะสม (แนะนำ SFTP) จากนั้นตรวจสอบ Port ให้ถูกต้อง (SFTP มักจะเป็น Port 22)

    • Logon Type (ประเภทการเข้าสู่ระบบ): ผมแนะนำให้เลือกเป็น Ask for password (ถามรหัสผ่านทุกครั้ง) เพื่อความปลอดภัยสูงสุดครับ เพราะถ้าเลือกเป็น Normal โปรแกรมจะบันทึกรหัสผ่านไว้ ซึ่งหากใครเข้าใช้คอมพิวเตอร์หรือ FileZilla ของเราได้ ก็จะสามารถเชื่อมต่อเซิร์ฟเวอร์ได้ทันที เสี่ยงต่อการถูกแฮกได้ครับ (ภาพตัวเลือก Protocol และ Logon Type ใน Site Manager)

    4. เริ่มการเชื่อมต่อ:

    • เมื่อกรอกข้อมูลครบถ้วนและถูกต้องแล้ว กดปุ่ม Connect ได้เลยครับ FileZilla จะพยายามเชื่อมต่อไปยัง File Server ปลายทาง
    • หากเชื่อมต่อสำเร็จ คุณจะเห็นข้อความสถานะการเชื่อมต่อที่ดี และในหน้าต่างด้านขวา (Remote Site) จะแสดงไฟล์และโฟลเดอร์บน File Server ครับ (ภาพแสดงการเชื่อมต่อสำเร็จ และหน้าต่าง Remote Site ที่มีไฟล์)

    5. เตรียมไฟล์และเริ่มโอนย้าย:

    • ตอนนี้ มาดูหน้าต่างโปรแกรม FileZilla กันครับ:
      • ฝั่งซ้าย (Local Site): นี่คือไฟล์และโฟลเดอร์บน Web Server ของคุณ (เครื่องที่คุณกำลังเปิด FileZilla อยู่ หรือเครื่องที่ FileZilla มองเห็นไฟล์เป็น Local)
      • ฝั่งขวา (Remote Site): นี่คือไฟล์และโฟลเดอร์บน File Server ปลายทาง ที่คุณเพิ่งเชื่อมต่อเข้าไป คุณสามารถค้นหาไฟล์หรือโฟลเดอร์ได้หลายวิธีครับ ไม่ว่าจะเป็นการพิมพ์ Path Directory โดยตรง, การคลิกไล่ดูตามโฟลเดอร์ (Browse), หรือใช้ฟังก์ชันค้นหา (หากมี)
    • ในหน้าต่าง Local Site (ด้านซ้าย – Web Server ของคุณ) ให้ไปยังโฟลเดอร์ที่มีไฟล์ที่คุณต้องการจะย้ายไปยัง File Server ครับ (ภาพแสดงการเลือกไฟล์ใน Local Site)
    • เลือกไฟล์หรือโฟลเดอร์ที่ต้องการจากฝั่ง Local Site (Web Server) จากนั้น ลาก (drag and drop) ไฟล์หรือโฟลเดอร์เหล่านั้นข้ามไปวางยังตำแหน่งที่ต้องการในฝั่ง Remote Site (File Server) ครับ หรือจะคลิกขวาที่ไฟล์/โฟลเดอร์ต้นทางแล้วเลือก “Upload” ก็ได้เช่นกัน
    • รอจนกว่ากระบวนการโอนย้ายไฟล์จะเสร็จสิ้น คุณสามารถดูความคืบหน้าได้ที่แถบด้านล่างของโปรแกรมครับ

    6. ตรวจสอบความถูกต้อง:

    • หลังจากโอนย้ายไฟล์เสร็จสิ้น ควรตรวจสอบความถูกต้องของไฟล์บน File Server (Remote Site) อีกครั้งครับ
    • คุณสามารถตรวจสอบจำนวนไฟล์และขนาดรวมของโฟลเดอร์ได้ในแถบสถานะของ FileZilla หรือโดยการคลิกขวาที่โฟลเดอร์แล้วเลือก ‘Properties’ (คุณสมบัติ) ทั้งบน Web Server (Local Site) และบน File Server (Remote Site) เพื่อเปรียบเทียบครับ

    เยี่ยมไปเลยครับ! ตอนนี้ไฟล์ของคุณก็ถูกย้ายจาก Web Server ไปยัง File Server เรียบร้อยแล้ว

    สำรวจฟีเจอร์น่าใช้บน FileZilla Client

    FileZilla Client ไม่ได้มีดีแค่การโอนไฟล์นะครับ ยังมีเมนูและฟีเจอร์ย่อยๆ ที่น่าสนใจอีกเพียบ ลองมาดูกันครับ:

    • FILE (ไฟล์): สำหรับแท็บนี้ นอกจาก Site Manager ที่เราใช้กันไปแล้ว ยังใช้สำหรับเปิดแท็บการเชื่อมต่อใหม่ (New tab), นำเข้า (Import) หรือส่งออก (Export) การตั้งค่า Site Manager จาก FileZilla เครื่องอื่นก็ได้ ทำให้ไม่ต้องตั้งค่าใหม่ทั้งหมดเมื่อย้ายเครื่องครับ
    • EDIT (แก้ไข): ในแท็บนี้จะมีตัวเลือกสำหรับการตั้งค่าต่างๆ ของโปรแกรม (Settings) เช่น การแก้ไขการตั้งค่าพอร์ตเริ่มต้น, การตั้งค่า Network Configuration Wizard เพื่อช่วยตรวจสอบการตั้งค่า Firewall และ Router ว่าถูกต้องหรือไม่ และยังมีตัวเลือกสำหรับล้างข้อมูลส่วนตัว (Clear private data) เช่น ประวัติการเชื่อมต่อและรหัสผ่านที่บันทึกไว้ (ถ้ามี) ครับ
    • VIEW (มุมมอง): แท็บนี้ใช้สำหรับปรับแต่งการแสดงผลส่วนต่างๆ ของโปรแกรม FileZilla เช่น ซ่อนหรือแสดงแถบ Local, Remote, แถบสถานะ, หรือคิวการถ่ายโอนไฟล์ ทำให้เราปรับหน้าจอให้เหมาะสมกับการใช้งานของเราได้ครับ
    • TRANSFER (การถ่ายโอน): แท็บนี้ใช้เพื่อจัดการกับกระบวนการถ่ายโอนไฟล์ในปัจจุบัน เช่น ดูสถานะการถ่ายโอน, ไฟล์ที่อยู่ในคิวรอการโอนย้าย, ประมวลผลคิวอีกครั้ง (Process Queue) และยังสามารถตั้งค่าประเภทการถ่ายโอนเริ่มต้น (Default transfer type) ได้ด้วยครับ
    • SERVER (เซิร์ฟเวอร์): แท็บนี้มีคำสั่งที่เกี่ยวข้องกับเซิร์ฟเวอร์ที่เรากำลังเชื่อมต่ออยู่ เช่น การป้อนคำสั่ง FTP โดยตรง (Enter custom command), การบังคับให้แสดงรายการไฟล์ในโฟลเดอร์อีกครั้ง (Refresh), หรือการค้นหาไฟล์บนเซิร์ฟเวอร์ (Search remote files) ครับ
    • BOOKMARKS (บุ๊กมาร์ก): หากคุณต้องเข้าถึงโฟลเดอร์ใดโฟลเดอร์หนึ่งบน Remote Server บ่อยๆ คุณสามารถเพิ่มเป็นบุ๊กมาร์กได้จากเมนูนี้ครับ ทำให้คลิกเพียงครั้งเดียวก็เข้าไปยังโฟลเดอร์นั้นได้ทันที สะดวกสุดๆ!

    หลังจากที่เราเชื่อมต่อเซิร์ฟเวอร์ได้แล้ว เราก็สามารถโยนไฟล์ข้ามไปมาได้อย่างอิสระ หรือจะใช้ฟีเจอร์เด็ดอีกอย่างคือการแก้ไขไฟล์บนเซิร์ฟเวอร์โดยตรงก็ได้เช่นกันครับ

    ยกตัวอย่างเช่น บางครั้งเราอาจต้องการเข้าไปแก้ไข Source Code หรือไฟล์ Config เล็กๆ น้อยๆ อย่างเร่งด่วน เราสามารถคลิกขวาที่ไฟล์บน Remote Server แล้วเลือก View/Edit ได้เลย FileZilla จะดาวน์โหลดไฟล์นั้นมาเก็บไว้ชั่วคราว ให้เราเปิดแก้ไขด้วยโปรแกรม Editor ที่เราตั้งค่าไว้ เมื่อเราแก้ไขและกด Save ไฟล์นั้น FileZilla จะตรวจจับการเปลี่ยนแปลงและถามว่าจะอัปโหลดไฟล์ที่แก้ไขกลับไปยังเซิร์ฟเวอร์หรือไม่ เป็นฟีเจอร์ที่ช่วยประหยัดเวลาได้มากโขเลยครับ

    FileZilla Server คืออะไร? ใครควรใช้?

    นอกจาก FileZilla Client ที่เราเน้นใช้งานกันแล้ว ยังมี FileZilla Server ด้วยนะครับ ซึ่งตามชื่อเลยครับ ตัวนี้จะทำหน้าที่เป็น “เซิร์ฟเวอร์” ให้ผู้อื่นเชื่อมต่อเข้ามาเพื่อรับส่งไฟล์ FileZilla Server รองรับโปรโตคอล FTP, FTPS (FTP over SSL/TLS), และ SFTP (สำหรับเวอร์ชัน Pro หรือเมื่อคอมไพล์เองกับไลบรารีที่รองรับ) เพื่อให้มั่นใจว่าไฟล์ที่ส่งผ่านนั้นถูกเข้ารหัสและปลอดภัย

    โดยในหน้าจอการตั้งค่า (GUI – Graphical User Interface) ของ FileZilla Server นั้นก็จะมีฟีเจอร์ให้ปรับแต่งได้มากมาย เช่น การสร้าง User และ Group, การกำหนดสิทธิ์การเข้าถึงโฟลเดอร์, การจำกัดความเร็ว, การกรอง IP Address และอื่นๆ อีกมากมายครับ เหมาะสำหรับคนที่ต้องการตั้ง FTP Server ส่วนตัว หรือใช้ภายในองค์กรครับ

    จริงๆ แล้วยังมี FileZilla Pro ที่รวมความสามารถทั้ง Client และ Server พร้อมฟีเจอร์ขั้นสูงอีกมากมาย แต่เนื่องจากผมเองยังไม่เคยได้ใช้งานเวอร์ชัน Pro อย่างเต็มรูปแบบ จึงขอละรายละเอียดในส่วนนี้ไว้ก่อนนะครับ

    โหมดของ FTP: Active และ Passive ต่างกันอย่างไร?

    สำหรับเพื่อนๆ ที่ใช้ FTP (แบบดั้งเดิมหรือ FTPS) อาจจะเคยสงสัยเกี่ยวกับ “โหมด” การเชื่อมต่อของ FTP ซึ่งหลักๆ แล้วมีอยู่ 2 โหมด คือ Active Mode และ Passive Mode ครับ สองโหมดนี้มีความแตกต่างกันในเรื่องของวิธีการที่ Client และ Server สร้างช่องทางการสื่อสารสำหรับส่งข้อมูล (Data Channel) ครับ

    1. Active Mode (แอคทีฟโหมด): ในโหมดนี้ Client จะเป็นคนเริ่มต้นการเชื่อมต่อ Command Channel (ช่องทางส่งคำสั่ง) ไปยัง Server จากนั้น Client จะ “บอก” Server ว่าจะให้ Server เชื่อมต่อ Data Channel กลับมาหา Client ที่ IP Address และ Port ไหน เมื่อ Server ได้รับข้อมูลแล้ว Server ก็จะเป็นฝ่าย “เริ่มต้น” การเชื่อมต่อ Data Channel กลับมายัง Client ครับ ปัญหามักจะเกิดถ้า Client อยู่หลัง Firewall หรือ NAT Router ซึ่งอาจจะบล็อกการเชื่อมต่อที่เข้ามาจาก Server ครับ
    2. Passive Mode (พาสซีฟโหมด) (เป็นค่าเริ่มต้นใน FileZilla): เพื่อแก้ไขปัญหาของ Active Mode จึงเกิด Passive Mode ขึ้นมาครับ ในโหมดนี้ Client จะเป็นคนเริ่มต้นทั้ง Command Channel และ Data Channel ครับ โดย Client จะส่งคำสั่ง PASV ไปยัง Server จากนั้น Server จะตอบกลับมาพร้อมกับ IP Address และ Port Number ที่ Server ได้เปิดรอไว้สำหรับ Data Channel แล้ว Client ก็จะใช้ข้อมูลนั้นในการเริ่มต้นการเชื่อมต่อ Data Channel ไปยัง Server ครับ วิธีนี้มักจะทำงานได้ดีกว่าเมื่อ Client อยู่หลัง Firewall เพราะ Client เป็นฝ่ายเริ่มการเชื่อมต่อออกไปทั้งหมด

    โดยทั่วไปแล้ว FileZilla Client จะตั้งค่าเริ่มต้นเป็น Passive Mode ซึ่งมักจะไม่มีปัญหาในการใช้งานครับ

    บทสรุป: ก้าวต่อไปกับการจัดการไฟล์ของคุณ

    การมาถึงของเทคโนโลยี FTP และโปรแกรมอย่าง FileZilla ได้ทำให้การถ่ายโอนไฟล์ระหว่างเครื่องคอมพิวเตอร์และเซิร์ฟเวอร์เป็นเรื่องที่ง่าย สะดวก และมีประสิทธิภาพมากขึ้นอย่างเห็นได้ชัด ไม่ว่าคุณจะเป็นนักพัฒนาเว็บไซต์, ผู้ดูแลระบบ, หรือผู้ใช้งานทั่วไปที่ต้องการจัดการไฟล์บนเซิร์ฟเวอร์ FileZilla ก็เป็นเครื่องมือหนึ่งที่ตอบโจทย์ได้อย่างยอดเยี่ยมครับ

    สำหรับก้าวต่อไปคุณสามารถประยุกต์ Concept นี้ไปใช้กับการเขียนโค้ด หรือว่าประยุกต์กับ การเขียนสคริปต์ หรือ ทำ Automation เพื่อให้การถ่ายโอนข้อมูลมีประสิทธิภาพไร้รอยต่อมากยิ่งขึ้น

    หวังว่าคู่มือนี้จะเป็นประโยชน์และช่วยให้เพื่อนๆ เข้าใจวิธีการใช้งานโปรแกรม FileZilla ได้ดียิ่งขึ้นนะครับ ลองนำไปปรับใช้กับการทำงานของตัวเองดู แล้วจะพบว่าการจัดการไฟล์บนเซิร์ฟเวอร์ไม่ใช่เรื่องยากอีกต่อไป! หากมีคำถามหรือข้อเสนอแนะเพิ่มเติม สามารถคอมเมนต์ไว้ได้เลยนะครับ แล้วพบกันใหม่ในบทความหน้าครับ!

    Reference