Ubuntu 101: Web Server on Linux

การสร้าง Server เองภายในบ้าน ด้วย Linux

1. Install OS
ก่อออื่นต้อง เลือกระบบปฎิบัติการ Linux เราแนะนำ 3 อันนี้

CentOS ข้อดีคือมันมี Community ที่ค่อนข้างดี และอยู่บนพื้นฐานของ RedHat ดูแลอยู่ มันถือเป็นตัวเลือกแรกสำหรับ web Server ในปัจจุบัน

Debian เป็นทางเลือกที่ดีกว่าสำหรับคนที่คุ้นเคยกับ Debian  สิ่งที่่ต่างกันคือ Debian ใช้ apt-get และ deb ขณะที่ CentOS ใช้ yum และ rpm 

Ubuntu ถือเป็น Linux ที่ฮิตที่สุด เพราะคนส่วนใหญ่คุ้นเคยกับ Ubantu มากกว่า  

ในที่นี้เราเลือก Ubantu โดยต้องเลือกเป็น Server edition   (มันต่างกับ Desktop คือ Server  มันไม่ต้องใช้ จอ เม้าส์ คีย์บอร์ด (ยิ่งรันบน Server แบบ Rack มันไม่มีพวกนี้) เพราะมันจะ ใช้เครื่องอื่นเข้ามาทำงาน ผ่าน SSH เราเรียก Server แบบนี้ว่า Headless 

แตความจริงแล้ว Ubantu Server มันต่างกับ Desktop  คือ
1.User Interface (UI) ที่ Server จะไม่มี (แต่ตัวนี้จะเป็นตัวที่กินทรัพยากร มากๆ ทำให้ Server Edition มันมีประสิทธิภาพสูงกว่า
2. โปรแกรมที่ติดมาด้วย Server จะไม่มีโปรแรม Multimedia และ Browser ติดตั้้งมาด้วย
3. Desktop จะง่ายต่อการติดตัั้ง และ ใช้งาน Database กว่า 

วิธีการ Install Ubantu 
- เลือกภาษา
- Install 
- ตั้งชื่อ Host name อะไรก็ได้
- Set Time Zone
-  คราวนี้ โปรแกรมจะให้เราทำการ Partition HDD  
-  ตอนนี้ ระบบจะให้ใส่ Full Name
-  ถัดมา จะให้ตั้ง Username ให้ตั้งเป็น root และใส่ Password
-  ถึงตรงนี้ มันจะถามว่า จะใช้ http proxy รึเปล่า ถ้าไม่ ให้เว้นว่าง แล้วกด Continue เลย

ต่อไปนี้เป็นข้อควรระวัง ต้องตั้งใจ Set ให้ดี เพราะเป็นการเลือกว่า จะเลือกลง Server อะไรบ้าง

 - จะเลือกอะไรให้ เคาะ Space bar (ไม่ใช่กด Enter)

เมื่อลงเสร็จแล้ว เราจะให้มัน Reboot และกรอก Login Password เพื่อเข้าใช้งาน แต่ก่อนจะดำเนินการอย่างอื่น เราจะให้ มัน Update ทั้งหมดก่อน ด้วยการพิมพ์ว่า 

sudo aptitude update && sudo aptitude dist-upgrade

มันจะถาม Password อีกครั้ง แล้วมันถึงจะ Update ให้ เมื่อมัน Update เสร็จ ก็ต้อง reboot อีกครั้ง

sudo shutdown -r now

(การใช้คำสั่ง sudo นั้น มันเสมือนกับ admin เป็นคนสั่งให้ทำงานดังนั้น มันจะถาม password ทุกครั้ง)


2. Set Up VNC 
เพื่อให้มันสามารถ Remote Access ได้จากที่ไหนก็ได้ผ่าน Internet 

 System->Preferences->Remote Desktop  เราต้องตั้งค่า 3 อย่าง
"Allow other users to view your desktop"
"Allow other users to control your desktop"
"Require the user to enter this password:"

3. Install FTP (File Transfer Protocol)
ในที่นี้จะลงโปรแกรม Pro FTP Daemon (proftpd)

sudo apt-get install proftpd

มันจะถาม Password  ใส่แล้วกด Enter  

4. Config FTP
ไปที่  System -> Administration -> GPROFTPD
เมื่อตั้ง Admin เสร็จ ก็ตั้งของ User ให้เรียบร้อย

5. Configure and Activate FTP Server!

6.  Install HTTP Support
Install Apache, MySQL, and PHP

แต่ใน ubantu นั้นจะเรียก 3 อย่างนี้ว่า Package manager (เรียกว่า aptitude)  แค่พิมพ์ตามนี้
(บางคนจะลง  LAMP stack ก็คือ Package PHP MySQL นั่นเอง)

sudo aptitude install apache2 php5-mysql libapache2-mod-php5 mysql-serve

(คำสั่ง sudo อีกแล้ว นั่นคือ เราต้องกรอก password ของ root อีกครั้ง)
ระหว่าง Install MySQL มันจะให้ตั้ง password **** ตรงนี้ต้องตั้ง password  ห้ามปล่อยว่างเด็ดขาด***

ลงเสร็จก็ทดสอบ ด้วยการไปเครื่องคอมในวงแลนเดียวกัน แล้วพิมพ์ IP Address (ภายใน ของเครื่อง Server)

แต่จริงๆ ยังไม่เสร็จ เพราะเราต้องกลับไป Config ค่า เพื่อ Security ของ Apache Server ก่อน

sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak

sudo nano /etc/apache2/apache2.conf

แล้วตั้งค่าดังนี้
Scroll down (down arrow) to where it says "ServerTokens Full" and change it to read "ServerTokens Prod"
Now, scroll down a little further and change "ServerSignature On" to "ServerSignature Off"
Finally, press Control-O followed by Control-X. That will save the file and exit the text editor.

มาถึงตรงนี้ หากต้องการใช้ PHP ก็ต้องตั้งค่า Security ด้วย แต่ในที่นี้เราจะใช้ Python ดังนั้น ไม่จำเป็นต้องลง PHP 

- Install Python Flask Server ใน Linux
ก่อนอื่นต้องติดตั้ง Virtual Environment ก่อน

sudo apt install python-virtualenv

mkdir <project name>
cd <project name>

python3 -m venv <name of environment>

ถึงตอนนี้จะมี Folder venv ปรากฎขึ้น เราก็ต้อง activate อีกที

. <name of environment>/bin/activate

ถัดมาก็ลง Flask
pip install Flask

เสร็จสิ้น


7. Install firewall

มันจะมี Firewall ให้เลือก เช่น iptables หรือ ufw เพื่อควบคุมการเข้าถึงเว็บเซิร์ฟเวอร์ของคุณ คุณจะต้องอนุญาตการรับส่งข้อมูลบนพอร์ต 80 (HTTP) และ 443 (HTTPS) สำหรับการเข้าชมเว็บ

แตในที่นี้เราจะใช้  shorewall เป็น Firewall เราจึงใช้คำสั่ง

sudo aptitude install shorewall

อย่างไรก็ดี หากไม่ตั้งค่าอะไรเลย มันก็ไม่ได้ปิดกั้นอะไรให้สักอย่าง ในที่นี้เราจะเปิดให้เข้ามาเฉพาะ Port 80 (HTTP) 443(HTTPS) กับ 22 (SSH) เราจะใช้คำสั่ง

sudo cp /usr/share/doc/shorewall-common/examples/one-interface/* /etc/sho

sudo nano /etc/shorewall/rules

HTTP/ACCEPT net $FW

SSH/ACCEPT         net $FW

Then press Control-O and Control-X. Your firewall is now configured to only accept HTTP and SSH traffic. The last thing we need to

เสร็จแล้วบอกให้ Boot ใหม่ด้วยคำสั่ง

sudo nano /etc/shorewall/shorewall.conf

Scroll down to "STARTUP_ENABLED=No" and set it to "STARTUP_ENABLED=Yes"
Press Control-O and Control-X. Now, open the Shorewall default configuration file:

And change "startup=0" to "startup=1". Press Control-O and Control-X. Finally, start your firewall:

sudo /etc/init.d/shorewall start

เสร็จสิ้นการตั้งค่า Firewall

8. Forward the Ports!
ความหมายคือ PC ทุกเครื่องในแลนวงเดียวกัน จะอยู่หลัง Router  ผ่าน IP สาธารณะของคุณ เพื่อให้ Internet รู้จัก  Router ของคุณ   แต่ ภายในวงแลน Router จะแจก IP ให้แต่ละเครื่องในวงแลนอีกครั้ง  คือ IP แบบภายใน 

โดยเมื่อเรากำหนด Port ว่า จะให้วิ่งไปเครื่องไหน หรือ IP ภายในวงแลน นั่นเอง มันก็จะวิ่งไปที่เครื่องนั้น ซึ่งเครื่องนั้นเมื่อเห็น Port ก็จะรู้เองว่า จะจัดการอย่างไรกับมัน

ดังนี้
21 - FTP
80 - HTTP
5900 - VNC

9. สมัคร Domain
ตอนนี้ ถ้าเพื่อนของคุณพิมพ์ Public IP ของคุณ ก็จะสามารถเข้ามาใช้งาน Server ได้แล้ว แต่ประเด็นคือ IP ของคุณมันเปลี่ยนตลอด และคุณยังต้องจับคู่กับ DNS (ชื่อโดเมน กับ IP Address สาธารณะอีกด้วย)

ดังนั้น เราจึงต้องไปสมัคร www.no-ip.com

10. อัพไฟล์ เวป
โดยทั่วไป จะอยู่บน  /var/www/html  อย่างไรก็ดี อย่าลืมตรวจสอบสิทธิ์ และความเป็นเจ้าของไฟล์ให้ดี

ถึงตรงนี้ เราต้องทดสอบ ด้วย IP เครื่อง IP ที่สมัครไว้ และ Domain ที่สมัครไว้ ว่าทำงานได้ถูกต้องหรือไม่




ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

KoolMocyc : Forza 350 สเปกต่างๆ และการแก้ไข

Stable Diffusion 101 : Extension : AnimateDiff

KoolMocyc : Forza 350 : ปัญหาประจำตัว