CentOS7+nginx+phpenvの環境を作る
まず始めに
CentOSを最新状態にするためyum updateをしてください。
sudo yum update -y
環境によって時間がかかる場合があるため気長に待ちましょう。
次にgitとwgetをインストールします。
sudo yum install -y git wget
phpenvからPHPをインストール
phpenvとはPHPのバージョンを簡単に切り替えられたりするすげーやつです。
Pythonだとpyenv、Rubyだとrbenvのように[言語]envは非常に便利なので
これらを簡単にインストールできるようにするためにanyenvを導入します。
まず公式リポジトリからcloneしてきます。
git clone https://github.com/anyenv/anyenv ~/.anyenv
次に以下のコマンドを入力します。
zshなどを利用してるかたはbashrcをzshrcなどに変更してください。
echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bashrc echo 'eval "$(anyenv init -)"' >> ~/.bashrc exec $SHELL -l
そうすると以下のようなメッセージが表示される場合があるので
指示に従いコマンドを入力します。yes/no聞かれるのでyと入力してください。
ANYENV_DEFINITION_ROOT(/home/sasa/.config/anyenv/anyenv-install) doesn't exist. You can initialize it by: anyenv install --init
次に各envを自動アップデートできるプラグインを導入します。
mkdir -p $(anyenv root)/plugins git clone https://github.com/znz/anyenv-update.git $(anyenv root)/plugins/anyenv-update exec $SHELL -l
これでanyenv updateと入力すると導入したphpenvやpyenvが
全てアップデートできるようになります。
次にphpenvをインストールします。
anyenv install phpenv exec $SHELL -l
これでphpenvが導入できましたがまだphpをインストールする
環境が整っていないため以下のライブラリをインストールします。
sudo yum install -y epel-release sudo yum install -y gcc bison libxml2 libxml2-devel openssl-devel libcurl-devel libjpeg-turbo-devel libpng-devel libmcrypt-devel readline-devel libtidy-devel libxslt-devel bzip2 bzip2-devel libicu-devel gcc-c++ tidyp make re2c file libtool-ltdl-devel autoconf automake patch mysql-devel sudo yum install -y http://packages.psychotic.ninja/7/base/x86_64/RPMS/psychotic-release-1.0.0-1.el7.psychotic.noarch.rpm sudo yum -y --enablerepo=psychotic-plus install libzip libzip-devel
次にインストールするPHPのバージョンを選びます
phpenv install --list
このコマンドを実行すると使用できるバージョンの一覧を確認できます。
今回は現時点で最新の7.3.4を導入します。
phpenv install 7.3.4
環境によってCompilingに2,30分かかる場合があります。
最後にphpenvで使用するPHPのバージョンを指定することで
PHPが使えるようになります。
phpenv global 7.3.4 php -v
php -vで選択したバージョンになっていれば成功です。
nginxのインストール
nginxとはwebサーバーを立てるためのものです。
デフォルトでyum installすると少し古いバージョンが入ってしまうので
リポジトリの設定をしましょう。
sudo vi /etc/yum.repos.d/nginx.repo
ここに以下を入力して保存します。
[nginx] name=nginx repo baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/ gpgcheck=0 enabled=1
その後nginxをインストールします。
sudo yum install -y nginx
firewallの設定
次にwebページを外部に公開するためにfirewallの設定をして
80番portを開放します。以下のコマンドを入力してください。
sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload
その後以下のコマンドを打ちnginxを起動し,ブラウザでサーバーのIPを
http://xxx.xxx.xxx.xxxのように打ち込むとWelcomeページが表示されます。
sudo systemctl start nginx
php-fpmの設定
このままではnginx上でPHPを使うことができません。
そこでphp-fpmというものを使うことによってnginxとPHPの橋渡しの
ようなことをしてくれます。
まずphp-fpmのglobal設定ファイルを開きます。
vi ~/.anyenv/envs/phpenv/versions/7.3.4/etc/php-fpm.conf
変更する箇所は以下です。
;pid = run/php-fpm.pid ↓ pid = /var/run/php-fpm.pid ;error_log = log/php-fpm.log ↓ error_log = /var/log/php-fpm.log ;events.mechanism = epoll ↓ events.mechanism = epoll
次にphp-fpmのwww設定ファイルを開きます。
vi ~/.anyenv/envs/phpenv/versions/7.3.4/etc/php-fpm.d/www.conf
変更する箇所は以下です。
user = nobody group = nobody ↓ user = nginx group = nginx listen = 127.0.0.1:9000 ↓ listen = /var/run/php-fpm.sock ;listen.owner = nobody ;listen.group = nobody ;listen.mode = 0660 ↓ listen.owner = nginx listen.group = nginx listen.mode = 0660
これでphp-fpmの設定は完了したのでsystemctlで起動できるように
起動スクリプトをコピーし、中身を少し変更します。
sudo cp /tmp/php-build/source/7.3.4/sapi/fpm/php-fpm.service.in /etc/systemd/system/php-fpm.service sudo vi /etc/systemd/system/php-fpm.service
[service]の部分を全消しして代わりに以下を同じ場所に入力してください。
(ホームディレクトリやphpバージョンのpathは適宜変更してください)
Type=simple PIDFile=/var/run/php-fpm.pid ExecStart=/home/sasa/.anyenv/envs/phpenv/versions/7.3.4/sbin/php-fpm --nodaemonize --fpm-config /home/sasa/.anyenv/envs/phpenv/versions/7.3.4/etc/php-fpm.conf ExecReload=/bin/kill -USR2 $MAINPID
こうすることでsystemctlでphp-fpmが起動できるようになります。
sudo systemctl start php-fpm
nginxの設定
次にnginxの設定を弄ってphp-fpmを使えるようにします。
今回はVMware上で環境作成してるためdefault.confを使いますが
VPS上でドメインを持っているなどの方はexample.com.confなどを
default.confからコピーして設定してください。
ドメイン持ちの方 sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/example.com.conf sudo vi /etc/nginx/conf.d/example.com.conf VMware上の方 sudo vi /etc/nginx/conf.d/default.conf
以下のように変更してください。
ドメイン持ちの方のみ server_name localhost; ↓ server_name example.com; 以下共通 #charset koi8-r; ↓ charset utf-8; location / { root /usr/share/nginx/html; index index.html index.htm; } ↓ location / { root /usr/share/nginx/html; index index.php index.html index.htm; } #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} ↓ location ~ \.php$ { include fastcgi_params; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; }
設定が完了したらnginxを再起動します。
sudo systemctl restart nginx
SELinuxの無効化
このままではnginx上でphpを実行しようとしてもphp-fpmがPermission deniedになってしまいます。
これを回避するためにはSELinuxというCentOS7でデフォルトでオンになってるものを無効化します。
sudo vi /etc/selinux/config
以下の箇所を変更します。
SELINUX=enforcing ↓ SELINUX=disabled
自動起動設定
これですべての設定が完了したのでnginx,php-fpmをOS起動時に自動で起動するようにします。
sudo systemctl enable nginx sudo systemctl enable php-fpm
再起動します。
sudo reboot
phpinfoで確認
再起動できたらPHPが実行できるか確認してみましょう。
/usr/share/nginx/htmlにindex.phpをつくっていきます。
sudo vi /usr/share/nginx/html/index.php
以下を入力してください。
<?php phpinfo();
またindex.phpの所有者をnginxにしておきましょう。
sudo chown nginx:nginx index.php
これでPHPの情報が表示されたら成功です。
ブラウザでhttp://xxx.xxx.xxx.xxxにアクセスしてみてください。