หางานครับ ใครมีมาจ้างได้นะ ราคากันเองครับ

ตอนนี้ ผมรับงานนอกนะครับ ระดมทุน สร้างโรงงาน ใครมีงานมาจ้างได้
งานที่รับ มีดังต่อไปนี้ครับ

– ดูระบบ, setup server, วาง infra
– Setup OpenStack, AWS, Google Cloud, Alibaba Cloud
– Tuning, Load Test, Penetration Test (Security Test)
– ทำ ChatBot, Machine Learning, ทำเว็บ e-Commerce
– IG Print งานแต่ง งาน events ต่างๆ
– Photo Booth
– IoT Development
– Bulk SMS
– SEO

ใครมีงานรายละเอียดประมาณนี้ มาจ้างได้ครับ
Line ID: pornpasok

High Performance Web Infrastructure

วันนี้ผมมีเวลาว่าง เลยอยากจะเขียนเล่าเรื่องการออกแบบ
Web Infrastructure ให้รองรับ load สูงๆ ได้ ว่าทำแบบไหนดี
โจทย์ของผมคือเป็น web สำหรับ booking ที่จะมีคนเข้าใช้งานจำนวนมาก
ในตอนเปิดให้ใช้งาน เป้าหมายที่ตั้งไว้คือ 1000 tps/s ++
และต้องไม่ down โดยผมมี physical server อยู่ 3 node

ในการออกแบบ Infrastructure นั้น ไม่มีแบบไหนถูกแบบไหนผิด
อยู่ที่ลักษณะของงานของเรา ว่าต้องการแบบไหน อยู่ที่จินตนาการของเรา
ว่าทำแบบไหนดี การออกแบบระบบ ก็เป็นศิลปะ อย่างหนึ่ง ..

Simply The Best เป็นคำตอบ ที่ผมใช้ออกแบบระบบที่ผมจะใช้งานนี้
เท่าที่ดูลักษณะ web แล้ว จะมีการ Read/Write DB หนักพอๆ กัน ถ้าเราแยก DB
ออกไป ก็จะทำให้เกิด connections จำนวนมากเกิดขึ้นในระบบ
ต้องแยก Read/Write ที่ตัว web app อีกเกิดความยุ่งยาก มากขึ้น
ผมเลยเอา web กับ DB ไว้ในตัวเดียวกันไปเลย แล้วใช้ HAProxy
เป็น Load Balancer round robin แบบ keep-alive
มี vip เป็น Public IP ที่ eth0 และใช้ eth1 เป็น Private IP
ยิงเข้าหา แต่ละ node ที่ต้องแยก interface เพื่อเป็นการกระจาย traffic
DB ที่ใช้ผมเลือกเป็น MariaDB ที่ทำงานได้ performance ดีกว่า MySQL
และใช้ Galera Cluster เป็นตัว sync data ของ DB แต่ละ node เข้าหากัน
ทำให้ ทุก node มี data ที่เหมือนกัน node ใด node นึง down ไป
ทุก node ก็จะยังทำงานได้สมบูรณ์ ถ้าเราต้องการเพิ่ม node เข้ามา
ก็สามารถทำได้ง่าย แค่ on ขึ้นมา Galera Cluster ก็จะทำการ sync data ให้

ในส่วนของ Web Server ผมใช้ Apache 2.2.22 ที่มากับตัว Debain Wheezy
มีการ tuning ค่าต่างๆ พอสมควรให้เหมาะกับการใช้งาน ตรงนี้เดี๋ยวผมมาเล่าอีกที
ที่เลือกใช้ apache เพราะ มีความยืดหยุ่นสูง ทำงานได้ดีกับ code ทุกรูปแบบ
ส่วน code เป็น PHP กระจายไปทุก node เก็บไว้ที่ local disk ของแต่ละ node
และใช้ APC เป็น opcode cache อีกระดับนึง

ปัญหาที่เจอ มีดังนี้
– auto increment จะไม่เรียงกัน เท่าไร มีกระโดดบ้าง แต่ก็รับได้
– HAProxy 1.5.4 default จะเก็บ log ทำให้ ถ้า log ใหญ่ๆ จะหนักได้
– เวลาแก้ code ต้อง up ทุก node

ผลที่ออกมา หลังจากใช้งานจริง พบว่า รองรับการใช้งานได้ดีมาก
รับ load จำนวนมหาศาล และ users ได้จำนวนมากพร้อมๆ กัน
ส่วนรายละเอียดการ tuning ผมจะขอแยกอธิบาย ในตอนต่อไป
เพราะว่า เยอะพอสมควร ..

ระบบตรวจสอบระดับน้ำในคลอง และน้ำท่วมถนน

ระบบตรวจสอบน้ำในคลองต่างๆ ของ กทม.
URL : http://ton.packetlove.com/bkkflood.php

ระบบตรวจสอบระดับน้ำบนถนนต่างๆ ของ กทม.
URL : http://ton.packetlove.com/bkkroad.php

เมื่อวานหลังจากที่ผมลองเข้าเว็บของสำนักระบายน้ำ กทม. และหน่วยงานอื่นๆ
ที่เกี่ยวกับน้ำท่วม ทำให้ผมเกิดความไม่สะดวกมาก เพราะเว็บค่อนข้างหนัก
และส่วนใหญ่เป็น Flash ทำให้ไม่สามารถ ใช้พวก mobile device ต่างๆ เข้าถึงได้
เพราะถึงเวลาจริงๆ แล้ว ปัจจุบัน คนส่วนใหญ่ ใช้ mobile device ในการเข้าถึงข้อมูล
กันมากกว่าใช้ PC เสียอีก เพราะสะดวก และสามารถทำได้ทุกที่ ลักษณะการใช้งาน
ส่วนใหญ่ ต้องการข้อมูลที่ดูแล้วเข้าใจง่าย เข้าถึงได้เร็ว รู้ว่าตรงไหนจะท่วมหรือไม่
แค่นั้นเอง จะได้เตรียมตัวถูก ..

ตอนแรกผมคิดว่าจะทำเป็น app ไปแจกใน App Store แต่ว่ามันจะเป็นเรื่องใหญ่ไป
และกว่าจะได้  approve คงไม่ทันได้ช่วยเหลืออะไรทันแน่ๆ ก็เลยเขียนเป็น web เอา
และให้ทำงานได้ ในทุก device ไม่ว่าจะเป็น PC/mobile หรืออะไรต่างๆ ที่มี browser
ที่รองรับ HTML แบบพื้นฐานได้ และมีแต่ข้อมูลที่จำเป็นจริงๆ เท่านั้นก็น่าจะพอ ..

รายละเอียดต่างๆ ผมดึงข้อมูล ที่เป็น XML ของ สำนักระบายน้ำ กทม. มา โดยไม่ได้
ทำการขออนุญาต แต่อย่างใด ซึ่งผมคิดว่า คงไม่น่าจะมีปัญหาอะไร เพราะก็เป็นทางนึง
ที่จะช่วยทำให้ข้อมูลข่าวสารที่ถูกต้อง เข้าถึงประชาชนจำนวนมากได้ ทันเหตุณ์การ
ช่วยลดความสูญเสีย ความกังวลต่างๆ ของประชาชนได้ แค่นี้ก็น่าจะพอแล้ว ..
จริงๆ แล้ว ทางสำนักระบายน้ำ ไม่ได้มี APIs ให้ใช้แต่อย่างใด แต่ก็น่าชื่นชมที่หลายๆท่าน
ใช้วิธีการแกะ การเจาะ จนได้ข้อมูลต่างๆ ที่เป็นประโยชน์ มาช่วยบริการประชาชน
ที่กำลังเดือดร้อนในตอนนี้ ..

สิ่งนึงที่ผมหวังว่าทางหน่วยงานของรัฐคงจะนำบทเรียนครั้งนี้ไปคิดดูให้ดี ในการจัดการ
กับระบบเตือนภัยต่างๆ ของประเทศ ไม่ว่าจะเป็นระบบ เตือนน้ำท่วม เตือนสภาพอากาศ
เตือนซึนามิ เตือนระบบจราจร และอื่นๆ ให้ดีขึ้นกว่านี้ และควรจะมี APIs ที่เป็นมาตรฐาน
เพื่อที่จะให้หน่วยงานเอกชน บุคคล หรือคนที่มีกำลังมีความสามารถ ได้นำเอา ข้อมูลที่
จำเป็นเหล่านี้ ไปใช้ให้เกิดประโยชน์ ต่อส่วนรวมได้ ต่อไปอาจจะมี app ดีๆ ต่างๆ มากมาย
ตรงนี้ ผมก็เพียงแต่คิดว่า มันจะมี แต่ก็ไปหวังอะไรไม่ได้มากนัก ..

สุดท้ายผมหวังว่า เราชาวไทย จะผ่านเหตุการณ์นี้ไปได้ด้วยดีครับ 🙂

PHP Purge Script for Varnish 3.xx

สวัสดีครับ วันนี้ พอดีผม modify ตัว Purge URL ที่เป็น PHP Script สำหรับ
Varnish 3.xx มาใช้งาน ก็เลยเอามาแบ่งปันกันครับ สำหรับการใช้งานก็คือ
ส่ง Parameter มาแบบนี้ครับ ..
vpurge.php?url=/xxx.html&host=test.com

vpurge.php


# get param
$url = $_GET["url"];
$host = $_GET["host"];

  # Varnish 3.xx IP
  $ip = "127.0.0.1";
  # T port
  $port = "6082";

  $timeout = 1;
  $verbose = 1;

  # inits
  $sock = fsockopen ($ip,$port,$errno, $errstr,$timeout);
  if (!$sock) { echo "connections failed $errno $errstr"; exit; }

  if ( !($url || $host) ) { echo "No params"; exit; }

  stream_set_timeout($sock,$timeout);

  #$pcommand = "purge";
  # Send command
  #$pcommand .= ".hash $url#$host#";

  ### PHP Purge for Varnish 3.xx      ###
  ### Modify by: Ton 2011-09-05       ###
  ### http://ton.packetlove.com/blog/ ###
  $pcommand = "ban";
  $pcommand .= " req.http.host == $host && req.url ~ ^$url.*$";

  put ($pcommand);
  put ("quit");

  fclose ($sock);

  function readit() {
    global $sock,$verbose;
    if (!$verbose) { return; }
    while ($sockstr = fgets($sock,1024)) {
      $str .= "rcv: " . $sockstr . "
"; } if ($verbose) { echo "$str\n"; } } function put($str) { global $sock,$verbose; fwrite ($sock, $str . "\r\n"); if ($verbose) { echo "send: $str
\n"; } readit(); }

ง่ายๆ เพียงเท่านี้ แค่เราส่ง parameter มาก็ทำการ purge URL ที่ต้องการได้แล้วครับ 🙂

Web Infrastructure

Web Infrastructure

วันนี้ มีเวลานิดหน่อย ก็เลยมาเล่าถึงเรื่อง Web Infrastructure กัน ว่าแต่ละระบบ
เรียงจากขนาดเล็ก มาจนถึงขนาดใหญ่ มีวิิธีการวาง Infrastructure และแนวคิด
ในการวางระบบต่างกันอย่างไรบ้าง เพื่อที่จะให้รองรับกับจำนวนผู้ใช้งานได้ตาม
ที่ต้องการ ในที่นี้ ผมแบ่งออกเป็นย่อยๆ ประมาณ 6 ระดับครับ มาดูกันเลย  ..

1. จะมี service ทุกอย่างรวมกันอยู่ในเครื่องเดียว ทั้ง web server, DB และอื่นๆ
ใน 1 เครื่อง อาจจะมีจำนวนหลายเว็บ แบบนี้ก็ประเภท web hosting ต่างๆ

2. เมื่อมีคนเข้าเยอะขึ้น เครื่องเดียวทำงานไม่ไหว ก็ต้องมีการแยก web server กับ DB
ออกจากกัน เพื่อให้ทำงานได้มีประสิทธิภาพ รองรับจำนวนผู้ใช้งานได้มากขึ้น การแยก
web server ออกจาก DB นั้น ไม่ได้เกี่ยวกับเรื่อง security หลายๆ คนเข้าใจผิด คิดว่า
การแยกออกจากกันเพื่อเรื่องนี้ แต่จริงๆ แล้วเพื่อ performance อย่างเดียวจริงๆ

3. เมื่อระบบแบบที่ 2 รองรับไม่ไหว เราก็ต้องเพิ่มเครื่อง caching มาช่วยจัดการกับ
static file เช่นพวก jpg, gif, png, html เพื่อทำให้ web server ทำงานได้เบาลง
พวก caching ที่นิยมใช้งานก็เป็นพวก varnish, squid, nginx และพวก lighthttpd
อื่นๆ ที่เก่งในเรื่องการทำงานกับ static file แทน apache2 ที่ทำงานหนักกว่า ..

4. เมื่อเรามี caching มาช่วย web server แล้ว ปัญหาที่ตามมาอีกก็คือ ทางฝั่ง DB บ้าง
ก็จะเริ่มหนัก เราก็เลยต้องมีวิธีการแบ่ง Read/Write ออกจากกัน โดยที่ data ต้องเหมือนกัน
ในกรณีที่ใช้ MySQL เราก็จะทำ MySQL Replication แยก Read/Write ออกจากกัน
เพราะว่าส่วนใหญ่แล้ว จะเป็น Read ประมาณ 90%  Write ประมาณ  10% เท่านั้น ในกรณีนี้
ถ้าเครื่องเดียว ยังไม่เพียงพอกับการ Read เราก็สามารถเพิ่ม MySQL Slave เข้าไปได้
ให้เพียงพอกับจำนวน Read ที่เราต้องการ

5. ในเมื่อโครงสร้างเดิมๆ 1-4 ไม่สามารถรองรับกับจำนวนคนใช้งานได้แล้ว เราก็จำเป็นต้อง
มี LB (Load Balancer)  เข้ามาช่วยเป็นตัวจัดการกระจาย load ให้ระบบของเราให้เท่าๆ กัน
LB มีให้เลือกใช้งานมากมาย ทั้งที่เป็น S/W และ H/W ถ้ามีทุนมากหน่อย ก็เลือกแบบ H/W
ก็จะทำให้การจัดการทำได้ง่ายขึ้น แต่ถ้าต้องการประหยัด S/W LB หลายๆ ตัวก็ทำได้ดี
ในโครงสร้างรูปที่ 5 เราจะใช้ LB มาแบ่ง load ระหว่าง caching 2 ตัว ที่อยู่หน้า web server
เมื่อตัวใดตัวนึงมีปัญหา ระบบก็จะยังใช้งานได้ปกติ ในส่วนของ web server เองก็เช่นกัน เรามี
LB มาเป็นตัวช่วยกระจาย load โดยที่ web server ทุกตัวจะ mount file จาก NFS กลาง
ทำให้ทุกเครื่องมี data ที่เหมือนกัน เมื่อเครื่องใดเครื่องนึง มีปัญหาระบบก็ยังจะทำงานต่อไปได้
ส่วน DB ก็ใช้วิธีการแยก Read/Write เหมือนกับระบบที่ 4

6. เมื่อโครงสร้างแบบที่ 5 เริ่มรองรับไม่ไหว เราก็ต้องมีวิธีวางแผนกันใหม่ สิ่งที่ดีที่สุด ก็คือ
การแยก static กับ dynamic ออกจากกัน แล้วก็เอาเรื่องของ memory เข้ามาช่วย นอกนั้น
ส่วนอื่นๆ ก็คล้ายๆ กับโครงสร้างแบบที่ 5

เอาไว้เท่านี้ก่อนละกันครับ เดี๋ยววันหลังมาเขียนเพิ่มเติมครับ งานเข้าละ  🙂

System Engineer Jobs

รับสมัคร System Engineer รายละเอียดดังนี้ครับ
สนใจส่ง Resume มาที่ ton350d [at] gmail.com
สอบถามเพิ่มเติม +66868885195 (Ton)

Responsibilities
– Participate in the design, implementation and ongoing management of systems architectures that form the foundation for Weloveshopping.com production infrastructure
– Participate in the design of architectures and automation that deliver against strict requirements for functionality, scalability, performance and reliability
– Become proficient in understanding how each software component, system design, and configuration is linked together to form an end-to-end solution
– Serve in a low-volume on-call rotation as an escalation contact during incidents.

Requirements
– BS or MS degree in Computer Science, Engineering, related technical discipline, or equivalent experience
– Minimum of 3 years administering Linux systems in a production environment
– Proven ability to quickly learn and implement unfamiliar technologies
– Extensive expertise with configuration management systems
cfengine experience a plus
– Configuration and maintenance of common applications such as Apache, Nginx, Varnish, Memcached, noSQL, MySQL, NFS, DHCP, NTP, SSH, DNS, and SNMP
– Strong knowledge of Linux kernel configuration, performance monitoring, and tuning
– Advanced experience coding in one of the following languages: Shell, Python or Perl
– Prefer experience coding and/or debugging one or more of the following: PHP, C++ or Ruby
– Experience working with load balancing technologies and large-scale web server farms
– A strong background in internet service deployment, provisioning, IP networking, service infrastructure, or software deployments
– Excellent organization skills, project tracking abilities, communications skills
– Detail oriented with excellent written and verbal communication skills.

CodeIgniter nginx Rewrite Rule

สวัสดีครับ วันนี้เจอเรื่องปวดหัวนิดหน่อย เกี่ยวกับการเขียน rewrite ของ nginx
ให้ codeigniter  สามารถทำงานได้ เพราะปกติบน apache2 จะใช้ .htaccess
ผมจะไม่พูดถึงการ install nginx+PHP Fast-CGI  นะครับ เพราะคิดว่าหาอ่านได้
ไม่ยากนัก แต่จะพูดถึงการเขียน rewrite ที่ทำให้ nginx ทำงานร่วมกับ codeigniter
มาดูกันเลยครับ ขั้นตอนมีดังนี้

location /
{
index index.php;
root /path/to/your/ci/directory;

if ($request_filename !~ (js|css|images|robots\.txt|index\.php.*) ) {
rewrite ^/(.*)$ /index.php/$1 last;
}
}

location ~ /index.php/
{
include /usr/local/nginx/conf/fastcgi.conf;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /path/to/your/index.php;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_pass 127.0.0.1:9000;
}

จากนั้นทำการแก้ไข file application/config/config.php ของตัว CodeIgniter
ให้เป็น $config[‘uri_protocol’]  = “REQUEST_URI”;
เท่านี้ก็จะทำให้เราสามารถใช้งาน CodeIgniter กับ nginx ได้แล้วครับ ..

Virus Trojan iframe php script

FTP มาจาก IP แปลก ๆ เมืองนอก

FTP มาจาก IP แปลก ๆ เมืองนอก

สวัสดีครับ ไม่ได้มา Update Blog หลายวัน วันนี้จะแก้ไขเว็บ Travel-is.com
แต่ปรากฏว่าเจอ Tag <iframe> .. </iframe> แปลก ๆ ซึ่งเป็นที่ระบาดในตอนนี้
สาเหตุมาจาก Program ที่ใช้ FTP ติด Virus แล้ว Password จะถูกส่งออกไป
ให้ Cracker เพื่อใช้ในการ FTP เข้ามาเปลี่ยน file index.*, main.* ทำให้เว็บเรา
อาจะถูก Google แจ้งเตือนว่าเป็น site อันตราย ไม่เป็นผลดีต่ออันดับในการค้นหา

สำหรับวิธีการหาว่ามีการ FTP จากที่อื่นหรือไม่ ใช้คำสั่ง last | more
ส่วนคำสั่งในการหาว่า file ไหนบ้างติด virus iframe ให้ใช้ find ตามด้วย grep
ดังนี้ครับ find . -type f -name “*.php” -print | xargs grep “iframe” ก็จะรู้ว่า
file ไหนติด iframe ตรงไหน แล้วก็ทำการแก้ไข โดยการลบ iframe พวกนี้ออกไป
แล้วก็อย่าลืมเปลี่ยน Password FTP นะครับ ..

High Scalability

อ่านบทความจาก http://highscalability.com/youtube-architecture แล้วชอบ
ระบบของ Youtube.com มาก ๆ เจ๋งดี ..

Recipe for handling rapid growth

while (true)
{
identify_and_fix_bottlenecks();
drink();
sleep();
notice_new_bottleneck();
}

จริง ๆ ระบบจะใหญ่ได้ ก็คือระบบที่คืนสู่สามัญที่สุด คือ simple มากที่สุด
แต่มีการเพิ่มจำนวนในแบบ flat ได้มากที่สุด พวกระบบใหญ่ ๆ ของโลก
ใช้ server ขนาดเล็ก แต่ใช้จำนวนมาก ช่วยกันทำงาน ทำให้เวลาเครื่องใด
เครื่องนึงมีปัญหา ก็ยังสามารถทำงานต่อไปได้ uptime 100% ..

MySQL SphinxSE and PHP Sphinx Extension

Sphinx a full-text search engine

ตอนนี้ Server นิ่งแล้ว ก็เลยมีเวลามาทำ R&D เกี่ยวกับระบบ Search
เพื่่อนตั้ม (http://www.thaiajax.com) โปเกม่อนเทพ แนะนำ
ว่าให้เอา Sphinx มาช่วย ก็เลยต้องเป็นหน้าที่ผม ที่ต้องทำ Server
ให้ Support หาข้อมูลได้น้อยมากเกี่ยวกับตัว Sphinx ยิ่งในไทย
เท่าที่เห็น ยังไม่มีเลย เพราะคงไม่ต้องใช้ถึงขนาดนี้ ระบบไม่ใหญ่ ..
นั่งงมอยู่นานเหมือนกัน เพราะไม่เคยใช้ หาอ่าน Doc ของเว็บ Sphinx
ก็มีให้อ่านน้อยมาก ๆ แต่เว็บอื่น ๆ มีอยู่พอสมควร ..

ตอนนี้เรื่องการใช้งานการปรับแต่งอะไร ก็กำลัง test กันอยู่ ผมเอา
วิธีการ config มาให้เพื่อน ๆ ที่สนใจได้อ่านกันละกัน เพราะว่ากว่าที่
ผมจะ config ได้ ก็ใช้เวลาพอสมควรเหมือนกัน เลยเอามาแบ่งปัน ..

Install MySQL SphinxSE CentOS 5.2

yum -y install bison patch automake libtool

wget http://www.sphinxsearch.com/downloads/sphinx-0.9.8.tar.gz
wget http://dev.mysql.com/get/Downloads/MySQL-5.0/mysql-5.0.67.tar.gz/from/http://mysql.thaiweb.net/
tar xfz sphinx*
tar xfz mysql*

cd mysql*
patch -p1 < ../sphinx-0.9.8/mysqlse/sphinx.5.0.37.diff
BUILD/autorun.sh
mkdir sql/sphinx
cp ../sphinx-0.9.8/mysqlse/* sql/sphinx
./configure –prefix=/usr/local/mysql –with-sphinx-storage-engine
make
make install

cp support-files/mysql.server /etc/init.d/
/etc/init.d/mysql.server start

mysql> SHOW ENGINES;
+————+———+—————————————————————-+
| Engine | Support | Comment |
+————+———+—————————————————————-+
| MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance |
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables |
| InnoDB | YES | Supports transactions, row-level locking, and foreign keys |
| BerkeleyDB | NO | Supports transactions and page-level locking |
| BLACKHOLE | NO | /dev/null storage engine (anything you write to it disappears) |
| EXAMPLE | NO | Example storage engine |
| ARCHIVE | NO | Archive storage engine |
| CSV | NO | CSV storage engine |
| SPHINX | YES | Sphinx storage engine 0.9.8 |
| ndbcluster | NO | Clustered, fault-tolerant, memory-based tables |
| FEDERATED | NO | Federated MySQL storage engine |
| MRG_MYISAM | YES | Collection of identical MyISAM tables |
| ISAM | NO | Obsolete storage engine |
+————+———+—————————————————————-+
13 rows in set (0.00 sec)

Install Sphinx

cd ../sphinx*
./configure --prefix=/usr/local/sphinx --with-mysql
make
make install

cd api/libsphinxclient
chmod +x buildconf.sh
./buildconf.sh
./configure
make
make install

Install PHP Sphinx extension
http://pecl.php.net/package/sphinx


cd ../../../
wget http://th.php.net/get/php-5.2.6.tar.gz/from/this/mirror
wget http://pecl.php.net/get/sphinx-0.2.0.tgz

tar xfz php-5.2.6.tar.gz
tar xfz sphinx-0.2.0.tgz
mv sphinx-0.2.0 php-5.2.6/ext/sphinx
rm configure
./buildconf –force
./configure –with-apxs2=/usr/local/apache/bin/apxs –with-mysql=/usr/local/mysql –enable-force-cgi-redirect –with-gettext –with-zlib-dir=/usr/local/zlib –enable-mbstring –with-curl=/usr/local/lib –with-sphinx
make
make install

ทำนี้ก็เป็นอันเรียบร้อยแล้วครับ สำหรับ MySQL+SphinxSE
และ PHP Sphinx Extension