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 は正しく実行されません。
アプリのディレクトリに移動します。
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.ブラウザに表示されることの確認 #
改めてブラウザからアクセスしてみると、ちゃんとアプリのページが表示されているはずです。お疲れ様でした。これで作業は完了です。