สอนเซ็ต VPS สำหรับ WordPress เป็นมิตรกับคนไม่เก่ง Linux ม๊ากมาก

Earthchie Thanarat
Earthchie
Published in
3 min readMay 4, 2018

เนื่องด้วยช่วงนี้ มีเหตุการณ์ที่คนรอบตัว มีปัญหา Shared Hosting เยอะมาก พอเราไปแนะนำว่า ให้เช่า Cloud สิ ก็มักจะได้รับคำตอบว่าคอนฟิกไม่เป็น

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

แต่ถ้ามองดีๆ จะพบว่า พวก Web Dev สายอื่น ที่ไม่ใช่ PHP เค้าก็คอนฟิก server กันได้เองเป็นปกติ โดยเฉพาะพวก Nodejs น่าจะคุ้นเคย command line กันมาก แล้วทำไม กะอีแค่เขียน PHP จะทำให้คนคนนั้น เซ็ตอัพ server ใช้เองไม่ได้ ลองลดกำแพงในใจดู แล้วจะพบว่า อันที่จริง ทำแบบง่ายๆ ก็ทำได้เว้ย!

ก่อนจะไปต่อ มาเปรียบเทียบข้อดีข้อเสียก่อนดีกว่า

Cloud VPS ดีกว่า Shared Host ที่…

  • ไม่ต้องไปแย่ง/แบ่ง ทรัพยากร จำพวก CPU, RAM, Disk, Bandwidth กับใคร
  • จัดการได้เต็มร้อย อยากแก้ php.ini แค่ไหนก็ทำ
  • ลงอะไรแปลกๆ เพิ่มได้ด้วย เช่น GitLab หรือ ทำ cronjob

Cloud VPS ด้อยกว่า Shared Host ที่…

  • เนื่องจากได้เสป็คมากกว่า มันจึงแพงกว่า ถูกสุดน่าจะอยู่ที่เดือนละ $5 ซึ่งตกปีละราวๆ 2,000 บาท ในขณะที่ Shared Host ถูกสุดแค่ปีละไม่กี่ร้อย (เคยเจอปีละ 199 บาทด้วยแว้บๆ ที่ไหนจำไม่ได้)
  • ไม่มี Control Panel ให้ จะลงเองก็ได้ แต่ค่า License แอบแพง ตัวฟรี ก็ไม่ค่อยเก่ง ใช้แล้วขัดใจเปล่าๆ (แนะนำว่า หัดใช้งานแบบไม่มี Control Panel ดีกว่า เดี๋ยวสอน อ่านต่อไปๆ)
  • ไม่มี Web Mail ให้ ซึ่ง ก็ไม่ใช่เรื่องใหญ่อะไร ปกติ Web Mail ตาม Shared Host มันก็ตกถังแสปมตลอดอยู่แล้ว และถ้าอยากมีจริงๆ ก็ลงเองได้ เช่น RoundCube แต่ให้ดีสุด ใครอยากมีอีเมลโดเมนตัวเองฟรี แนะให้ใช้ Zoho แต่ถ้าอยากเสียตังก็ Gmail เลยจ้า

เลือก CloudVPS ที่ไหนดี?

  • ส่วนตัวผมใช้ Scaleway ราคาถูกดี ผมใช้แพลน 7.99 Euro อยู่ ข้อเสียคือ เซิร์ฟอยู่ฝรั่งเศส มันจะช้าๆ หน่อย ปิงราวๆ 200ms แต่ใช้ CloudFlare ก็ช่วยได้เยอะ
  • DigitalOcean เป็นหนึ่งในตัวเลือกที่ดีมาก แพลน $20 คุ้มดี หาคูปองฟรีง่ายด้วย ยิ่งถ้ามีอีเมลนักศึกษา สามารถเอาไปกดรับ GitHub Education Pack ได้
  • Bangmod.cloud ของคนไทยเราเองนี่แหละ เจ้าของใจดีมาก บางทีก็ไม่เก็บตัง #ผิด
  • Vultr อันนี้ส่วนตัวยังไม่เคยใช้ น่าจะพอๆ กับ DigitalOcean

ต่อไป เป็นสิ่งที่ควรรู้ เกี่ยวกับสิ่งที่จะสอนในบทความนี้

แล้ววันนี้จะสอนเซ็ทอัพอะไรบ้าง

  • สอนทุกอย่างที่ทำให้เราไม่ต้องง้อ Cloudways
  • ตามนี้เลย https://hub.docker.com/r/linuxconfig/lemp/
  • คร่าวๆ ก็ Nginx, PHP7.0, MariaDB
  • มี PHPMyAdmin ให้ด้วย

เทคโนโลยีที่จะได้สัมผัส

  • Nginx เว็บเซิร์ฟเวอร์ที่เก่งมากๆ ถึงจะรัน PHP ได้ไม่เก่งเท่า Apache แต่ก็มีความสามารถด้านอื่นที่เก่งกว่าเพียบ เช่น Reverse Proxy, Caching
  • MariaDB ใช้แทนที่ MySQL ได้ทุกอย่าง แต่ประสิทธิภาพดีกว่า
  • tmux เผื่อเน็ตตัดกลางทาง จะได้เข้าไปทำต่อจากเดิมได้ รายละเอียดเพิ่มเติม เรศเคยสอนแล้ว ตามไปอ่านได้เลยที่ไผบ่มัก tmux
  • docker ช่วยให้เซ็ทอัพได้ไวขึ้นมากกกก ถึงแม้ที่สอนใช้วันนี้ จะไม่ใช่ best practice สำหรับการใช้ docker ก็เถอะ…

เข้าเรื่องซักที

คำส่ังผมอิงจาก Ubuntu นะครับ (เวอร์ชันไหนก็ได้ เอา LTS อันล่าสุดไปเลยก็ดี) ดังนั้นแนะนำให้สร้าง instance เป็น Ubuntu ก่อน หลังจาก ssh เข้าเครื่อง server ได้แล้ว ก็พิมพ์คำสั่งที่แปะไว้ให้ได้เลยครับ ทำไปทีละคำสั่ง

อัพเดต server ให้เรียบร้อย

apt-get updateapt-get upgradeapt-get install tmux docker.io -y

เข้าใช้ tmux

tmux new

หลังจากนี้ ถ้าเน็ตหลุดไป เวลา ssh กลับมาแล้วก็พิมพ์ tmux a มันจะพากลับมาที่จุดเดิม ทำต่อจากเดิมได้เลย

เริ่มลง lemp โดยใช้ docker

docker pull linuxconfig/lempdocker run --name=lemp -d -p 80:80 -p 3306:3306 -v /var/www/:/var/www/ --restart always linuxconfig/lempdocker exec -it lemp bash

อัพเดต container

apt-get updateapt-get upgrade

ลง phpmyadmin + image magick

apt-get install phpmyadmin php-imagick -yphpenmod mcrypt imagick

ย้ายคอนฟิกมาไว้ในที่ที่แก้ง่ายๆ จะได้แก้ได้จากนอก container

mv /etc/nginx/nginx.conf /var/www/nginx.main.confln -s /var/www/nginx.main.conf /etc/nginx/nginx.conftouch /var/www/nginx.confln -s /var/www/nginx.conf /etc/nginx/conf.d/nginx.conf

เตรียมพวก directory

mkdir /var/www/html/mkdir /var/www/logs/

เอา phpmyadmin directory มาวางไว้ใน default web directory

ln -s /usr/share/phpmyadmin /var/www/html/phpmyadmin

Reboot container

exitdocker restart lemp

เสร็จละ ต่อไปมาทำความรู้จัก Server ใหม่ของเรากันดีกว่า

  • PHPMyAdmin อยู่ที่ http://ip_address/phpmyadmin
    username: admin
    password: pass
    อย่าลืมเปลี่ยนรหัสผ่านด้วยล่ะ!
  • Default web directory อยู่ที่ /var/www/html/
  • เพิ่มลดโดเมน ให้แก้ที่ /var/www/nginx.conf
  • แก้ /var/www/nginx.conf เสร็จแล้วต้อง reload ด้วย เอาง่ายๆ ก็สั่ง docker restart lemp หรือถ้าอยู่ใน container อยู่แล้ว สั่ง service nginx reload
  • ไม่มี FTP? ไม่ยาก เหมือน SSH นั่นแหละ เข้าด้วยโปรโตคอล SFTP ที่พอร์ท 22 ได้เลย

วิธีเพิ่มลดโดเมน

ไม่ยากๆ ก่อนอื่น SFTP เข้าไปที่ /var/www/ แล้วแก้ไขไฟล์ nginx.conf

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

server {    server_name mydomain.com www.mydomain.com;
charset utf-8;
root /var/www/mydomain; #จะเอาไปไว้ไหนก็แก้ไขตามใจเลย
index index.php;
# ใช้ทดแทน mod_rewrite ทำให้ WordPress ใช้ custom url ได้
location / {
try_files $uri $uri/ /index.php?$args;
}
# ทำให้ Nginx รันไฟล์ PHP ได้
location ~ \.php$ {
include /etc/nginx/snippets/fastcgi-php.conf;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
}
}

อัพโหลดขึ้นไปทับของเดิมให้เรียบร้อย แล้วไปที่ command line แล้วสั่ง

docker restart lemp

หรือถ้าอยู่ใน container อยู่แล้ว ให้สั่งแบบนี้แทน

service nginx reload

แค่นี้ก็เป็นอันเสร็จสิ้น เวลาอัพไฟล์ของเว็บนี้ ก็เอาไปใส่ไว้ใน /var/www/mydomain/

ใครมีคำถาม ถามทิ้งไว้ได้เลยจ้า

จบ.

--

--