ネコでもわかる!さくらのVPS講座 ~第三回「Apacheをインストールしよう」
初心者がVPS(Virtual Private Server)をWebサーバーとして構築し、WordPressのサイトを運用できるようになるまでの「ネコでもわかる!」連載の第3回目です。
最初から読みたい方はこちらからどうぞ。
前回(第2回目)は「サーバーをさわってみよう!」というテーマで、VPSにログインする方法とLinuxの基本的なコマンドや設定、vimエディタの使い方を学びました。
今回はWebサーバーとして利用できるようにするためのアプリケーションApache (アパッチ)のインストールと、DNSの設定について説明します。
対象となるサーバーは、さくらのVPS CentOS7 x86_64です。
1. httpサーバーApacheをインストールする
編集部注(2019/8/2追記):
現在のさくらのVPSには、ファイアウォールと同等の働きをする「パケットフィルタ」機能が用意・適用されています(サーバーのコントロールパネルの「パケットフィルタ」タブで確認・設定が可能)。
本記事の手順通りにApacheを動かすには、パケットフィルタを無効にするか、パケットフィルタの設定で「Web(80/443)」を許可する必要があります。くわしくは「パケットフィルタの利用方法」をご覧ください。
Webコンテンツを置くサーバーには、http通信(ブラウザとWebサーバー間で行う通信)を行うhttpサーバーアプリケーション(httpd)が必要です。
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!’と表示されれば成功です。
次にhttpdを起動します。
# systemctl start httpd
OKもNGも何も出てきませんが、これでhttpdが起動できました。
次に、ファイアウォールの設定を変更します。CentOS7のデフォルトの状態ではファイアウォールが無効になっているので、まずこれを有効にします。
# systemctl start firewalld # systemctl enable firewalld
次に、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もあわせて起動する」設定です。
正しく設定されたかどうかは
# 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. htmlディレクトリについての情報を表示しています。
- 2. ディレクトリ”html”の所有者名はrootです。
- 3. ディレクトリ”html”の所有グループ名はrootです。
- 4. 所有者rootの権限はrwxです。つまり、read(読み)、write(書き)、execute(実行)が可能です。
- 5. グループrootの権限はr-xです。つまり、readとexecuteが可能。writeはできません。
- 6. rootでもなく、rootグループにも属さない他人(other)の権限はr-xです。つまり、readとexecuteが可能です 。
先ほどSFTPツールでファイルをアップロードするのに使ったユーザーは、一般ユーザーのvpsuserです。
このユーザーはrootユーザーでもないし、rootグループにも属していないので、"他人"扱いになります。したがって、htmlディレクトリの中を覗くこと(=read)はできますが、ファイルを置いたり書き込んだりする”write”が出来ない権限になります。先ほどのファイルアップロード時のエラーはこの権限エラーが原因です。
したがって、
「htmlディレクトリに、vpsuserで書き込みできる権限(write権限)をつける」
ことでアップロード時のエラーは解消できます。
しかし、もうひとつ問題があります。
WordPressなどのコンテンツ管理システム(CMS)をサイト上で動かす場合、SFTPツールやFTPツールを使わなくても、CMSの管理画面からファイルをアップロードしたり、プラグインをインストールしたりすることができます。
これらもサーバーへファイルを"write"する行為なので、サーバーへの書き込み権限が必要になります。
この場合、誰の権限でwriteすることになるのでしょうか?
実は、CMSの管理画面経由ではApacheのユーザーである"apache”でファイルを書き込むことになります。
このapacheユーザーはhttpdインストール時に自動的に作られます。WordPress管理画面経由でファイルをアップロードすると、httpdサーバーのユーザーであるapacheがあなたに代わってファイルをアップロードすることになり、サーバーに置かれたファイルはapacheユーザー権限のファイルになります。
ということは、apacheユーザーの権限でもファイルを書き込みできるようにしておく必要がありますね。
つまり、/var/www/htmlディレクトリ以下はvpsuserとapacheのどちらのユーザーでも書き込めるようにしておかなければなりません。。
これを実現する方法はいろいろありますが、ここでは以下の方法をご紹介します。
結論から言うとhtmlディレクトリは以下の権限設定にしておけばOKです。
つまり、
所有者 ・・・apache
所有グループ・・・vpsuser
にして、所有者だけでなくグループにも書き込み権限をつけます。
こうすることで、
- apacheユーザーはhtmlディレクトリの所有者なので、書き込み可能
- vpsuserユーザーはhtmlの所有グループなので、書き込み可能
ということになり、どちらのユーザーでもhtmlディレクトリの中にファイルを置くことができるようになります。
この設定を行うためには、以下のコマンドを実行します。
# 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と数値化して計算した合計の値になっています。
この数値変換は、サーバーを扱う上では重要な考え方なので、ぜひ覚えておきましょう。
上記のchownとchmodを実行したあとで、再度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アドレスだけでサーバーを構築することもできます。また、あなたが既にドメインを持っていたら、それを使うこともできます。
ですので、この章は必要な方だけ読んでください。
例として、example.comという新しいドメインを取る場合で考えてみます。
ドメインを登録してくれる業者(レジストラ)はあなたのお好きな業者を選んでいただいてかまいません。
参考までに、さくらインターネットで取得する場合は以下から行えます。
独自ドメイン取得・管理 - レンタルサーバーはさくらインターネット
https://domain.sakura.ad.jp/
ドメイン取得は別途料金がかかります。一番安い.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/domain/2303/
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回目へ続きます。
(イラスト:オガ(ブログ))