Category Archives: RPi Server

RaspberryPiにNode.js

Node.jsとは、JavaScriptの一種で、サーバーが構築できる言語。

「リアルタイムweb」とは、ほぼタイムラグなしにブラウザ上情報の更新を反映する、FacebookのメッセージやGoogleDocsなどの感じ。

Nodeには「ページに新しい情報が来たよ!」と教えてくれる機能があり、Socket.IOというパッケージにて実装できる。

間隔を開けてサーバにポーリングなどいらない分、サーバの負担が軽減てき、より多数のブラウザが接続できる。

環境構築

まず、Node.jsのバージョンを管理するためのマネージャをまずインストールする

chen@juno ~ $ curl -L git.io/nodebrew | perl – setup
% Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Dload  Upload   Total   Spent    Left  Speed
0     0    0     0    0     0      0      0 –:–:– –:–:– –:–:–     0
0     0    0     0    0     0      0      0 –:–:–  0:00:02 –:–:–     0
100 22630  100 22630    0     0   5045      0  0:00:04  0:00:04 –:–:– 14432
fetching nodebrew…
install nodebrew in $HOME/.nodebrew

========================================
Add path:

export PATH=$HOME/.nodebrew/current/bin:$PATH
========================================

chen@juno ~ $ vi .bashrc
chen@juno ~ $ source .bashrc

 

Node.jsのインストール

Node.jsをバイナリからインストール。参考サイトの言われたままに、Raspberry Pi向け(arm-pi)の最新版バイナリが用意されていないため、v0.10.28を使用。

chen@juno ~ $ nodebrew install-binary 0.10.28
fetch: http://nodejs.org/dist/v0.10.28/node-v0.10.28-linux-arm-pi.tar.gz
######################################################################## 100.0%
Install successful
chen@juno ~ $ nodebrew use 0.10.28
use v0.10.28
chen@juno ~ $ node -v
v0.10.28
chen@juno ~ $ npm -v
1.4.9
chen@juno ~ $

Hello Worldの表示

以下のコードをapp.jsというファイル名で保存して、Node.jsで実行してみよう。

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn');
}).listen(1337, "127.0.0.1");
console.log('Server running at http://192.168.0.207:1337/');

実行して見る:

chen@juno ~ $ node app.js

Server running at http://192.168.0.207:1337/

ブラウザから確認:

image

Raspberry Pi にWordPress(Lighttpd編)

Raspberry PiのApacheから、軽いLighttpdに切り替えた記録。

Raspberry PiのBタイプは2台購入して、一台目は初期ものでメモリ256Mのみ、数ヶ月後2台目のメモリは512Mに増強した。そのため一台目最初からLighttpdで運用し、2台目余裕があると思って、最初はApacheで運用したが、いろいろ用途が増やすとやはりメモリ不足に落ち、Lighttpdに切り替えた。

# /etc/init.d/apache2 stop
# dpkg -l | grep apache

ii  apache2-mpm-prefork                   2.2.22-12                          armhf        Apache HTTP Server – traditional non-threaded model
ii  apache2-utils                         2.2.22-12                          armhf        utility programs for webservers
ii  apache2.2-bin                         2.2.22-12                          armhf        Apache HTTP Server common binary files
ii  apache2.2-common                      2.2.22-12                          armhf        Apache HTTP Server common files
ii  libapache2-mod-php5                   5.4.4-14+deb7u3                    armhf        server-side, HTML-embedded scripting language (Apache 2 module)

# apt-get –purge remove apache2.2
# apt-get –purge remove libapache2-mod-php5
# apt-get install lighttpd
# lighty-enable-mod fastcgi
# lighty-enable-mod fastcgi-php
# vi /etc/lighttpd/lighttpd.conf  // 設定を確認
# lighty-enable-mod ssl
# /etc/init.d/lighttpd force-reload
# lighty-enable-mod ssl

WordPressのリダイレクト設定は、Apacheと違うので結構ネットぐぐったけど、試行錯誤で下記の設定がOKでした。

url.rewrite-if-not-file = (
“^/{$rewrite_path}(wp-.+).*/?” => “$0”,
“^/{$rewrite_path}.*?(\?.*)?$” => “/{$rewrite_path}index.php$1”
)

マルチドメインの場合、さらに複雑なり、下記の書き方がいいらしい。

url.rewrite-if-not-file = (
“^/(.*/)?files/$” => “/index.php”,
“^/(.*/)?files/(.*)” => “/wp-includes/ms-files.php?file=$2”,
“^(/wp-admin/.*)” => “$1”,
“^/({_0}+/)?(wp-.*)” => “/$2”,
“^/({_0}+/)?(.*\.php)$” => “/$2”,
“^/(.*)/?$” => “/index.php/$1”
)