【7日目】Laravelの環境構築【作曲の補助ツールを作るまでの日記】

プログラミング

2023年7月16日

今日は、とりあえずLaravelなるものを弄ってみよう。

はじめに

弄ってみるにあたって、一応Laravelだけ参考書籍の提示を貰っていたのでkindle版を購入。なんか運が良くて1900円の時に買えた。

しかし、なんとこの本、550ページ弱もある。本の’はじめに’にも「Laravel初学者の方には少々敷居が高く感じられ」とあり、恐らく敷居が高い。

私の場合PHPの基礎も微妙なので、難易度次第ではPaizaの講座を使ったりもう少し易しい本に撤退するかもしれない。

やっていこう。

環境構築をはじめる

昨日まであんなに環境構築やってたのにまた環境構築かよ! みたいな気持ちは正直あるよね。

もし、AlmaLinux9やVirtualBoxにこだわらない人はLaravel SailやHomesteadを利用した環境構築の方が簡単で良いと思われる。
今回はこだわるので、普通にAlmaLinuxにLaravelを追加する。

昨日から引き続き、以下の状態から環境構築を行う

  • VirtualBox 7.0.8
  • AlmaLinux 9.2
  • Apache 2.4.53
  • PHP 8.0.27

入れたいのはLaravel9だけど、今はLaravel10が出てるらしいのでそっちでもいいのかなとは思う。

Laravel単体のインストールは書籍の方に説明がないので、手探りで進める。

Laravelのイメージ

私はプログラミングをPythonから学んだ民なので、何となくコード内にimportを書いてライブラリを読み込むイメージがあったんだけど、全然そんな感じじゃない。

超大雑把にイメージすると、新しくLaravelディレクトリを作ってその中にアプリ毎にLaravelをインストールするイメージ。だから、アプリ毎に独立していて干渉することがない。

じゃあ、Apacheにどうやって読み込ませるのかというと、アプリ毎にpublicというディレクトリが作られて、そこに出力されるのでそこをApacheに読み込ませるというイメージ。

下は何となくで作った構成イメージ

/Laravel
  /アプリ1
    /Laravelの構成要素1
    /Laravelの構成要素2
    /Laravelの構成要素3
    /…
    /public
  /アプリ2
    /Laravelの構成要素1
    /Laravelの構成要素2
    /Laravelの構成要素3
    /…
    /public

だから、Pythonみたいに.pyファイルだけで完結しない。

Composerを使う

LaravelをComposerを使ってインストールする。

ComposerはPHP関連のパッケージ管理ツールみたいなイメージ。
Laravelを使いたいときはLaravelだけじゃなくて、前提で必要とされるライブラリみたいなのがあるので、その依存関係とかを考慮して全部自動でインストールしてくれる。

その為にまずComposerをインストールする。

公式ページのコマンドインストール方法がいいっぽいのでこれでインストールする。

ここにコマンドを貼ってしまうと古いバージョンの物になってしまう可能性があるので、公式ページからどうぞ。

コマンドを打ち終えたらPathを通す。

といってもcomposer.pharを/usr/local/bin/composerに移すだけでいいっぽい。
‘sudo mv composer.phar /usr/local/bin/composer’

次にcomposerのアップデートをする。

‘composer self-update’

このコマンドが通るってことはPathを通せたっていう認識でいいよね?

Laravelのインストール

さっき説明した通り、LaravelはpublicディレクトリをApacheに読み込ませればいい。

だから、極論Apacheが読み込む/var/www/htmlにインストールしてしまえば問題ないけど、ちょっとごり押し感があるので、今回はApacheにpublicディレクトリを認知させる方針にする。

‘composer global require laravel/installer’でとりあえずLaravelのインストール。

LaravelのPathを通す

Pathが通ってなかったので、こちらもPathを通す。

私の場合、laravelは/home/toppakou/.config/composer/vendor/binにあるので、ここにPathを通す。

toppakouのとこは自分のユーザー名で。

‘echo ‘export PATH=”$PATH:/home/toppakou/.config/composer/vendor/bin”‘ >> ~/.bashrc’

‘source ~/.bashrc’
でパスを通す

一回パスが通ってるか確認で、’laravel -v’でバージョン確認してみる。

おk。

次に一般ユーザーのホームディレクトリにLaravelフォルダを作ってそこにlaravelをインストールする。

よし。

Laravelのバージョン確認

次に、インストールしたアプリのLaravelのバージョンを確認。

‘php artisan –version’

今回は9.52.10らしい。

バーチャルホストの設定

主にこの方の記事を参考。

まず、バーチャルホストとは?
→1つのWebサーバーでexample1.comとexample2.com等の複数のウェブサイトを動かすこと。

とりあえず、/etc/httpd/conf.d/test_app.confをvimで弄ってホスト側のC:\Windows\System32\drivers\etc\hostsを弄る。習うより慣れろ(便利な言葉)精神でやってみよう。

まず、ホスト側を弄る。普通にメモ帳とかでいじればいいとおもう。

左下の検索→cmd→右クリックで管理者権限で実行→’notepad C:\Windows\System32\drivers\etc\hosts’でメモ帳で開く→追記して保存。

今回の私の場合は

192.168.1.35 php.test
192.168.1.35 laravel.test

にした。左側はIPアドレス。右側はお好きな名前で。

次に、/etc/httpd/conf.d/test_app.confを弄る。

‘sudo vim /etc/httpd/conf.d/test_app.conf’

でvim起動して。

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName php.test
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /home/toppakou/Laravel/test_app/public
    ServerName laravel.test
    <Directory /home/toppakou/Laravel/test_app/public>
        Require ip 192.168
    </Directory>
</VirtualHost>

を書き込む。

<Directory>にあるRequire ip 192.168は、192.168から始まるipの人を許可するという意味。これでダメな人は自分のローカルipアドレス調べて入れるか’Require all granted’にすると行けると思う。※ここら辺は脆弱性につながる繊細な設定なので、これがセキュアである保証は全くない。ローカル環境なら問題ないと思われるが自己責任で。

詳しくはこのサイトが分かりやすいかなぁと思う。

とにかくこうすることで、今まで開いてた方をphp.testとして、Laravelの方をlaravel.testで開けるようになるはず。

‘apachectl configtest’で文法に問題がないかチェックするらしい。

Syntax OKでおk。

‘sudo systemctl restart httpd’でapache再起動。

動作確認

http://とServerNameをくっつけて閲覧する。
例えば、私の場合はhttp://laravel.testで、index.phpを開きたいので「http://laravel.test/index.php」

さあ、いけたかな?

無理だった。

エラーログを見れるようにしよう

Apacheのエラーログをみて、何が起きているかを見よう。

私の場合error_logは/var/log/httpdにあったので、catコマンドで閲覧してみる。

‘sudo cat /var/log/httpd/error_log’

エラーメッセージのどこまで見せれるのかわからんので、重要なとこだけ抜粋すると「because search permissions are missing on a component of the path」ということで、恐らくファイルへのパーミッション(権限)の設定が良くない。

php.testは行けたので、laravel.testの権限設定が良く無いっぽいね。

パーミッションの設定を弄る

主にこちらの方の記事を参考に。

まず、/home/toppakou/とLaravelの権限設定を見てみる。

‘ls -l /home/toppakou’,‘ls -l /home/toppakou/Laravel’

どちらもdrwxr-xr-xだった。

drwxr-xr-x等の読み方

drwxr-xr-xは先頭がdなので、ディレクトリという意味。
2文字目~4文字目が所有者の権限。現在は左から3単語目のtoppakouが所有者なので、toppakouの権限。
5文字目~7文字目がグループの権限。現在は左から4単語目のtoppakouがグループなので、toppakouグループの権限。
8文字目~10文字目がその他の権限。

それぞれ、読み取り,書き込み,実行の権限の順で決まる。-はその権限がないことを指す。
もし、ディレクトリで全てに全ての権限を与えてたら→drwxrwxrwxってことか。

apacheがどこのグループに入っているかを’groups apache’で確認する。

あんたapacheにしか入ってないのね。

今回、drwxr-xr-xなので、その他の人は読み取りと実行が出来る……問題なくないか?
いや、更にその先のtest_app/publicの権限が必要なのか。

そうだね、ここがダメなのかな?

選択肢としては、その他ユーザーの実行を許可するか、toppakouグループにapacheを入れてグループの実行を許可するか? って感じ?

今回は別にその他に許可を与えても良さそうだけどより、安全そうなtoppakouグループにapacheを入れる方法にしてみる。

グループにapacheを入れ、権限設定を変更する

‘sudo usermod -a -G toppakou apache’
でtoppakouグループにapacheを入れる。

usermodがアカウントの設定コマンドで、-aがappend、-Gがグループという意味。

次に、test_appの権限を変更する。
‘sudo chmod -R 770 /home/toppakou/Laravel’

うん、わけわからんよね。

  • chmodがパーミッションを変更するコマンド。
  • -Rがそれ以下のサブディレクトリにも適用という意味
  • 770というのが、左から所有者,グループ,その他の権限を数字だけで弄れるようになってる。

    4が読み取り、2が書き込み、1が実行権限でそれぞれを足したものを入れる。
    どの組み合わせで足しても一意の数字になるからってことだよね。AtCoderの問題に出てきそう。

    だから、今回は所有者=全部許可、グループ=全部許可、その他=全部拒否
    という感じ。
  • 最後に権限を弄りたいところを指定

という感じ。

変更完了

実行

「http://laravel.test/index.php」で実行!

ようやくできた……

今日はLaravelバリバリやろうと思ってたのに、環境構築だけでもう外が明るくなってきているのでちょっと今日はここまで。起きたらやる。

おやすみなさい。