いぬれおがんばれお

がんばる日記です

さくらVPSにUbuntu LTS 14.04をインストールした話(2)

前回の記事を参考に、Rails環境とサーバのセキュリティ周りを構築していきます

vimをインストールする

前回vimをインストールするのを忘れていて、ファイル修正が地獄でした…

sudo apt-get install vim

nginxをインストールする

sysv-rc-confはサービスの起動設定を簡単に登録できるようにするものです

sudo apt-get install nginx
sudo apt-get install sysv-rc-conf
sudo sysv-rc-conf nginx on
sudo /etc/init.d/nginx restart

ここまででIPアドレスの直アクセスしたりすると下記画像のようなページにアクセスできます

f:id:inureo:20150403113009p:plain

ちなみに、下記コマンドで構文確認ができます

nginx -t

参考URL

これから始める人のためのNginx(2):Nginxのインストールと基本設定 (1/4) - @IT Ubuntu 12.04 + ruby 1.9.3 + nginx + unicorn + Redmine - くじらにっき++

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

build-essentialは開発用パッケージを一括インストールできるそうです

sudo apt-get install build-essential
sudo apt-get install libssl-dev

git をインストールしてない方はしてくださいね

sudo apt-get install git

早速 rbenvruby-build をインストールしていきます

git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
echo '' >> ~/.profile
echo '# rbenv' >> ~/.profile
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.profile
echo 'eval "$(rbenv init -)"' >> ~/.profile
source ~/.profile
type rbenv
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

rubyのバージョンを指定してインストール、そしてrehash

rbenv install -l
rbenv install 2.1.3
rbenv rehash

そしてrails環境を整えるために、bundlerとrailsをインストール

gem install bundler
gem install rails

Ubuntu 14.04 で rbenv, ruby-build を使用して Ruby のバージョンを管理する. | hirooka.pro Lector note - How to install build-essential and scim-anthy on Ubuntu 6.06 - Linux > Ubuntu 6.06 LTS - Documents apt - How to install build-essential? - Ask Ubuntu

サーバのgit設定

cd ~
mkdir .ssh
cd .ssh
ssh-keygen
# 下記コマンドで出力したものをGitHub / BitBucketなどのキー登録画面で登録
cat ~/.ssh/id_rsa.pub

僕は var/ 配下にアプリケーションを置くのでパーミッションを変更して、そこにgit cloneします

chown user:user var/
cd var/
git clone hogehoge

これで完了!ついでにbundle installもしてしまいました(╹◡╹)

mysqlのインストール

途中ピンク色の画面になり、パスワードを要求されます(びびった) また、libmysqlclient-devはmysql2 gemで必要だそうです

sudo apt-get install mysql-server
sudo apt-get install libmysqlclient-dev
sudo sysv-rc-conf mysql on

mysqlのユーザ追加

mysql -uroot -p
CREATE USER 'user'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost';

mysqlの設定を変更

mysqlで使う文字コードUTF-8にします

sudo vim /etc/my.cnf

それぞれのセクションに下記を追加

[mysqld]
character-set-server=utf8
skip-character-set-client-handshake
default-storage-engine=INNODB

[mysqldump]
default-character-set=utf8

[mysql]
default-character-set=utf8

そして再起動

sudo service mysql restart

mysqlのセキュリティ設定もします

下記を実行。詳しくは参考URLをどうぞ!

/usr/bin/mysql_secure_installation

[CentOS] MySQLサーバーのインストールを行うの巻 ~mysql_secure_installationを使ってみよう~ - TrippyBoyの愉快な日々

参考サイト

セキュリティ設定

iptablesを設定して、不要なポートを閉じたり、怪しい通信をはじきます。shellで下記を実行していく。

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP

iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -p icmp -j ACCEPT

# 下記は許可するポート、80はhttp通信、443はhttps、10022はssh!
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 10022 -j ACCEPT

iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -P INPUT DROP 
iptables -P OUTPUT ACCEPT

参考サイト:iptablesの設定方法|さくらインターネット公式サポートサイト

次に、iptablesを再起動時に自動で反映するために設定していきます。/etcにファイルを作る。rootになって作業します。

sudo su -
cd /etc
iptables-save > iptables_rule
cp iptables_rule iptables_rule.org

下記が設定ファイルからの復活方法

iptables-restore < iptables_rule

if-pre-up.d に、サーバ起動時に実行されるshファイルをおいておく

cd /etc/network/if-pre-up.d/
vim set_iptables.sh

shの内容は下記

#!/bin/sh
/sbin/iptables-restore < /etc/iptables_rule
exit 0

実行権限をつけてあげて出来上がり

chmod +x set_iptables.sh

Unicornを動かす

MacでもよくみるQtないよエラー!ubuntuではどうやるのか。

Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /home/inureo/.rbenv/versions/2.1.3/bin/ruby extconf.rb
Command 'qmake -spec linux-g++ ' not available

Makefile not found

Gem files will remain installed in /home/inureo/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/gems/capybara-webkit-1.3.0 for inspection.
Results logged to /home/inureo/.rbenv/versions/2.1.3/lib/ruby/gems/2.1.0/extensions/x86_64-linux/2.1.0-static/capybara-webkit-1.3.0/gem_make.out
An error occurred while installing capybara-webkit (1.3.0), and Bundler cannot continue.
Make sure that `gem install capybara-webkit -v '1.3.0'` succeeds before bundling.

下記でOK

sudo apt-get install libqt4-dev

Installing Qt and compiling capybara webkit · thoughtbot/capybara-webkit Wiki

もう一度bundle install、無事に通る(╹◡╹)

アプリケーションのmysqlユーザを追加

GRANT ALL ON database.* TO 'user'@'127.0.0.1' IDENTIFIED BY 'password';

ユニコーンを起動

bundle exec unicorn -D -c ./config/unicorn/production.rb -E production

ユニコーンを殺す時は下記

kill -QUIT `cat tmp/pids/unicorn.pid`

nginx + unicorn + Railsの設定方法 - Qiita Ruby on Rails - Nginx & Unicorn で動かす! - mk-mode BLOG

シリーズ

さくらVPSにUbuntu LTS 14.04をインストールした話(1)

26歳 エンジニアのかばんの中身を晒す

こんにちは、いぬれおです。「nanapiカバンの中身出しアドベントカレンダー2014」というものが開催されておりまして、事業戦略室のアメリさんからバトンを受け取りましたので、カバンの中身を晒してみたいと思います。

と、その前にカバンに求めるものとかを書きたいと思います。

カバンに求めるもの

PCを入れたい

メインのカバンにはPCが入ることが必須です!常にPCを持ち歩きたい勢いなんです。PCがあれば充電もできるしテザリングがあればインターネットもできるし、ちょっとした時間でコードかけるし最強じゃん!みたいなところから…。

それなりのものを使いたい

「靴やカバンはいいものを使え」ってよく聞きますよね。個人的に激しく同意で、やっすい靴とかカバンとかって一目でわかっちゃうんですよね。学生とかならいいんですけどいい年(アラサー)にもなって、そういうの着ちゃうんだ…ってなるのが嫌なんです。

もちろん安いことが悪いなんて全くないんですけどね!安くて質がいいなら最高!ただそんなのほとんどなくて、値段相応なんですよねぇ。あと元々デザイナーだったということもあり、「デザインするやつがウンコみたいな格好してイケてるクリエイティブ生まれんのかよ!」という思いもあり、服装についてはめちゃくちゃ気にかけるようになりました。

ちなみに最近安くてよかったものは無印のウールハーフコートです、超ヘビーユーズしています。

f:id:inureo:20141219015104j:plain

捨てアウター(安くて最悪捨ててもいいレベルのもの)として買ったんですけど、多分余裕で3年は着ると思います。最高です。

さて話がそれましたが、本題です。

26歳 エンジニアのカバンの中身

f:id:inureo:20141219005145j:plain

  • master-pieceのトートバッグ
  • トートバッグにデフォルトでついてたポーチ
  • 財布
  • 名刺入れ
  • キーケース
  • 無印のノート
  • 3色ボールペン
  • スティックのり
  • メガネケース
  • iPhone
  • モバイルバッテリー
  • ライトニングケーブル
  • ハリスツイードのポーチ?
  • 目薬
  • ブレスケア
  • ティッシュ
  • ハンカチ
  • MacBookAir

master-pieceのカバン

f:id:inureo:20141219005155j:plain

昨年の冬に転職祝いに買ったものです。自分は13インチのAirを使っているのでそれが入るサイズで、自分の服にも合わせやすいものが欲しくてこちらにしました。内側は鮮やかな朱色になっていてかわいいです。

アウターに、チェスターコートやモッズコートやらハーフコートを着ているのですが、何にでもあうのでめちゃくちゃ気に入っているカバンです。

充実したディテール

f:id:inureo:20141219004137j:plain

また内ポケットなど細かい部分も充実していて、このポーチがカバンの中でベルトについてたりします。細かいもの(目薬・ブレスケア・ティッシュ)を入れるのに重宝しています。個人的にすた丼・王将・二郎などのニンニク臭くなる飯屋が好きなので常にブレスケアを持っています。

汗かきのため、夏場はこれに制汗スプレー・ギャツビーの汗ふきシートも追加されてにおい対策おじさんになります。

だいすきなPC

2011年モデルだと思います。nanapiにきてからシールを貼るようになったので微妙にシールが貼ってあります。が、会社のMBPを触る時間の方が多いので、そちらに良いシールを集約させています。

f:id:inureo:20141219004108j:plain

色んなケースたち

f:id:inureo:20141219004122j:plain

左から、キーケース・名刺入れ・財布です。

キーケース

渋谷のパルコ1のB1Fの雑貨屋で買いました、シマシマと好きな色(赤・青・金)だったのとリーズナブルな値段だったのですぐに買いました。赤+金・青+金ってめっちゃ好きなんですよね。

名刺入れ

無印の名刺入れが壊れたので、Amazonで一番安いかつ革製品であるという条件で購入したものです。すぐ買い換えるつもりだったのですが、なんだかんだ4年ほど使っています(;´Д`)

財布

エッティンガーの二つ折りの財布です。内側はキャメル色になっていてかわいいんです。購入した当時は外側が黒・内側が紫というモデルに変わったタイミングだったので、今使っている色の在庫を探すのに必死だったことを憶えています。

また、仲の良い友達がエッティンガーの財布を使っているということを共有していないのに、同じモデルの財布を買っていて複雑な気持ちになりました。

ハリスツイードのポーチ

f:id:inureo:20141219004152j:plain

前職で取材をした際にいただいたものです。丈夫で色々入るので重宝しています。 中身はモバイルバッテリーとメガネケース、ライトニングケーブル、スティックのりです。スティックのりが浮いていますが、封筒の糊付けする時に活躍します。

ハンカチ

f:id:inureo:20141219004112j:plain

いつも持ち歩いてるけど、カバンの中にあるのでいつも取り出せず使えていません。ハンカチって常にポケットとかに入れておくべきものなんですかね…。

ということで、26歳エンジニアのカバンの中身出しでした。

次のカバン出しブログ

次は、僕と近いスキルセットのぽりさんです!常に青を身にまとっていたり、異常に写真撮影が上手かったり、なぜか紙の種類・重さについて語れたり不思議な人です!お楽しみにどうぞ!

CircleCI上でRSpecを動かす時にfeatureテストだけ落ちていた時

なんかE2Eテストだけ落ちる…

取り敢えずCircleCIにSSHで接続して状況確認、Capybaraでエラーが出るタイミングでページを保存

couldn't find file 'jquery-1.11.1'
  (in /home/ubuntu/project/app/assets/javascripts/pc/application.js:14)

( ゚д゚)ハッ!

test:
  override:
    - bundle exec rake bower:install
    - bundle exec rake spec

〜fin〜

アホだったお話でした

さくらVPSにUbuntu LTS 14.04をインストールした話(1)

さくらVPSUbuntu LTS 14.04をインストールして、セットアップしたので備忘録的にまとめておきます

チームでWebサービスを作るぞ!ということで、さくらVPSRails環境を構築します 想定は nginx + Unicornです

OSのカスタムインストール

これはさくらインターネットさんの方で、画像付きの丁寧なマニュアルがありましたのでその通り進めて全く問題なかったのでそのまま参考URLをはっておきますね

Ubuntu 12.04/14.04|カスタムOSインストールガイド|さくらのVPS|さくらインターネット公式サポートサイト

rootになれるユーザを制限

vi /etc/pam.d/su
# 15行目:コメント解除し su を許可するグループ名追記
auth   required   pam_wheel.so   group=adm

sshdの設定

やること

  • Portが22番のままだと辞書攻撃の対象になるなどセキュリティ上不安なので、ポートの変更
  • sshでrootログインを遮断
  • X11Protcolを遮断

まずはsshdの設定ファイルを開く

vi /etc/ssh/sshd_config

49152番から65535番までの間の任意の一つを選んで設定する Port番号は参考URLでも書かれてるように上記の番号で設定する

--- snip ---
#Port 22
Port XXXXXX
...
#PermitRootLogin yes
PermitRootLogin no
...
#X11Forwarding yes
#X11DisplayOffset 10
X11Forwarding no

sshdをリロード

service ssh reload

無事にリロードができたらssh-p オプションでポートを指定してログインする

参考サイト

oceanweb : さくらの VPS : Ubuntu 12.04 導入後の設定(1)

aptの設定

multiverseというのがテストがいまいちということで、リポジトリリストからコメントアウトするよ

vi /etc/apt/sources.list

後ろに multiverse と付いているので、 multiverse で検索してコメントアウトしてあげると楽です

29: #deb http://jp.archive.ubuntu.com/ubuntu precise multiverse
30: #deb-src http://jp.archive.ubuntu.com/ubuntu precise multiverse
31: #deb http://jp.archive.ubuntu.com/ubuntu precise-updates multiverse
32: #deb-src http://jp.archive.ubuntu.com/ubuntu precise-updates multiverse

39: #deb http://jp.archive.ubuntu.com/ubuntu precise-backports main restricted unive
rse multiverse
40: #deb-src http://jp.archive.ubuntu.com/ubuntu precise-backports main restricted universe multiverse

44: #deb http://security.ubuntu.com/ubuntu precise-security multiverse
45: #deb-src http://security.ubuntu.com/ubuntu precise-security multiverse

パッケージの更新もしてあげるよ

apt-get update
apt-get upgrade

参考サイト

oceanweb : さくらの VPS : Ubuntu 12.04 導入後の設定(2)

ロケールの設定

日本語が使えるようにするよ、早速さっき設定したaptで日本語のパッケージをインストール

apt-get install language-pack-ja
dpkg-reconfigure locales
update-locale LANG=ja_JP.UTF-8

参考サイト

評判のさくらのVPSを使うときに最初にやっておきたいこと(Ubuntu編) | レンタルサーバー・自宅サーバー設定・構築のヒント

NTPクライアントの設定

サーバの時刻を標準時刻と同期できるようにするよ

vi /etc/default/ntpdate
#NTPSERVERS="ntp.ubuntu.com"
NTPSERVERS="ntp.nict.jp"

下記にスクリプトを制作

vi /etc/cron.daily/ntpdate

スクリプトの中身

# !/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin

if [ ! -x /usr/sbin/ntpdate-debian ] && [ -d /usr/sbin ]; then
        exit 0
fi

/usr/sbin/ntpdate-debian

パーミッションを変更して実行可能にしてあげる

chmod 755 /etc/cron.daily/ntpdate

参考サイト

oceanweb : さくらの VPS : Ubuntu 12.04 導入後の設定(2)

色々インストール

sudo apt-get install git
sudo apt-get install tmux

Zshにする

Zshをカスタマイズするのが面倒なので、Preztoでセットアップします。ここは参考URLをまるまるコピーしています

// Zshインストール
sudo apt-get install zsh

// Zsh起動
zsh
 
// リポジトリをclone
git clone --recursive https://github.com/sorin-ionescu/prezto.git "${ZDOTDIR:-$HOME}/.zprezto"
 
// 設定ファイルを作成
setopt EXTENDED_GLOB
for rcfile in "${ZDOTDIR:-$HOME}"/.zprezto/runcoms/^README.md(.N); do
  ln -s "$rcfile" "${ZDOTDIR:-$HOME}/.${rcfile:t}"
done
 
// Shellのデフォルトに設定
chsh -s /bin/zsh

Zsh + Prezto で快適コマンド環境を構築する | Developers.IO

秘密鍵ログイン

scp -P XXXXX .ssh/id_rsa.pub user@IPAddress:/home/user

userのhomeディレクトリに届いているか確認したら、

mkdir .ssh
mv id_rsa.pub ~/.ssh/authorized_keys
sudo vi /etc/ssh/sshd_config

パスワードログインを禁止

#PasswordAuthentication yes
PasswordAuthentication no
sudo service sshd restart

公開鍵認証の設定とconfigファイルでssh接続の管理(Ubuntu)

ユーザにsudo追加

rootになって visudo でユーザを追加

su -
visudo

sudoersを開いたら下記を追加

user ALL=(ALL)       ALL

さくらVPS+CentOS:自分をsudoユーザに追加してみた | Suinasia

と、長くなりそうなのでここまで。 Rails環境をととのえるのは次回にします(╹◡╹)

Node.js勉強メモ

Node.jsとApacheとかの違い

大量のリクエストをさばく仕組みとして、Apacheとかとモデルを変えている

スレッドモデル(Apache

スレッドは1つのものしか処理ができないので、新しいリクエストがきたら新しいスレッドを立ち上げて処理をする。 スレッド生成の際にメモリを消費するので、メモリの限界がくるとスレッドが作られず、待たされるリクエストが発生する。

イベントループモデル(Node.js)

イベントループでは実行する処理(リクエスト)をキューに格納してから順に実行していく。イベントの完了は待たないので処理をブロックしないように書く。

  • ノンブロッキングな書き方をしなくてはいけない
  • 処理の終わる順番がイマイチわからない

書き方のお作法

ノンブロッキングな書き方

コールバック関数を使うだけ、使う対象はDBの接続など処理に時間がかかるもの

setTimeout(function(){
  console.log('hoge');
}, 1000);
console.log('end');

ブロッキングな書き方をするとシングルスレッド故に全ての処理がとまってしまう、あかん。下記はドットインストール内でやっていた無理やりなブロッキングな書き方。

var start = new Date().getTIme();
while (new Date().getTime() < start + 1000);
console.log('end');

外部ファイルに設定ファイルを切り出す

hoge.jsを下記のような形でつくる

exports.hoge = 'hoge';
exports.hage = 'hage';

下記みたいな形でrequireしてしてオブジェクトの形でアクセスすれば取得できる

var hoge = require('./hoge');

Node.js入門 (全16回) - プログラミングならドットインストール node.jsでサーバサイドJavaScript開発入門(2):naveでNode.jsのバージョン管理&イベントループ詳説 (2/3) - @IT ithreads でスレッドプール - naoyaのはてなダイアリー

SCSSファイルをSASSファイルにワンライナーでコンバートする

先日Railsプロジェクトのテンプレートをerbからslimに変換しました。今度はscssファイルをsass記述に一括でコンバートしようと思っています。

その時に使ったワンライナーを参考に、コマンドをちゃんと理解しようと思います\(^o^)/

前回使ったものを理解する

find app/views -name "*.erb" -exec bundle exec erb2slim {} \;

このワンライナーはほぼfindだけで完結していますね!構文は[path] [options] [action]というように書いているので、こちらを分解して説明してみます。

path

ディレクトリをapp/viewsに指定

options

nameオプションを使ってerbファイルに絞る

action

検索後,commandを実行する。このとき{}をコマンドで用いることにより,検索結果をコマンドに引き渡す なので対象ファイルが{}でわたってきているので、それに対してerb2slimを実行

Linuxコマンド集 - 【 find 】 ファイルやディレクトリを検索する:ITpro

1つずつまとめていくと楽勝ですね!

上記を理解した上でsass用ワンライナーを書く

結論から書くと下記です、順番に分解していきます!

find ./app/assets/stylesheets/* -name '*.scss' -type f | while read -r d; do path=${d%.*}; sass-convert $d "${path}.sass"; rm $d; done  

find

find ./app/assets/stylesheets/* -name '*.scss' -type f ここまでですね

path

Railsプロジェクトのトップディレクトリで使うので、./app/assets/stylesheets/*までパスを指定

name

erbと同じくscssファイルのみの指定

type

-type c 指定したファイル・タイプを検索する。cはdがディレクトリを,fが通常ファイルを,lがシンボリック・リンクを表す

ということで通常ファイルのみを選択

Linuxコマンド集 - 【 find 】 ファイルやディレクトリを検索する:ITpro

while

while read -r d;
  do
    path=${d%.*};
    sass-convert $d "${path}.sass";
    rm $d;
done

pipeでfindの結果を引き渡しています。

whileの条件

while read -r d;

引き渡された結果をreadして、$dという変数にして回しています。readとしているので、引き渡されたリストの行数分だけ回します。 また、-rについては下記のようなオプションになっています。

-r   バック・スラッシュをエスケープ文字とみなさない

Linuxコマンド集 - 【 read 】 読み出したファイルを解釈する:ITpro

path=${d%.*};

変数dを正規表現で拡張をとりのぞき、変数pathに代入しています

sass-convert

引き渡された$dを、同じファイル名で拡張子をsassに変えた先を変換先としてコンバートをさせています。

rm $d;

使ったファイルを削除!

その他参考サイト: findのexecが便利 - マツモブログ find の -exec 内でパイプ|PC-Unix弄り始めました。 TIPS/Linux/042 - PukiWiki

sass-convertがかなり賢いので、ほぼ手直しなしでOKでした!

〜 fin 〜

Expressのインストールとnpmの-gオプションを今更理解したのでメモ

超基礎的なところだけど雰囲気からキチンと理解したのでメモ

expressをインストールする

npm install -g express
npm install -g express-generator

後者のexpress-generatorをいれないとexpressコマンドがインストールされないので注意。

-gオプションとは

npmでの-gオプションはグローバルオプションと言われています。これをすることで実行モジュールとモジュール自体が下記の場所にインストールされます。

# モジュール本体
/usr/local/lib/node_modules

# 実行モジュール
/usr/local/bin/

# こんな感じでシンボリックリンクができる
express -> ../lib/node_modules/express-generator/bin/express*

-gをつけずにローカルモードでインストールすると下記のようになります。

# モジュール本体
/usr/local/lib/node_modules

# 実行モジュール
/home/mydir/node_modules/.bin/

カレントワーキングディレクトリの下にインストールしてくれる さらに参考サイトによるとインストール先パスはこんな感じになるそうです

参考サイト

npm のローカルモードでインストールした実行モジュールにパスを通す設定 - Qiita http://tmlife.net/programming/javascript/nodejs-package-manager-npm-usag.html Node.js のパッケージ管理ツール npm と package.json の使い方 | TM Life