ติดตั้ง/ปรับแต่ง DirectAdmin เพื่อให้รองรับจำนวนคนจำนวนมาก

อันนี้เป็นประสบการณ์กากๆของผมที่ทำต้องจัดการให้เซิฟเวอร์ที่ใช้ DirectAdmin อยู่ สามารถรองรับจำนวนคนได้เยอะๆครับ วิธีการง่ายๆดังนี้ครับ

  1. ปรับ Web Server ให้ใช้ Nginx เป็น Reverse Proxy (อ้างอิงวิธีการจาก ลิงค์นี้)
    1. ก่อนอื่นสำหรับ คนที่ติดตั้ง DirectAdmin ไปแล้วต้องมั่นใจว่า CustomBuild ต้องมากกว่าเวอร์ชั่น 2 สามารถตรวจสอบได้โดย SSH เข้าไป แล้วใช้คำสั่งดังนี้
      cd /usr/local/directadmin/custombuild
      ./build version

      ดูว่าเลขหน้าสุดเป็นเลข 2 ไหมครับ ถ้าไม่ ให้ทำการปรับ CustomBuild เป็นเวอร์ชั่น 2 ครับ โดยสามารถทำได้ตามลิงค์นี้ครับ หรือสั่งคำสั่งด้านล่างนี้ครับ (คำเตือน Backup ทุกอย่างก่อน Update ทุกครั้ง)

      cd /usr/local/directadmin
      mv custombuild custombuild_1.x
      wget -O custombuild.tar.gz http://files.directadmin.com/services/custombuild/2.0/custombuild.tar.gz
      tar xvzf custombuild.tar.gz
      cd custombuild
      ./build
      ./build all d
      ./build rewrite_confs
    2. ติดตั้ง Nginx เป็น Reversed Proxy ซึ่งตรงนี้ทาง DirectAdmin เริ่ม Support การติดตั้งอัตโนมัติแล้ว สามารถทำได้ตามคำสั่งด้านล่างนี้ครับ
      cd /usr/local/directamin/custombuild
      ./build update
      ./build update_da
      ./build set webserver nginx_apache
      ./build nginx_apache
      ./build rewrite_confs
    3. เมื่อติดตั้งเสร็จแล้ว มันยังมีปัญหานิดหน่อยครับ คือตัว Apache ทีให้บริการ Web App นั้นมอง IP ของเซิฟเวอร์เองเป็น Client เนื่องจากวิ่งผ่าน Nginx จึงต้องลง mod เพิ่ม ดังนี้ครับ
      cd /usr/local/src
      wget https://github.com/y-ken/mod_rpaf/archive/master.zip
      unzip master.zip
      cd mod_rpaf-master
      /bin/sed -i "s/remote_/client_/g" mod_rpaf-2.0.c
      make && make install

      จากนั้นไปที่ /etc/httpd/conf/extra/httpd-includes.conf  แล้วเพิ่มข้อความต่อไปนี้ลงล่างสุดครับ

      LoadModule rpaf_module      /usr/lib/apache/mod_rpaf-2.0.so
      <IfModule mod_rpaf-2.0.c>
          RPAFenable On
          RPAFproxy_ips 127.0.0.1
          RPAFsethostname On
          RPAFheader X-Client-IP
      </IfModule>
  2. ปรับแต่งเซิฟเวอร์เพื่อให้รองรับคนจำนวนมากได้ (จำเป็นค่อนข้างมาก ไม่งั้นอาจจะเจอ Bad Gateway หรือ Gateway Timeout บ่อย)
    1. ปรับแต่ง Kernel Queue เพื่อให้รับการเชื่อมต่อจำนวนมากๆได้ โดยใช้คำสั่งต่อไปนี้
      sysctl -w net.core.somaxconn=100000

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf

      net.core.somaxconn=100000
    2. ปรับแต่ง Port ที่ระบบใช้ได้ให้มากกว่าเดิม โดยใช้คำสั่งต่อไปนี้
      sysctl -w net.ipv4.ip_local_port_range="10000 65535"

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf

      net.ipv4.ip_local_port_range=10000 65535
    3. ปรับแต่งให้ปิดการเชื่อมต่อได้เร็วขึ้น เพื่อเอาไปใช้รับการเชื่อมต่อใหม่ โดยใช้คำสั่งต่อไปนี้
      sysctl -w net.ipv4.tcp_tw_reuse=1

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf

      net.ipv4.tcp_tw_reuse=1
    4. อันนี้ผมจำไม่ได้ว่ามันทำอะไรครับ แต่เห็นเซิฟเวอร์ปัจจุบันมี และคิดว่าค่อนข้างสำคัญ
      sysctl -w net.ipv4.ip_nonlocal_bind=1

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/sysctl.conf

      net.ipv4.ip_nonlocal_bind=1
    5. ปรับแต่งเพิ่มจำนวนไฟล์สูงสุดที่ 1 โปรเซสเปิดได้ให้มากที่สุด โดยใช้คำสั่งต่อไปนี้
      ulimit -n 999999

      และเพิ่มบรรทัดต่อไปนี้ลงในไฟล์ /etc/security/limits.conf

      * soft nofile 999999
      * hard nofile 999999
  3. ปรับแต่งให้ Nginx ให้บริการ Static File (ไฟล์ที่ไม่ประมวลผลเช่นภาพเป็นต้น) โดยไม่ผ่าน Apache เพราะ Nginx สามารถทำงานด้านนี้ได้ดีกว่า Apache มาก (คำเตือน วิธีนี้จะทำให้ส่วนที่ถูกซ่อนไว้ โดย Password Protected Directories ของ DirectAdmin อาจจะทำให้ข้อมูลที่ถูกซ่อนบางส่วนหลุดไปได้โดยไม่ถามรหัสผ่าน แต่ผมว่าในเคสทั่วไปไม่ค่อยมีคนใช้) โดยสั่งคำสั่งดังต่อไปนี้
    cd /usr/local/directadmin/data/templates/custom
    wget "https://www.ishare.in.th/wp-content/uploads/2015/02/conf.zip"
    unzip conf.zip
    rm -f conf.zip
    cd /usr/local/directadmin/custombuild
    ./build rewrite_confs
    service nginx reload

    เพียงเท่านี้ Nginx ก็จะให้บริการ Static File ส่วนมากให้ทันที (ผมอาจจะ list ไม่หมดเพราะผมก็ไปคัดลอกจากที่อื่นมาครับ)

เพียงเท่านี้ก็คิดว่าเซิฟเวอร์ปัจจุบันของท่านก็น่าจะรับโหลดเพิ่มขึ้นได้อีกเยอะครับ หากยังไม่สามารถรองรับได้อีก อาจจะต้องปรับ nginx ให้ cache หน้าที่ประมวลผลไว้สักหน้าละ 10 – 60 วิ แล้วแต่กรณีไป แต่พอดีที่ๆผมทำงาน Implement ระบบ Cache ด้านในไว้ เลยไม่มีปัญหามากครับ

วิธีใช้ Font TH Sarabun ใน Google Drive

หลายๆคนอาจจะไม่รู้ว่า Google Drive นั้นสามารถที่จะใช้ฟอนต์ TH Sarabun ได้ ทำให้ทุกวันนี้เวลาทำรายงานจึงต้องโหลดไฟล์กลับมาแก้ฟอนต์ทีหลัง

โดยเรามีวิธีง่ายๆดังนี้ครับ

  1. ต้องลงฟอนต์ TH Sarabun PSK ในเครื่องก่อน (ย้ำนะครับ TH Sarabun PSK ใช้ TH Sarabun News ไม่ได้ครับ) สามารถดาวโหลดได้จาก ที่นี่ หรือ ที่นี่
  2. จากนั้นให้ไปที่เอกสารที่ต้องการจะใช้ฟอนต์นี้ครับ
  3. กดไฟล์ ไปที่ภาษา แล้วเลือกไทยครับ ดังภาพนี้ครับ
    เปลี่ยนภาษาของเอกสารเป็นภาษาไทย เพิ่มเปิดใช้ฟอนต์ TH Sarabun PSK
  4. เพียงเท่านี้เราก็จะได้ฟอนต์ TH Sarabun PSK ลงใน Google Doc ของเราให้ใช้งานแล้วครับ
    ฟอนต์ TH Sarabun PSK แสดงใน Google Drive แล้ว

[SOLVE] เจอ Sorry, you can’t view or download this file at this time. ใน Google Drive แก้อย่างไร [ฉบับปรับปรุง]

ปัญหา

สำหรับใครที่ใช้ Google Drive อยู่เวลาจะโหลดไฟล์อะไรบางท่านอาจจะเจอแบบนี้picture show Sorry, you can't view or download this file at this time.

สาเหตุ

ไม่ ทราบแน่ชัด จากการ search จาก google ผมได้ความมาว่าหากมีการโหลดเกิน 28 ครั้ง ในครั้งที่ 29 จะขึ้นมา(คาดว่าเป็น 28 ครั้งต่อเดือน มั้งครับ) แต่ตอนผมลองทำดันโหลดได้เป็น 100 เลยครับ ไม่แน่ใจเลยครับ อาจจะนับ BW ขาออกรวมมั้งครับ

วิธีแก้

วิธีแก้ในกรณีของผู้อับโหลดผมไม่ทราบครับ คงต้องติดต่อ google drive เอาเอง

แต่ในกรณ๊ที่เราเป็นผู้โหลด สามารถแก้ได้ดังนี้ครับ

สิ่งที่ต้องเตรียม

  1. ลิงด์สำหรับโหลดไฟล์นั้น
  2. บัญชี Google ที่มี Google Drive และมีเนื้อที่เหลืออย่างน้อย 2 เท่าของขนาดไฟล์ที่ต้องการโหลด (เช่นจะโหลดไฟล์ขนาด 100 MB ต้องเหลือมากกว่า 200 MB)

เริ่มโหลดกัน

  1. ล้อกผินเข้าบัญชี Google เพื่อใช้งาน Google Drive
  2. เข้าไปยังลิงค์ Download อย่างไฟล์ที่ผมต้องการโหลดคือ ลิงค์นี้ (มัน อาจจะไม่โดน Limit นะครับ พอดีตัวที่ผมต้องการโหลดจริงๆ มันของละเมิดลิขสิทธิ์ ไม่อยาก reshare หรือ hotlink ครับ อันนี้เป็นเอกสารที่ผมจะเอามาอ่านเพิ่มเติม เพราะของที่เรียนมันเป็นอังกฤษ ขี้เกียจแปล)
  3. ค้นหาตัว ID ของไฟล์ให้ได้ ในกรณีของผมคือ 0B_8iG7NZUFynUXRIT2pKRlRNWms (มันอยู่ในลิงค์อ่ะครับ ส่วนมากอยู่กลัง id= และอยู่ก่อน & หรืออาจจะเป็นตัวแปลกๆยาวๆครับ สังเกตไม่ยาก)
  4. เข้าไปที่ https://developers.google.com/drive/v2/reference/files/copy#try-it
  5. ดูตรงส่วนของ Try It มองหา Authorize requests using OAuth 2.0: ถ้าเป็น Off ให้กดที่ Off เพื่ออนุญาติ API
    Where switch in API Page
  6. จากนันมันจะถาม Permission ให้กด Authorize ไป
  7. จากนั้นให้เอา ID ของไฟล์ใส่ใน fileId แล้วกด Execute ด้านล่าง (ปุ่มสีแดง)
  8. เข้าไปดูใน Google Drive ของเราจะเห็น file เพิ่มขึ้นมาสามารถโหลดจากไฟล์นั้นได้ครับ

บันทึกทำ RAPTOR ให้ RUN แบบ Command Line บน Linux ได้

แบบสำเร็จรูป

ดาวโหลดนี่ WineINW มัน เป็น .wine ให้เอาไปใส่ใน home folder ของ user ที run (ตัวนี้ยังไม่สามาร ใช้ /compile ได้ ถ้าอยากใช้ต้อง PATCH ก่อน ดูด้านล่งสุด)

วิธีใช้

  1. ให้ แตก wine_inw.tar.gz ไปไว้ที่ ~ (home directory)
  2. จบแลว แต่เพื่ทดสอบให้ลองสร้าง test.rap ให้สั่งปริ้นอะไรออกมาก็ได้ แลวสั่ง
    wine C:\\RAPTOR\\raptor.exe ./test.rap /run in.txt out.txt (หรือแบบนี้หว่าจำไม่ได้ wine C:\\RAPTOR\\raptor.exe ./test.rap /run < in.txt > out.txt ลองทำทั้ง 2 แบบแล้วกัน)
    จำเป็นต้องใช้ ./test.rap ไม่สามารถย่อเหลือแค่ test.rap ได้ เพราะมันจะ bug เหมือนมันไม่มองเป็น path ไรนี่แหละขี้เกียจดู 

วิธีทำแบบยาว

  1. ต้องแก้ Code โดยทำตามนี้ก่อน
  2. จากนั้นสามารถโหลด Code ตัวนี้ไป Compile เพื่อให้ได้ RAPTOR ที่สามารถใช้งานบน Pure CLI ได้
  3. หลังจาก Compile แล้ว ถ้าเป็นตาม code ผม เหมือนจะวางไฟล์ผิด ให้เอา raptor.exe ใน bin/Debug ไปวางทับของปกติ ถึงจะสามารถใช้ได้
  4. ต่อ มาเราต้องเตรียม Linux(ผมทำสอบบน ubuntu 12.04) โดยตอนนี้ต้องเป็น linux desktop เท่านั้น เพื่อให้สามารถลง .NET Framework และ Mono ได้
  5. ลง wine ( sudo apt-get install wine )
  6. หลัง จากนั้นให้ติดตั้ง .NET Framework(ถ้าจำไม่ผิดใช้ 2.0 กับ 4.0 แต่ถ้าไม่ลงก็อาจจะได้เหมือนกัน) และ Mono ผ่านทาง winetricks (ทางอื่นน่าจะได้ แต่แบบนี้สำหรับผมง่ายดี)
  7. กอปตัว RAPTOR ทั้งหมดมาวางใน ~/.wine/drive_c/ หรือที่อื่นก็ได้ตามสะดวกแหละ
  8. จากนั้นลองทดสอบตามด้านบนดู (ถ้าถูกต้อง มันจะไม่มี MsgBox หรือ GUI อะไรเด้งขึ้นมาทั้งนั้น)
  9. ถ้าทดสอบแล้วผ่าน ให้กอป ./wine ไปวางที่ home directory ของ user ที่จะใช้บน server ได้
  10. ติดตั้ง wine บน server

จบ

Patch สำหรับทำห้ใช้ /compile ได้

สามารถ Download ได้จากที่นี่ หรือเอาจากที่ compile ใหม่จากด้านบนก็ได้ โดยเอาไปวางทับใน ~/.wine/drive_c/RAPTOR/ จบ

วิธีใช้คือ สั่ง wine C:\\RAPTOR\\raptor.exe ./test.rap /compile จะได้ compiled.exe ออกมา(ขี้เกียจทำชื่อ dynamic เลย fix ชื่อนี้เลย 55)
สามารถสั่งให้ทำงานได้โดย wine ./compiled.exe 

เพิ่มเติม

เนื่องจากปกติ wine เปิด Debug ไว้ทำให้มันจะมีอะไรหลุดมาตอน run เป็นพรวนเลย สามารถเอาออกได้โดยการสั่ง WINEDEBUG=-all ไว้ด้านหน้า เช่น
WINEDEBUG=-all wine C:\\RAPTOR\\raptor.exe ./test.rap /run < in.txt > out.txt หรือ
WINEDEBUG=-all wine ./compiled.exe

ข้อมูลสำคัญที่จะเป็นน่าจะหมดแล้ว คราวหน้าเวลางมต่อจะได้ง่ายๆ 555

เบื่อมั้ยกับ App ตอบคำถามทายใจใน Facebook เรามีขั้นตอนซ่อนง่ายๆใน 4 วิธี

โพสนี้ เกิดจากการที่ผมรำคาญโพสของแอปทายใจของทาง Dek-D ครับ คือมันเป็นที่นิยมจนเกินไป ไม่ใช่อะไรมันเยอะขนาดหาโพสอื่นไม่ค่อยเจอ เลื่อนมา 2-3 โพสเจออีกแล้ว รวมทั้งผมไม่ได้สนใจโพสพวกนี้อยู่แล้วด้วย ผมเลยแบน App นี้ออกจาก new Feed บน Facebook ผม และผมเชื่อว่าหลายๆคนประสบปัญหาเดียวกันกับผม ผมจึงเขียน blog นี้ขึ้นเพื่อเป็นแนวทางให้หลายๆคน ทำการซ่อนโพสซึ่งเกิดจาก app ทายใจของ Dek-D

วิธีการซ่อนโพสทายใจบน Facebook มีขั้นตอนดังนี้

  1. เข้า หน้า New Feed  บน Facebook จากนั้น หาโพสที่เป็นผลการทายใจ เลื่อนเมาส์ทับโพสทายใจนั้น จากนั้นที่มุมขวาบนจะมีลูกศรขึ้นามาให้กดลงไปครับ
    หาโพสทายใจของ Dek-D แล้วกดลูกศรมุมขวา
  2. จากนั้นกด Hide all from Dek-D (กดให้ถูกนะครับ อย่าไปเผลอกด Hide ของเพื่อนนะครับ) เป็นการบอก Facebook ว่าเราจะซ่อนโพสที่มาจาก Dek-D จาก New Feed ทั้งหมด
    กด Hide all from Dek-D เพื่อซ่อนโพสทายใจ
  3. กด It’s annoying or not interesting (อันแรก) เพื่อบอก Facebook ว่าโพสนี้รบกวนฉันหรือฉันไม่สนใจโพสทายใจเหล่านั้น
    กด it's annoying ot not interesting
  4. กด  It’s advertising something I don’t care about (อันที่ 3) เพื่อบอกว่าโพสทายใจเหล่านี้เป็นการโฆษณาบางอย่างที่เราไม่สนใจครับ
    กด It's advertising something I don't care about เพียงเท่านี้โพสทายใจเหล่านั้นก็จะถูกซ่อนให้น้อยลงแล้วครับ แต่ไม่ได้หมายความว่าจะหมดไปนะครับ ถ้าหากมีเพื่อนเราไปโพสข้างใต้โพสเหล่านั้น มันก็จะเด้งกลับมาหน้า New Feed บน Facebook เหล่านั้นได้ครับ (แต่โดยปกติไม่น่ามีเยอะนะครับ)