わーくあうと!

日々の作業でためになったことをアウトプットすることで自分の成長につながればなと。

CentOS6.4にnginxとFastCGI入れる

借りてるVPS鯖にnginxとFastCGIいれたのでメモっておく

FastCGI入れる

インストール
# yum install --enablerepo=epel spawn-fcgi

epelリポジトリから入れます。
epelリポジトリいれてない場合は頑張って入れてください

php-fastcgiの起動スクリプトを作成
# vi /etc/rc.d/init.d/php-fastcgi

#!/bin/sh
#
# spawn-fcgi   Start and stop FastCGI processes
#
# chkconfig:   - 80 20
# description: Spawn FastCGI scripts to be used by web servers
 
# Source function library.
. /etc/rc.d/init.d/functions
 
RETVAL=0
SPAWNFCGI="/usr/bin/spawn-fcgi"
PHPFCGI="/usr/bin/php-cgi"
FCGIPORT="9000"
FCGIADDR="127.0.0.1"
PHP_FCGI_CHILDREN=5
PHP_FCGI_MAX_REQUESTS=1000
ALLOWED_ENV="PATH USER"
USER=nginx
GROUP=nginx
PIDFILE=/var/run/phpfcgi.pid
 
ALLOWED_ENV="$ALLOWED_ENV PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
 
case "$1" in
  start)
        PHPFCGI_START=$"Starting ${NAME} service: "
        echo -n $PHPFCGI_START
 
        # clean environment
        E=
        for i in $ALLOWED_ENV; do E="$E $i=${!i}"; done
        daemon $SPAWNFCGI -a ${FCGIADDR} -p ${FCGIPORT} -u ${USER} -g ${GROUP} -P ${PIDFILE} -C ${PHP_FCGI_CHILDREN} -f ${PHPFCGI}
        RETVAL=$?
        ;;
  stop)
        echo -n "Stopping php-fcgi: "
        killproc -p $PIDFILE phpfcgi
        echo
        RETVAL=$?
        ;;
  *)
        echo "Usage: $0 {start|stop}"
        exit 1
esac
exit $RETVAL

これをコピペする。

php-fastcgiをサービスに登録
# chmod 755 /etc/rc.d/init.d/php-fastcgi
# /sbin/chkconfig --add php-fastcgi
# /sbin/chkconfig php-fastcgi on
# /sbin/service php-fastcgi start

これでFastCGIはOK。

nginx入れる

nginx公式リポジトリを追加
# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm

Centos6系以外の場合は公式ページからリポジトリのURLを探してきてください。

ドキュメントルートにするディレクトリ作成
# mkdir /var/www/nginx
# mkdir /var/www/nginx/html
設定ファイル編集

/etc/nginx/conf.d/default.conf
デフォルトで

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

↑こうなってる内容を

server {
    listen       8080;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/log/host.access.log  main;

    root /var/www/nginx/html;

    location / {
        #root   /var/www/nginx/html;
        index  index.html index.htm index.php;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        #root   /var/www/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        #root           html;
        fastcgi_pass   127.0.0.1:9000;
        #fastcgi_index  index.php;
        #fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

↑このように編集した。

確認用のファイル作る
# touch /var/www/nginx/html/index.php
# echo "<?php phpinfo(); ?>" > /var/www/nginx/html/index.php
起動&確認
# /etc/init.d/nginx start
# wget localhost:8080

これでindex.htmlをダウンロード出来ればOK。


あとはバーチャルホストの設定もしたいな

CentOS6.4のPHPを5.4にアップグレードしようとしてやめた話

借りてるVPS鯖のPHPのバージョンが5.3(普通にyumで入れた)で、せっかくなので5.4にでもしようかなと下記の記事を参考に入れてた

CentOS6.4にサードパーティレポジトリを追加して、PHP5.4とかいれてた - otukutunの日記


要はremiやらepelやらのサードパーティリポジトリ追加してそこから入れるんだけど、よくよく考えたらあとからphpのモジュール追加するときも

yum install --enablerepo=remi php-なんちゃら

とかしないとだめなんだよなぁと思ってやっぱ5.3に戻した。
後々絶対忘れる自信があったので。。

デフォルトで使うリポジトリサードパーティ製のものにすれば解決っちゃ解決だけどそれも微妙だし。

というお話でした。

pm2のインストールでこける件

node.jsをデーモン化するにはforeverよりpm2のほうが高機能でいいよという噂を耳にしたのでpm2を入れようとしたら失敗した。

$npm install -g pm2
〜省略〜
> usage@0.3.9 install /root/.nvm/v0.10.22/lib/node_modules/pm2/node_modules/usage
> node-gyp rebuild

gyp ERR! build error 
gyp ERR! stack Error: not found: make
gyp ERR! stack     at F (/root/.nvm/v0.10.22/lib/node_modules/npm/node_modules/which/which.js:43:28)
gyp ERR! stack     at E (/root/.nvm/v0.10.22/lib/node_modules/npm/node_modules/which/which.js:46:29)
gyp ERR! stack     at /root/.nvm/v0.10.22/lib/node_modules/npm/node_modules/which/which.js:57:16
gyp ERR! stack     at Object.oncomplete (fs.js:107:15)
gyp ERR! System Linux 2.6.32-358.2.1.el6.x86_64
gyp ERR! command "node" "/root/.nvm/v0.10.22/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /root/.nvm/v0.10.22/lib/node_modules/pm2/node_modules/usage
gyp ERR! node -v v0.10.22
gyp ERR! node-gyp -v v0.11.0
gyp ERR! not ok 
npm ERR! usage@0.3.9 install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the usage@0.3.9 install script.
npm ERR! This is most likely a problem with the usage package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get their info via:
npm ERR!     npm owner ls usage
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 2.6.32-358.2.1.el6.x86_64
npm ERR! command "/root/.nvm/v0.10.22/bin/node" "/root/.nvm/v0.10.22/bin/npm" "install" "-g" "pm2"
npm ERR! cwd /var/www/chat-server
npm ERR! node -v v0.10.22
npm ERR! npm -v 1.3.14
npm ERR! code ELIFECYCLE
npm http 200 https://registry.npmjs.org/keypress
npm http GET https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz
npm http 200 https://registry.npmjs.org/keypress/-/keypress-0.1.0.tgz
npm ERR! 
npm ERR! Additional logging details can be found in:
npm ERR!     /var/www/chat-server/npm-debug.log
npm ERR! not ok code 0

こんなエラー。
makeが無いとか言ってるけど、まぁとりあえず Development Tools 入れてみるかーと思い以下をインストール

$ yum groupinstall "Development tools"

それで

$ npm install -g pm2

したらインストール成功した。

CentOSにnode.jsをnvmでインストール

自分の開発VPS鯖にnvmでnode.js入れたけど忘れそうなのでメモっておく。

nvmのインストール

$ git clone git://github.com/creationix/nvm.git ~/.nvm
$ source ~/.nvm/nvm.sh

nodeのインストール

$ nvm install v0.10.22

確認

$ which node
/root/.nvm/v0.10.22/bin/node
$ which npm
/root/.nvm/v0.10.22/bin/npm

自動読み込み設定

~/.bash_profile に追記。.bash_profileが無ければ作る。
これが無いと一回サーバーからログアウトするとnodeコマンドが見つからなくなる。

source ~/.nvm/nvm.sh
nvm use "v0.10.22"


途中足りないものがあれば適宣 yum install 〜 とかしてもらえれば。

nodeのインストール方法をググると古い情報が多くてソースコードからインストールするような方法とか紹介されてるけど今ならnvm使ったほうが楽だしバージョンアップも簡単にできそうで便利そう。

LINEの通知音が鳴らない件

数日前からLINEの通知音がならなくて困ってた。
通知音はないけどホーム画面には通知がきてるっていう。。


iPhone & LINE の設定確認したりPC側のLINEの設定を確認したり iPhone再起動してみたりしたけど直らなくて、iPhoneの復元でもしてみようかと思ってたら原因がやっとわかった。


iPhoneがおやすみモードになってただけだった。


設定からおやすみモード解除したら直った。

食事がめんどくさい

食べるのは好きだしお腹も減るけど何食べるか考えて作ったり買い物に行くのがめんどくさい。

作る手間とかも無くて、とりあえずこれ食っておけば栄養的におっけー!ってな物があれば最高なんだがー。
まさにソイレントのような物が日本であればいいんだけどな。

でもソイレントって本当にあれだけで生きていけんのかな。
実際にソイレントだけで生活した人のレポートだとうんこ白くなるとかあった気がするけど。まだちょっと不安。


で、最近はできるだけ手間を掛けないようにと

  • フルーツグラノーラ
  • カップヌードル

を箱買いしてみた。
牛乳も通販で買いたいけど買っていいのかな。スーパーとかで賞味期限が一番長いものを奥から取って買うタイプの人間だから通販で牛乳買うと古いやつ送られてくるんじゃないかと不安。とりあえず一度試してみようか。


まあそれは置いといて最近の食生活が

  • 寝起き・・・フルーツグラノーラ in 牛乳
  • メイン・・・???
  • 夜食・・・カップヌードル


こんなふうになっていて(朝/昼/夜 と書かないのはその日のテンションによって活動時間帯が変わるからです…)、メインどうしようか悩んでる。
要求としては

  • 調理したくない
  • 買い物にも行きたくない
  • 栄養的に問題ない
  • なるべく安くすめば嬉しい

なんだけど結局どうしようどうしようと毎日考えながらラーメン食べに行ったりほっともっとで弁当買ったりになっちゃう。
うーんうーん


さらにいうと夜食のカップヌードルも体に悪そうだからやめたいと思ってる。
カップラーメンを食べるとビタミンが壊れるとかカルシウムが破壊されてイライラしやすくなるとか(信頼できるソースはないんですが)聞くので怖いなって。


なんかいい方法ないかなー


もう一日に必要な栄養素調べて通販で買える即席食品だけでそれを満たすメニュー作って試しにそれだけで生活してみようか。
でもそのメニュー作るのめんどくさい。


誰かそんなメニュー作って公開してないのかな。
ちょっと探してみよう。


調べた。
怪しいサプリメントが出てきたりでなんか疲れた。
もういいやとりあえず今日はこんなところで。

WEBサーバーとDBサーバーは分けるべきか

http://anond.hatelabo.jp/20130922195049
読んだ。


こうやって自分でサービスを作って運用している人の軌跡を見るのが大好きです。
ノウハウを吸収できるのはもちらん、僕自身のやる気アップにもなるし。


で、

あと現在WEBサーバーとDBサーバーを分けていますがサーバー関係に詳しい知人に分ける必要はないと言われました。
むしろわけない方がいいと。
詳しい方いらっしゃいましたら教えて頂けたら有難いです

について、これは本当と言えば本当ですが状況によっては嘘になるかと。


ある程度の規模(=WEB鯖一台で対応できるレベル)まではオールインワンなサーバーのほうがいいです。
WEBサーバーとDBサーバーが物理的に離れているとその間の通信に時間がかかるためです。


しかしその『ある程度の規模』を超えてくるとスケールしなくちゃならないので、そうなるとWEBサーバーとDBサーバーを分ける必要があります。


つまり

  • ある程度の規模まで・・・オールインワンサーバー
  • それ以上の規模  ・・・分ける必要あり

です。


この元増田のサイトはこれからもどんどんアクセス上がっていきそうなので、今後WEBサーバーを増やしていくことを見据えて現状のWEBサーバーとDBサーバーを分けた構成のままでいいんじゃないかなと思います。

転出届を郵送でやった

先日以前住んでいた川崎の部屋の更新があったのでそのタイミングで実家のある新潟へ引っ越してきたのですが、転出届の手続きをしてくるのを忘れてしまいました・・・。


転出届を知らない人のために説明すると、引越しで住所を変更するためには

  • 引越す前の管轄の区(市)役所から転出証明書をもらう。
  • 引越し後の管轄の区(市)役所へ転入の手続きをする。

という段階が必要で、これの転出の手続きを忘れてきたのでした。


引越し後だけでいいじゃん!役所間で連携とっていい感じにやっておいてよ!と思うのですがどうしても必要らしいです。

また新幹線代1万円払って川崎まで行くのはだるいなーと思ってたらこれ郵送でできるらしいのでやってみました。
転出届(市外へ転出する場合の届出)を郵便・信書便で行う場合の方法について知りたい。

↑に貼ったリンクは川崎市のものですが、『転出届 郵送 [市町村名]』とかで検索すればきっと出てくると思います。

必要なもの

  • 転出証明書の申請書
  • 本人確認書類
  • 返信用封筒

大まかに上記のモノが必要です。
申請書はレポート用紙のようなものでOKだったり、本人確認書類は写真付きのものがない場合2種類必要だったりしますが細かい説明は省きます。
それぞれの市町村のホームページを見てください。

具体的にやったこと

申請するにあたって具体的に自分がやったことを書いておきます。

  1. 転出証明書の申請書ネットプリントで予約。
  2. セブンイレブンへ。
  3. 先程の申請書をプリント & 保険証と年金手帳をコピー & 80円切手2枚を購入。
  4. 申請書を記入、返信用封筒に切手貼って自分の住所書く、封筒に川崎区役所の住所書いて切手貼る。
  5. 申請書、本人確認書類、返信用封筒を封筒にいれてポストへ投函。


こんな感じでちょっと面倒でしたが何とか書類揃えて手続きしました。
ネットプリント楽しい。

WordPressからはてなブログに移行した

どうもnickです。

元々はてなブログを使ってたんですが、今年の4月頃にWordpress使いたいと思ってしばらくWordpressに浮気してました。


が!Wordpress使うのが面倒ではてなブログに帰ってきました。


「オリジナルデザインのブログにしたい」とか「オリジナルの機能を入れたい」なんて志があるなら自由度の高いWordpressはいいんですが、そんなものは無くただ備忘録に使ったり思ったこと書きなぐれればOKな場合はWordpressの自由度は必要ありませんでした。


あとサーバーも自分のVPS鯖を使ってるので負荷とかも気にしてしまうし(これはwordpress.comとか使えば考え無くて済むとは思うけど)


とにかく何でもできてしまう分、書くことに集中できないなーという印象でした。

インポート・エクスポート手順

一応記事を移行した時の手順も残しておきます。

  1. Wordpress管理画面の『エキスポート』からxml形式のファイルをダウンロード。
  2. ダウンロードしたファイルをこのサービスMT形式に変換。
  3. はてなブログ管理画面の『インポート』の『Movable Type形式』タブから先程のファイルを指定してアップロード。
  4. 文字コードの指定をすればインポート完了です。


ポイントはwordpress形式のファイルだとそのままインポートできないのでMT形式にする必要があるってくらいです。
あと記事をインポートしたら今まではてなブログで書いてた記事が消えちゃったりしないかなと不安になりましたが大丈夫でした。
それとインポート後にインポートを取り消す機能もあるので間違って変な物をインポートしてしまっても気軽に戻せそうでした。


ワードプレス側からいい感じにリダイレクトとかできたらいいなーとも思ったけどそれはめんどそうだったので諦めた。
そんな感じです。

macにRuby2.0を入れる

Ruby2.0を入れたのでその工程をメモっておきます。
ちなみにbrewを使うので入ってない人は事前にインストールする必要があります。

rbenv, ruby-buildのインストール


$ brew install rbenv
$ brew install ruby-build

環境変数の設定


$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ source ~/.bash_profile

Ruby2.0.0のインストール


$ rbenv install 2.0.0-p0
Downloading ruby-2.0.0-p0.tar.gz...

Installing ruby-2.0.0-p0...

BUILD FAILED

Inspect or clean up the working tree at /var/folders/mk/5hg0wh3d0sx_2nyl84wm7dq80000gn/T/ruby-build.20130612213723.41748
Results logged to /var/folders/mk/5hg0wh3d0sx_2nyl84wm7dq80000gn/T/ruby-build.20130612213723.41748.log

Last 10 log lines:
installing default gems: /Users/nick/.rbenv/versions/2.0.0-p0/lib/ruby/gems/2.0.0 (build_info, cache, doc, gems, specifications)
bigdecimal 1.2.0
io-console 0.4.2
json 1.7.7
minitest 4.3.2
psych 2.0.0
rake 0.9.6
rdoc 4.0.0
test-unit 2.0.0.0
The Ruby openssl extension was not compiled. Missing the OpenSSL lib?


エラーでる。

ググってみたら依存ライブラリを指定してインストールする必要があるらしい。

依存ライブラリのインストール


ということでインストール
$ brew install readline
$ brew install openssl

依存ライブラリを指定してRuby2.0.0のインストール


$ RUBY_CONFIGURE_OPTS="--with-readline-dir=`brew --prefix readline` --with-openssl-dir=`brew --prefix openssl`" rbenv install 2.0.0-p0

今度はうまくいった。

一応入ってるか確認.


$ rbenv versions
* system (set by /Users/username/.rbenv/version)
2.0.0-p0

入ってるみたい。

インストール後の反映


$ rbenv rehash

通常使うRubyを変更


$ rbenv global 2.0.0-p0

バージョン変わってるか確認


$ ruby -v
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin11.4.2]

大丈夫そう。