ラズベリーパイに Laravel の開発環境をインストールする

こんにちは❗フリーランス・エンジニアの 九保すこひ です。

さてさて、現在いろんなことにチャレンジ中なのですが、ふと「そういえば言語だけじゃない部分でも体験だけはしておいたほうがいいな」なんてアイデアが浮かんできました。

すると突然、過去に購入した「あるもの」を思い出しました。

それが・・・・・・

Raspberry Pi(らずべりーぱい)

です。

なんと、すでに購入してから2年近くたっているのに封すらはがしていない「Raspberry Pi 3 Model B +」というセットになっているやつです。(この頃忙しかったんですよね😂)

そして、これもいい機会だと思い、ラズパイ(OSはそのままのRaspberry Pi OS)を使ってLaravelの開発環境を作ってみることにしました。

Raspberry Piは、教育用ということもあってすごく安いですので、「パソコンはないけど、Web開発にジョブチェンジを考えてる」という人は、一度今回の記事を見て環境構築し、本当に自分に向いてるかどうかをチェックしてもいいかもしれません。(ただし、環境構築の方が格段に難しいので、そこでプログラムが向いてないとは判断しないでほしいです👍)

ぜひ参考になれば嬉しいです😄✨

「Rasbery Piじゃなく、
Raspberry Pi です。
知らなかった…」

実行環境: Raspberry Pi 3 Model B +(すでに 4 が出てますが😂)

やりたいこと

今回は、Raspberry Pi 3を使って、PHP 8の実行環境にLaravel 8をインストールしてみます。

そして、さらにそのLaravelプロジェクトはブラウザから「laravel-dev.test」でアクセスできして、ログインまでできるようにしてみます。

前提として

インターネットへの接続や日本語入力など基本的なラズベリーパイの設定が完了していることが前提です。

もしまだの方はYouTubeやブログなど先人たちの情報をみればすぐに完了できると思いますので、そのあとでまた戻ってきてください。(ヒカルくんとかの動画に遭遇しても頑張って戻ってきてください❗)

また、インストールなどの作業は「ターミナル」と呼ばれる黒い画面で命令文を実行していきます。

実行は以下の部分をクリックしてください。

もしくは、ホーム(ラズベリーマーク) > アクセサリ > LXTerminal でもOKです。

nginx(ウェブサーバー)をインストールする

では、まずはターミナルを開きウェブサーバーのnginxをインストールしていきましょう。

nginxは、apacheよりも高速に実行できるということで人気がでており、最近読んだ以下の記事でもシェアが1位になっています。

📝 参考ページ: (2021年)7月Webサーバシェア、Apacheが減少

では、インストールです。
以下のコマンドを実行してください。

sudo apt install nginx

すると、

続行しますか? [Y/n]

と聞かれますので、そのままエンターキーを押してください。

※ なお、この後の作業でも基本的に同じように聞かれますがエンターキーで実行を確定してください。

インストールが完了したらちゃんと動いているか確認してみましょう。
まず以下のコマンドでnginxを起動します。

sudo systemctl start nginx

そして、ブラウザで「http://localhost/」にアクセスして以下の表示になっていればインストールはうまくいっています。

MySQL(MariaDB)をインストールする

今回は先にデータベースとしてMySQLMariaDB)をインストールします。

MariaDBとは、MySQLと互換性があるデータベースのことです。

※ ただし、以下の記事によると10.3以降は互換性が失われていくらしいので今後は注意が必要かもしれません。

📝 参考ページ: MySQL 8 と MariaDB 10.3 以降は注意

以下のコマンドでインストールしてください。

sudo apt install mariadb-server

これで、sudo mysqlを実行するとMariaDBの中に入れます。(ちなみに、出るときはexitです。Byeと言われて終了することができます😄)

では、次に権限です。

MariaDBの中に入ったまま以下のコマンドを実行して権限とパスワードを設定します。(今回はローカル環境なのでパスワードはシンプルに「password」にします)

grant all privileges on *.* to root@'localhost' identified by 'password';

0 rows affected と表示されてはじめ焦ります(私です😂)が、きちんと設定できています。

PHP 8 をインストールする

では、続いてPHP 8nginxで使えるようにするための作業です。

PHP-FPM をインストールする

nginxPHP 8を実行するにはPHP-FPMが必要になりますので、これをインストールします。

以下のコマンドを実行してください。

sudo apt install php-fpm

なお、私の環境(Raspberry Pi 3)では、インストールされるのはPHP 7.0ですが、これだとLaravel 5.5をインストールしないといけなくなり、さすがに古すぎるので以下を実行してPHP 8.0をインストールします。(感謝✨)

元ネタは以下のページです。
なお、PHP 8.0がインストールされていればここは飛ばしてもOKです。

📝 参考ページ: Install PHP 8.0 on Raspberry Pi

sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update

そして、以下を実行します。

sudo apt install php8.0-common php8.0-cli php8.0-fpm

これで、PHP 8.0がインストールされます。
以下のコマンドでチェックしてみてください。

php -v

※ ちなみに、nginxを使うと、サイトごとに違ったバージョンのPHPを使うように設定できます。

Laravelに必要なPHPモジュールをインストールする

実は、PHPだけをインストールしただけではLaravelを動かすためのモジュールが足りていません。

そのため、以下のコマンドで必要なものをインストールしてください。

sudo apt install php8.0-bcmath php8.0-mbstring php8.0-xml php8.0-mysql

nginx の設定ファイルを変更する

次に「laravel-dev.test」でLaravelにアクセスできるようにするための設定を追加します。

以下のコマンドを実行してください。

sudo leafpad /etc/nginx/sites-available/default

すると、leafpadというテキストエディタでnginxの設定ファイルが開きますので、以下を最後に追加して保存してください。

# laravel-dev.test
server {
    listen 80;
    server_name laravel-dev.test;
    root /var/www/html/laravel-dev/public;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

そして、変更した設定を有効にするには、nginxの再起動が必要になります。
以下のコマンドを実行してください。

sudo systemctl restart nginx

hostsを追加する

今のままでは、laravel-dev.testがローカル環境に向いていないのでアクセスしてもうまくいきません。

そこで/etc/hostsの中に、

laravel-dev.test は、 127.0.0.1(つまりローカル)にアクセスしてね!

という設定を追加します。(太字が追加した部分です)

127.0.0.1	localhost
127.0.0.1	laravel-dev.test
::1		localhost ip6-localhost ip6-loopback
ff02::1		ip6-allnodes
ff02::2		ip6-allrouters

127.0.1.1	raspberrypi

これで、ブラウザからアクセスすると今からインストールするLaravelが実行されることになります。

composer をインストールする

では、Laravelをインストールするために必要なPHPのパッケージマネージャcomposerでインストールしていきます。

aptでのインストールもできますが、旧バージョンの1がインストールされるので、直接インストールしていきます。

ちなみに、インストールコマンドはバージョンで少しずつ違うので以下の本家ページに書いてある4行のコマンドを実行してください。

📝 本家ページ: Download Composer

※ なお、権限の関係でダウンロードできない可能性がありますので、cd & エンターキーでホームディレクトリに移動しておいてください。

そして、4つのコマンドを実行したら以下のコマンドでパスが通っている(どこからでも実行できる)ディレクトリに移動させます。

sudo mv composer.phar /usr/bin/composer

実行後、composerとコマンドを実行してバージョン情報やコマンドの一覧が表示されていればOKです。

npm&nodejs(バージョン12) をインストールする

では、ビルドする際に必要になってくるnpmをインストールします。
npmNode.jsのパッケージマネージャです。

以下のコマンドを実行してください。

curl -sL https://deb.nodesource.com/setup_12.x | sudo bash -

実行が完了したら、以下のコマンドでインストールできます。

sudo apt install nodejs

※ なお、node -vもしくはnpm -vでバージョンを確認することができます。

adminer をインストールする

おそらくMySQLの管理はPhpMyAdminが有名だと思いますが、私の開発環境ではより高速に動くadminerを使っています。

なんと、adminerはたった1ファイルで作られているそうです!
この開発者さん、すごいですね。

ちなみにaptでもインストールできるみたいですが、すごく古いバージョンだったので直接インストールすることにします。

以下のコマンドを実行してください。

sudo mkdir /usr/share/adminer
sudo wget "http://www.adminer.org/latest.php" -O /usr/share/adminer/latest.php
sudo ln -s /usr/share/adminer/latest.php /usr/share/adminer/adminer.php

これで、次回からは2個めのコマンドを実行してファイルを上書きするだけでadminerが最新版にアップデートされます。

では、nginxの設定にadminerも追加しておきましょう。

以下のコマンドを実行してください。

sudo leafpad /etc/nginx/sites-available/default

そして、中身を次のように変更します。

# Adminer
server {
    listen 80;
    server_name adminer.test;
    root /usr/share/adminer;

    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-Content-Type-Options "nosniff";

    index index.php;

    charset utf-8;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location = /favicon.ico { access_log off; log_not_found off; }
    location = /robots.txt  { access_log off; log_not_found off; }

    error_page 404 /index.php;

    location ~ \.php$ {
        fastcgi_pass unix:/var/run/php/php8.0-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        include fastcgi_params;
    }

    location ~ /\.(?!well-known).* {
        deny all;
    }
}

そして保存が完了したら、以下のコマンドでnginxを再起動します。

sudo systemctl start nginx

次に、/etc/hostsです。

sudo leafpad /etc/hosts

以下を追加してください。

127.0.0.1	adminer.test

これでブラウザから「http://adminer.test/adminer.php」にアクセスすると以下のようにログインフォームが表示されます。

ユーザーに「root」、パスワードに「password」を入力すると以下のようにログインができます。

では、今回使うことになる「laravel-dev」というデータベースを登録しておきましょう。まずは「データベースを作成」リンクをクリックします。

すると、データベースの作成ページに移動するので、「laravel-dev」と入力し、「utf8bm4_unicode_cli」を選択。

後は、保存ボタンをクリックするだけでOKです。
完了すると以下のようになります。

Laravelをインストールする

では、長い長い作業のあとにやっとメインがやってきました。
高級なレストランなら、肉が来る前にお腹パンパンといったところでしょうか(笑)

まずターミナルでcd & エンターキーでホームディレクトリに戻ります。

そして、以下のコマンドでフォルダをつくりましょう。

mkdir php-dev

※ 権限の関係でsudoつけないでください。

そして、つくったフォルダの中へ移動します。

cd php-dev

次に、composerLaravelのインストールです。

composer create-project laravel/laravel laravel-dev

インストールが完了したら、フォルダ内に入ってパーミッション(権限)を変更しておきましょう。

cd laravel-dev
sudo chmod 777 storage -R
sudo chmod 777 bootstrap/cache -R

では、次にインストールしたLaravelフォルダが「あたかも nginx で設定した場所にあるかのように」します。(いわゆる、シンボリックリンクです)

cd /var/www
sudo rm html -R
sudo ln -s /home/pi/php-dev html

これで、/var/www/html内には、先程インストールしたlaravel-devフォルダが存在するようになります。

では、一度ブラウザで「http://laravel-dev.test」にアクセスしてみましょう。

うまくいっているようです👍

データベースの最大長問題対策をする

おそらくバージョンの関係でDBがうまく実行できないので、Laravel側で対策をしておきます。

以下のコマンドを実行してください。

leafpad /home/pi/php-dev/laravel-dev//app/Providers/AppServiceProvider.php

するとテキストエディタが開くので、中身を以下のように変更してください。

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema; // 👈 ここを追加しました

class AppServiceProvider extends ServiceProvider
{
    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        //
    }

    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        Schema::defaultStringLength(191); // 👈 ここを追加しました
    }
}

ログインできるようにする

そして、せっかくなのでログインもできるようにやってみます。

まずは、.envにDB情報を書き込み、保存しましょう。

leafpad /home/pi/php-dev/laravel-dev/.env

テキストエディタが開くので中身を以下のようにします。

# 省略

DB_DATABASE=laravel-dev
DB_USERNAME=root
DB_PASSWORD=password

#省略

※ おそらくDB_USERNAMEは初期状態でrootになってると思います。

そして、残りの作業は以下のページを参考にしてみてください。(ただし、コマンドは、/home/pi/php-dev/laravel-devの中にcdコマンドで移動してから実行する必要があります)

📝 参考ページ: Laravel Breezeで「シンプルな」ログイン機能をインストール

テストしてみる

では、最後に「http://laravel-dev.test/login」にアクセスして実際にログインしてみましょう。

すると・・・・・・

はい❗
うまくログインできました。

成功です😄✨

ジョブチェンジをお考えの方へ: ラズパイで開発環境を提供します

今回Laravelの開発環境をつくってみましたが、正直15年近く開発をしている私からしても「やること多いし、専門知識たくさんいるな…」と改めて感じました。

正直なところ、Laravel での開発より環境構築の方がはるかに難しいので、

Laravel を勉強するために、環境構築の勉強をしないといけない…

という本末転倒な状況で、これは「三角形の面積を求めるために、微分積分が必要」みたいなカンジです…💦

そこで、そんな方たちのために「私が Raspberry Pi を代理購入し、Laravel の開発環境を整えた上でお届けする」というサービスはどうかと考えていました。

というのも、(個人的な意見ですが)どんなことでも人には「向き不向き」があると考えているので、転職・退職をする前にまずプログラミングを体験してほしいという気持ちがあるからです。(いろんな意見があると思いますが、勉強するために退職というのはリスクが大きいかな、と考えています)

ラズパイでしたら、HDMIがついているテレビにも接続できますし、あまっている有線マウス&キーボードがあればすぐにLaravelの勉強をはじめることができます。(なんなら私の開発したサンプルLaravelが起動できる状態で出荷してもいいかもしれません)

もしご興味があるようでしたらお見積させていただきますので、ぜひお問い合わせからご連絡ください。

お待ちしてます。m(_ _)m

おわりに

ということで今回は、Raspberry PiLaravelの開発環境をインストールしてみました。

まずはじめてRaspberry Piを体験して感じたのは、「こんな小さいにここまでサクサク動くとは!」でした。

もちろん動作が遅くなるときもありますが、なんなら、一昔前に10万円以上出して買ったモバイルノートよりも高性能なんじゃないでしょうか(笑)

なお、今回はRaspberry Pi OSをそのまま使いましたが、正直なところUbuntuでは実行できるコマンドがRaspberry Pi OSではできなかったりしたので、もし次やるとしたらUbuntuをインストールして使うと思います。

また、私のラズパイはメモリが1GBしかなかったため、当初は紹介する予定だったVSCodeの項目は削除しました。(もっさりどころか、フリーズしてしまいました…💦)

ただ、現在主流のバージョン4ではメモリが最大8GBも搭載しているので問題ないだろうと想像しています。

また、キーボード内部にRaspberry Pi 4が搭載された「Raspberry Pi 400」、いいですよね!

※ ついに2021.08.01に「Raspberry Pi 400 日本版」が発売されたので早速購入しちゃいました!
↓ ↓ ↓

後は、これ以外に必要なのはモニターだけです。

正直なところフリーランスな私は出先でもPCを使いたい場合がちょこちょこありますが、「さすがにノートPCは重いし、かさばるよな…」ということで、遠出すること自体が減ってしまいました。

ただ、これさえあればHDMIのディスプレイがあればいいだけですし、なんならスマホをディスプレイ代わりに使うこともできるので、出先専用PCとして考えてもいいかなというカンジです。

やはりいろいろと興味のあることを経験してみるのはいいことですね。
ぜひ皆さんも楽〜に挑戦してみてください。

ではでは〜❗

「この記事はほとんど
ラズパイで書きました!」

開発のご依頼お待ちしております 😊✨ お問い合わせ
また、こちらもお待ちしております。
  • 実案件の開発サポート: 詳細
  • ツイッターのフォロー: 詳細
どうぞよろしくお願いいたします!
このエントリーをはてなブックマークに追加       follow us in feedly