ConoHa VPSのCentOS8にLaravel & Apache & MySQL環境を構築する

ConoHa VPSのCentOS8にLaravel & Apache & MySQL環境を構築する

December 5, 2020

自分用メモ。サーバに root ユーザでログインした時点からスタートとします。

今回は Laravel 環境を構築することを目的としていますが、純粋な PHP ファイルを動かすだけであれば、以前に投稿した 「ConoHa VPS の CentOS8 に LAMP 環境を構築する」 という記事をご参照ください。なお、本記事は上記記事をベースに作成しており、説明が重複しているところや、確認の意味合いが強い手順(=特に実行しなくとも環境構築作業に影響ないもの)に関しては、本記事では省略したりしています。

1.PHP7.4 をインストール #

使用している Laravel のバージョンにもよりますが、CentOS に入っている PHP はバージョンが古く、Laravel の要件を満たすことができないといったケースが多いかと思います。

例えば、(現時点での)CentOS8 デフォルトの PHP は 7.2 になっているため、(記事作成時点での)最新版である PHP7.4 をインストールするために、EPEL、Remi リポジトリを追加します。

dnf -y install epel-release
dnf -y install http://rpms.famillecollet.com/enterprise/remi-release-8.rpm

PHP7.4 をインストールします。

dnf -y module install php:remi-7.4

バージョン確認し、インストールされていることを確認します。

php -v

「PHP 7.4.13」などと出れば OK です。

2.Apache をインストール #

サクサクいきましょう。Apache および関連ファイルをインストール。

dnf install -y httpd httpd-tools httpd-devel httpd-manual

起動および自動起動設定および起動状態確認。

systemctl start httpd
systemctl enable httpd
systemctl status httpd

後ほど、Apache の設定ファイルを弄りますが、ひとまず先に MySQL に移ります。

3.MySQL のインストール #

MySQL サーバ、クライアントソフト、最後が MySQL の PHP ドライバをインストール。

dnf install -y mysql-server mysql php-mysqlnd

起動および自動起動設定および起動状態確認します。

systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld

MySQL の root ユーザのパスワードを変える(デフォルトはパスワード設定なし)。ここでは root に設定します。

mysql
set password for root@localhost='root';
exit;

再度ログインする。パスワードを聞かれるので、設定したパスワード(ここでは root)を入力します。

mysql -u root -p

ログインできたことを確認後、exit;で抜けましょう。

4.ポートを開放する #

外部からアクセスするのに必要なポートを開放する。ここでは 8000 番を開放している。その後 Firewalld をリロードして設定が反映されていることを確認。

firewall-cmd --zone=public --add-port=8000/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all

「ports: 8000/tcp」となっていれば OK です。

5.Apache の設定を変更する #

バーチャルホストを使用するか否かで2つの方法があります。そのサーバ上で1つのアプリだけを運用するのであれば、バーチャルホストを利用する必要はありません。

5 −A.バーチャルホストを使わない方法 #

Laravel のアプリが表示できるように Apache の設定を変更します。

cd /etc/httpd/conf/
vim httpd.conf

自分の環境にあわせてポート番号とドキュメントルートを適宜変更します。ここでは外部からアクセスされる際のポート番号を 8000 番にしています。

# Listenと書いてあるところがポート番号の設定
# ポート番号8000番の場合なら下記のようにする
Listen 8000

# DocumentRootと書いてあるところがドキュメントルートの設定
# projectxというアプリを公開したい場合は下記(その中のpublicディレクトリを指定する)
DocumentRoot "/var/www/html/projectx/public"

# DocumentRootの設定の下にでも下記を追加します
<Directory "/var/www/html/projectx/public">
  AllowOverride All
</Directory>

設定ファイル更新後、設定ファイルの書き方に誤りがないかチェックします。下記を実行。

httpd -t

Syntax OK がでれば問題なしです。その後 apache を再起動します。

systemctl restart httpd

5 −B.バーチャルホストを使う方法 #

Apache の設定を変更します。

cd /etc/httpd/conf/
vim httpd.conf

外部からアクセスされる際のポート番号を 8000 番にしています。

# Listenと書いてあるところがポート番号の設定
# ポート番号8000番の場合なら下記のようにする
Listen 8000

conf ファイルを作成します。

cd /etc/httpd/conf.d
vim vhost.conf

conf ファイル内に以下を記載。パスや IP アドレスは自分の環境に合わせて変更する。

<VirtualHost *:8000>
   DocumentRoot /var/www/html/projectx/public
   ServerName IPアドレス
   <Directory "/var/www/html/projectx/public">
      AllowOverride All
   </Directory>
</VirtualHost>

設定ファイルをチェックします。

httpd -t

Syntax OK が出たことを確認後 apache を再起動。

systemctl restart httpd

6.アプリ内ディレクトリの権限を変更する #

ここで IPアドレス:8000(ポートは各自の設定次第です)にアクセスすると、「failed to open stream: Permission denied」のエラーが出ているはずです。これを解消するために、apache ユーザがアプリ内の特定のファイルにアクセスできるようにします。

この作業は Laravel 公式でも言及されています。

ディレクトリパーミッション

Laravel をインストールした後に、多少のパーミッションの設定が必要です。storage 下と bootstrap/cache ディレクトリを Web サーバから書き込み可能にしてください。設定しないと Laravel は正しく実行されません。

https://readouble.com/laravel/8.x/ja/installation.html

アプリのディレクトリに移動します。

cd /var/www/html/projectx

下記を実行して、apache ユーザがアプリ内の特定のファイルにアクセスできるようにします。

chmod -R 777 storage
chmod -R 777 bootstrap/cache

または、ディレクトリ(およびその配下)の所有者を apache のユーザに変更してしまっても解消できます。

chown -R apache storage
chown -R apache bootstrap/cache

なお、ユーザ名一覧の確認方法は下記です。表示される一覧の中に「apache」というのが見つかると思います。このユーザが「storage」および「bootstrap/cache」ディレクトリにアクセスできるように、と作業していました。

cat /etc/passwd|sed -e 's/:.*//g'

7.ブラウザに表示されることの確認 #

改めてブラウザからアクセスしてみると、ちゃんとアプリのページが表示されているはずです。お疲れ様でした。これで作業は完了です。