เคยมีคนถามเรื่องจะทำระบบให้บริการพื้นที่เว็บไซต์เล็กๆ โดยเก็บข้อมูลผู้ใช้ลงในฐานข้อมูล MySQL การอัพเดทโหลดให้ใช้ผ่าน FTP เท่านั้น ก้อเป็นแนวคิดดีๆ ซึ่งอาจจะเอามาประยุกต์ใช้ในโรงเรียนหรือวิทยาลัยที่บริการพื้นที่เว็บไซต์ให้นักเรียนได้สร้างบล็อกหรือเว็บส่วนตัวกันได้ การที่เราจะไปทำแบบ Hosting ขนาดใหญ่โต มีเครื่องแรงๆ ก้อคงจะเกินงบประมาณไปสักหน่อย เอาเครื่อง PC เล็กๆ ที่มี Harddisk ขนาดเหมาะสม และ Main Memory สัก 512MB-1GB กำลังดีครับ (ยุคประหยัด)

งานเขียนครั้งนี้จะมาอธิบายวิธีการสร้างระบบให้บริการพื้นที่เว็บไซต์ โดยใช้ PureFTPd และ MySQL กันทำไมถึงเลือก PureFTPd สาเหตุที่เลือก PureFTPd ก้อเพราะว่าเป็นโปแกรม FTP Server ที่สามารถเก็บข้อมูลผู้ใช้ลงในฐานข้อมูล MySQL หรือ Directory Service อย่าง LDAP ได้ นอกจากนี้ยังสามารถทำ Bandwidth Control ได้ด้วย อ้อและที่สำคัญเวลาย้ายเครื่อง,ย้ายข้อมูลเว็บ,ข้อมูลผู้ใช้ และการตั้งค่าต่างๆ ก้อไม่ยุ่งยากและวุ่นวายอีกต่อไป เอาล่ะลองมาดูวิธีการกันครับ

เครื่องเซิร์ฟเวอร์ที่เราจะมาทำกันวันนี้ผมใช้ IP Address เป็น 192.168.0.100 มี hostname เป็น server1.example.com ใครที่ใช้ต่างจากนี้ก้อตั้งค่าตามที่คุณต้องการได้ครับ เอาล่ะเพื่อไม่ให้งุนงง เรามาเริ่มต้นด้วยการเป็น root กันเลย โดยใช้คำสั่ง

$ sudo -s

ใส่รหัสผ่านของ root ให้ถูกต้องจากนั้นมาเริ่มติดตั้งโปรแกรมที่เราจำเป็นต้องใช้กัน เริ่มมาติดตั้งจาก MySQl และ phpMyAdmin กันก่อนเลยครับ ติดตั้งโดยใช้คำสั่ง

# apt-get install mysql-server mysql-client libmysqlclient15-dev phpmyadmin apache2

เมื่อติดตั้งเสร็จโปรแกรมติดตั้งจะให้คุณกำหนดรหัสผ่านสำหรับ root ให้ใส่รหัสผ่านที่คุณต้องการ จากนั้นมาติดตั้ง PureFTPd พร้อมกับ MySQL Support โดยใช้คำสั่ง

# apt-get install pure-ftpd-mysql

เมื่อติดตั้งเสร็จแล้วให้สร้าง user และ group เพื่อรองรับกับการทำ virtual user ใช้คำสั่งดังนี้

# groupadd -g 2001 ftpgroup
# useradd -u 2001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpgroup ftpuser

จากนั้นสร้างฐานข้อมูลเพื่อเก็บรายชื่อผู้ใช้ เข้าใช้ฐานข้อมูล MySQL โดยใช้คำสั่ง

# mysql -u root -p

จากนั้นสร้างฐานข้อมูล pureftpd ขึ้นมาโดยใช้คำสั่งดังนี้

mysql> CREATE DATABASE pureftpd;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@’localhost’ IDENTIFIED BY ‘ftpdpass’;
mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO ‘pureftpd’@’localhost.localdomain’ IDENTIFIED BY ‘ftpdpass’;
mysql> FLUSH PRIVILEGES;

ในส่วน ftpdpass เป็นการกำหนดรหัสผ่านสำหรับฐานข้อมูล pureftpd ให้คุณเปลี่ยนตามที่คุณต้องการครับ จากนั้นมาสร้างตารางเก็บข้อมูลกันครับ โดยใช้คำสั่งดังนี้

mysql > USE pureftpd;
mysql > CREATE TABLE ftpd (
User varchar(16) NOT NULL default ”,
status enum(‘0′,’1’) NOT NULL default ‘0’,
Password varchar(64) NOT NULL default ”,
Uid varchar(11) NOT NULL default ‘-1’,
Gid varchar(11) NOT NULL default ‘-1’,
Dir varchar(128) NOT NULL default ”,
ULBandwidth smallint(5) NOT NULL default ‘0’,
DLBandwidth smallint(5) NOT NULL default ‘0’,
comment tinytext NOT NULL,
ipaccess varchar(15) NOT NULL default ‘*’,
QuotaSize smallint(5) NOT NULL default ‘0’,
QuotaFiles int(11) NOT NULL default 0,
PRIMARY KEY (User),
UNIQUE KEY User (User)
) TYPE=MyISAM;

ออกจาก MySQL โดยใช้คำสั่ง quit

mysql > quit

ทีนี้มาตั้งค่า PureFTPd กันต่อ จาก config default ของ PureFTPd ยังไม่ใช่ config ที่เรียกใช้ฐานข้อมูล pureftpd ดังนั้นเราต้องมาแก้ไข config กันก่อน

# cp /etc/pure-ftpd/db/mysql.conf /etc/pure-ftpd/db/mysql.conf_orig
# cat /dev/null > /etc/pure-ftpd/db/mysql.conf
# vi /etc/pure-ftpd/db/mysql.conf

แก้ไขไฟล์ /etc/pure-ftpd/db/mysql.conf ใส่ config ดังนี้

MYSQLSocket      /var/run/mysqld/mysqld.sock
#MYSQLServer     localhost
#MYSQLPort       3306
MYSQLUser       pureftpd
MYSQLPassword   ftpdpass
MYSQLDatabase   pureftpd
#MYSQLCrypt md5, cleartext, crypt() or password() – md5 is VERY RECOMMENDABLE uppon cleartext
MYSQLCrypt      md5
MYSQLGetPW      SELECT Password FROM ftpd WHERE User="L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MYSQLGetUID     SELECT Uid FROM ftpd WHERE User="L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MYSQLGetGID     SELECT Gid FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MYSQLGetDir     SELECT Dir FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MySQLGetQTASZ   SELECT QuotaSize FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")
MySQLGetQTAFS   SELECT QuotaFiles FROM ftpd WHERE User="L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "R")

ใส่ ftpdpass ตรง MYSQLPassword  ให้ถูกต้องนะครับ เดี๋ยว PureFTPd จะไม่สามารถเชื่อมต่อกับฐานข้อมูลที่เราสร้างไว้ได้ ยังไม่เสร็จครับ มากำหนดให้ user แต่ละคนเห็นเฉพาะพื้นที่ของตัวเอง ไม่อนุญาติให้กระโดดไปไดเรคทอรีของคนอื่นได้ วิธีง่ายๆ คือสร้างไฟล์ /etc/pure-ftpd/conf/ChrootEveryone แล้วใส่คำว่า yes ในไฟล์

echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone

กำหนดให้ PureFTPd สร้าง Home Dir สำหรับ Virtual User ขึ้นมา หาก login แล้วไม่มี Home Dir ก้อให้สร้างขึ้นมาได้เลย

/etc/pure-ftpd/conf/CreateHomeDir

เมื่อตั้งค่ากันเสร็จแล้วก้อ restart service ของ PureFTPd ได้เลยครับ โดยใช้คำสั่ง

/etc/init.d/pure-ftpd-mysql restart

ติดตั้ง PureFTPd, Config PureFTPd และ ได้ตารางเก็บข้อมูลผู้ใช้กันแล้วมาลองใส่ข้อมูลผู้ใช้กันครับ ก่อนอื่นเข้าใช้ MySQL กันก่อนโดยใช้คำสั่ง

# mysql -u root -p

mysql > USE pureftpd;

มาลองสร้าง user ที่ชื่อ exampleuser กำหนดสถานะ status เป็น 1 (หมายถึง ftp account ให้ใช้งานได้) กำหนดรหัสผ่านเป็น secret กำหนด UID และ GID เป็น 2001 (คือใช้ userid และ groupid ที่เรากำหนดไว้ข้างต้น) กำหนด Home Directory เป็น /home/www.example.com และกำหนด bandwidth ของการ upload/download เป็น 100KB/Sec และขนาดพื้นที่ที่ใช้ได้เป็น 50MB

mysql > INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES (‘exampleuser’, ‘1’, MD5(‘secret’), ‘2001’, ‘2001’, ‘/home/www.example.com’, ‘100’, ‘100’, ”, ‘*’, ’50’, ‘0’);

mysql > quit;

ให้ลองใช้โปรแกรม FTPClient ที่เครื่อง Client ของคุณ (อาจใช้ WS_FTP หรือ FileZilla ก้อได้) เชื่อมต่อไปยังเครื่องเซิร์ฟเวอร์ server1.example.com ด้วยชื่อผู้ใช้ exampleuser และรหัสผ่านคือ secret คุณจะสามารถเชื่อมต่อได้สำเร็จ (หากเชื่อมต่อไม่ได้ก้อเสียใจด้วยครับ) ลอง ls ดูใน /home จะพบได้เรคทอรี www.example.com ซึ่ง PureFTPd จะสร้างขึ้นให้อัตโนมัติ ;) เท่านี้คุณก้อสร้าง Hosting แบบง่ายๆ ใช้ในโรงเรียนหรือวิทยาลัยได้แล้ว สำหรับในส่วน DNS และ VirtaulHost สามารถดูรายละเอียดได้ที่บทความเก่า เรื่องประยุกต์ Wildcard DNS กับ Apache หรือ ตั้งค่า Record แบบ Wildcard ให้ DNS ได้ครับ
 

Comments are closed.