最新 追記

いがいが日記


2015-01-01 [長年日記]

_ Sakura VPS で Ubuntu14.04 + nginx + unicorn + tDiary4.1.1 構築

新年あけましておめでとうございます。本年もどうぞよろしくお願いします!

ということで年末にOSごと壊してしまったので、年末から年始にかけて0から再構築。まちゅさんから「式年遷宮ですね」と言われたけど確かにその通り。昔tdiaryをCGIで動かしてたころの設定も消せたし、結果として大掃除になりました。それにしてもLinuxマシンの構築は何回もやってるけど、そのたびに使うミドルウェアは変わっていて、今回はとうとうapacheを使わなくなった。

社会人になったばかりの頃にunix技術を教えてもらったり学んだりしてきたけど、間違いなく一番長く使ってる技術だし、これからも長く使うのだろう。(その次はRubyかも。)

次回の式年遷宮はubuntu 14.04 のサポート期限終了の2019年かな。

以下、メモ。


VPSコンソールにてカスタムOS Ubuntu 14.04 amd64 を選択。

ssh でログインして作業

ssh設定

公開鍵設置

自分のマシンの id_rsa.pub をコピーして、sakuraマシンで以下

  • $ mkdir -m 700 ~/.ssh
  • $ echo 公開鍵ファイルの中身 > ~/.ssh/authorized_keys
  • $ chmod 600 ~/.ssh/authorized_keys
  • ssh でパスなしで接続できることを確認
rootのログイン禁止 & パスワード方式のログイン禁止 & SSHのポート変更 & 自動切断防止
  • $ sudo vim /etc/ssh/sshd_config
- Port 22
+ Port 22222

+ ClientAliveInterval 30 # Prevent auto disconnection

- PermitRootLogin without-password
+ PermitRootLogin no

- PasswordAuthentication yes
+ PasswordAuthentication no
  • $ sudo vim /etc/services
- ssh             22/tcp                          # SSH Remote Login Protocol
- ssh             22/udp
+ ssh             22222/tcp                       # SSH Remote Login Protocol
+ ssh             22222/udp
上記設定チェック
  • $ sudo sshd -t
sshd再起動
  • $ sudo service ssh restart
ローカル : .ssh/config
Host sakura
  HostName xxxxx.sakura.ne.jp
  User igaiga
  Port 22222

OS設定

FW設定
  • $ sudo ufw status
  • $ sudo ufw default deny
  • $ sudo ufw allow 22222
  • $ sudo ufw allow 80
  • $ sudo ufw allow 443
  • $ sudo ufw enable
  • $ sudo ufw status
locale設定

設定した方がvimなども日本語で表示されて使い易い。日本語が表示されない端末などでは en_US.UTF-8 などにすればいい。

  • $ locale
    • LANG=en_US.UTF-8
  • $ sudo locale-gen ja_JP.UTF-8
  • $ sudo update-locale LANG=ja_JP.UTF-8 再ログイン後
  • $ locale
    • LANG=ja_JP.UTF-8
apt 更新
  • $ sudo apt-get update
  • $ sudo apt-get upgrade
apt 基本パック

$ sudo apt-get install build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion zsh screen vim tmux

標準エディタ設定
  • $ sudo update-alternatives --config editor
  • $ select-editor crontab -e などで起動確認
git 最新版

apt にリポジトリ追加して更新

  • $ sudo aptitude install software-properties-common
  • $ sudo add-apt-repository ppa:git-core/ppa
  • $ sudo apt-get update
  • $ sudo apt-get upgrade

diff-highlight を git log などで使うのでセットアップ

  • $ mkdir ~/tools
  • $ cd ~/tools
  • $ git clone git@github.com:git/git.git
  • $ sudo cp git/contib/diff-highlight/diff-highlight /usr/local/bin/.
github
  • $ ssh-keygen -t rsa -C "igaiga@sakura.ubuntu.14.04" ssh agent を設定する
  • $ eval "$(ssh-agent -s)"
  • $ ssh-add ~/.ssh/id_rsa
github で公開鍵鍵追加

https://github.com/settings/ssh

bitbucket で公開鍵追加

https://bitbucket.org/account/user/igaiga/ssh-keys/

Github SSH connections over HTTPS

~/.ssh/config

Host github.com
  Hostname ssh.github.com
  Port 443
Host bitbucket.org
  Hostname bitbucket.org
  Port 22
github 確認
rbenv, ruby-build
  • $ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
  • $ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
  • $ ln -s ~/.rbenv/plugins/ruby-build ~/.ruby-build
  • $ echo 'export PATH="~/.rbenv/bin:$PATH"' >> ~/.bashrc
  • $ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
  • $ source ~/.bashrc
  • $ rbenv install -l
  • $ sudo apt-get install libffi-dev # ruby2.2.0 special
  • $ rbenv install 2.2.0
  • $ rbenv global 2.2.0
zsh
  • $ vim ~/.zshrc
export PATH="/home/igaiga/.rbenv/bin:$PATH"
eval "$(rbenv init -)"

デフォルトzshへ

  • $ chsh -s $(which zsh)
nginx & unicorn

$ sudo apt-get install nginx
$ gem install unicorn

nginx

sudo vim /etc/nginx/sites-available/igarashikuniaki.net

upstream tdiary.unicorn {
  server localhost:8080;
}

server {
        server_name  igarashikuniaki.net;
        access_log  /var/log/nginx/localhost.access.log;

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

        location = / {
                rewrite ^ /diary/ redirect;
        }

        location = /diary {
                rewrite ^ /diary/ redirect;
        }

        location = /tdiary {
                rewrite ^ /diary/ redirect;
        }

        location ~ ^/tdiary {
                rewrite ^/tdiary/(.*)$ /diary/$1 redirect;
        }

        location ~ ^/[0-9\-]+\.html$ {
                rewrite ^ /diary$request_uri redirect;
        }

        location ~ ^/diary/ {
                try_files $uri @unicorn;
        }

        location @unicorn {
                rewrite /diary/([0-9\-]+)\.html$ /diary/index.rb?date=$1 last;
                proxy_pass http://igarashikuniaki.net;
        }
}

server {
        server_name www.igarashikuniaki.net;
        rewrite ^ $scheme://igarashikuniaki.net$request_uri redirect;
}
nginx 設定ファイルを有効にする

$ sudo rm /etc/nginx/sites-enabled/default
$ sudo ln -s /etc/nginx/sites-available/igarashikuniaki.net /etc/nginx/sites-enabled/.
$ sudo /etc/init.d/nginx restart

tdiary

  • $ sudo mkdir -m /var/tdiary/
  • $ cd /var/tdiary
  • $ git clone git@github.com:tdiary/tdiary-core.git
  • $ git clone git@github.com:tdiary/tdiary-contrib.git
  • $ git clone git@github.com:tdiary/tdiary-theme.git
  • $ mkdir data -m 777

tDiary core へ移動して以下。bundler と gem をインストール。

  • $ git checkout v4.1.1 #最新版へ
  • $ gem install bundler

unicorn & GFM style用に以下を追加

  • $ vim Gemfile.local
gem 'unicorn'
gem 'tdiary-style-gfm'
  • $ bundle install --without test development

tdiary.conf を tdiary-core の下のサンプルをコピーしてつくる。以下を変更。

  • $ cd tdiary-core
  • $ cp tdiary.conf.sample tdiary.conf
  • $ vim tdiary.conf
@data_path = '/var/tdiary/data'
@options['sp.path'] = [
  '/var/tdiary/tdiary-core/misc/plugin',
  '/var/tdiary/tdiary-contrib/plugin',
]
@options['makerss.file'] = 'index.rdf'
@options['makerss.no_comments.file'] = 'no_comments.rdf'
@style = 'GFM'

config.ru を編集

  • $ vim config.ru
base_dir = '/diary'

theme を tdiary-core/theme 以下へコピー

.htpasswd を tdiary-core 以下へ作成(管理画面へ入る際にこのファイルを自動でみてくれる模様)

  • $ sudo apt-get install apache2-utils
  • $ htpasswd -d -c .htpasswd igaiga

RSSの出力方法は以下のまちゅさんのページを参考にした。もしも出力がうまくいかない場合はプラグインのRSSタブでチェックするといい。
参照:http://www.machu.jp/diary/20120504.html#p01

tdiary データファイル配置

  • /var/tdiary/data/
Unicorn

起動設定ファイル
tdiary-core/unicorn.conf

worker_processes 4
listen 8080, :tcp_nopush => true

pid "unicorn.pid"

stderr_path "log/unicorn.stderr.log"
stdout_path "log/unicorn.stdout.log"

preload_app true
GC.respond_to?(:copy_on_write_friendly=) and GC.copy_on_write_friendly = true

ログフォルダ作成

  • $ mkdir /var/tdiary/tdiary-core/log/

単体起動テスト

  • $ bundle exec unicorn -c unicorn.conf

エラーがでないことを確認
参考情報

  • restart
    • $ kill -s USR2 cat #{current_path}/tmp/pids/unicorn.pid
  • stop
    • $ kill -s QUIT cat tmp/pids/unicorn.pid
    • $ kill -s QUIT cat #{current_path}/tmp/pids/unicorn.pid

起動用スクリプト

  • $ sudo vim /etc/init.d/unicorn_tdiary
#!/bin/sh

NAME="Unicorn for tdiary"
ROOT_DIR="/var/tdiary/tdiary-core"
PID="${ROOT_DIR}/unicorn.pid"
CONF="${ROOT_DIR}/unicorn.conf"
BUNDLE_DIR="/home/igaiga/.rbenv/shims/"
CMD="${BUNDLE_DIR}/bundle exec unicorn -c ${CONF} -D"

start()
{
  if [ -e $PID ]; then
    echo "$NAME already started"
    exit 1
  fi
  echo "start $NAME"
  cd $ROOT_DIR
  $CMD
}

stop()
{
  if [ ! -e $PID ]; then
    echo "$NAME not started"
    exit 1
  fi
  echo "stop $NAME"
  kill -QUIT `cat ${PID}`
}

force_stop()
{
  if [ ! -e $PID ]; then
    echo "$NAME not started"
    exit 1
  fi
  echo "stop $NAME"
  kill -INT `cat ${PID}`
}

reload()
{
  if [ ! -e $PID ]; then
    echo "$NAME not started"
    start
    exit 0
  fi
  echo "reload $NAME"
  kill -HUP `cat ${PID}`
}

restart()
{
    stop
    # Unicorn が停止し切らない内に起動しようとしないように
    sleep 3
    start
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  force-stop)
    force_stop
    ;;
  reload)
    reload
    ;;
  restart)
    restart
    ;;
  *)
    echo "Syntax Error: release [start|stop|force-stop|reload|restart]"
    ;;
esac
起動確認
  • $ sudo /etc/init.d/unicorn_tdiary start

http://igarashikuniaki.net/diary/ でアクセスできればOK

OS起動時に自動起動
  • $ sudo update-rc.d unicorn_tdiary defaults # 自動起動
    • (sudo update-rc.d -f unicorn_tdiary remove # 自動起動解除)

追記: @sora_h さんより「rbenvサーバーで使うならusr/share/rbenvオススメ、あとはupstartのほうが簡単だったりしないかなあ」とツッコミいただきました(ありがとうございます!)。確かに /usr/share/rbenv の方がみんなのものぽくてよかったなー。あと、upstartも便利そうなので次回使ってみたい!


2015-01-02 [長年日記]

_ postgresql 9.4 in ubuntu14.04

apt で 9.3 をいれたが、9.4 がリリースされていたことに気づいたのでバージョンアップ。現在、まだapt標準だとインストールできないのでパッケージ追加。

sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt-get install wget ca-certificates
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install postgresql-9.4 postgresql-contrib-9.4 pgadmin3 libpq-dev

旧バージョンが動いてたら停止

sudo /etc/init.d/postgresql status     
sudo /etc/init.d/postgresql stop 9.3  

バージョンアップの儀式: https://gist.github.com/dideler/60c9ce184198666e5ab4

sudo pg_dropcluster 9.4 main --stop
sudo pg_upgradecluster 9.3 main
sudo pg_dropcluster 9.3 main

確認

sudo /etc/init.d/postgresql status
sudo /etc/init.d/postgresql start

9.4 が起動すればOK

postgres consoleからバージョンを確認したい場合は以下

postgres#=SELECT version();

設定ファイル、私は特に設定不要だった。ポイントはこの辺。

  • /etc/postgresql/9.4/main/postgresql.conf
data_directory = '/var/lib/postgresql/9.4/main' 
unix_socket_directories = '/var/run/postgresql' 
timezone = ‘Japan'

2015-01-03 [長年日記]

_ 2014年よかったこと、できたこと、うれしかったこと

いいことだけを挙げるふりかえり、幸せ度とモチベーションのアップにとてもいいので、2014年版でやってみます。

candy-bottle をつくった

自分について言及されたtweetを集めるツールをつくれた。

Panasonic マルチグリラー がおいしい

これがライフチェンジグにおいしい魚や鶏肉が焼けて幸せ度大幅up! Panasonic マルチグリラー NF-MG1-S

同僚が増えた

仲間が増えるのは嬉しいこと。できることも随分と増えた実感がある。

いがいが日記のデザインを新調

イラストを @yuzdaisy さんに描いてもらってたいそう好みな感じになった

Rubyに初コミット

(テストだけど)Rubyに初めてコミットが取り込まれて嬉しかった。

台湾たのしかった

RubyConf台湾で台湾に行けたし、RubyKaigiでは台湾のみなさんを渋谷企業ツアーにお連れできたし楽しかった!また行きたいわん。

Rails寺子屋を継続開催できた

師範のみなさんも参加者のみなさんもありがとう!長く続けられるといいなぁ。

梅干しを初めてつくったらおいしかった

達人出版梅でつくったら予想外のおいしさ!今年はもっと作ろう。

NYとSFに行けた

いろいろ見て回れて企業訪問もできたりして良質の経験値を得た。

RWC で発表できた

今年も採択していただけてありがたや。

島根に行く機会が多かった

島根のみなさんには本当に優しくしてもらえて大感謝

松江高専で講演できた

高専出身者としては本当に嬉しいことな上に、tweetしてくれたり講演後に話にきてくれたりしてすごく嬉しかった。

SPOTLIGHTS をリリースできた

入社以来ずっと作ってたサービスをついに世に出せた!

芝居をたくさん見れた

キャラメルボックスばっかりだけどたくさん見れた!ほかの芝居も見たい。

本と漫画を減らせた

概ね電子化できた。スペース縮小できて身軽になれたのがとても良い。

健康で過ごせた

健康がなにより。

本日のツッコミ(全2件) [ツッコミを入れる]

_ あると [こういう振り返り、いいですね。 読んでいて、こちらも嬉しくなる感じ。 あちこちたくさん行った年だったようですね。 キ..]

_ いが [>あるとさん いつもコメントありがとうございます!キャラメルのお芝居、満喫しております。:) 今年もよろしゅうです!]


2015-01-04 [長年日記]

_ 2015年目標

年末年始のサーバ式年遷宮で遅くなりましたが、今年も目標を立てました。

健康

去年は体調不良でのお休みが1日もなく健康で過ごせてありがたかった。今年も1年健康でありたい。あとは念のため大きめの健康診断を受けようかと思っている。

英語

去年の目標読んだら、2年前も3年前も進まなかったって書いてある。去年は前半は単語を、後半は発音をやったけどもの足りない感じ。でも発音は少し掴めてきた。今年も同じ路線でがんばってリスニングできるようになりたい。英会話教室に通おうかとも考えている。

技術

去年は(テストだけど)Rubyにコミットが初めてとりこまれた!まだまだ小さな一歩だけど今年はもっとがんばりたい。Railsへもコントリビュートできるようにがんばりたい。

仕事で作ったサービスは花束贈りのspotlightsを世の中に出せてよかった。今年はECについても力をつけたい。

部長業は昨年中盤くらいから人数も増えたこともありいろいろ考えるようになった。他社の先輩諸氏にいろいろ聞かせてもらったのが参考になったので、今年もいろいろ聞きにいって糧にしたい。

教育

去年の頭はまだ講師やってたのか。その後はまちゅさんが引き継いでくれたので安心しておまかせして引退。教科書の形にするのはwebでは公開したので、ちゃんと書き上げて電子書籍にしたい。そしてRuby2.2.0 & Rails4.2対応。

今年は島根でRuby合宿だけじゃなくて、プログラミング少年団やほかのコミュニティでもコーチ業にチャレンジしたい。

卓球

去年は後半から忙しくなって全然できてない・・・。体力を取り戻すところから再スタート。

日常

婚活・・・進捗ダメです・・・がんばります・・・。昨年は玉作湯神社で課金アイテム「願い石」を買ってきたので、そろそろ効果が出てもいいころかと思います。ちゃんとアクションに繋げたいないと・・・。

その他

去年、「今年はいろんなことに目を向けたい。」って書いて、お芝居はいくつか見にいったのと、旅は台湾、NY、SF、島根、京都に行けた。今年も新しいことを始めたい。料理とか。特に用はないけど街に出るとか。去年書いた「ゆっくり過ごせるように練習したい。」はなかなか難しい。なんでこんなにヘタなんだろう・・・。リファクタリングウェットウェアを読み返したので瞑想を初めてみる。

本日のツッコミ(全1件) [ツッコミを入れる]

_ あると [料理はきっと、婚活にもプラスになると思いますよ~ いい出会いがあるといいですね。]


2015-01-08 [長年日記]

_ 髪を染めた

生まれて初めて髪を染めた。やや茶色。でもやってみたらよく分からない程度だった。w
理由は白髪をちらほら見るようになったから。黒い髪は好きなので、ただ黒く染めてもいいのだけど、もういい年齢ですし、遊び心があってもいいかなと。

髪を染めたら不良になれるかと思ったが、いつも通りのおっさんが鏡の向こうにいるだけでした。(^^ゞ


2015-01-24 [長年日記]

_ パンデミック大会でついに優勝した

ゆどうふさん主催のパンデミック大会にちぇりさんとbtoさんのチームで参加してついに優勝しました!!!とみーるさん主催のものから数えて苦節7回目くらい。喜びもひとしお。

今回は新版の「新たな挑戦」を使ったレギュレーション、ノーマルロールに加えて、水色のスペシャルカードを拾えるキャラとアフロ(隣接都市にウィルスが置かれない)が出てきて、特に水色キャラを活躍させられるデッキでした。得点制、ワクチン数、アウトブレイク0、根絶数、残り時間でそれぞれボーナスあり。

初戦は初級、メディック、サイエンティスト、オペレーションエキスパート。今回はアウトブレイク0と根絶でボーナス点が出るので根絶を狙って、うまいこと根絶3つ、ノーアウトブレイクでクリア。ここまで完璧。しかし過去の大会は全て初戦トップでそこから逃げ切れないのでここからが勝負。

二戦目は中級、アフロ、オペレーションエキスパート、水色。ゆどうふさんの前回大会のデッキで初手エピもあったのでアフロを1番手にしてエピ対策。ここもうまくはまってノーアウトブレイククリア、根絶1色。最後にbtoさんがミラクルな読みを発揮して根絶いけるかと思われたが、最後のカード引きで根絶したい色のウィルスが感染してしまい、ミラクル炸裂ならず。ここまでも順調だったが、過去の大会では(前述)なのでここからが勝負。

三戦目は上級、リサーチャー、ディスパッチャー、水色。前半でスペシャルカードがかなり見えていたのでカード使いまくりの急戦でクリア。アウトブレイクは2つだったけどそれなりにあぶなかった。根絶1色。リサーチャーが同色3枚から1枚引いて、結局5枚目を受け取りそのままワクチンを作ったのが良い判断だった。

全勝したけど、根絶少なかったし、スピードクリアも1番ではなかったのでダメかなぁ、と思っていたら(自己計算では3位以下だったし)、なんと優勝で、取り乱して喜びました。前回 tmix で作ったチームパーカー、前回は誰も気づいてくれなかったので、今回ついにインタビューで宣伝できて本当によかった!

参加チームは13チーム。運営のみなさんは今回も黙々と全チーム分のデッキを組んで配布してくれました。12月のとみーるさんの大会に続き、エボラ出血熱対策のチャリティもやっていて、楽しかった上に募金もできてとても良い時間でした。ゆどうふさん、ゆきさん、スタッフのみなさんありがとうございました。

パンデミックはかれこれ5年以上やってるけど、未だに新しい知識を得るばかりなので、今後もさらにプレイしていきたいです。今回の知見はbogota の拠点はかなり便利とか、エピを出しきったら後は理詰め。

なにより優勝して望む懇親会の素晴らしさよ!勝利の美酒(※珈琲)に酔いました。他のチームのみなさんにもおめでとうと言ってもらってとても嬉しかったです!(´▽`) チームメンバーのちぇりさん、btoさんありがとう!


最新 追記