今回は、CentOS,ScientificLinuxでLAMP(Nginx+MySQL+PHP)インストールからWordPressを動かすまで(Nginx編) の CentOS バージョン 7 対応です。
CentOS 7 でLAMP(Apache+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Apache編) の Nginx編でもあります。
Debian(Wheezly 7)で MySQLからMariaDB へ移行してみる でも書きましたが、CentOS 7 からは、MySQL→MariaDB へ変更となりました。
また、デーモンの起動方法なども旧バージョンから変更がありましたので、ここでは、記事を別にしました。
早速、CentOS 7 に LAMP(Nginx+MariaDB(MySQL)+PHP)をインストールし、Wordpressを動かすまでを、簡単に解説してみます。
- 目次
- 履歴
2014年8月2日 初版
LAMP(Nginx+MariaDB(MySQL)+PHP)をインストールする
ここでは、ウェブサーバー(Nginx), データベース(MariaDB(MySQL)) ,スクリプト(php) をインストールします。 LAMPのPは、Perlもありますが、依存関係でインストールはされますが、(WordPress自体には、Perlは必要ないので)ここでは明示的にPerlはインストールしません。
phpをインストールする。
- phpをインストールする
# php をインストールします。 # --php-cgi php-fpm のいずれかをFastCGIとして使用します。 $ yum -y install php-mysql php php-gd php-mbstring php-fpm ... # php がインストールできたか、バージョンをチェックしてみます。 $ php --version PHP 5.4.16 (cli) (built: Jun 10 2014 02:52:47) Copyright (c) 1997-2013 The PHP Group Zend Engine v2.4.0, Copyright (c) 1998-2013 Zend Technologies
- php-fpmを設定する
ここでは、Nginxとともにphpを動かしますので、php-fpm を使います。
php-cgiでも可能ですが、ここではより簡単な設定で対応可能なphp-fpm を使います。
php-fpmの設定(/etc/php-fpm.d/www.conf を編集)を行っておきます。
/etc/php-fpm.d/www.conf
[www] ... # 使用するポートを設定します。 listen = 127.0.0.1:9000 ... # 許可するクライアントのIPアドレスを指定します。 # -- ここではlocalhostだけです。 listen.allowed_clients = 127.0.0.1 ... # php-fpmのサービス実行ユーザ、グループを指定します。 # -- ここでは Nginx のユーザに合わせています。 user = nginx group = nginx ... # php-fpmのサービスのプロセス数を定量とするように設定しておきます。 # -- dynamic を指定すると変動させることができます。 ;pm = dynamic pm = static ... # php-fpmの最大子プロセス数を設定します。 # -- ここでは、3としています。 ;pm.max_children = 50 pm.max_children = 3 ... # php-fpmが受け付ける最大要求数を設定します。 # ここで設定した要求数を処理したら子プロセスを再起動します。 # -- ここでは、500としています。 pm.max_requests = 500
- php-fpmデーモンを起動する
設定を終えたら、php-fpm を起動します。
先に指定した ユーザ、グループが存在しない場合は、作成しておきます。
# ユーザ、グループが存在するか確認します。 # 以下のコマンドで何も出力されないようなら、存在しないでしょう。 $ cat /etc/passwd|grep nginx # グループを追加します。 $ groupadd nginx $ getent group nginx nginx:x:1001 # ユーザを追加します。 $ useradd -s /usr/sbin/nologin -g nginx -d /var/www -c nginx nginx
デーモンの起動は、今まで、以下のように行っていました。
$ /etc/init.d/php-fpm start ... # あるいは、 $ service php-fpm start ...
しかし、CentOS 7 からは、systemctl を使うようになりました。
まずは、インストールしたphp-fpmの状態を確認しておきます。
# php-fpmデーモンが起動しているか確認します。 $ systemctl list-units |grep php-fpm # ↑ 何も出力されないので、起動していない状態だとわかります。 # 次に、php-fpmデーモンの登録状態を確認します。 $ systemctl list-unit-files |grep php-fpm php-fpm.service disabled # ↑ disabledなので、再起動してもphp-fpmデーモンのは起動しません。
現状は、動いておらず、disabled(無効)扱いなので、まずは、デーモンを起動します。
# php-fpm のデーモン(サービス)を起動します。 $ systemctl start php-fpm.service # php-fpm のデーモン(サービス)が起動しているか確認します。 $ systemctl list-units |grep php-fpm php-fpm.service \ loaded active running The PHP FastCGI Process Manager # ↑ このようにphp-fpm のデーモン(サービス)が起動していることが確認できます。 # 次に、php-fpmデーモンの登録状態を確認します。 $ systemctl list-unit-files |grep php-fpm php-fpm.service disabled # ↑ disabledなので、再起動してもphp-fpmデーモンのは起動しません。 # 次に、php-fpmデーモンがブート時に自動起動するように設定しておきます。 $ systemctl enable php-fpm.service ln -s '/usr/lib/systemd/system/php-fpm.service' '/etc/systemd/system/multi-user.target.wants/php-fpm.service' # 再度、php-fpmデーモンの登録状態を確認します。 $ systemctl list-unit-files |grep php-fpm php-fpm.service enabled # ↑ enabledなので、再起動してもphp-fpmデーモンは起動されます。
デーモンがシステムの再起動時に起動するように設定するには、以前のバージョンでは、chkconfigで行っていました。
CentOS 7 では、systemctl enable|disabled で設定します。
また、上記の出力のようにsystemctl enable|disabledでは、/etc/systemd/system/multi-user.target.wants/ 配下にサービスの設定ファイルのリンクファイルの作成|削除を行っています。
mariadb(mysql)をインストールする。
- mariadb をインストールする
CentOS 7 からは、MySQLでなく 互換の MariaDB をインストールすることになります。
# mariadb mariadb-server をインストールします。 $ yum -y install mariadb mariadb-server ... $ mysql --version mysql Ver 15.1 Distrib 5.5.37-MariaDB, for Linux (x86_64) using readline 5.1
MySQLのディストリビューションが、Distrib 5.5.37-MariaDB となっていることに注意してください。
MariaDB は、MySQLと互換性があるので、コマンドもそのままMySQLのコマンドと同じように利用できます。
以降に出てくるコマンドもMySQLのそれと全く同じです。
- mariadb デーモンを起動する
デーモンの起動は、今まで、以下のように行っていました。
$ /etc/init.d/mysqld start ... # あるいは、 $ service mysqld start ...
しかし、CentOS 7 からは、systemctl を使うようになりました。
まずは、インストールしたMariaDBの状態を確認しておきます。
# mariadbデーモンが起動しているか確認します。 $ systemctl list-units |grep mariadb # ↑ 何も出力されないので、起動していない状態だとわかります。 # 次に、mariadbデーモンの登録状態を確認します。 $ systemctl list-unit-files |grep mariadb mariadb.service disabled # ↑ disabledなので、再起動してもmariadbデーモンのは起動しません。
現状は、動いておらず、disabled(無効)扱いなので、まずは、デーモンを起動します。
# mariadb のデーモン(サービス)を起動します。 $ systemctl start mariadb.service # mariadb のデーモン(サービス)が起動しているか確認します。 $ systemctl list-units |grep mariadb mariadb.service \ loaded active running MariaDB database server # ↑ このようにmariadb のデーモン(サービス)が起動していることが確認できます。 # 次に、mariadbデーモンの登録状態を確認します。 $ systemctl list-unit-files |grep mariadb mariadb.service disabled # ↑ disabledなので、再起動してもmariadbデーモンのは起動しません。 # 次に、mariadbデーモンがブート時に自動起動するように設定しておきます。 $ systemctl enable mariadb.service ln -s '/usr/lib/systemd/system/mariadb.service' '/etc/systemd/system/multi-user.target.wants/mariadb.service' # 再度、mariadbデーモンの登録状態を確認します。 $ systemctl list-unit-files |grep mariadb mariadb.service enabled # ↑ enabledなので、再起動してもmariadbデーモンは起動されます。
デーモンがシステムの再起動時に起動するように設定するには、以前のバージョンでは、chkconfigで行っていました。
CentOS 7 では、systemctl enable|disabled で設定します。
また、上記の出力のようにsystemctl enable|disabledでは、/etc/systemd/system/multi-user.target.wants/ 配下にサービスの設定ファイルのリンクファイルの作成|削除を行っています。
- Wordperssで使用するデータベースを作成する
ここで、最低限 mysql の以下の項目の設定を行います。
- 管理者パスワード設定
- 新規のデータベースを作成
- 新規ユーザの作成
ここでは、SQLをテキストファイルにまとめて、一気に流してしまいます。
以下は、そのSQLファイルのイメージです。
/* rootのパスワードを設定します。 */ set password for root@localhost=password('roothoge'); /* hoge というユーザを新規に作成します。のパスワードも設定します。 */ insert into user set user="hoge", password=password("hogehoge"), host="localhost"; /* wddb というwordpress用にデータベースを作成します。 */ create database wddb; /* wddb というデータベースに hogeというユーザが常にアクセスできるようにします。 */ grant all on wddb.* to hoge; /* 最新に更新 */ FLUSH PRIVILEGES;
続けて、そのSQLファイル ( ここでのファイル名を 例として wordpress.sql とします ) を mysqlコマンドを使って一気に流してみます。
# SQLファイルを実行します。 $ mysql -uroot -Dmysql < wordpress.sql # 管理者でログインできるか確認します。 $ mysql -uroot -proothoge Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 4 Server version: 5.5.37-MariaDB MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> exit Bye # 続けて新規データベースへ新規ユーザでログインできるか確認します。 $ mysql -uhoge -phogehoge -Dwddb Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 5 Server version: 5.5.37-MariaDB MariaDB Server Copyright (c) 2000, 2014, Oracle, Monty Program Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [wddb]> exit Bye
このようにログインできればOKです。
Nginxをインストールする。
- Nginxをインストールする
Nginxは、epel あるいは、Nginxの公式サイトからバイナリパッケージが提供されています。
ここでは、常に最新版のある Nginxの公式サイトからインストールしてみます。
# Nginxリポジトリをインストールする # --すでに Nginxリポジトリ インストール済の方は不要です。 # --以下は、CentOS 7 のリポジトリです。(ファイル名は最新版では異なることがあります。) $ rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm ... # nginx をNginx公式サイトからインストールする $ yum -y install nginx ...
- Nginxの設定を行う
Nginx の設定ファイルにて、必要最小限の設定を行います。
Wordpressを動かすために編集が必要な Nginx の設定ファイルは、以下のとおりです。- /etc/nginx/nginx.conf :
Nginxの基本設定ファイルです。
デフォルトの設定ファイルがあるので、それを編集して使用します。以下は、主な設定内容です。ここで記述していること以外は、デフォルトのままでもWordpressは動作します。
# Nginxデーモンを起動するユーザ、グループ名を設定します。 user nginx nginx; ... events { # Nginxデーモンで使用可能な最大接続数を設定します。 worker_connections 1024; } ... http { ... # デフォルトのログ出力ファイル access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; ... # 最後にsever 設定ファイルをすべて読み込みます。 include /etc/nginx/conf.d/*.conf; }
access_log および error_log のディレクトリの所有者を nginx に変更します。
$ chown -R nginx: /var/log/nginx $ chmod +r+w /var/log/nginx
- /etc/nginx/nginx.conf :
- /etc/nginx/fastcgi_params :
NginxのFastCGIのデフォルトパラメータ設定ファイルです。デフォルトの設定ファイルがあるので、それをそのまま使用します。
fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # PHP only, required if PHP was built with --enable-force-cgi-redirect fastcgi_param REDIRECT_STATUS 200;
- /etc/nginx/conf.d/example.conf :
Nginxの仮想ホスト(www.example.com用)設定ファイルです。新規に作成します。
server { # サーバーのデフォルトTCPポートです。 listen 80; # サーバー名を設定します。 server_name www.example.com; # ドキュメントルートディレクトリを設定します。 root /var/www/html; # index file タイプの優先順を設定します。 index index.php index.html index.htm; # ログファイル名を設定します。 access_log /var/log/nginx/www.example.com/access.log; error_log /var/log/nginx/www.example.com/error.log; # WordPress用のリダイレクト設定 # ファイルが存在しないURIの場合は、index.phpへ転送させる。 try_files $uri $uri/ /index.php?q= # PHP FPM との接続を行うため 拡張子phpに対して処理します。 location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
- Nginxデーモンを起動する
CentOS 7 からは、MariaDB と同じように、
デーモンの起動・停止、有効・無効は、systemctl を使うようになりました。 以前のバージョンまでのように service や /etc/init.d/.. ではないことに注意してください。
phpをインストールした時点で、httpd(Apache)がインストールされ、起動している可能性があります。 そのため、まず、httpd(Apache)を停止します。# httpdを停止します。 $ systemctl stop httpd.service # 再起動してもhttpdが自動起動しないように無効にします。 $ systemctl disable httpd.service
ここまで設定を終えたら、ログファイルの出力先ディレクトリを作成し、Nginxデーモンを起動します。
# ログ出力先ディレクトリを作成します。 $ mkdir -p /var/log/nginx/www.example.com # ログ出力先ディレクトリの所有者をnginxとします。 $ chown nginx: /var/log/nginx/www.example.com $ chmod +r+w /var/log/nginx/www.example.com # ウェブサーバー(nginx) を起動します。 $ systemctl start nginx.service # ウェブサーバー(nginx) のデーモン(サービス)が起動しているか確認します。 $ systemctl list-units |grep nginx nginx.service \ loaded active running nginx - high performance web server # ↑ このようにウェブサーバー(nginx) のデーモン(サービス)が起動していることが確認できます。 # 次に、ウェブサーバー(nginx)デーモンの登録状態を確認します。 $ systemctl list-unit-files |grep nginx nginx.service disabled # ↑ disabledなので、再起動してもウェブサーバー(nginx)デーモンのは起動しません。 # 次に、ウェブサーバー(nginx)デーモンがブート時に自動起動するように設定しておきます。 $ systemctl enable nginx.service ln -s '/usr/lib/systemd/system/nginx.service' '/etc/systemd/system/multi-user.target.wants/nginx.service' # 再度、ウェブサーバー(nginx)デーモンの登録状態を確認します。 $ systemctl list-unit-files |grep nginx nginx.service enabled # ↑ enabledなので、再起動してもウェブサーバー(nginx)デーモンは起動されます。 # ウェブサーバー(nginx) の動作確認用のファイルを作成します。 $ cd /var/www/html [html]$ sh -c "echo '<?php echo phpinfo(); ?>' > index.php" [html]$
上記で作成したindex.php へアクセスしてみてください。(ここでの例では、http://www.example.com/index.php へアクセスすることになります。 )
ここでアクセスするためのドメインについては、DNSの設定を行っておきます。
先のhttpd.confのServerNameで設定したドメインに関してDNSレコードに設定しておく必要があります。
DNSレコードを設定することで、普通に、http://www.exmapl.com/index.php でアクセスできるようにしておきます。
この画面が見えればOK。
見えない場合、 接続に失敗した場合は、ドメインが正しくIPアドレスをさしているか確認します。 接続がタイムアウトとなる場合は、firewall-cmd で接続を拒否している可能性があります。 firewall-cmd で http プロトコルを有効にしてみます。# firewall-cmd が動作しているか確認します。 $ firewall-cmd --state running # ↑ firewall-cmd が動作しています。 # firewall-cmd で有効にしているプロトコルを確認します。 $ firewall-cmd --list-services dhcpv6-client ssh # ↑ http が含まれていません。 # firewall-cmd でhttpを有効にします。 $ firewall-cmd --add-service=http success # firewall-cmd で有効にしているプロトコルを再確認します。 $ firewall-cmd --list-services dhcpv6-client http ssh
CentOS 7 からは、ファイアウォールに iptables でなく、 firewall-cmd をデフォルトで使用するようになっています。上記の手順どおりであれば、アクセスできるようになるでしょう。
WordPress をインストールする
最後に WordPress をインストールして動かしてみましょう。
- 最新版のWordpressをダウンロードし、展開します。
最新のWordpressをダウンロードします。
# 最新のWordpressをダウンロードします。 # -- 最新版のファイル名は、必ず、Wordpressのサイトで確認しましょう。 $ wget http://ja.wordpress.org/wordpress-3.9.1-ja.zip ...
wget コマンドがなければ、yum install wget
でインストールしましょう。
続けて、zipファイルを解凍します。
$ mv wordpress-3.9.1-ja.zip /var/www/html/. $ cd /var/www/html/ [html]$ unzip -q wordpress-3.9.1-ja.zip [html]$ mv wordpress/* . [html]$ rm -fR wordpress
- ウェブブラウザからアクセスします。
ここでは、www.example.com というサーバー名でアクセスできるものとして設定していますので、
http://www.example.com でアクセスします。
初期状態では、Wordpressの設定用ファイル ( wp-config.php ) がないので、作成しますよ・・というメッセージが表示されます。
設定ファイルを作成する をクリックして、次へ進みます。
- 設定ファイルが作成できたら、インストールの初期画面が表示されます。
さあ、始めましょう! をクリックして、次へ進みます。
- データベース情報を設定し、Wordpressで必要なテーブルを作成します。
- データベース名 :
先に作成したデータベース名を入力します。
ここでは、wddb とします。
- ユーザ名 :
先に作成したデータベースのユーザ名を入力します。
ここでは、hoge とします。
- パスワード :
先に作成したデータベースへアクセスできるユーザのパスワードを入力します。 ここでは、hogehoge とします。
- データベースのホスト名 :
ここでは、同じホスト内なのでlocalhostとします。
- テーブル接頭辞 :
同じデータベースに複数のWordpressをインストールする場合は、ユニークな文字列を設定します。
同じデータベースに1つしかWordpressをインストールしない場合は、そのままで可。
※ここで設定するテーブル接頭辞は、このWordpressの識別子のようなものです。
ここでは、wp_ とします。
送信 をクリックして、データベースにWordpressで使用するテーブルを作成します。
ここで、設定ファイル ( wp-config.php )が存在しない場合は、自動的に作成しようとします。そこで作成できなかった場合、以下のような画面が表示されます。
この場合、手動で 設定ファイル ( wp-config.php ) を作成するか、Wordpress のインストール先に書き込み権を与えると先に進むことができます。
Wordpress のインストール先に書き込み権を与える場合、簡単なのは、所有者をnginx へ変更してしまうことです。以下は、その例です。
これで、/var/www/htmlの配下全ての所有者および所有グループを nginx に変更できます。$ chown -R nginx: /var/www/html
所有者を変更しても書き込みができない場合は、SELinuxが有効になっていないか確認すると良いでしょう。# 現在の SELinux の状態を確認する。 $ getenforce Enforcing # ↑ Enforcing:有効、Permissive:無効 # 一時的に SELinux を無効にする。 $ setenforce 0 # 現在の SELinux の状態を再確認する。 $ getenforce Permissive # ↑ Enforcing:有効、Permissive:無効
データベースへの接続が可能な場合は、上記のように表示されます。
続けて、インストール実行 をクリックして、データベースに基本的なデータを設定します。
- データベース名 :
- WordPressで必要なテーブルの作成が完了したら、次にWordpressの情報を設定します。
- サイトのタイトル :
WordPressで管理するサイト名を入力します。
(ここでは、あくまで例として「ワードプレスをインストールしてみた」としました。)
- ユーザ名 :
WordPressの管理ユーザ名 (デフォルト : admin )
(セキュリティ上、admin以外を使うことをおすすめしますが、ここでは、簡単を重視するため、デフォルトのadminを使います。)
- パスワード :
WordPressの管理ユーザのパスワード
(セキュリティ上、強い パスワード(英数字をからめた8文字以上)のパスワードを設定しましょう。)
- メールアドレス :
WordPressの管理ユーザのメールアドレス
(このアドレスは、パスワードを忘れてしまった時などにも用いられますから、良く使うメールアドレスで必ず着信できるメールアドレスにしましょう。)
- このサイトがGoogleやTechnoratiなどの検索エンジンに表示されるのを許可する。 :
WordPressで記事を投稿したときに検索エンジンに通知するか否かを指定します。
(通常は、チェックします。テスト(試す)のみなら、ここのチェックは不要です。)
WordPressをインストール をクリックして、Wordpressをインストールします。
- サイトのタイトル :
- WordPressが正常にインストールできたら、以下の画面が表示されます。
これでインストールは完了したので、ログイン ボタンをクリックすると、下記のログイン画面が表示されます。
簡単な動作確認のために、ログインしてみるのも良いですし、
画面下のリンクが、ウェブサイトへのリンクとなっていますので、そこをクリックし、サイト表示させて動作を確認するのも良いと思います。
ここでは、後者を使って動作を確認してみます。以下のようにウェブサイトのトップページが表示されればOKです。
最後に、セキュリティ上、php実行者がファイルの書き換えなどできないようにしたい場合は、所有者を変更します。ここでは、hoge というユーザにしましたが、変更したいユーザを指定してください。$ cd /var/www/ [www]$ chown -R hoge: html
ここで変更してしまうと、Wordpressの自動更新やWordpressでのファイルアップロード機能などが使えなくなる場合がありますので、臨機応変、適用してください。
今回は、そんなNginxのインストールからWordpressの設定までを簡単に解説してみました。
あくまで必要最小限としての記載ですので、ユーザによっては、もっと、細かい設定を行いたいと思うかもしれません。 その際は、このサイトでも個々の詳細な設定記事がありますので、そちらを参照してください。
いよいよ、CentOS 7 の時代がやってきたという感じですね。
格安のVPSでも CentOS 7 への対応が始まっています。
さくらのVPS や ConoHa VPS 、お名前.com VPS(KVM) は、既に対応済です。
これから、CentOS 7 がしばらくVPSのスタンダードになりそうですので、ここでのWordpressの設定例から、少しでもCentOS 7 に慣れられたらよろしいかと思います。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
- CentOS 7 でLAMP(Apache+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Apache編)
- CentOS,ScientificLinuxでLAMP(Nginx+MySQL+PHP)インストールからWordPressを動かすまで(Nginx編)
- Nginx + php-fpm でWordPressを動かしてみる
- Windowsで(L)AMP(Nginx,MySQL,PHP)インストールからWordPressを動かすまで
- Nginx でPHPを動かす(php-fpmをバイナリパッケージ(rpm)を作成し、インストールする) [PHP5.2系の場合]
2015年3月18日, 9:52 PM
コメント失礼します。
php-fpmデーモンを起動するより
addgroup nginx
とありますが、
groupadd nginx
ではないでしょうか?
2015年3月19日, 6:41 PM
ryo_substupor さん
コメントありがとうございます、管理人です。
ご指摘ありがとうございます。最近は、Debian系(Ubuntuを含む)を扱うことが多く、ついつい、Debian系で使うコマンドをそのまま記述してしまっていることが多いです。すみません。addgroup は、デフォルトRedhad系にないので修正しておきます。