VPSを借りたらやるべきことのまとめ(+α)
最近、さくらのVPSがプラン改定したこともあり、
VPSがまた話題になってきているように思います
私も久々にVPS借りまくって*1構築しております
初期構築時に毎回やる作業はEvernoteあたりにメモしていて、
構築のたびに書き直したりしているのですが、
一度Blogにメモしておいてもいいのかな・・・と
似たような記事は探すとたくさん出てきますので、
他の方の記事*2もぜひ参考に(´・ω・)っ *3
0. 前提
一応(さくらの)VPSを基準にしていますが、
物理サーバへのOSインストール後にも応用できるはずです
ディストリはRHEL系(特にCentOS)で書いてますので、
他OSの場合は適切な読み替えを
なお、私はどちらかといえばアプリ側のエンジニアであり、
いろいろ甘い面があるかと思いますので、
「これは(゚д゚)マズー」というものがあれば突っ込みを(`・ω・´)ノ
1. パッケージポリシー決め
何のルールもなく構築すると、
たいていぐちゃぐちゃになって管理できないので、
最初にルールを策定しています
何度も見直して書き換えてますが、
とりあえず現時点での最新だとこんな感じに(´・ω・)っ
- 前提として、デフォルトの環境を極力「汚さない」
- 後々管理することを考えると、できるだけmakeとかしたくない
- インストールはyum等のパッケージマネージャを最優先とする
- 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
- 必ず"--prefix=/usr/local/[名前][必要ならバージョン]"をつける
- 実行コマンドは"/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