フリーライフ

フリーに生きるために身につける技術など

VPSでWeb開設

サーバー開設

いつか個人レベルでお金を稼ぎたい、となったらやっぱり自分のWebサイトは持っておきたいなぁなんて思いました。

そこでVPSクラウドサーバー(AWSなど)を考えました。流行りはクラウドって気がしますが、AWSの料金サービスみてもいまいちピンときません。 ただAWSで気になるのは、稼働率にしたがって課金されるという仕組みです。今回はWebサーバーを立てたいので、稼働率はおのずと100%です。

AWSで料金シミュレートしてみると、メモリ1G程度のスペックをフル稼働で基本料金15$弱。さらにデータ転送量によっては追加課金される恐怖があります。 VPS見る限り同スペックではもっと安く運用できそうです。さらにデータ転送料は無料です。

AWSで1年間はほぼ無料で使える枠(750時間/月 稼働無料なのでフル稼働できる)があるのは迷いましたが、わかりやすさとベースのやすさで、さくらVPSにすることにしました。

以下のサイトがサーバー選びの参考になりました。

エンジニアならウェブサーバーのひとつでも自腹で立てて運用すべき理由と、サーバー環境の選び方 - akiyan.com
「サーバーってなに?」~初心者でもよくわかる!VPSによるWebサーバー構築講座(1) - さくらのナレッジ

そんなわけで、以下さくらVPSにてサーバー開設した備忘録です。

開設手順

基本は以下のサイトを参考にさせていただきました。
初心者でもわかる!さくらVPS | Sakura VPS 設定マニュアル
サーバー構築 - さくらVPSの初期設定とCentOSによるWEBサーバー環境構築まとめ - Qiita
以下はあくまで自分の際の思考・手順なので詳細は参考サイトのほうがためになります。

まずはプランの選択

メモリ 512M 1G 2G
ディスク容量 SSD:20GB SSD:30GB or HDD:100GB SSD:50GB or HDD:200GB
月額 685円 972円 1706円
CPU 仮想1core 仮想2core 仮想3core

お手頃なのはこの辺までです。
私はメモリ1GのSSD30GBのプランにしました。
SSDとHDDのアクセス速度は体感できるほど差があります。出来る限りSSDにしたいと思っています。 それからメモリも多くはないのと、仮想化によるオーバーヘッドもあるわけですので、ディスクアクセスは極力早くしておきたいところです。

ちなみにクレジットカードでの申込をした場合に限り、2週間お試し期間が付与されます。
注意点として、さくらVPSではプランのアップグレードができないらしいので、将来の使い方も考えて決めたほうがベターです。

さくらVPSの起動

申込をすると本登録まで数十分時間を要して登録が完了します。その後サーバーのIPアドレスと、さくらVPSコントロールパネルへのURLが記載されたメールが届きます。最初はサーバーが起動していないので、コントロールパネルへアクセスして起動ボタンを押すことで起動できます。

サーバーの設定

それでは、サーバーにsshで接続して設定していきます。ここからはクライアントPCによってある程度手順が変わります。私はMac2台と, Windows1台の3台から接続できるようにしましたが、まずはMac側で作業をしました。

ターミナルから以下のコマンドでサーバー接続します。

% ssh root@xx.xx.xx.xx

xx.xx.xx.xxは割り当てられたIPアドレスです。

まずは以下のコマンドでrootのパスワードを変更します。

# passwd

次にサーバーに入ってるアプリケーションを最新版に更新。

# yum update

ここらへんで参考サイトなどではOSの日本語化してますが、普段意識的に英語に触れようと、必要にかられるまでは日本語化はしないので私は言語設定の変更はしてません。

余談ですが、私はLinuxの経験がほとんどないためyumというコマンド自体初めて知りました。OS初期インストール時点でパッケージ管理コマンドが入ってるとは素晴らしいですね。

作業用ユーザーの作成と設定

rootでログインし続けるのはセキュリティ上危険なので、新規ユーザー(hoge)を作成しパスワードを設定します。

# useradd hoge
# passwd hoge

ユーザーhogeに対して全権限を付与したいため以下のコマンドを実行していきます。

# usermod -G wheel hoge

これはhogeに対して、wheelというグループに所属させるコマンドです。 実際には/etc/groupのwheelにユーザー名を追加するのと同じだと思います。

# groups hoge

としてwheelが表示されれば成功しています。

# visudo

で/etc/sudoersの中身を編集します。sudoersはsuコマンドを特定のユーザーにのみ許可するためなどの設定ファイルです。

## Allows people in group wheel to run all commands
# %wheel  ALL=(ALL)       ALL

という部分を検索して、2行目の#を外して保存します。当然ながらVi操作になります。私は(一応)Vim使いなので問題無いですが、Vi操作に慣れてない場合は操作方法を参照しないとわけわからないことになると思います。 これでwheelユーザーがsudoコマンドを使えば、すべてのコマンドをスーバーユーザー権限で使えるようになります。

suコマンドが誰からでも使えるのはセキュリティ上よろしくないので制限を設定します。

# vim /etc/pam.d/su

でsuを開き、以下の部分があるので#を消すことでwheelユーザーに限定します。

# auth required pam_wheel.so use_uid

これでhogeユーザー利用環境が整いました。rootでログインしてるので一度ログアウトしてhogeでログインしなおします。

# exit
% ssh hoge@xx.xx.xx.xx

ログインできれば成功です。

鍵認証の設定

パスワード認証でのログインでは、パスワードがわかってしまうとだれでもどこからでもログインできるという危険があるため、鍵認証方式でのログイン設定を行います。

鍵認証とは、簡単に例えれば、サーバーに鍵穴を設置して、クライアントに鍵をもたせるという感じです。鍵がクライアントPCにのみ存在するローカルファイルとなれば、外部に漏れる危険はかなり低くなります。

私は以前githubの登録時にすでに一度鍵を作っていましたので、それを流用することにしました。 通常は以下のコマンドを、ローカルマシンのターミナルで実行して生成します。

% ssh-keygen

パスフレーズを求められるので、いれなくても可能ですが、セキュリティ向上のために出来る限り設定します。

% chmod 600 ~/.ssh/id_rsa.pub

として、公開鍵(サーバーの鍵穴側)を所有者のread/write権限に限定します。

% scp ~/.ssh/id_rsa.pub hoge@xx.xx.xx.xx:~/.ssh/authorized_keys

として、サーバーにauthrized_keyというファイルとして公開鍵を転送して完了です。

Vimの設定

これからsshの設定などで、サーバーでエディタを開いていくことになるので、その前にエディタの環境を整えます。 私はVim環境を構築していきます。

とはいっても、デフォルトでVimはインストール済みです。となると必要なのは設定ファイルです。
サーバーログインした状態で、以下のコマンドでgithubにアップしてあるdotfileを持ってきます。

# mkdir ~/proj
# cd ~/proj
# git clone https://github.com/username/dotfiles

これで ~/proj/dotfilesに.vimrcなどの設定ファイルができました。以下のコマンドでシンボリックリンクを作成します。

# ln -sf ~/proj/dotfiles/.vimrc ~/.vimrc
# ln -sf ~/proj/dotfiles/.gvimrc ~/.gvimrc

これで快適なVim環境が整ったとおもいVimを起動、プラグインのインストール、再起動、までしてみると、Vimのバージョンが古くて一部のプラグインが動作しないエラーがでました。

# vim --version

するとVim 7.2です。最新のVimは7.4なので更新します。以下を参考にしました。

CentOS に Vim をインストール - Qiita

vimのインストールのために足りないパッケージをインストールします。

#sudo yum install mercurial
#sudo yum install ncurses-devel

最新Vimソースを落としてきます。

# cd /usr/local/src
# sudo hg clone https://vim.googlecode.com/hg/ vim

ディスク容量が多くはないので、どれくらいのソースサイズなのか気になったので以下で見てみました。

# du -sh .

125Mでした。とりあえず気にしなくていいレベルです。

以下のコマンドでインストールします。

# cd vim
# sudo ./configure --with-features=huge --enable-multibyte --disable-selinux
# sudo make
# sudo make install

流れとしては、makefileを作成して、make、そしてinstallです。

# vim --version

で7.4になっていれば成功です。

この状態でVimを起動するとエラーも出ません。これで快適なエディタ環境が整いました。

SSHの設定

サーバーの設定に戻ります。

まずはsshのポートを変更します。

# sudo vim /etc/ssh/sshd_config

で開いたファイルの

# Port 22

となってる部分を検索して、#を削除して1024〜65535内の適当なポート番号を指定します。

Port 1234

のようになります。

sshを再起動します。

# sudo /etc/init.d/sshd restart

ファイアウォールの設定

以下のコマンドでファイアウォール設定用のファイルを作成します。

# sudo vim /etc/sysconfig/iptables

作成したファイルに以下の内容を貼り付けます。Portを1234以外にした場合、1234の箇所を適宜変更します。

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp --dport 5353 -d 224.0.0.251 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# SSH, HTTP, FTP1, FTP2, MySQL
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 61203 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 1234 -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT

iptablesを再起動します。

# sudo /etc/rc.d/init.d/iptables restart

現在の設定は以下のコマンドで確認できます。

#sudo iptables -L

とりあえずここまでで、基本的なセキュアな仮想サーバー環境ができたと思います。

ポートが変わったので以後ログインする際には

% ssh hoge@xx.xx.xx.xx -p 1234

とします。

Webサーバー構築まで行こうかと思いましたが、長くなってしまったので、とりあえずここまでです。