ドットインストールでLaravelを勉強しようと思ったら開発環境の構築がよくわからない。
VagrantやLaravelのバージョンの違いのせいか、その通りにやっても動かない。
問い合わせをしようも絶賛サポート終了中。
これは困りましたね。
動画の説明も、いきなりPHPのバージョンの話から始めているので端折りすぎ感がすごいのでまったく意味不明。
なので実際に一から構築して、備忘録を残します。
各種導入するものは2021年2月現時点の最新でいきます。
いろいろつまづきポイントも後述いたします。
巷ではDockerを使っていない人は無能以下のゴミ扱いらしいですが、ゴミで構わないのでとりあえず同じようにVagrantでいきます。
尚、これは有料レッスンのため内容には触れませんし、若干違う環境で構築しますのでご承知おきください。
基本Macでの操作ですが、PC内のディレクトリ構造以外はほとんど同じのはずです。
Vagrantの基礎的なものはこちらを参照ください。VirtualBoxとVagrantはインストール済として始めます。
BOXを作る
ボックスイメージをネットから取得する。
ドットインストールの環境は何か知らないけど、今回はCentOS7を採用します。
- Vagrantbox.esへアクセスする
- CentOS 7.2 x64のところにあるURLをコピーする
- Macからターミナルを開く
vagrant box add <自分が判別しやすいBOXの名前> <先程コピーしたURL> [私の場合はこんな感じ] vagrant box add centOS72 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box
BOXは環境の元になるOSイメージなので、名前はcentOS72にする。
ちゃんとBOXがインストール(厳密にはインストールとは言わない)されているかを確認する。
vagrant box list
centOS72が一覧にあればOK。
Vagrant開発環境を置くディレクトリを作る
今回は自分のユーザディレクトリの直下に作ることにする。
またVagrantで作る環境は将来複数作るかもしれないので、それをまとめるVagrantディレクトリも作ります。
Macのターミナルから、まずログインユーザのディレクトリに移動する
$ cd ~
Vagrantで作る環境をまとめるVagrantディレクトリを作る
$ mkdir Vagrant
Vagrantディレクトリに移動する
$ cd Vagrant
今回の開発環境を置くディレクトリを作成する。今回はドットインストールのLaravel専用なので、名前をdotins_laravelにした。
$ mkdir dotins_laravel
そのディレクトリに移動する
$ cd dotins_laravel
仮想マシンの初期設定をする
インストールしたBOXイメージcentOS72を元に仮想マシンを作る。
前回からの話の流れでいくと、現在のディレクトリはcentOS72ibmiのはずです。
BOXイメージ「centOS72」を元に初期設定(init)をする
$ vagrant init centOS72
初期設定したらディレクトリ内にVagrantfileができているのでそれをエディタで開く
$ vi Vagrantfile
vimエディタ内にて
[行番号を表示する] :set nu [35行目にあるコメントアウトの#を外す] config.vm.network "private_network", ip: "192.168.33.10" [保存して終了] :wq
これで192.168.33.10で仮想マシンに接続できるようになる。
複数仮想マシンを作るときは、10を11にするなどすればいいと思う。
仮想マシンを起動する
仮想マシンを起動する
vagrant up
vagrant-vbguestをインストールしておく
以後、仮想マシンを再起動すると、後述する「マウント」において不具合が起きます。
これはMac側と仮想マシン側のマウントを司るGuestAdditionsという機能のバージョンが合致していないことが原因らしい。
ちなみにバージョンが合致しないケースは、yum updateを行った後に起きたので、それが誤差が生じる原因のよう。
ゆえに、それを解消してくれるプラグインをインストールしておく。
[vagrant-vbguestというバージョンを更新してくれるプラグインインストールする] $ vagrant plugin install vagrant-vbguest
バージョンの確認や更新は仮想マシンを立ち上げたときに自動的に行ってくれる。
手動で更新する場合は下記を使うが、基本的に使わないしやらなくていい。
[手動でバージョンの更新をする場合(使わない)] $ vagrant vbguest
仮想マシンにSSHでアクセスする
IDやパスワードは不要。これだけで仮想マシンのターミナルを操作できる。
$ vagrant ssh
初期時点の状況
- HTTPサーバは未導入
- PHPは未導入
- SELinuxは未稼働
- FTPサーバソフトは未導入
- SQliteは3.7.17がインストール済
タイムゾーン設定をしておく
タイムゾーンをアジア東京にする。
$ sudo timedatectl set-timezone Asia/Tokyo
念のため、現在のタイムゾーンを確認するときは下記にて。
$ timedatectl
アップデートを行う
ここからはSSHを利用して仮想マシン内の操作になる。
まず、最初にyum updateを行っておく。10分近くかかるので注意。
[Vagrant+Virtualboxの場合、yum updateはGPGの鍵でエラーが出るので、出ないよう前準備] $ curl -L https://yum.puppetlabs.com/RPM-GPG-KEY-puppet -o /tmp/RPM-GPG-KEY-puppet $ gpg --with-fingerprint "/tmp/RPM-GPG-KEY-puppet" $ sudo cp /tmp/RPM-GPG-KEY-puppet /etc/pki/rpm-gpg/RPM-GPG-KEY-puppetlabs-PC1 [インストール済のパッケージのバージョンを最新にアップデートする] $ sudo yum -y update
HTTPDやPHPなど必要なものをインストールする
次にPHPやWebサーバのHTTPDをインストールする。
なお、普通にyum installしただけではPHPはバージョン5.4がインストールされてしまうので、最新の7.Xがインストールされるようremiリポジトリというプログラムをダウロードする先の登録を先に行う。
必要なもの諸々をインストールする。
[yumのremiリポジトリを追加する] $ sudo yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm [HTTPサーバやphp7.3などをインストールする] $ sudo yum install -y --enablerepo=remi,remi-php73 httpd php php-mbstring php-odbc php-pdo php-mysqlnd php-xml php-pecl-zip
これでhttpdとPHPやその他がインストールされる。
ちなみにphpの拡張モジュールはこんなに必要ないかも。
あと、httpdのバージョンは2.4.6で、PHPのバージョンは7.3のはず。
composerをダウンロードする
PHPのパッケージ管理ツールであるcomposerをダウンロードします。
Laravelもこれでインストールします。
- Composerのサイトに行く
- Downloadのボタンをクリックする
- 4行ほどのスクリプトがあるのでコピーする
- 開いているターミナルに貼り付けて実行する。全行一気にコピペでOK。
たぶんスクリプトはこんなの。一応最新版とかあるかもしれないので、取りに行ったほうが無難かも。
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('sha384', 'composer-setup.php') === '756890a4488ce9024fc62c56153228907f1545c228516cbf63f885e036d37e9a59d27d63f46af1d4d07ee0f76181c7d3') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" php composer-setup.php php -r "unlink('composer-setup.php');"
最後のスクリプトが止まることがあるので、そんときはEnterキーで押し込んでください。
これで現在のディレクトリ(ホームディレクトリ)にcomposer.pharがダウンロードされる。
Laravelをインストールする
composerのコマンドを使ってLaravelをインストールします。
インストールといってもファイルをダウンロードするだけなので、まず最初にダウンロードするディレクトリに移動する。
Laravelをインストールするときにフォルダも一緒に作られるが、そのフォルダ名はレッスンと同じmyblogにする。
[ダウンロードしたコンポーザーをどこでも使えるようにする] sudo mv composer.phar /usr/local/bin/composer [/vagrantディレクトリに移動する] $ cd /vagrant [Laravelをインストールする] $ composer create-project --prefer-dist laravel/laravel myblog
最初の/usr/local/binに移動したのは、プログラムに組み込んだニュアンスです。
これでどこでもcomposerコマンドが使えます。
なお、vagrantの仕組みにより仮想マシンの/vagrant以下は、Mac側のdotins_laravelディレクトリ以下と同期されるルールらしいです。
ゆえにソースコードを/vagrant直下に置けば、Mac側からVSCodeのようなエディタで触れるということです。
いちいちFTPで見るのは大変そうなので、今回はこれでいきます。
–prefer-distの意味は調べてもいろんな見方があるみたいだけど、preferは〜のほうを好む(選ぶ)の意味。
その後ろに”5.5.*”のようにバージョンを指定できるみたいなのでバージョンの指定なのかと密かに思ってます。
“5.5.*”と指定すると5.5系の最新を、何も指定しなければ最新バージョンをダウンロードするみたい。
ちなみに2021年2月末時点ではバージョン8.29.0がダウンロードされた。
パーミッションの設定だけしておく
Laravelでよく起きるstorageディレクトリ以下のPermissionやキャッシュのエラーを防ぐ。
$ chmod -R 777 /var/www/html/myblog/storage/ $ chmod -R 777 /var/www/html/myblog/bootstrap/cache
シンボリックリンクを貼る
httpサーバのドキュメントルートは/var/www/htmlにしたいので、シンボリックリンクを貼ることで対応します。
[シンボリックリンクを貼る] $ sudo ln -fs /vagrant/myblog /var/www/html
これで/var/www/htmlを見に行けばその中にmyblogというフォルダが見えるはず。
これはドットインストール開発環境のレッスンで教わりました。
httpd.confを設定する
httpdサーバの設定ファイルをvimで直します。
[httpd.confを開く] $ sudo vi /etc/httpd/conf/httpd.conf /* ---ここからvim--- */ [行番号を表示する] :set nu [164行目あたりDirectoryIndexにindex.phpを追記する] <IfModule dir_module> DirectoryIndex index.html index.php </IfModule> [Directory指定の最後158行目あたりから下記3行を追記する] <Directory "/var/www/html/myblog"> AllowOverride All </Directory> [119行目ドキュメントルートを変更する] #DocumentRoot "/var/www/html" DocumentRoot "/var/www/html/myblog/public" [66,67行目のユーザとグループをvagrantに変更する] User vagrant Group vagrant [保存して終了] :wq
Laravelのドキュメントルートはpublicディレクトリの中を指定する決まりになっている。
Laravelはphpなのでindex.phpも見てくれるようにDirectoryIndexに追記する。
AllowOverrideの指定がなければ.htaccessが効かなくなり、ルートパス以外は開けないので指定しておく。
ユーザとグループを変えた理由は、storage/framework/sessions以下にセッション情報のファイルができるのだが、それはセッション情報というだけあって個々のユーザがアクセスするたびに作られるみたい。
そしてその所有権はvagrantでパーミッションは644でできる。
そしてアクセスするたびにそれをwriteでアクセスするみたいなのですが、apacheユーザがvagrantの644のファイルを修正できるわけもなくPermission deniedで落ちてしまう。
だからvagrantユーザでapacheを動かすようにした。(間違っているかもしれんけど)
なお、上記で行ったchmodでstorage以下をすべて777にしたのも、その懸念も考えてやったことだけど、セッション情報は新規で作られるので歯が立たない。
サーバを再起動してもWebサーバが起動するように設定しておく。
CentOS6ではchkconfigで行うがCentOS7ではsystemctlを使うらしい。
$ sudo systemctl enable httpd.service
Webサーバを起動する
$ sudo systemctl start httpd
ブラウザからアクセスする
あとはブラウザから「http://192.168.33.10」へアクセスしてページが表示されるか確認する。
たぶんいけるはず。
あとはドットインストールレッスンの「#03 フォルダの構成を確認しよう」から進めばいいが、レッスン動画のようにmyblog内のソースコードにFTPでアクセスして触ったり、Laravelに付属されるサーバは使わないので、若干異なる点があるのでそれは明記しておきます。
myblogディレクトリのソースを修正する
ソースコードは仮想マシン側の/vagrant/myblogではなく、PC側のVagrant/dotins_laravel/myblog内を触る。
VSCodeを開いてAdd folder to workspaceでそちらを指定して触る。
- database/migrations内のファイルを消す(Lesson3)
- database.sqliteを作る (Lesson3)
- .envファイルを直す (Lesson4)
- config/app.phpを直す (Lesson4)
これらはVSCode内からできるはず。
その他つまづきポイント
Lesson5
Laravelのバージョンのせいか、マイグレーションファイルのup側の表記が若干異なるが、レッスン通りの指定で通った。
Lesson6
Laravelのバージョン7か8からはモデルの場所が変ったみたい。
従来 App\Post.php
現行 App\Models\Post.php
なのでtincker以外にもモデルを指定する場合はディレクトリ構造に注意する必要あり。
Lesson9
Laravel7か8かで仕様変更があったらしく、routes/web.phpは動画のとおりに書いてもできなかった。
こんなエラーがでた。
Illuminate\Contracts\Container\BindingResolutionException Target class [PostsController] does not exist.
とりあえず
Route::get('/','App\Http\Controllers\PostsController@index');
にするとできた。
フルパスで指定するやり方ですね。
他に公式のやり方があるようだけどとりあえずこれで。
Lesson13
publicディレクトリの中にcssディレクトリが無かった。
Laravel8になってjsやcssディレクトリの配置が変わったのかなと思ったけど、公式ドキュメントを見た感じはそうではなさそう。
とりえあえずpublicの中にcssディレクトリを作ればいいみたい。
以上です。無事最後までレッスンを終えることができました。
コメント