ปรับ nginx และ application บน amazon cloud กับ google cloud

พักนี้ช่วยเพื่อนดู cloud ของ google กับ amazon
เพราะย้ายบริการระหว่าง cloud ทั้ง 2 ตัว ให้ทำงานกับ wordpress
แล้วพบปัญหาบางอย่างจาก google cloud เกี่ยวกับ
การรองรับ static file หลายร้อย gigabyte กับฐานข้อมูล 20 กว่า gigabyte
และ plug-in ของ wp โหด ๆ อีก 2 – 3 ตัว มีการรายงานพบปัญหา 502 ตลอด
http://aws.amazon.com และ http://cloud.google.com
เหตุที่บันทึกเรื่องราวไว้ เผื่อว่าเพื่อนกลับมาถามอีก จะได้ดำเนินการอีกครั้ง
มีประเด็นแบ่งปัน ดังนี้
1. มีปัญหาเรื่องการ redirect ไปหน้าอื่นของ wordpress ไม่ได้เลย
ต้องเข้าไปแก้ nginx.conf ในบรรทัดที่กำหนดว่า
try_files $uri $uri/ /index.html;
เป็น try_files $uri $uri/ /index.php?$args;
2. ส่วนการเข้า shell ในแต่ละ cloud ก็ต่างกันไป
สำหรับ google cloud ผมจะเข้า control panel แล้วคลิ๊ก ssh
ก็จะเข้า secure shell ได้เลย
แต่กับ amazon cloud เพื่อนจะส่งแฟ้ม .ppk ซึ่งเป็น private key file for authentication
แล้วแจ้ง user name กับ ip ให้ใช้โปรแกรม putty เข้า port 22 ไปจัดการระบบ
เข้าไปก็ใช้ sudo su เป็น root ได้เลย เรื่องนี้เป็นการเริ่มต้นใน cloud แต่ละตัวของผม
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
http://www.select2web.com/webservice/amazon-elastic-computer-clound-ec2-part-6-putty-login.html
3. จากนั้นก็ config ให้ ftp เข้าไปแล้วส่งแฟ้มผ่าน user ชื่อ bitnami ได้เลย
ซึ่ง google cloud มีเรื่องต้องกำหนดเกี่ยวกับ permission หลายจุด
แต่ที่เหมือนกันกับ amazon cloud คือ การทำ link มายัง home ของ user
ผมจะเข้าห้อง /home/bitnami
แล้วใช้คำสั่งว่า /home/bitnami# ln -s /opt/bitnami/nginx/html
พอเพื่อน ftp เข้ามาก็เห็นห้อง html แล้วโยนไฟล์เข้าไปใน html directory ได้เลย
4. เพื่อนอยากใช้ memcached ไม่ใช่ memcache บน wordpress
ก็ย้าย host มาหลายตัว จาก dreamhost.com เป็น google cloud และมาเป็น amazon cloud
ก็ได้ help ของ bitnami ช่วยไว้ เพราะ package ที่เลือกไว้ก็ใช้ bitnami
https://wiki.bitnami.com/Components/PHP?highlight=install+memcached#How_to_install_Memcached_module_using_libmemcached_library.3f
5. การ config ให้ใช้งาน php บน nginx ของแต่ละ server ก็ไม่เหมือนกัน
ของ amazon cloud ผลใช้ config ด้านล่างนี้

location ~ \.php$ {
root           html;
fastcgi_read_timeout 300;
fastcgi_pass   unix:/opt/bitnami/php/var/run/www.sock;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME $request_filename;
include        fastcgi_params;
}

6. รหัสผ่านของ root บน MySQL server แต่ละตัวก็จะไม่เหมือนกัน
ก็พบคำแนะนำว่าใช้รหัสผ่านคือ bitnami สำหรับกรณีแรก กรณีอื่นก็ตามรายละเอียดข้างล่าง
https://wiki.bitnami.com/Components/MySQL#How_to_connect_to_the_MySQL_database.3f
The default password for MySQL root user in Virtual Appliances and AMIs is “bitnami”
The default password for MySQL root user in BitNami Cloud Hosting is the same that you set in the administration panel.
The default password for MySQL root user in a BitNami Magento stack is “bitnami1”

7. ใช้ amazon cloud ระบบกำหนดให้เปิดบริการ apache เป็น default
แต่ถ้าจะเปิด nginx เป็น port 80 ด้วยก็ได้ แต่ต้อง config กันหน่อย
เข้าไป config แบบ manual ดูจาก https://wiki.bitnami.com/Components/Nginx
แล้วเข้าไปแก้แฟ้ม config เปลี่ยน port กันทีละแฟ้ม
/opt/bitnami/apache2/conf/httpd.conf จาก 80 เป็น 8088
/opt/bitnami/nginx/conf/nginx.conf จาก 8088 เป็น 80
/opt/bitnami/nginx/conf/nginx.conf จาก 1234 เป็น 80

แล้วสั่ง #service bitnami restart เท่านี้ nginx ก็ตื่นมาบริการผ่าน port 80 แล้ว
8. การ import ข้อมูลขนาดใหญ่หลาย GB เข้า mysql
ที่มองไว้มี 2 วิธี
วิธีที่ 1. ใช้ ftp ส่งแฟ้ม .txt เข้าไปใน server
แล้วใช้คำสั่ง mysqlimport แต่เหมาะกับ csv
http://www.thegeekstuff.com/2008/10/import-and-upload-data-to-mysql-tables-using-mysqlimport/
วิธีที่ 2. หลัง upload .sql ก็ใช้คำสั่งข้างล่างนี้
#mysql -u root -ppassword databasename < filename.sql
เป็นการประมวลผลฝั่ง server
ไม่ใช่ประมวลผลระหว่าง server กับ client
ด้วยการยิงเข้าไปทีละระเบียน เน็ตหลุดก็แย่เลย

aws dynamodb failures
aws dynamodb failures

อีกเรื่องที่น่าสนใจ
ระบบฐานข้อมูล DynamoDB ของ Amazon ล่มเมื่อเช้าวันอาทิตย์ที่ 20 ก.ย.58
ทำให้ Netflix.com เว็บบริการดูหนัง และอีกหลายเว็บไซต์มีปัญหา
โดยเฉพาะ US-East data center complex in Ashburn, Virgina.
http://fortune.com/2015/09/20/amazon-cloud-snafu/

การเข้า ssh บน google cloud เพื่อจัดการเครื่องบริการ

php-fpm
php-fpm

เมื่อ sign in เข้าไปแล้วก็จะพบกับคำว่า My console
ซึ่งจะต้องเลือกว่าเข้า Project ไหนที่เรากำลังจัดการอยู่ เมื่อเลือกแล้วก็จะมีตัวเลือก

Overview
Permissions
APIs & auth
Monitoring
Source Code
Deploy & Manage
[Compute]
Networking
Storage
Big Data

ในการเข้าจัดการเครื่องที่เลือกได้
เข้า Compute จะพบ App Engine, Compute Engine และ Container Engine
ซึ่งกรณีนี้เลือก Compute Engine ก็จะพบอีกมาก ผมเลือก VM instances ที่สร้างไว้
ก็จะเป็นการสร้าง instance ที่กำหนดว่าใช้ server แบบไหน ภาษาอะไร
งานที่ผมเข้าไปจัดการ Linux :Debian บน AMD64 + Nginx ก็จะใช้ SSH ที่อยู่หลัง instance ตัวที่สร้างขึ้น

$sudo su
#cd /opt/bitnami/nginx/conf/bitnami

พบว่า index ใน location ไม่ได้กำหนด index.php ก็ต้องเพิ่มเข้าไป
เพราะที่มีนั้น มีแต่ index.html กับ index.htm ไม่ใส่จะเป็นปัญหากับ wordpress

พบปัญหา 502 bad gateway แล้วก็พบคำแนะนำ
ใน http://serverfault.com/questions/457911/nginx-php-fpm-502-bad-gateway
จากการตรวจสอบ พบว่าไม่สอดคล้องกับสิ่งที่พบใน google cloud และไม่ใช่วิธีแก้ปัญหา
จึงไม่ได้ปรับแฟ้ม bitnami.conf ที่อยู่ใน google cloud

ตรวจสอบว่า php-fpm ทำงานอยู่ด้วย #ps -aux|grep php พบว่าทำงานอยู่
ตรวจสอบด้วย phpinfo() ก็บพว่า php-fpm ทำงานอยู่
ใน #tail /opt/bitnami/nginx/logs/access.log แต่ไม่ได้แสดงว่า php-fpm ทำงานด้วยรึเปล่า
พบว่า /opt/bitnami/nginx/conf/bitnami/phpfastcgi.conf มีการ config การทำงานของ php-fpm เรียบร้อย
และ bitnami.conf ก็ include แฟ้ม phpfastcgi.conf มาเรียบร้อย
สรุปว่า nginx เรียกใช้ phpfastcgi หรือ php-fpm แน่นอน
เพราะเวลามีปัญหากับ php ใน error.log จะมีข้อความ
เช่น FastCGI send in stderr: “PHP Message: WordPress database error Table ‘xxx’ does’t exist for query SELECT …