さくらのVPS講座 Apacheをインストールしよう

初心者がVPS(Virtual Private Server)をWebサーバーとして構築し、WordPressのサイトを運用できるようになるまでの「ネコでもわかる!」連載の第3回目です。
最初から読みたい方はこちらからどうぞ。

前回(第2回目)は「サーバーをさわってみよう!」というテーマで、VPSにログインする方法とLinuxの基本的なコマンドや設定、vimエディタの使い方を学びました。

今回はWebサーバーとして利用できるようにするためのアプリケーションApache (アパッチ)のインストールと、DNSの設定について説明します。
対象となるサーバーは、さくらのVPS CentOS7 x86_64です。

目次

  1. httpサーバーApacheをインストールする
  2. SFTPを使ってファイルをアップロードする
  3. ドキュメントルートの権限を変更する
  4. ドメインを取得して、DNSの設定をする

1. httpサーバーApacheをインストールする

Webコンテンツを置くサーバーには、http通信(ブラウザとWebサーバー間で行う通信)を行うhttpサーバーアプリケーション(httpd)が必要です。

http通信をするにはhttpサーバーアプリケーションが必要

httpサーバーの代表的なアプリケーションにApacheがあります。ApacheをインストールしてVPSをWebサーバーとして動作させましょう。
httpサーバーアプリケーションには、ほかにもnginx(エンジンエックス)があります。最近シェアが拡大してきており、将来的にはApacheのシェアを追い抜くのではないかと予想していますが、現時点ではまだApacheがメジャーですし、CentOSのデフォルトhttpサーバーになっていますので、ここではApacheをインストールすることにします。

前回同様、サーバーに一般ユーザー(vpsuser)でログインしてrootにスイッチしてください。
その後、以下のインストールコマンドを実行します。

# yum install httpd

CentOSでは、httpdはApacheのことを指します。よってこのコマンドでApacheがインストールされることになります。

メッセージが表示されて、以下のような確認待ちになりますので、’y’を入力しEnterキーを押します。

Total download size: 2.8 M
Installed size: 9.6 M
Is this ok [y/d/N]:y

表示メッセージの最後に’Complete!’と表示されれば成功です。

Apacheをインストールして起動する

次にhttpdを起動します。

# systemctl start httpd

OKもNGも何も出てきませんが、これでhttpdが起動できました。

次に、ファイアウォールの設定を変更します。CentOS7のデフォルトの状態ではファイアウォールが有効になっており、http通信が遮断されているので、この通信を通過できるようにします。
また、暗号化された通信(SSL)もあとで使うことになるので、ここでhttpsプロトコルも許可しておくようにします。
次のコマンドを実行してください。
ファイアウォールについては、次回以降の記事で詳しく説明します。

# firewall-cmd --add-service=http --zone=public --permanent
# firewall-cmd --add-service=https --zone=public --permanent

1行ごとに実行して”success”と表示されていれば成功です。
次にファイアウォールサービスを再起動します。

# systemctl restart firewalld

ここまでできたら、試しにブラウザで
http://xxx.xxx.xxx.xxx (あなたのVPSのIPアドレス)

にアクセスしてみてください。
以下の初期画面が表示されましたか?

これでhttpサーバーが使用できる状態になりました。
しかし、このままだとメンテナンスやトラブルなどでサーバーを再起動したときにhttpdが自動で起動してくれません。再起動したら都度手動でhttpdを起動させる手間が発生してしまいます。そこで、サーバー再起動時にhttpdもあわせて起動するように設定します。Windowsでいうと「スタートアップ」にソフトウェアを登録する作業に似ています。

以下のコマンドを実行します。

# systemctl enable httpd

これは「サーバー起動時に、httpdもあわせて起動する」設定です。

サーバー起動と同時にApacheも起動するようにする。

正しく設定されたかどうかは

# systemctl list-unit-files -t service

とタイプすると分かります。
ずらっとリストが表示されます。上下キーでリストをたどっていくと、httpdに関する行が見つかると思います。

httpd.service                                 enabled

このように”enabled”になっていればOKです。自動起動が有効になっていない場合は”disabled“になっています。
リスト表示を終了するにはqキーを押してください。
(Linuxでは、qキーはプロンプトに戻る終了コマンドとしてよく使われます。)

2. SFTPを使ってファイルをアップロードする

httpdが起動しWebサーバーとして使えるようになりましたので、試しにhtmlファイルをアップロードして、ブラウザで正しく表示されるかどうか確認してみましょう。

ファイルのアップロードはFTPを使われている方も多いと思います。しかし、FTPは通信経路が暗号化されておらず安全ではありません。最近は積極的に使う理由がなくなってきましたので、ここではFTPを使わず、暗号化した通信で安全にファイルをアップロードできるSFTPを使います。
(ちなみにFTPSというものも存在しますが、SFTPとFTPSは違います。間違えやすいので注意!)

SFTPに対応したパソコン用のアプリケーションは以下のようなものがあります。FTPしか対応していないツールをお使いの方は、これを機会にツールの乗り換えを検討してみてはいかがでしょうか?

Windows RLogin、WinSCP、Filezilla
Mac Cyberduck、Filezilla、Transmit

どのツールを使うにしても、以下の情報があれば接続できます。

プロトコル SFTP
ポート番号 22 (前回記事でsshのポート番号を変更した人はその番号)
接続先 VPSのIPアドレス
ユーザー名 一般ユーザー(前回作成したvpsuser) ※SFTPはsshと同様、rootでは接続できません
パスワード 一般ユーザのパスワード

各ツールの使い方や接続手順については割愛しますが、うまくログインできればvpsuserのホームディレクトリである、
/home/vpsuser
の場所に接続できると思います。

接続できたら、これからindex.htmlを作ってファイルをアップロードするわけですが、サーバーのどこにファイルをアップロードすれば良いでしょう?

先ほどは、
http://xxx.xxx.xxx.xxx
にブラウザでアクセスした時に「Testing 123..」という初期画面が表示されましたが、自分が作成したindex.htmlが代わりに表示されるようにしてみます。
http://xxx.xxx.xxx.xxx にアクセスされたときに対応するディレクトリは、サーバーのドキュメントのトップの位置に相当するので、ドキュメントルートと言います。
これは、デフォルトでは
/var/www/html
になります。

SFTPツールでログインした最初の位置は/home/vpsuserですので、ここから親ディレクトリへ2階層上がり、var → www → html とディレクトリを移動してください。

この場所に以下のindex.htmlを作成し、アップロードします。

<html>
  <body>
    Hello World!
  </body>
</html>

いざアップロードしようとしてみるとどうでしょうか?
エラーが出てうまくアップロードできなかったと思います。

例えばWinSCPの例では、こんなエラーが発生します。

権限がありません」と言われています。
日本語化されていな英語のツールをお使いの場合は、permission(パーミッション)がなんとかと表示されると思います。permissionとは英語で「権限」のことです。

3. ドキュメントルートの権限を変更する

このエラーは、/var/www/html にファイルをアップロードできる権限がvpsuserに無いため起こっています。

サーバーにファイルをアップロードするにはアップロード権限が必要

このままではファイルをアップロードできませんので、権限を変更して、ファイルをアップロードできるようにしてみましょう。
そのためには、パーミッションについて学んでおく必要があります。
sshでVPSに接続し、rootユーザーで以下のコマンドを実行してください。

# cd /var/www
# ls -l

cdコマンドで /var/www ディレクトリに移動して、lsコマンドでファイルの一覧を表示します。
ls -lはファイルの詳細を表示するコマンドです。lsのlはLの小文字、-lのlもLの小文字です。

コマンドをを実行すると以下の行が見つかると思います。

drwxr-xr-x 2 root root 4096 Oct 16 23:49 html

この1行で以下の情報が読み取れるようになっています。

  1. 1. htmlディレクトリについての情報を表示しています。
  2. 2. ディレクトリ”html”の所有者名はrootです。
  3. 3. ディレクトリ”html”の所有グループ名はrootです。
  4. 4. 所有者rootの権限はrwxです。つまり、read(読み)、write(書き)、execute(実行)が可能です。
  5. 5. グループrootの権限はr-xです。つまり、readとexecuteが可能。writeはできません。
  6. 6. rootでもなく、rootグループにも属さない他人(other)の権限はr-xです。つまり、readとexecuteが可能です 。

先ほどSFTPツールでファイルをアップロードするのに使ったユーザーは、一般ユーザーのvpsuserです。
このユーザーはrootユーザーでもないし、rootグループにも属していないので、”他人“扱いになります。したがって、htmlディレクトリの中を覗くこと(=read)はできますが、ファイルを置いたり書き込んだりする”write”が出来ない権限になります。先ほどのファイルアップロード時のエラーはこの権限エラーが原因です。

htmlディレクトリの権限はグループによって異なる

したがって、
htmlディレクトリに、vpsuserで書き込みできる権限(write権限)をつける
ことでアップロード時のエラーは解消できます。

しかし、もうひとつ問題があります。
WordPressなどのコンテンツ管理システム(CMS)をサイト上で動かす場合、SFTPツールやFTPツールを使わなくても、CMSの管理画面からファイルをアップロードしたり、プラグインをインストールしたりすることができます。

CMS管理画面からもファイルのアップロードやプラグインインストールができる

これらもサーバーへファイルを”write”する行為なので、サーバーへの書き込み権限が必要になります。
この場合、誰の権限でwriteすることになるのでしょうか?
実は、CMSの管理画面経由ではApacheのユーザーである”apache”でファイルを書き込むことになります

このapacheユーザーはhttpdインストール時に自動的に作られます。WordPress管理画面経由でファイルをアップロードすると、httpdサーバーのユーザーであるapacheがあなたに代わってファイルをアップロードすることになり、サーバーに置かれたファイルはapacheユーザー権限のファイルになります。
ということは、apacheユーザーの権限でもファイルを書き込みできるようにしておく必要がありますね。
つまり、/var/www/htmlディレクトリ以下はvpsuserとapacheのどちらのユーザーでも書き込めるようにしておかなければなりません。

vpsuserとapacheユーザーのどちらでも書き込みできる必要がある

vpsuser、apacheの両方のユーザーで書き込みできる必要がある

これを実現する方法はいろいろありますが、ここでは以下の方法をご紹介します。
結論から言うとhtmlディレクトリは以下の権限設定にしておけばOKです。

つまり、
所有者   ・・・apache
所有グループ・・・vpsuser
にして、所有者だけでなくグループにも書き込み権限をつけます。
こうすることで、

  • apacheユーザーはhtmlディレクトリの所有者なので、書き込み可能
  • vpsuserユーザーはhtmlの所有グループなので、書き込み可能

ということになり、どちらのユーザーでもhtmlディレクトリの中にファイルを置くことができるようになります。

apacheユーザーでもvpsuserでも書き込み可能

この設定を行うためには、以下のコマンドを実行します。

# cd /var/www
# chown apache:vpsuser html
# chmod 775 html

chownはファイルやディレクトリの所有者を変更するコマンドです。apache:vpsuser と指定することで、htmlディレクトリの所有者をapacheに、グループをvpsuserにしています。
chmodは権限を変更するコマンドです。htmlディレクトリを775という権限にしています。
この’775’の意味は、rwxrwxr-x を3つのブロックに分け、r=4、w=2、x=1と数値化して計算した合計の値になっています。

この数値変換は、サーバーを扱う上では重要な考え方なので、ぜひ覚えておきましょう。
上記のchownchmodを実行したあとで、再度SFTPツールでindex.htmlをアップロードしてみてください。
エラーなくアップロードすることができたでしょうか? http://xxx.xxx.xxx.xxx にアクセスすると「Hello World!」と表示されます。

4. ドメインを取得して、DNSの設定をする

ここまでで、
http://123.123.123.123
のようにIPアドレスを使ったURLでWebサーバーが動作していることを確認できました。

しかし、一般的には
http://example.com
といった、英字が組み合わされたドメイン名URLでアクセスすることが多いですし、自分のサーバーもそういったドメイン名でアクセスしたいですよね。
レンタルサーバーと同様、VPSでも独自ドメインを使うことができます。

レンタルサーバーでは、サーバーのコントロールパネルや管理画面でドメインの取得・DNS設定も合わせて行えることが多いので、サーバーを契約するだけでドメインが使えると思いがちです。
しかし、本来は「ドメインの取得やDNSの設定」はサーバー本体の構築とは別の話です

VPSの場合は、これらの作業はVPSコントロールパネル上で行ったり、サーバーにsshログインして行うものではなく、別途ドメイン取得サービス上で手続きを行ったり、別の管理画面でDNSの設定を行うことになります。
もちろん、無理にドメインを取得しなくても、IPアドレスだけでサーバーを構築することもできます。また、あなたが既にドメインを持っていたら、それを使うこともできます。
ですので、この章は必要な方だけ読んでください。

「ドメインの取得やDNSの設定」はサーバー本体の構築とは別の話

例として、example.comという新しいドメインを取る場合で考えてみます。
ドメインを登録してくれる業者(レジストラ)はあなたのお好きな業者を選んでいただいてかまいません。
参考までに、さくらインターネットで取得する場合は以下から行えます。

独自ドメイン取得・管理 – レンタルサーバーはさくらインターネット
http://www.sakura.ne.jp/domain/
ドメイン取得は別途料金がかかります。一番安い.com、.org、.net、.info、.bizなどのドメインは年間2000円弱です。

お金をかけたくない場合は、無料でドメインを取得する方法もあります。.tk や.mlなどのドメインならば無料で取得できます。
無料のドメインを取得する(2016年10月) – Qiita
http://qiita.com/teekay/items/135dc67e39f24997019e

DNS(ネームサーバー)については、さくらのVPSはプランに応じて5または10ゾーンが無料で使用できます。
設定はVPSコントロールパネルではなく、さくらの会員メニューにログインして行います。

ネームサーバ利用申請方法 – さくらのサポート情報
https://help.sakura.ad.jp/hc/ja/articles/206207381

DNSの設定が難しいと感じる方は、上記リンクの中の「簡単設定」を使いましょう。
example.com をVPSのIPアドレスxxx.xxx.xxx.xxxに関連付ける設定をすることで、VPSをドメイン名で使えるようになります。

しかし、例えば「メールサーバーはVPSではなくGoogle Appsのものを使いたい」といった、少々複雑な設定をしたい場合は、簡単設定ではなくMXレコードを個別に設定するなどの対応が必要になります。
今回の連載ではメールサーバーには触れず、Webサイトを1つ作るだけのシンプルな構成のサーバーですので、簡単設定を使えばよいでしょう。
もう少し専門的な言い方をすると、ネームサーバー(NS)と、Aレコードが1つ設定できていれば良いです。
詳しい設定方法は上記リンクを参照してください。

もし次回(第4回目)の記事の公開まで自分のサーバーを触る予定が無い方は、前回と同様、外部からの余計な攻撃にさらされないようにサーバーを停止しておきましょう。
サーバー停止コマンドは以下です。

# shutdown -h now

第3回目は以上です。第4回目へ続きます。

(イラスト:小川真孝(ブログ))