ぱろっと・すたじお

技術メモなどをまったりと / my site : http://parrot-studio.com/

VPSを借りたらやるべきことのまとめ(+α)

最近、さくらのVPSがプラン改定したこともあり、
VPSがまた話題になってきているように思います
私も久々にVPS借りまくって*1構築しております


初期構築時に毎回やる作業はEvernoteあたりにメモしていて、
構築のたびに書き直したりしているのですが、
一度Blogにメモしておいてもいいのかな・・・と


似たような記事は探すとたくさん出てきますので、
他の方の記事*2もぜひ参考に(´・ω・)っ *3

0. 前提


一応(さくらの)VPSを基準にしていますが、
物理サーバへのOSインストール後にも応用できるはずです


ディストリはRHEL系(特にCentOS)で書いてますので、
他OSの場合は適切な読み替えを


なお、私はどちらかといえばアプリ側のエンジニアであり、
いろいろ甘い面があるかと思いますので、
「これは(゚д゚)マズー」というものがあれば突っ込みを(`・ω・´)ノ

1. パッケージポリシー決め


何のルールもなく構築すると、
たいていぐちゃぐちゃになって管理できないので、
最初にルールを策定しています


何度も見直して書き換えてますが、
とりあえず現時点での最新だとこんな感じに(´・ω・)っ

  • 前提として、デフォルトの環境を極力「汚さない」
    • 後々管理することを考えると、できるだけmakeとかしたくない
  • インストールはyum等のパッケージマネージャを最優先とする
    • こっちの方がセキュリティパッチをあてるのも楽だし
    • まずは公式デフォルトリポジトリ
    • 次点でrpmforgeとかepelとかプロダクト独自のリポジトリのとか
      • JenkinsとかMongoDBとか
    • デフォルトでないリポジトリはenable=0を指定して --enablerepo=hoge を使う
  • makeはprefixで"/usr/local"を指定
    • 必ず"--prefix=/usr/local/[名前][必要ならバージョン]"をつける
      • 例1:/usr/local/ruby193
      • 例2:/usr/local/nginx
    • 必要ならそれを/usr/local/[名前]にリンクする
      • 例:ln -s /usr/local/ruby193 /usr/local/ruby
  • 実行コマンドは"/usr/local/bin"にリンク
    • 例:ln -s /usr/local/ruby/bin/* /usr/local/bin/


あくまでRubyの話ではありますが、
本番環境にRVM等のバージョン切り替えシステムは入れてません
(複数入れる場合はシンボリックリンクを工夫で)


あれを使うとcron等、バッチの指定ではまることが多いので、
経験上おすすめしませぬ(´-ω-)

2. SSHの構築


telnetやFTPが許されるのは素人までだよ(´・ω・)(・ω・`)ネー


・・・というのは半分冗談で半分本気ですが、
今から構築する場合だと、やはりSSHの構築は必須です
しかも、できれば公開鍵方式のみで*4


公開鍵を使えば安全なだけでなく、
いちいちログインパスワードを入力する手間も省けるため、
仕事でさくらのレンタルサーバを使う際にも設定してました*5


逆に、SSHさえ構築してしまえば、
ターミナル操作だけでなく、ファイルの転送もGitリポジトリの操作も、
あるいはローカルポートに対するトンネリングも、全部SSHからできます*6


詳しい解説は探せばいくらでも出てきますし、
GitHub絡みでSSHに慣れている方も多いと思いますが、
大雑把にはこんな感じで(´・ω・)っ

# 鍵の追加
# もちろん鍵を設定するユーザで操作
cd ~
cd .ssh # 権限を間違えるとrejectされる
chmod 700 .ssh
cd .ssh
vi authorized_keys # 公開鍵を登録
chmod 600 authorized_keys # 権限を間違えるとrejectされる
# /etc/ssh/sshd_config で見るべきところ

# 今はほとんどver2でいいはず
Protocol 2
# ポートは変えられるなら変えるべき
Port xxxxx
# rootログインなんていけません
PermitRootLogin no
# 公開鍵を使いましょう
PubkeyAuthentication yes
# パスワードは突破されやすいのでダメです
# 鍵が使えない場合は仕方ないのでyes
PasswordAuthentication no


後はsshdを再起動して鍵を使ったアクセスを試すだけですが、
さくらのVPSならブラウザからターミナルに入れるので、
設定をミスした場合はそこから修正すればOKです

3. 環境設定


さほど重要ではないのですが、
たまにはまるので・・・


PATHの設定とLANGの設定を確認し、
必要ならば更新を

# ~/.bash_profile

PATH=$PATH:$HOME/bin:$HOME/sbin:/usr/local/bin:/usr/local/sbin:/sbin:/usr/sbin

# /etc/sysconfig/i18n

LANG="ja_JP.UTF-8"

4. sudoの設定


suが許されるのは(ry
ということで、suではなくsudoをおすすめします
(Ubuntuは最初からsudo設定済みですが)

su -
visudo


# 真ん中あたりのsecure_pathをコメントアウト
# ラストに以下を追加
parrot ALL = (ALL) ALL, !/bin/su
Defaults env_keep += "PATH"

# user名(parrot)は適当に書き換えを
# env_keep += "PATH" はsudoしてもPATHを引き継ぐ設定


vi /etc/pam.d/su

# 以下のコメントを除去
auth required pam_wheel.so use_uid


# sudo が動作することを確認
# suができないことを確認

# rootをロックして使えなくする(解除は -U)
sudo usermod -L root


最後のrootロックは危険なので、
sudoが完全に動作することを確認してからにしましょう
でないと、最悪OSの入れ直しです(´・ω・`)

5. iptablesの設定


自宅でサーバを立てる場合、
家庭用ルータがほとんどのフィルタリングをしてくれるので、
意図的にiptablesを止めることもあります


でも、VPSの場合は外に対してノーガードなので、
iptablesを適切に設定しないとえらいことに(((((( ;゚Д゚)))))


この辺はあまり詳しくなかったので、
以前いろいろ調べてみたのですが、
こちらの解説がわかりやすいと思います


http://akibe.com/centos-setup-3-iptables/


要は、いったんポートを全部閉じて、
必要なポート(SSH/HTTP/SMTP/etc...)だけ開けろってことです


ただ、これの設定をミスると、ネットワークアクセス不能になり、
当然ながらSSHもつながらなくなります
もちろん、私も初めてのVPSでやらかしましたΣ(・ω・ノ)ノ


ブラウザコンソールってすばらしい・・・

6. [おまけ]Ruby周りの構築


最後に軽くRuby周りのお話を
Rubyのインストールはパッケージポリシーで書いた通りですが、
Ruby直下のgemもあまり汚したくありません


そこで、コマンドとして必要なもの、
例えばpry/rspec/bundler/rails等を共通gemに入れて、
各アプリではローカルインストールをおすすめします

sudo gem install pry rspec bundler rails # あくまで一例
cd hoge_app
# ここにGemfileがあるという前提
bundle install --path vendor/bundle 


でないと、複数のバージョンが入り乱れてややこしく・・・(´-ω-)




メモしてある内容はもっと細かいし、
これ以降もいろいろあるのですが、
応用が利く範囲での最低限だとこんなものだと思います


環境やポリシーによってベターな構築方法は変わってきますので、
これも一つのやり方、ということで(`・ω・´)ノ

*1: といっても、parrot-studio.comの入れ替えともう一つ程度ですが

*2: 「VPSを借りたら」で検索すると山のように・・・

*3: 一番最初に参考にしたのはこちら http://labs.unoh.net/2007/03/post_73.html

*4: タブレットのSSHアプリ等で、鍵が使えないケースもあるのですが

*5: 場合により鍵のパスフレーズ入力が必要ですが、あくまでローカルでの解除処理であって、パスフレーズを通信するわけではないので安全です

*6: 過去に書いたこちらも(´・ω・)っ http://d.hatena.ne.jp/parrot_studio/20091110/1257864738 http://d.hatena.ne.jp/parrot_studio/20101202/1291260115