さくら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アドレスの直アクセスしたりすると下記画像のようなページにアクセスできます
ちなみに、下記コマンドで構文確認ができます
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
早速 rbenv
と ruby-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の設定を変更
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
シリーズ
26歳 エンジニアのかばんの中身を晒す
こんにちは、いぬれおです。「nanapiカバンの中身出しアドベントカレンダー2014」というものが開催されておりまして、事業戦略室のアメリさんからバトンを受け取りましたので、カバンの中身を晒してみたいと思います。
と、その前にカバンに求めるものとかを書きたいと思います。
カバンに求めるもの
PCを入れたい
メインのカバンにはPCが入ることが必須です!常にPCを持ち歩きたい勢いなんです。PCがあれば充電もできるしテザリングがあればインターネットもできるし、ちょっとした時間でコードかけるし最強じゃん!みたいなところから…。
それなりのものを使いたい
「靴やカバンはいいものを使え」ってよく聞きますよね。個人的に激しく同意で、やっすい靴とかカバンとかって一目でわかっちゃうんですよね。学生とかならいいんですけどいい年(アラサー)にもなって、そういうの着ちゃうんだ…ってなるのが嫌なんです。
もちろん安いことが悪いなんて全くないんですけどね!安くて質がいいなら最高!ただそんなのほとんどなくて、値段相応なんですよねぇ。あと元々デザイナーだったということもあり、「デザインするやつがウンコみたいな格好してイケてるクリエイティブ生まれんのかよ!」という思いもあり、服装についてはめちゃくちゃ気にかけるようになりました。
ちなみに最近安くてよかったものは無印のウールハーフコートです、超ヘビーユーズしています。
捨てアウター(安くて最悪捨ててもいいレベルのもの)として買ったんですけど、多分余裕で3年は着ると思います。最高です。
さて話がそれましたが、本題です。
26歳 エンジニアのカバンの中身
- master-pieceのトートバッグ
- トートバッグにデフォルトでついてたポーチ
- 財布
- 名刺入れ
- キーケース
- 無印のノート
- 3色ボールペン
- スティックのり
- メガネケース
- iPhone
- モバイルバッテリー
- ライトニングケーブル
- ハリスツイードのポーチ?
- 目薬
- ブレスケア
- ティッシュ
- ハンカチ
- MacBookAir
master-pieceのカバン
昨年の冬に転職祝いに買ったものです。自分は13インチのAirを使っているのでそれが入るサイズで、自分の服にも合わせやすいものが欲しくてこちらにしました。内側は鮮やかな朱色になっていてかわいいです。
アウターに、チェスターコートやモッズコートやらハーフコートを着ているのですが、何にでもあうのでめちゃくちゃ気に入っているカバンです。
充実したディテール
また内ポケットなど細かい部分も充実していて、このポーチがカバンの中でベルトについてたりします。細かいもの(目薬・ブレスケア・ティッシュ)を入れるのに重宝しています。個人的にすた丼・王将・二郎などのニンニク臭くなる飯屋が好きなので常にブレスケアを持っています。
汗かきのため、夏場はこれに制汗スプレー・ギャツビーの汗ふきシートも追加されてにおい対策おじさんになります。
だいすきなPC
2011年モデルだと思います。nanapiにきてからシールを貼るようになったので微妙にシールが貼ってあります。が、会社のMBPを触る時間の方が多いので、そちらに良いシールを集約させています。
色んなケースたち
左から、キーケース・名刺入れ・財布です。
キーケース
渋谷のパルコ1のB1Fの雑貨屋で買いました、シマシマと好きな色(赤・青・金)だったのとリーズナブルな値段だったのですぐに買いました。赤+金・青+金ってめっちゃ好きなんですよね。
名刺入れ
無印の名刺入れが壊れたので、Amazonで一番安いかつ革製品であるという条件で購入したものです。すぐ買い換えるつもりだったのですが、なんだかんだ4年ほど使っています(;´Д`)
財布
エッティンガーの二つ折りの財布です。内側はキャメル色になっていてかわいいんです。購入した当時は外側が黒・内側が紫というモデルに変わったタイミングだったので、今使っている色の在庫を探すのに必死だったことを憶えています。
また、仲の良い友達がエッティンガーの財布を使っているということを共有していないのに、同じモデルの財布を買っていて複雑な気持ちになりました。
ハリスツイードのポーチ
前職で取材をした際にいただいたものです。丈夫で色々入るので重宝しています。 中身はモバイルバッテリーとメガネケース、ライトニングケーブル、スティックのりです。スティックのりが浮いていますが、封筒の糊付けする時に活躍します。
ハンカチ
いつも持ち歩いてるけど、カバンの中にあるのでいつも取り出せず使えていません。ハンカチって常にポケットとかに入れておくべきものなんですかね…。
ということで、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)
さくらVPSにUbuntu LTS 14.04をインストールして、セットアップしたので備忘録的にまとめておきます
チームでWebサービスを作るぞ!ということで、さくらVPSにRails環境を構築します 想定は 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環境をととのえるのは次回にします(╹◡╹)
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 〜
Railsのviews配下にある.erbファイルをslimに変換する
現在の業務で行っているプロジェクトでは、コーディングをデザイナーさんにやっていただいていたのでerbを使っています。しかしhtmlって長いよね、閉じるの面倒だよね、ということでslimに移行することにしました。(レンダリング時間が一番速いしね!)
デザイナーさんも新しいこと覚えたい!と前のめりだったので、取り敢えず現状のerbをslimに変換する方法を探す。
導入まで
サクーっと検索するとerbからhaml、そしてhamlからslimに変換する方法がよく出てきました。エントリを読んでみると変換途中でトラブルが起こるみたいだったので、なんとか一括で変換できるものがないか探してみるとやっぱりありました。
コミットログを見てみると2013/4にファーストバージョンがコミットされ、昨年末から活発になってきている模様です。
GitHub: slim-template/html2slim
参考サイト: Railsのviewsディレクトリ以下の.erbファイルをSlimに一括変換するgem (html2slim) とワンライナー記述 | もっちブログ 3/3 Slimテンプレートエンジンを使ってHTMLを出力する [Ruby] All About
いざ導入
コンバート
参考サイトに沿って進めていきます。projectにいれるのではなくローカルにhtml2slimをインストールします。
$ gem install html2slim
無事に入ったと思ったらcommand not found、、下記を試す
$ rbenv exec gem install html2slim
はいった!bundlerを雰囲気で使ってるのでここらへんはちゃんと調べてブログにまとめます。
$ rbenv exec html2slim -h Usage: html2slim INPUT_FILENAME_OR_DIRECTORY [OUTPUT_FILENAME_OR_DIRECTORY] [options] --trace Show a full traceback on error -d, --delete Delete HTML files -h, --help Show this message -v, --version Print version
rbenv execも外してOK
$ html2slim -h Usage: html2slim INPUT_FILENAME_OR_DIRECTORY [OUTPUT_FILENAME_OR_DIRECTORY] [options] --trace Show a full traceback on error -d, --delete Delete HTML files -h, --help Show this message -v, --version Print version
参考サイトにのっているワンライナーだとactive_admin、deviseを使っている場合ディレクトリが深い部分もあるので別のサイトのものを使用。(rbenvの部分はbundleなどに変更してみてくださいね)
find app/views -name "*.erb" -exec bundle exec erb2slim {} \;
こんな感じに!
コンバート後の対応
- style記述に対応していない
- scriptタグに対応していない
- styleタグに対応していない
- if、unlessのインデントがズレる
ある程度まではコンバートしてくれるのですが、上記の点で手直しが必要になります。
またslimの記述で角カッコでアトリビュートを囲う方法があるのですが、個人的には閉じ忘れが面倒になるので全て角カッコを抜いて下記のような形にしました。
h1 class="heading"
ザックリとですが備忘録的なメモです!
slimのREADME.md日本語訳 slim/README.md at README_ja · yterajima/slim
GitHub searchを使ってイケてるしヤバいメソッド名をつけよう!
コードレビューの中で「メソッド名がダサい」と、指摘をいただいた際に参考になるよと教えてもらった方法です。
GitHubのSearchを使う
恥ずかしながら上記ページを知らなかったのですが、ここからパブリックなプロジェクト内の検索ができるようです。こちらを使って14.7Mもあるレポジトリの中からメソッド名の参考になるものを探してみましょう。
1. searchしたい部分を入力
rubyのmapを使ったソースがみたいなー、ということでmapで検索をします。たくさん出た!けどレポジトリ名での検索になってしまっているので、code検索に切り替えます。
2. codeを選択
code検索に切り替わったのですが、たくさんの言語が混ざっているのでサイドメニューのLanguagesの中から更に言語を選択します、ここではRubyを選択します。
3. 言語を選択
なんとなく…ぽくなってきた…?
検索内容がザックリすぎたので、もう少し詳細を入れて調べてみます。
より詳しい内容で検索
map(&:id)
で、idだけを抽出するメソッドの名前がほしーい!ということで画像を見るとids!
User.ids
、実にオブジェクト指向な感じ。
簡単な例だったので参考になるかはわかりませんが、検索するならGitHubでの検索が一番数が多いと思うので備忘録的にブログを書きました。何かの参考になれば幸いです。
ちなみにメソッド名関連で調べてみると、CRUDを頭につけるとわかりやすいよねーとかあるので、ひとまずはそこらへんを参考にして、飛び道具的なメソッドが出てきたらGitHub Searchを使ってみるつもりです!
更に余談ですが下記エントリを見るとめちゃくちゃ勉強になりそうなので見て勉強してみることにします。
正しいコーディングが身につくエンジニア英語の手引き 〜文法とクラス/メソッド、命名規則〜 | Find Job ! Startup