2013年2月28日 星期四

Raspberry Pi輕鬆架設wordpress主機


圖片版權分屬個別公司所有
Raspberry Pi (RPi) 應用很多元,而且具有低功耗的特點,如果 blog 流量不大,又想要擁有自己的伺服器,RPi 應該是個不錯的選擇,但是如果是用上 Aapche 那恐怕對它來講是有點「操」過,因此參考 "WordPress for Raspberry Pi using Nginx and MySQL" 以輕量化的 Nginx 在 RPi 上,試做 Wordpress 伺服器。

作業系統是官方的 Raspbian "wheezy" ( 2013/02/09 )。
  1. 安裝 nginx,php 和 mysql,期間要設定一組 mysql root 的密碼。
    $sudo apt-get update
    $sudo apt-get install nginx php5-fpm php5-cli php5-curl php5-gd php5-mcrypt php5-cgi mysql-server
  2. 到目錄 /etc/nginx/sites-available 底下。
    $cd /etc/nginx/sites-available/
  3. 於 sites-available 目錄底下,新增名稱 wordpress 的文件。
    /etc/nginx/sites-available $ sudo nano wordpress
  4. 將以下代碼加到文件 wordpress 裡面,在 nano 編輯模式修改完後, ^O(覆寫檔案), ^X(離開編輯模式)。
    # Upstream to abstract backend connection(s) for php
    upstream php {
            server unix:/var/run/php5-fpm.sock;
    }
    
    server {
    
            ## Your only path reference.
            root /srv/www/wordpress/public_html;
            listen          80;
            ## Your website name goes here. Change to domain.ltd in VPS
            server_name     _;
    
            access_log      /srv/www/wordpress/logs/access.log;
            error_log       /srv/www/wordpress/logs/error.log;
    
    
            ## This should be in your http block and if it is, it's not needed here.
            index index.php;
    
            location = /favicon.ico {
                    log_not_found off;
                    access_log off;
            }
    
            location = /robots.txt {
                    allow all;
                    log_not_found off;
                    access_log off;
            }
    
            location / {
                    # This is cool because no php is touched for static content
                    try_files $uri $uri/ /index.php;
            }
    
            location ~ \.php$ {
                    #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                    include fastcgi_params;
                    fastcgi_intercept_errors on;
                    fastcgi_pass php;
    
            }
    
            location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                    expires max;
                    log_not_found off;
            }
    }
  5. 移動文件 wordpress 到目錄 /sites-availabe/ 底下,並刪除 default 檔案。
    $cd /etc/nginx/sites-enabled/
    
    /etc/nginx/sites-enabled $sudo ln -s ../sites-avaiable/wordpress ../sites-enabled/wordpress
    /etc/nginx/sites-enabled $sudo rm default
    /etc/nginx/sites-enabled $sudo rm ../sites-enabled/default
  6. 開啟 /etc/php5/fpm/php.ini,設定 cgi.fix_pathinfo=0;
    $sudo nano /etc/php5/fpm/php.ini
  7. 下載,解壓縮 wordpress 套件包。
    $sudo mkdir -p /srv/www/wordpress/logs/
    $sudo mkdir -p /srv/www/wordpress/public_html
    $cd /srv/www/wrodpress/public_html
    $sudo wget http://wordpress.org/latest.tar.gz
    $sudo tar xzvf latest.tar.gz
    $sudo mv wordpress/* .
  8. 啟動 nginx,在瀏覽器輸入 RPi 的 ip位址,順利的話,可以見到 welcome to nginx。
    $sudo  service nginx start
  1. 設定資料庫 mysql,紅色標示的地方,需要自行設定,詳細資訊可參考 WordPress installation instructions
    $ mysql -u root -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 5340 to server version: 3.23.54
    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
    
    mysql> CREATE DATABASE wordpress;
    Query OK, 1 row affected (0.00 sec)
    
    mysql> GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost
        -> IDENTIFIED BY "password";
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> FLUSH PRIVILEGES;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> EXIT
    Bye
  2. 在目錄 /srv/www/wordpress/public_html 底下,由 sample 建立文件 wp-config.php。
    /srv/www/wordpress/public_html $sudo cp wp-config-sample.php wp-config.php
    /srv/www/wordpress/public_html $sudo nano wp-config.php
    修改資料庫 mysql 的設定值;
    define('DB_NAME', 'wordpress');
    /** MySQL database username */
    define('DB_USER', 'wordpress');
    /** MySQL database password */
    define('DB_PASSWORD', 'raspi');
  3. 重設路徑,重啟服務器。
    $sudo chown www-data.www-data /srv/www/wordpress/public_html/ -R
    $sudo service nginx restart
    $sudo service php5-fpm restart
    打開瀏覽器連結到 http://localhost/wp-admin/install.php (localhost 填入 RPi 的 ip 位址),順利的話,就可以看到 wordpress 後台的歡迎畫面。
如果有連接資料庫的問題,可以試著修改步驟 10 的資料庫密碼。

最後想必應該是大家最有興趣的部份,就是 RPi 所架設的 wordpress 伺服器到底有多大能耐,這樣的作法是否可行。於是把 CPU 超頻到 1G 後,到 Load Impact 填入網址,開始對網頁進行 DDoS攻擊虛擬訪客負載測試

主要結果如下圖所示,在大概同時上線人數在 22~25 人的時候,平均等候時間是 8.5 秒,時間是長了一點,不過有一部分原因可以歸咎於我所測試的 wordpress 版型的 javascript,它約佔了一半的等候時間,所以 RPi 這樣的表現,筆者覺得已經很對得起它自己的身價。RPi 真的可以讓每個人輕鬆擁有自己的小流量部落格主機!

沒有留言:

張貼留言