LoginSignup
2
1

More than 3 years have passed since last update.

Centos7にNginx、Laravel6、MySQLの開発環境を作る

Last updated at Posted at 2020-05-28

はじめに

Nginxとphp-fpmの権限関連でハマったので、まとめることにしました。

実践

ゴール

・Nginx
・PHP 7.4
・Laravel6
・MySQL

やっていくこと

・Nginx、PHP7.4のインストール
・Laravel6のインストール
・MySQLのインストール
・Laraveのindex.phpの表示

Nginxのインストール

公式のに従いましょう。nginx: Linux packages

$ sudo yum install -y yum-utils
$ sudo vi /etc/yum.repos.d/nginx.repo

書き込むもの

/etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

うまくいっているかの確認。以下の通りになればおk。

$ yum info nginx
利用可能なパッケージ
名前                : nginx
アーキテクチャー    : x86_64
エポック            : 1
バージョン          : 1.18.0
リリース            : 1.el7.ngx
容量                : 772 k
リポジトリー        : nginx-stable/7/x86_64
要約                : High performance web server
URL                 : http://nginx.org/
ライセンス          : 2-clause BSD-like license
説明                : nginx [engine x] is an HTTP and reverse proxy server, as well as
                    : a mail proxy server.

そしたら、インストールして起動までの設定もやっていく。

$ sudo yum install -y nginx
$ sudo systemctl enable nginx
$ sudo systemctl start nginx

ここで確認したくなるけど、多分表示されない。初期の設定だと、firewallとSELinuxに捕まるからその設定をしにいく。また、この時Cloud9用のポートも開けておく。

$ sudo vi firewall.sh
firewall.sh
#!/bin/sh

firewall-cmd --permanent --add-service=http --zone=public
firewall-cmd --permanent --add-service=https --zone=public
firewall-cmd --permanent --zone=public --add-port=8080/tcp
firewall-cmd --permanent --zone=public --add-port=80/tcp
firewall-cmd --permanent --zone=public --add-port=443/tcp
firewall-cmd --reload
$ sudo bash firewall.sh

これ以降、スクリプトを多用する。よくわからなかったら、全部の先頭にsudoをつけて実行してくれれば良い。

次にSELinuxの設定。

$ sudo vi /etc/selinux/config
SELINUX=permissive

今回はpermissiveを試してみます。不安であれば、disabledでも良いと思います。設定を有効化するために再起動します。

$ sudo reboot

これでアクセスできるはずです。URLは、http://localhostまたは、端末のIPがわかればhttp://端末のIPでいけるはずです。

PHP7.4のインストール

Remiリポジトリを利用していきます。dnfはいらないかもしれません。

remi.sh
#!/bin/sh

yum -y install wget
yum -y install epel-release

# Remiリポジトリの追加
rpm -ivh http://ftp.riken.jp/Linux/remi/enterprise/remi-release-7.rpm
$ sudo bash remi.sh

上手くいったらレポジトリの確認をします。その後、php74がRemiレポジトリにあるかを確認します。確認できたら、レポジトリを対応させてインストールします。バージョン確認で、表示されたら成功です。

$ sudo yum repolist

base/7/x86_64              CentOS-7 - Base
epel/x86_64                Extra Packages for Enterprise Linux 7 - x86_64
extras/7/x86_64            CentOS-7 - Extras
remi-safe                  Safe Remi's RPM repository for Enterprise Linux 7 - x86_64

$ sudo yum info php74
利用可能なパッケージ
名前                : php74
アーキテクチャー    : x86_64
バージョン          : 1.0
リリース            : 3.el7.remi
容量                : 2.6 k
リポジトリー        : remi-safe
要約                : Package that installs PHP 7.4
ライセンス          : GPLv2+
説明                : This is the main package for php74 Software Collection,
                    : that install PHP 7.4 language.

$ sudo yum -y install --enablerepo=epel,remi,remi-php74 php

$ php -v
PHP 7.4.5 (cli) (built: Apr 14 2020 12:54:33) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

そうしたら、インストール関連の要件で必要なものを調べてから、インストールします。満たさないといけない用件は以下の通りです。
・PHP >= 7.2.0
・BCMath PHP拡張
・Ctype PHP拡張
・Fileinfo PHP拡張
・JSON PHP拡張
・Mbstring PHP拡張
・OpenSSL PHP拡張
・PDO PHP拡張
・Tokenizer PHP拡張
・XML PHP拡張

# 確認のコマンド
$ php -m | grep -e bcmath -e ctype -e fileinfo -e json -e mbstring -e openssl -e PDO -e tokenizer -e ^xml$

ctype
fileinfo
json
openssl
tokenizer

自分の環境の場合、BCMathとMbstring、PDO、XMLが不足していました。また、先ほどインストールにはRemiレポジトリを利用したため、引き続き利用してインストールしていきます。

$ sudo yum -y install --enablerepo=epel,remi,remi-php74 php-bcmath php-mbstring php-pdo php-xml php-cli php-devel php-zip php-fpm php-mysqlnd 

また必要なツールが足りなかったので追加でインストールしました。

phpinfoを表示させる

まず、index.phpを作っていく。

$ sudo vi /var/www/html/index.php
index.php
<?php
    phpinfo();
?>

あと権限とユーザーの設定。ここら辺は不安なところがあるので、わかる人はコメントをいただけると幸いです。

# グループの確認
$ sudo cat /etc/group
nginx:x:995:

# グループ内のユーザー確認
$ groups nginx
nginx : nginx

$ sudo chown $USER:nginx -R /var/www
$ sudo chmod 755 -R /var/www

そうしたら、php-fpmの設定。注意点としては、Apacheと違ってwww-dataはなく、nginxのユーザーとグループを使っている。

$ sudo vi /etc/php-fpm.d/www.conf

user = nginx
group = nginx

# ここの名前はNginxのFastCGIで使うときに合わせるから気をつけて
listen = /var/run/php-fpm/php-fpm.sock

listen.owner = nginx
listen.group = nginx

# 保存したら再起動
$ sudo service php-fpm start

そうしたらドキュメントルートの設定。

$ sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.org
$ sudo vi /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    root   /var/www/html;
    index  index.php index.html index.htm;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    #error_page  404              /404.html;

    # エラー確認用に敢えてコメントアウトしてます
    # 動くようになったら戻してね

    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #    root   /usr/share/nginx/html;
    #}

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        # 自分はrootの設定も必要だったので修正しました
        root           /var/www/html
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

そしたら諸々再起動

$ sudo systemctl enable php-fpm.service
$ sudo systemctl enable nginx.service
$ sudo service nginx restart
$ sudo service php-fpm restart

Laravel6のインストール

LaravelをインストールするためにComposerをインストールしていきます。

$ sudo wget https://getcomposer.org/installer -O composer-installer.php

$ sudo php composer-installer.php --filename=composer --install-dir=/usr/local/bin

$ composer self-update

$ composer -v

最後のコマンドが通ったら、Composerのインストールは完了です。Composerを利用して、Laravel6をインストールしていきましょう。ここまできたら、日本語訳公式のインストール手順が使えるので、それを元に進めます。

$ composer global require laravel/installer

そうしたら、ドキュメントにある通りにパスを通します。コマンドで確認してから、そのパスを通すのが良いと思います。パスのパターンは2種類あるので、どちらでも良いかもしれません。

$HOME/.config/composer/vendor/bin
$HOME/.composer/vendor/bin

# パスを通すディレクトリの確認法
$ composer global about

Changed current directory to /home/centos/.config/composer
Composer - Dependency Manager for PHP
Composer is a dependency manager tracking local dependencies of your projects and libraries.
See https://getcomposer.org/ for more information.

# パスを通す
$ export PATH=$PATH:$HOME/.config/composer/vendor/bin

# 確認
$ echo $PATH
# 一番後ろが以下のようになっていれば成功です
:/home/centos/.config/composer/vendor/bin

# 一応永続化
$ source ~/.bash_profile

ユーザーのホームディレクトリ以下ではlaravel new アプリ名でアプリを作ることができます。ただ今回は、公開ディレクトリに作りにいきましょう。なのでコマンドが変わります。

$ cd /var/www/html
$ composer create-project --prefer-dist laravel/laravel blog "6.*"

今回は、blogという名前でアプリケーションを作っていきます。
Laravelの初期設定をしていきます。.envファイルの設定は、MySQLの設定後にやります。

$ sudo chown $USER:nginx -R blog
$ sudo find blog -type d -exec chmod 750 {} \;
$ sudo find blog -type f -exec chmod 640 {} \;
$ sudo chmod 770 -R blog/storage blog/bootstrap/cache

Nginxの設定

Nginxのドキュメントルートを変更していきます。

$ sudo vi /etc/nginx/conf.d/default.conf
/etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    # blog/public が追加されました
    root   /var/www/html/blog/public;
    index  index.php index.html index.htm;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;
    #location = /50x.html {
    #    root   /usr/share/nginx/html;
    #}

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {

        # blog/public が追加されました
        root           /var/www/html/blog/public;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

そしたら、リスタート。

$ sudo service nginx restart

ここで、URLにアクセスしてみるとLaravelの画面が表示されました。

MySQLのインストール

MariaDBを削除してからインストールします。MySQLのyumリポジトリからNo thanks,just start my download.のリンクをコピーして入れます。
MySQL Community Downloads

$ rpm -qa | grep maria
$ sudo yum -y remove mariadb-libs
$ sudo rm -rf /var/lib/mysql/

$ sudo yum -y install https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

インストールできるかを確認してみましょう。

$ yum info mysql-community-server

利用可能なパッケージ
名前                : mysql-community-server
アーキテクチャー    : x86_64
バージョン          : 8.0.20
リリース            : 1.el7
容量                : 488 M
リポジトリー        : mysql80-community/x86_64
要約                : A very fast and reliable SQL database server
URL                 : http://www.mysql.com/
ライセンス          : Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights
                    : reserved. Under GPLv2 license as shown in the Description field.

インストールと確認。

$ sudo yum -y install mysql-community-server

/usr/sbin/mysqld  Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)

$ sudo systemctl start mysqld
$ sudo systemctl enable mysqld

大抵は、5.7を使っていますが、期限も近いので8.0を使ってみることにしました。

そうしたら、データベースの設定をしていきます。

$ sudo cat /var/log/mysqld.log | grep 'temporary password'

A temporary password is generated for root@localhost: ここのパスワードを覚えておいてください

$ mysql -u root -p
Enter password: さっきのパスワードを入力します。

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'P@ssw0rd';
mysql> create database laravel;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| laravel            |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

mysql> exit
Bye

ここでlaravelのテーブルが追加されていればOKです。

.envファイルの設定

さっきあえてやらなかった.envファイルの設定をしていきます。

$ cd /var/www/html/blog
$ cp .env.example .env
$ php artisan key:generate
$ vi .env

内容

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=さっき設定したパスワードを入力

最後にマイグレートしてエラーが出なければ成功です。

$ php artisan migrate

ここまできてうまくいかなかった時は、再起動してみてください。

参考

インストール関連
Laravel 7 インストール(CentOS8/PHP7.4)
CentOS7でphp7.4をインストールしようとして躓いた話

権限とユーザー関連
Laravelのパーミッションを適切に設定
「root→自分のユーザー名」に変更すると危険でしょうか?
linuxのユーザー権限とグループについて教えてください
Nginxの公開ディレクトリのパーミッションについて

設定関連
EC2にWordPressをインストールする
MySQL 5.7 を CentOS 7 に yum インストールする手順
nginx サーバーに PHP, MySQL を入れる
nginx と PHP-FPM の仕組みをちゃんと理解しながら PHP の実行環境を構築する
nginx ディレクトリのPermissionをwww-dataに変えたい。
nginxで403を回避するために、パブリックファイルの権限についておさらい

コマンド
Groupを確認したり、追加したりする方法まとめ
【 usermod 】コマンド――ユーザーアカウントの情報を変更する

ドキュメント
Laravel 6.x インストール

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1