【Vagrant】CenoS8.2、PHP7.4のLAMP環境を作ってLaravelを動かす

CenoS8.2、PHP7.4のLAMP環境でLaravelを動かしたいと思ったけどおもいのほか時間がかかったのでメモ。
apache2.4、mysqlは8.0です。

【更新履歴】
2020/09/28 Laravelの名称間違いとか、簡易サーバーの名前の間違いを修正

参考

CentOS8でLAMP環境を作る at softelメモ
問題 CentOS8でさくっとLAMP環境を作りたい。 答え リポジトリ追加 CentOS8の標準ではphp7.2がインストールされる。php7.2でよかったら、リポジトリの追加は不要。php7.4が欲しかったらremi ...
https://app.vagrantup.com/bento

環境

Microsoft Windows [Version 10.0.18363.1082]
Vagrant 2.2.9

やったこと

CentOS8.2

CentOS8.2のVagrantfileを作成

vagrant init bento/centos-8.2

Vagrantfile下記のコメント「#」を外して適当なipにする(あとでLaravelで作ったページのアクセスに使う)

 #  config.vm.network "private_network", ip: "192.168.33.10"

仮想マシンを起動してログインしてrootになる

vagrant up
vagrant ssh
su

パッケージの更新

# dnf update

LAMPのインストール

remiリポジトリを追加するとdnfから必要なパッケージをインストールできるようになる

# dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm

必要なパッケージを実際にインストール

# dnf install httpd mod_ssl mysql mysql-server php74-php-cli php74-php-fpm php74-php-mysqlnd php74-php-opcache php74-php-mbstring postfix php74-php-pecl-zip php74-php-xml

サーバー、DB、phpの起動

# systemctl start httpd
# systemctl start mysqld
# systemctl start php74-php-fpm

ステータス確認
Active: active (running) になっていれば動いている、カラフルになってた

# systemctl status httpd
# systemctl status mysqld
# systemctl status php74-php-fpm

自動起動を設定

自動起動を設定すると再起動しても自動的にサーバーが動くようになるので設定する。
(systemctl httpd startとかうってサーバーを起動しなくてよくなる)

# systemctl enable httpd
Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service.

# systemctl enable mysqld
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.

# systemctl enable php74-php-fpm
Created symlink /etc/systemd/system/multi-user.target.wants/php74-php-fpm.service → /usr/lib/systemd/system/php74-php-fpm.service.

ちなみに、php74-php-fpmを起動しないでphpファイルにアクセスすると503エラーが出てhttpdのエラーログに下記のメッセージが残る。

[Thu Jul 16 04:56:03.270322 2020] [proxy:error] [pid 4517:tid 139640367433472] (2)No such file or directory: AH02454: FCGI: attempt to connect to Unix domain socket /var/opt/remi/php74/run/php-fpm/www.sock (*) failed
[Thu Jul 16 04:56:03.270367 2020] [proxy_fcgi:error] [pid 4517:tid 139640367433472] [client 192.168.33.1:61477] AH01079: failed to make connection to backend: httpd-UDS

バージョン確認

インストールが終わったのでバージョン表示してコマンドが動作するか確認する

# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

# httpd -v
Server version: Apache/2.4.37 (centos)
Server built:   Jun  8 2020 20:14:33

# php74 -v
PHP 7.4.8 (cli) (built: Jul  9 2020 08:57:23) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies

# mysql --version
mysql  Ver 8.0.17 for Linux on x86_64 (Source distribution)

phpでコマンド実行できるようにする

このままだと毎回phpコマンドを打つ際、php74に読み替えないといけなくなるので、phpでコマンド実行できるようにする

php74のコマンドがある位置をwhichで探す

# which php74
/usr/bin/php74

/usr/bin/フォルダにphpのシンボリックリンク作成すると、このコマンド名で実行できるようになるので、シンボリックリンクを作成する

# ln -s /usr/bin/php74 /usr/bin/php

phpでコマンド実行できるかバージョン情報を見ることで確認する

# php -v
PHP 7.4.10 (cli) (built: Sep  1 2020 13:58:08) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
    with Zend OPcache v7.4.10, Copyright (c), by Zend Technologies

composerのインストールをする

インストール方法は個人サイトに書かないで公式サイトに公式を見てねみたいなことが書いてあるので、公式サイトを見たほうがいいと思う

Composer
A Dependency Manager for PHP
# php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
# php -r "if (hash_file('sha384', 'composer-setup.php') === 'e5325b19b381bfd88ce90a5ddb7823406b2a38cff6bb704b0acc289a09c8128d4a8ce2bbafcd1fcbdc38666422fe2806') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
# php composer-setup.php
# php -r "unlink('composer-setup.php');"

上記の方法までは公式記載のインストール方法。
この方法だと実行するたびに毎回ローカルにある「composer.phar」のファイルパスを指定してコマンド実行することになる。
なのでcomposerコマンドがどこでも使えるように実行ファイルを/usr/local/binに移動する。

# mv ./composer.phar /usr/local/bin/composer

バージョン確認してコマンドが使えることを確認

# composer -v
   ______
  / ____/___  ____ ___  ____  ____  ________  _____
 / /   / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__  )  __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
                    /_/
Composer version 1.10.13 2020-09-09 11:46:34

usr/bin usr/local/bin の違いはここが詳しい

/bin, /usr/bin, /usr/sbin, /usr/local/bin の違いとは? - Qiita
Linuxを触っているとたくさんのコマンドを使うようになります。 最初は意味不明なコマンドの一覧でしたが、慣れてくるとGUI操作が煩わしくて戻れなません。 GUIって気づくとファイルやフォルダがぐちゃぐちゃになるのはなぜだろうか? ...

Laravelのイントール

Laravelをインストールするディレクトリを作って移動

# mkdir /var/www/laravel
# cd /var/www/laravel

composer経由でlalavelをインストールしてmy_pageというプロジェクトを作成することにする。

# composer create-project laravel/laravel --prefer-dist my_page

ディレクトリを移動して(/var/www/laravel/my_page)プロジェクト内でcomposerを使ったインストール

# cd my_page
# pwd
/var/www/laravel/my_page
# composer install

簡易サーバーの起動をする。

# php -S 0.0.0.0:8080 -t public

仮想マシンのipアドレスが「192.168.33.10」の場合、ipアドレスにポート指定した下記のurlでアクセスできるようになる。
http://192.168.33.10:8080

おわり。