มาติดตั้ง WordPress Multisite บน Nginx

WordPress เป็น CMS ที่ได้รับความนิยม ออกแบบมารองรับ Multisite ทำให้คุณสามารถใช้การติดตั้ง WordPress ครั้งเดียวแล้วตั้งค่าแยกเว็บไซต์ออกเป็นหลายๆ เว็บตาม domain ที่เรากำหนดได้ ข้อมูลและเนื้อหาจะแยกออกจากกัน อย่างสิ้นเชิง ส่วนการจัดการ website ก็สามารถ login เข้าไปจัดการในแต่ละเว็บได้อย่างอิสระ จะยกตัวอย่าง 2 แบบคือ sub-domain และ domain แยก ดังนี้

  • fffee.org
  • andrew.fffee.org
  • fffeex.org

มาลองติดตั้งกัน เริ่มจากติดตั้ง nginx, mysql serverv และ php กันก่อน
apt-get install -y nginx mysql-server php5-fpm php5-mysql php5-curl php5-mcrypt php5-gd

สร้างไดเรคทอรีสำหรับ wordpress
mkdir /usr/share/nginx/wordpress
ลบ /etc/nginx/sites-enabled/default เราจะเขียน config สำหรับ wordpress ใหม่
rm /etc/nginx/sites-enabled/default
เขียน config ใหม่ตั้งชื่อไฟล์ /etc/nginx/sites-enabled/wp ดังนี้

server {
    listen [::]:80 ipv6only=off;
    server_name fffee.org *.fffee.org;
    root /usr/share/nginx/wordpress;
    index index.php index.html index.htm;
    location / {
        try_files $uri $uri/ /index.php?$args ;
    }
    location ~ /favicon.ico {
        access_log off;
        log_not_found off;
    }
    location ~ \.php$ {
        try_files $uri /index.php;
        include fastcgi_params;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
    }
    access_log  /var/log/nginx/$host-access.log;
    error_log   /var/log/nginx/wpms-error.log;
}

สร้าง link ไปยัง site-enable
ln -s /etc/nginx/sites-available/wp /etc/nginx/sites-enabled/wp
ทดสอบ config ว่าไม่มีอะไรผิดพลาด
service nginx configtest
สั่ง restart nginx
service nginx restart
จากนั้นสร้างฐานข้อมูล wordpress รองรับการติดตั้ง wordpess
mysql -u root -p -e "create database wordpress"
กำหนด user และ privileges ให้ผู้ admin ใช้รหัสผ่าน password เข้าถึงฐานข้อมูล wordpess
mysql -u root -p -e "grant all privileges on wordpress.* to admin@localhost identified by 'password'"
สั่ง reload privilege
mysqladmin -u root -p reload
ติดตั้ง wordpress ดาวน์โหลดรุ่นล่าสุด
wget http://wordpress.org/latest.tar.gz
แตกไฟล์ออก
tar -xf latest.tar.gz
ย้ายไปยัง /usr/share/nginx/wordpress/
mv wordpress/* /usr/share/nginx/wordpress/
เปลี่ยน owner เป็น www-data เพื่ออ่านเขียนไฟล์ได้
chown -R www-data:www-data /usr/share/nginx/wordpress
สั่งติดตั้ง wordpess ที่ domain หลักตามปกติ http://fffee.org

แก้ไข wp-config.php ใหม่ เพื่อกำหนดให้เป็น multi site เพื่อเพิ่ม site ใหม่เข้าไป
nano /usr/share/nginx/wordpress/wp-config.php
เพิ่ม config ข้างล่าง ก่อน comment ว่า /* That’s all, stop editing! Happy blogging. */

/* Multisite settings */
define( 'WP_ALLOW_MULTISITE', true );

จากนั้น login เข้าไปที่ Tools > Network Setup เลือก sub domain


แก้ไข wp-config.php และ .htaccess ตามข้อมูลที่ wordpress ให้ข้อมูลมา
กลับมาที่หน้า My Site > Network Admin > Site เพิ่ม site ที่อยู่ภายใต้ domain ให้ครบ


เพิ่ม domain mapping สำหรับเว็บที่ไม่ได้อยู่ภายใต้ sub domain เดียวกันดังนี้
apt-get install unzip
wget http://downloads.wordpress.org/plugin/wordpress-mu-domain-mapping.latest-stable.zip
unzip wordpress-mu-domain-mapping.latest-stable.zip
ย้าย plugin ไปยังไดเรคทอรี plugin
mv wordpress-mu-domain-mapping /usr/share/nginx/wordpress/wp-content/plugins/
คัดลอก sunrise.php ไปยัง wp-content
cp /usr/share/nginx/wordpress/wp-content/plugins/wordpress-mu-domain-mapping/sunrise.php /usr/share/nginx/wordpress/wp-content/
แก้ /usr/share/nginx/wordpress/wp-config.php เพิ่ม
define('SUNRISE', 'on');
activate plugin แก้ไข domain config

ตั้งค่า domain mapping

เพิ่ม custom plugin
mkdir /usr/share/nginx/wordpress/wp-content/mu-plugins
nano /usr/share/nginx/wordpress/wp-content/mu-plugins/wpms_blogid.php
เพิ่มโค้ดลงไป

<?php
add_filter( 'wpmu_blogs_columns', 'do_get_id' );
add_action( 'manage_sites_custom_column', 'do_add_columns', 10, 2 );
add_action( 'manage_blogs_custom_column', 'do_add_columns', 10, 2 );
function do_add_columns( $column_name, $blog_id ) {
    if ( 'blog_id' === $column_name )
        echo $blog_id;
    return $column_name;
}
function do_get_id( $columns ) {
    $columns['blog_id'] = 'ID';
    return $columns;
}

เพิ่ม script ลงไปเพื่อให้หน้า site แสดงผล ID

คลิกไปที่ Setting > Domain ให้เพิ่ม Domain เพื่ออ้างอิงกับ site ที่เราสร้างขึ้น (อันที่ 3)

ให้เข้าไปที่

  • http://fffee.org/wp-admin/
  • http://andrew.fffee.org/wp-admin/
  • http://fffeex.org/wp-admin/

เพื่อจัดการ wordpress ของแต่ละเว็บได้เลย ซึ่งการจัดการจะแยกกันอย่างอิสระ
เว็บหลัก http://fffee.org

เว็บภายใต้ sub-domain http://andrew.fffee.org

เว็บภายใต้ domain http://fffeex.org