前回の「【第1回】ConoHa申し込み手順〜CentOS7でサーバー構築」の続きです。
今回はWebサーバー構築を行いたいと思います。
環境
OS | バージョン |
---|---|
CentOS | 7.2.1511 |
1.httpサーバーApacheをインストールする
サーバーに一般ユーザー(vpsuser)でログインしてrootにスイッチしてください。
1 2 3 |
$ su root パスワード: ※パスワードを聞かれたらrootのパスワードを入力 |
[Apacheのバージョン確認]
1 |
# httpd -v |
既にインストールされていればServer version: Apache/バージョン (CentOS)と表示されます。
インストールされていなければ、下記のコマンドでインストール。
1 |
# yum install httpd |
CentOSでは、httpdはApacheのことを指します。よってこのコマンドでApacheがインストールされることになります。
メッセージが表示されて、以下のような確認待ちになりますので、’y’を入力しエンターキーを押します。
1 2 3 |
総ダウンロード容量: 3.0 M インストール容量: 10 M Is this ok [y/d/N]: y |
表示メッセージの最後に’完了しました!’と表示されれば成功です。
Apache(httpd)の起動、再起動、停止コマンド
[起動]
1 |
# systemctl start httpd.service |
[再起動]
1 |
# systemctl restart httpd.service |
[停止]
1 |
# systemctl stop httpd.service |
これでhttpdが起動できました。
試しにブラウザで
http://xxx.xxx.xxx.xxx (あなたのVPSのIPアドレス)
にアクセスしてみてください。
ページが表示されない
Apacheを起動したのにWEBページが表示されません。httpdのステータスを確認してみます。
1 |
# systemctl status httpd.service |
Active: active (running)と表示されてます。httpdは問題なく起動しているようです。
ファイアウォールのポート開放
[http(80)]
1 |
# firewall-cmd --permanent --zone=public --add-service=http |
[success]と表示される
[https(443)]
1 |
# firewall-cmd --permanent --zone=public --add-service=https |
[success]と表示される
[ファイアウォール再起動]
1 |
# firewall-cmd --reload |
[success]と表示される
http://xxx.xxx.xxx.xxx (あなたのVPSのIPアドレス)
にアクセスしてみてください。
今度はApacheの画面が表示されました。
httpdの自動起動設定
サーバ再起動時に自動的にhttpdも起動するようにしたいので、以下のコマンドを入力。
1 |
# systemctl enable httpd.service |
httpdの自動起動解除設定
1 |
# systemctl disable httpd.service |
httpdの自動起動一覧表示
httpdの自動起動設定が正しく設定されたかどうかは下記のコマンドで確認出来ます。
1 |
# systemctl list-unit-files -t service |
[httpd.service enabled]と表示されている
「STATE」部分の表示で、現在の設定状況を確認することができます。
ステータスの意味
表示 | 設定状況 |
enable | 自動起動設定有効 |
disable | 自動起動設定無効 |
static | 単体では自動起動できないサービス |
以上でWebサーバーの構築は完了しました。
2. SFTPを使ってファイルをアップロードする
httpdが起動し、Webサーバーとして使えるようになりましたので、htmlファイルをアップロードして、ブラウザで正しく表示されるかどうか確認してみましょう。
ファイルのアップロードは、暗号化した通信で安全にファイルをアップロードできるSFTPを使用します。
SFTPに対応したクライアントツールは以下のようなものがあります。参考までに。
Windows | RLogin、WinSCP、Filezilla |
---|---|
Mac | Cyberduck、Filezilla、Transmit |
[接続情報入力項目]
プロトコル | SFTP |
ポート番号 | 22 (前回記事でsshのポート番号を変更した人はその番号) |
接続先 | VPSのIPアドレス |
ユーザ | 一般ユーザ(◯◯◯) ※SFTPはsshと同様、rootでは接続できません |
パスワード | 一般ユーザのパスワード |
※私の場合は、鍵で認証を行いたいと思います。
公開鍵と秘密鍵を生成する方法はページの下部にある【第1回】ConoHa申し込み〜CentOS7でサーバー構築のリンク内に書いてあります。
ログイン出来たら、下記の場所に接続出来ると思います。
1 |
/home/ユーザー名 |
接続できたら、これからindex.htmlを作ってファイルをアップロードするわけですが、サーバーのどこにファイルをアップロードすれば良いでしょう?
先ほどは、
http://xxx.xxx.xxx.xxx
にブラウザでアクセスした時に「Testing 123…」が表示されましたが、自作のindex.htmlが代わりに表示されるようにしてみます。
http://xxx.xxx.xxx.xxx にアクセスされたときに対応するディレクトリは、サーバーのドキュメントのトップの位置に相当するので、ドキュメントルートと言います。
これは、デフォルトでは
/var/www/html
です。
SFTPツールでログインした最初の位置は/home/ユーザー名ですので、ここから親ディレクトリへ2階層上がり、var → www → html とディレクトリを移動してください。
この場所に以下のindex.htmlを作成し、アップロードします。
1 2 3 4 5 |
<html> <body> Hello World! </body> </html> |
いざアップロードしようとしてみるとどうでしょうか?
「Filezilla」場合はエラーが出なくてよくわからないけど…うまく行かなかったと思います。
「Filezilla」の例では、失敗した転送が(1)になります。
権限がなくてファイルがアップロード出来ないみたいです。
3. ドキュメントルートの権限を変更する
このままではファイルをアップロードできませんので、権限を変更して、ファイルをアップロードできるようにしてみましょう。
sshでVPSに接続し、rootユーザーで以下のコマンドを実行してください。
1 2 |
# cd /var/www # ls -l |
cdコマンドで /var/www ディレクトリに移動して、lsコマンドでファイルの一覧を表示します。
ls -lはファイルの詳細を表示するコマンドです。
コマンドをを実行すると以下の行が見つかると思います。
1 |
drwxr-xr-x 2 root root 4096 11月 15 03:05 html |
- 対象のディレクトリ(またはファイル)名はhtmlである
- ディレクトリ”html”の所有者名はrootである。
- ディレクトリ”html”の所有グループ名はrootである。
- 所有者rootの権限はrwxである。つまり、read(読み)、write(書き)、execute(実行)が可能。
- グループrootの権限はr-xである。つまり、readとexecuteが可能。writeはできない。
- rootでもなく、rootグループにも属さない他人(other)の権限はr-x。つまり、readとexecuteが可能 。
先ほどSFTPツールで、ファイルをアップロードするのに使ったユーザーは、一般ユーザーのユーザー名です。
このユーザーはrootユーザーでもないし、rootグループにも属していないので、”他人“扱いになります。したがって、htmlディレクトリの中を覗くこと(=read)はできますが、ファイルを置くといった”write”が出来ない権限になります。先ほどのファイルアップロード時のエラーはこの権限エラーが原因です。
したがって、
「htmlディレクトリに、ユーザー名で書き込みできる権限(write権限)をつける」
ことでアップロード時のエラーは解消できます。
しかし、もうひとつ問題があります。
WordPressなどのコンテンツ管理システム(CMS)をサイト上で動かす場合、SFTPツールやFTPツールを使わなくても、CMSの管理画面からファイルをアップロードしたり、プラグインをインストールしたりすることが可能です。
これらもサーバーへファイルを”write”する行為なので、サーバーへの書き込み権限が必要になります。
この場合、writeするユーザーは誰になるのでしょうか?
実は、CMSの管理画面経由でファイルを書き込むと、Apacheのユーザーである”apache”で書き込むことになります。
このapacheユーザーはhttpdインストール時に自動的に作られます。WordPress管理画面経由でファイルをアップロードすると、httpdサーバーのユーザーであるapacheがあなたに代わってファイルをアップロードすることになり、サーバーに置かれたファイルはapacheユーザー権限のファイルになります。
ということは、apacheユーザーの権限でもファイルを書き込みできるようにしておく必要がありますね。
つまり、/var/www/htmlディレクトリ以下はユーザー名とapacheのどちらのユーザーでも書き込めるようにしておく必要があります。
htmlディレクトリは以下の設定にできれば良いです。
つまり、
所有者 ・・・apache
所有グループ・・・vpsuser
にして、所有者だけでなくグループにも書き込み権限をつけます。
こうすることで、
- apacheユーザーはhtmlディレクトリの所有者なので、書き込み可能
- ユーザー名ユーザーはhtmlの所有グループなので、書き込み可能
ということになり、どちらのユーザーでもhtmlディレクトリの中にファイルを置くことができるようになります。
この設定を行うためには、具体的には以下のコマンドを実行します。
1 2 3 |
# cd /var/www # chown apache:ユーザー名 html # chmod 775 html |
以下のように変更されました。
1 |
drwxrwxr-x 2 apache ユーザー名 4096 11月 15 03:05 html |
chownはファイルやディレクトリの所有者を変更するコマンドです。apache:vpsuser と指定することで、htmlディレクトリの所有者をapacheに、グループをvpsuserにしています。
chmodは権限を変更します。htmlディレクトリを775という権限にしています。
この’775’の意味は、rwxrwxr-x を3つのブロックに分け、r=4、w=2、x=1と数値化して計算した合計の値になっています。
再度SFTPツールでindex.htmlをアップロードしてみてください。
エラーなくアップロードすることができたでしょうか? http://xxx.xxx.xxx.xxx にアクセスすると「Hello World!」と表示されます。
4. phpをインストールする
それではphpをインストールします。php本体だけでなく、付随するパッケージも合わせて導入するのでコマンドが長くなっていますが、以下を実行してください。
1 2 3 4 |
# yum install php php-devel php-mbstring php-mysql php-gd php-mcrypt 総ダウンロード容量: 8.7 M インストール容量: 30 M Is this ok [y/d/N]: y |
‘y’を押してインストールを続けます。
[httpdを再起動]
そしてhttpdを再起動すると、phpが有効になります。
さきほどhttpdを起動した時は’start’でしたが、今回は再起動なので’restart’とします。
1 |
# systemctl restart httpd.service |
[ファイルのアップロード]
ファイルを作成
index.php
1 2 3 4 5 |
<html> <body> <?php phpinfo(); ?> </body> </html> |
※phpinfo(); は、「インストールされているphpの情報を表示する関数」
/var/www/html
上記のディレクトリに「index.php」のファイルをアップロードする。
[ブラウザで確認]
http://xxx.xxx.xxx.xxx/index.php にブラウザでアクセスしてみてください。
下記みたいな表が表示されたら成功!
phpのインストール状態確認
phpがインストールされているか否かは以下のコマンドで確認できます。
1 |
# yum list installed | grep php |
実行結果の中に、
- php
- php-cli
- php-common
があるか確認してみてください。
なければ、失敗しているかもしれません。
httpdの動作状態確認
httpdが正常に動作しているか否かは以下のコマンドで確認できます。
1 |
# systemctl status httpd.service |
実行結果の中に赤字のメッセージがある場合、httpdで何かしらのエラーが起きているかもしれません。
下記コマンドでhttpdを再起動してみよう。赤字のメッセージがない場合は、何もしない。
1 |
# systemctl restart httpd.service |
statusから赤字が消えたらOKです。
phpの設定ファイルphp.iniを編集
cdコマンドで/etc ディレクトリに移動し、cpコマンドでphp.iniのバックアップをとっておき、vimコマンドでphp.iniを編集します。
1 2 3 |
# cd /etc # cp php.ini php.ini.old # vim php.ini |
編集する内容は下記
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
[PHP] // E_NOTICE 以外の全てのエラーを表示する error_reporting = E_ALL & ~E_NOTICE [Date] date.timezone="Asia/Tokyo" [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On mbstring.detect_order = auto [Core] post_max_size = 128M upload_max_filesize = 128M default_charset = "UTF-8" |
php.iniはたくさんの設定が記載されていますので、目的の設定場所を探すのに時間がかかります。
ここは、検索をうまく使ってすばやく目的の設定箇所を見つけましょう。
vimで ‘/’ をタイプしてください。検索モードになり、画面の一番下にフォーカスが移りますので、検索語句”◯◯◯“を入力してエンターを押します。
設定を変更したら、:wqでvimを終了します。
[httpdを再起動]
httpdサーバーを再起動します。
設定はhttpdサーバー再起動後に有効になります。
1 |
# systemctl restart httpd.service |
[設定が反映されたかブラウザで確認]
http://xxx.xxx.xxx.xxx/index.php にブラウザでアクセスしてみてください。
※phpinfo(); は、「インストールされているphpの情報を表示する関数」
変更した箇所を探して、変更前と変更後で変わっていたら、変更は反映されています。
【第1回】ConoHa申し込み手順〜CentOS7でサーバー構築
【第5回】ConoHaとCentOS7でCakePHPインストール方法