WEB

VirtualBox + Vagrant + centosでLaravel10の環境を構築してみた

この記事は約10分で読めます。

はじめに

インプルの矢島です。

ふとLaravelをVirtualBoxで環境構築してみたいと思ったので、試すことにしました。

(2023/3/25更新)
Laravelからmysqlへ接続するためのphp.iniの設定方法を追記しました。
PHPをインストールするときの関連ライブラリのインストール方法を追記しました。

環境構築

実際にやることは以下の内容です。

  • 仮想マシンを立てる
  • phpのインストール
  • composerのインストール
  • laravelのインストール
  • apacheの起動設定
  • mysqlのインストール

構築する環境

  • centos7.2
  • php8.1
  • Laravel 10.0.4
  • mysql5.7

最終的にできるディレクトリ

.
├── centos7.2
│   └── Vagrantfile
└── laravel10-app
    ├── README.md
    ├── app
    ├── artisan
    ├── bootstrap
    ├── composer.json
    ├── composer.lock
    ├── config
    ├── database
    ├── package.json
    ├── phpunit.xml
    ├── public
    ├── resources
    ├── routes
    ├── storage
    ├── tests
    ├── vendor
    └── vite.config.js

仮想マシンを立てる

virturalboxをインストールします。
virtualboxとはホストOS(macOS)の中に仮想マシンを構築するためのソフトです。

vagrantをインストールします。
vagrantとは、仮想マシンを簡単に構築して操作するソフトウェアです。

centos7.2をインストールします。
任意のディレクトリに移動して以下のコマンドを実行します。

vagrant init bento/centos-7.2

Vagrantfileが生成されていると思うので、以下のようにコードを追加します。
ネットワークや権限の設定、apacheの起動設定をします。(vagrantで起動するたびにapacheを起動させたいため)

  # Create a forwarded port mapping which allows access to a specific port
  # within the machine from a port on the host machine. In the example below,
  # accessing "localhost:8080" will access port 80 on the guest machine.
  # NOTE: This will enable public access to the opened port
    config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1" ←これを追加
  # config.vm.network "forwarded_port", guest: 80, host: 8080


   config.vm.synced_folder "..", "/vagrant", mount_options: ['dmode=777','fmode=777'] ←これを追加

   config.vm.provision "shell", run: "always",  inline: <<-COMMAND     ←これを追加
       sudo systemctl start httpd
  COMMAND

vagrantを起動します。

vagrant up

※以下エラーが出る可能性があります。その場合は、こちらの記事を参考に解決してください。

The following SSH command responded with a non-zero exit status.
Vagrant assumes that this means the command failed!

umount /mnt

Stdout from the command:

※また、Guest Addionsのバージョンエラーが起きる可能性があるかと思います。その場合は、vagrant-vbguestというプラグインをインストールしてください。(詳細

仮想環境に接続します。

vagrant ssh

ssh接続ができたら、パッケージを導入します。

sudo yum -y groupinstall "development tools"
sudo yum update //システム全体のパッケージのアップデート
sudo yum clean all //ダウンロードしたパッケージと古いヘッダを削除

phpのインストール

次にphpをインストールします。
※Laravel10はphp8.1以上でないと使用できないとのことなので、8.1をインストールします。

引き続きssh接続した仮想環境の中で作業します。

sudo yum install epel-release
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
//オプションは適切に選ぶ
sudo yum -y install --enablerepo=remi,remi-php81 --skip-broken php php-mcrypt php-mbstring php-mysqlnd php-opcache php-apcu php-common php-cli php-pear php-pdo php-mysqlnd php-pgsql php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-xml php-xmlrpc php-curl php-opcache php-fpm php-redis php-pecl-apc php-mysql php-gd php-xml php-bcmath php-gettext mysql-server php-xml php-imagick php-ImageMagick ImageMagick php-xdebug php-pecl-xdebug3
php -v

無事php8.1がインストールされています。

php.iniを設定します。

date.timezone = "Asia/Tokyo"

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = UTF-8
mbstring.http_output = pass
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_charset = none

composerをインストール

以下のコマンドでcomposerをインストールします。
composerとはphpのパッケージ管理ツールです。

curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
composer -v

上記画像の結果が表示されたらOKです。

Laravel10のインストール

vagrantディレクトリに移動して、以下コマンドでLaravel10のプロジェクトを作成します。

cd /vagrant
composer create-project laravel/laravel laravel10-app "10.*"
cd laravel10-app
php artisan --version

上記画像の通りlaravelのバージョンが確認できたらOKです。

apacheの起動設定

/etc/httpd/conf/http.confを編集します。

# User apache
# Group apache
User vagrant ←起動ユーザーとグループをvagrantに変更する
Group vagrant

#
# DocumentRoot: The directory out of which you will serve your
# documents. By default, all requests are taken from this directory, but
# symbolic links and aliases may be used to point to other locations.
#
DocumentRoot "/var/www/html/laravel10-app/public" ←変更

<Directory "var/www/html/laravel10-app/public"> ←追加
        Require all granted
        AllowOverride All
</Directory>

以下コマンドを実行します。
やっていることは、、
①apacheの起動
②ディレクトリを移動して、vagrantディレクトリの中に作成したLaravel10のプロジェクトのシンボリックリンクを貼る。
③Laravelのstorageディレクトリの権限を変更する

sudo systemctl start httpd.service
sudo systemctl enable httpd.service //apacheの自動起動設定をON

// ディレクトリ移動
cd /var/www/html
//シンボリックリンクを貼る
sudo ln -s ../../../vagrant/laravel10-app/ laravel10-app
cd laravel10-app
sudo chmod -R 777 storage/

無事Laravelの初期画面が表示されました。
http://localhost:8080/

mysqlをインストール

以下コマンドを実行してmysqlをインストールします。

sudo rpm -Uvh http://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum install --enablerepo=mysql57-community mysql-community-server
mysqld --version

// mysql起動
sudo systemctl enable mysqld.service
sudo systemctl start mysqld.service

ログインするための初期パスワードを確認します。

sudo grep 'temporary password' /var/log/mysqld.log
→ 2023-03-18T14:59:26.874484Z 1 [Note] A temporary password is generated for root@localhost: ******* ←これがパスワード

mysqlに入ります。

mysql -u root -p

// パスワードの制限をゆるくする
set global validate_password_length=6;
set global validate_password_policy=LOW; 
// パスワードをpasswordに変更する。(忘れるため)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

これで、mysqlにrootユーザーでpasswordというパスワードでアクセスできるようになりました。

laravelから接続するときには、etc/php.iniの以下コメントアウトを解除しておく必要があります。

 extension=/path/to/extension/mysqli.so

まとめ

今回はLaravel10の開発環境をVirtualboxとVagrantを使って構築してみました。

思ったより簡単に構築できたのではないでしょうか。

次はこの環境でLaravel10の機能を試してみたいなと思います。

参考