วันนี้มาลองสร้าง Droplet บน DigitalOcean กันครับ หลังจากสร้างแล้วเราจะติดต้ัง Apache, PHP, MySQL, ProFTPD, Firewall เพื่อใช้งานเป็น Web Server ด้วย, เจ้า Droplet ที่ว่ามันก็คือ Virtual Servers นี่หละครับ บน DigitalOcean เขาเรียก Droplet ซึ่งในบทความนี้ผมจะเลือกใช้ Image ที่เป็น Debian 8.1 x64 นะครับ ส่วนโปรแกรมอื่นๆที่เราจะใช้เดียวเราจะลงเองภายหลัง
อย่างแรกเราต้องมี Account ของ DigitalOcean ก่อนครับ ถ้ายังไม่มีก็สมัครก่อนครับ https://www.digitalocean.com/?refcode=29f4a5ac06ae (ถ้าคุณสมัครผ่านลิงค์นี้และเริ่มใช้งาน ผมก็ได้เครติดการใช้งานด้วย ^^) เมื่อสมัครเรียบร้อยแล้ว ก็ทำการล็อกอินเข้าระบบและเลือก Create Droplet โดยกำหนดค่าต่างๆ ดังนี้
Droplet Hostname : ชื่อของเว็บหรือชื่อที่เราจะใช้เรียก droplet อันนี้ ตั้งว่าอะไรก็ได้แต่ห้ามมีช่องว่าง
Select Size : เลือกไซต์เล็กสุด 5 USD ต่อเดือน (ประมาณเดือนละ 169 บาท ถูกมากๆ)
Select Region : เลือกเป็น Singapore ใกล้บ้านเราหน่อยจะได้เร็วๆ
Select Image : อันนี้เลือกเป็น Debian 8.1 x64 หรือถ้าใครอยากใช้แบบที่มีโปรแกรมต่างๆอยู่แล้วก็เลือกไปที่แท็บ Application และเลือก Image ที่มีโปรแกรมต่างๆ ในแบบที่ตัวเองต้องการได้เลยครับ
เมื่อเลือก ขนาด, ที่ตั้ง, และอิมเมจได้แล้วก็คลิก Create Droplet ด้านล่างสุดได้เลยครับ รอไม่กี่อึดใจก็จะมีอีเมล์มาแจ้งเราว่า IP Address และ root password ของอิมเมจของเราคืออะไร ขั้นต่อไปก็ทำการรีโมทเข้าไปทำการติดตั้งโปรแกรมต่างๆ
เมื่อได้รับอีเมลแจ้ง IP Address และ root password ของอิมเมจที่เราสร้างแล้วก็ให้ทำการรีโมทเข้าไปติดตั้ง Apache, PHP, MySQL, ProFTPD ตามขั้นตอนต่างๆ ดังนี้
1. ทำการเพิ่มยูสเซอร์และคอนฟิก ssh ไม่ให้รีโมทล๊อกอินด้วย root
1 2 3 4 5 6 | # apt-get update # apt-get upgrade # adduser demouser # apt-get install sudo # usermod -a -G sudo demouser |
แก้ไขไฟล์ /etc/ssh/sshd_config
1 | # nano /etc/ssh/sshd_config |
ในไฟล์ /etc/ssh/sshd_config ให้หาคำว่า PermitRootLogin และทำการแก้ไขจาก PermitRootLogin yes เป็น PermitRootLogin no เพื่อไม่ให้รีโมทล๊อกอินด้วย root ได้
1 | PermitRootLogin no |
รีสตาร์ท ssh และลองล๊อกอินเข้าระบบด้วยยูเซอร์ใหม่
1 | # systemctl restart ssh |
2. ทำการติดตั้ง Apache, PHP, MySQL
1 2 3 4 5 6 7 8 9 10 11 | # apt-get install apache2 # a2enmod ssl # a2enmod rewrite # apt-get install mysql-server # mysql_secure_installation # apt-cache search php5 # apt-get install php5 php5-cli php5-common php5-curl php5-gd php5-imap php5-ldap php5-mcrypt php5-mysql php5-sqlite php5-mongo php5-json # service apache2 restart |
ทำการแก้ไขไฟล์คอนฟิกของ apache เพื่อไม่ให้แสดงรายชื่อไฟล์ถ้าไม่มีอินเด็กและอนุญาตให้ใช้ .htaccess ได้
1 | # nano /etc/apache2/apache2.conf |
ในไฟล์ /etc/apache2/apache2.conf ให้หาคำว่า Directory /var/www/ และแก้ไข Options และ AllowOverride ดังนี้
1 2 3 4 5 | <Directory /var/www/> Options -Indexes -Includes -ExecCGI AllowOverride All Require all granted </Directory> |
แก้ไขไฟล์ security.conf ไม่ให้แสดงเวอร์ชั่นของ apache
1 | # nano /etc/apache2/conf-available/security.conf |
ในไฟล์ /etc/apache2/conf-available/security.conf ให้หาบรรทัด ServerTokens และ ServerSignature โดยแก้ไขดังนี้
1 2 | ServerTokens Prod ServerSignature Off |
รีสตาร์ท apache อีกรอบ
1 | # service apache2 restart |
3. ติดตั้ง ProFTPD Server
1 | # apt-get install proftpd |
ทำการแก้ไขไฟล์ /etc/proftpd/proftpd.conf เพื่อให้ยูเซอร์แต่ละคนเห็นเฉพาะ directory ของตัวเองเท่านั้น
1 | # nano /etc/proftpd/proftpd.conf |
โดยแก้ไขไฟล์ /etc/proftpd/proftpd.conf ในหัวข้อ DefaultRoot และ RequireValidShell ดังนี้
1 2 | DefaultRoot ~ RequireValidShell on |
จากนั้นทำการแก้ไขไฟล์ /etc/shells โดยเพิ่มบรรทัด /bin/false เข้าไปท้ายไฟล์
1 | # nano /etc/shells |
เพิ่มยูเซอร์ที่จะให้ FTP เข้ามาได้ แต่เราจะไม่ให้ยูเซอร์นี้ ssh เข้ามา โดยเพิ่มออปชั่น –shell /bin/false
1 | # adduser demoftp --home /var/www/demoftp --shell /bin/false |
จากนั้นรีสตาร์ท ProFTPD และทดสอบใช้ยูเซอร์ที่สร้าง FTP เข้ามาในระบบ จะเห็นว่ายูเซอร์นี้สามารถใช้งาน FTP ได้อย่างเดียวและจะเห็นข้อมูลแค่เฉพาะในไดเร็กทอรีของตัวเองเท่านั้น
1 | # service proftpd restart |
4. ติดตั้ง UFW Firewall
1 | # apt-get install ufw |
ทำการคอนฟิก Firewall โดยอนุญาตให้ใช้งานได้แค่ port 22,80,21,443
1 2 3 4 5 6 7 8 9 10 | # ufw default deny incoming # ufw default allow outgoing # ufw allow 22/tcp # ufw allow 80/tcp # ufw allow 21/tcp # ufw allow 443/tcp # ufw disable # ufw enable |
ตรวจสอบสถานะของไฟล์วอด้วยคำสั่ง
1 | # ufw status |
เพียงเท่านี้เราก็มีเซิฟเวอร์พร้อมให้บริการแล้วครับ