今回は、実機にインストールした Linux Mint 22.1 で Laravel の開発環境の構築からデプロイまでの一連の流れを説明します。
用意した実機は MacBook Air 2012 Core i5/1.7GHz です。かなり古い機種です。
Linux Mint はサーバーではなく GUI を持つデスクトップ OS です。しかしサーバーとして使ってみたら、軽くて静かで発熱も少なくて良かったです。ssh 接続でも軽く動作します。
Linux Mint にはX86版しかありません。。ダウンロードサイトは「Linux Mint」で検索すると見つかります。Xfce Edition が少機能ですが一番軽く、Cinnamon Edition が高機能ですが一番重いです。MATE Edition は、前者2つの中間ぐらいです。今回は Xfce と MATE をインストールしてみました。
今回も Mac で作ります。USB メモリを Mac に装着してください。そしてターミナルで次のようにコマンドしていきます。 ダウロードした iso ファイルはホームディレクトリに移動しておくとやりやすいです。
接続されているディスクの一覧を表示します。
diskutil list
容量や名前、external(外部)、physical(物理的)などから /dev/disk4 が USB メモリだとわかります。
LINUX という名前は、私が USB メモリに付けた名前です。
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *251.0 GB disk0
1: Apple_APFS_ISC Container disk1 524.3 MB disk0s1
2: Apple_APFS Container disk3 245.1 GB disk0s2
3: Apple_APFS_Recovery Container disk2 5.4 GB disk0s3
/dev/disk3 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +245.1 GB disk3
Physical Store disk0s2
1: APFS Volume Macintosh HD 11.3 GB disk3s1
2: APFS Snapshot com.apple.os.update-... 11.3 GB disk3s1s1
3: APFS Volume Preboot 7.1 GB disk3s2
4: APFS Volume Recovery 1.0 GB disk3s3
5: APFS Volume Data 180.8 GB disk3s5
6: APFS Volume VM 2.1 GB disk3s6
/dev/disk4 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *62.5 GB disk4
1: EFI NO NAME 209.7 MB disk4s1
2: Apple_HFS LINUX 62.2 GB disk4s2
/dev/disk4 を M-DOS フォーマットで初期化します。
diskutil eraseDisk MS-DOS MATE /dev/disk4
/dev/disk4 をアンマウントします。ここでアンマウントするのは不思議な気がしますが、これで合っています。
diskutil unmountDisk /dev/disk4
iso イメージを /dev/disk4 に書き込みます。
Xfce の場合
sudo dd if=./linuxmint-22.1-xfce-64bit.iso of=/dev/disk4 bs=16m
MATE の場合
sudo dd if=./linuxmint-22.1-mate-64bit.iso of=/dev/disk4 bs=16m
書き込みが終わったら USB メモリを取り出します。
diskutil eject /dev/disk4
作成した USB メモリを実機に装着して、実機を起動もしくは再起動します。Mac の場合は、option キーを押しながら起動もしくは再起動すると、どのディスクから起動するかを選ぶ画面とネットワーク設定画面が表示されます。ネットワークを設定して、インストールするディスクを選んでエンターキーを押しますディクスは EFI BOOT という名前の付いた黄色の USB アイコンが付いたもの選びます。銀色のハードディスクアイコンは内蔵ディスクです。黄色の USB アイコンが複数ある場合は、一番右端のものがインストーラである可能性が高いです。
インストーラーが起動します。インストールの手順は次のとおりです。
インストールが終わり、Mint が起動しましたた、ターミナルを開き ip a と入力してエンターキーを押してください。結果がいっぱい表示されると思いますが、その中に、inet という項目が2つあります。そのうち「127.0.0.1」と違うほうをメモしておいてください。127.0.0.1 はローカルアドレスで、違うほうがインターネット上に公開されるパブリックアドレスです。パブリックアドレスは「xxx.xxx.xxx.xxx/xx」という形になっていると思いますが、最後の / とそれ以降の2桁の数字はいりません。Xfce はそのまま起動しておいてください。
sudo apt update
sudo apt install openssh-server
sudo systemctl start ssh
sudo systemctl enable ssh
Ubuntu では、sudo systemctl start sshd ですが、Mint では 最後が sshd ではなく ssh になります。
Mac あるいはお使いのコンピュータのターミナルを開いて、 「ssh Ubuntuのユーザー名@さきほどメモしたパブリックアドレス 例: ssh name@100.100.100.100」と入力してエンターキーを押してください。(yes/no/[fingerprint]) と聞かれたら yes と答えてください。パスワードを聞かれたら、Xfce に登録したユーザーのパスワードを入力してください。これで Xfce に SSH 経由でつながりました。今後はこちらのターミナルで作業を進めていきます。Xfce はそのまま起動しておいてください。
SSH 接続ができない場合は Mac などのクライアント側のターミナルで次を試してみてください。
ssh-keygen -R パブリックアドレス(例: 100.100.100.100)
ノートPC の場合はフタを閉じたらスリープするのがデフォルトです。フタを閉めてもスリープしない設定にします。
/etc/systemd/logind.conf を書き込み権限で開きます。
/etc/systemd/logind.conf の 35行目あたりを次のように書き換えます。
HandleLidSwitch=ignore
ファイルを保存して、ファイルからで、ターミナルで次のようにコマンドします。
sudo systemctl restart systemd-logind.service
ホームディレクトリに次の隠しファイルを作ります。すでに存在している場合はそれを使います。
~/.Xmodmap
.Xmodmap ファイルに次のように書き込みます。
clear lock
clear control
keycode 66 = Control_L
add control = Control_L Control_R
ファイルを保存してからファイルを出て、次をタイプして設定を有効にします。
xmodmap ~/.Xmodmap
Laravel アプリを使うには WEB 上に公開しなければなりません。しかし Ubuntu Server にはデフォルトで WEB サーバーがインストールされていません。そこで今回は Apache2 という WEB サーバーをインストールします。
ターミナルを使って SSH 経由で Ubuntu Server に Apache2 をインストールします。なお、SSH を経由せず、直接 Ubuntu Server の画面で作業しても大丈夫ですが、ターミナルのほうが簡単にコピペを使えたりと、いろいろと便利です。
引き続き、ターミナルを使って SSH 経由で Ubuntu Server に Laravel 環境を構築していきます。なお、SSH を経由せず、直接 Ubuntu Server の画面で作業しても大丈夫ですが、ターミナルのほうが簡単にコピペを使えたりと、いろいろと便利です。
インストールコマンドは次のとおりです。なおここではデータベースに SQLite を使っています。
前節までで Laravel アプリを構築する環境が整いました。この節では、はじめての Laravel アプリを作ります。
さきほどのアプリではホームページ(最初のページ)の1画面だけでした。これにリンク先をつけるために、認証機能をつけてみます。Laravel には簡単に認証機能をつける仕組みが準備されています。
ここでは、最初のページ(ホームページ)という表現を使っています。
「トップページしか表示できない」という表現をよく見ますが、正確には最初のページは「ホームページ」といいます。よく「ホーム(Home)」というリンクがありますよね。トップページは、そのページの一番上のことを指します。Top というリンクもよく見ますよね。
この「ホームページしか表示できない」という問題は、Ubuntu 固有の問題です。ネット上には、いろいろな解決策が載っていましたが、私の場合どれも解決には至りませんでした。
でも次のようにすると解決します。
# 修正前
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
#修正後
<:Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
#AllowOverride のところを None から All に変更します。
アプリを日本語化する機能も、有志により便利な仕組みが用意されています。次のようにしてアプリを日本語化します。さきほどの npm がインストールされていることが前提です。
お使いのブラウザで「パブクリックアドレス/MyApp/public」を開いてください。 ホームページ(最初のページ)は英語のままですが、登録画面やログイン画面、その他メニューなど、すべて日本語になっています。
前節まででは Ubuntu Server の中で Laravel アプリを作ってきました。しかし、実際には、サーバー以外のコンピューターで Laravel アプリを作り、それを、サーバーに移動して実行できるようにします。このサーバーで実行できるようにすることをデプロイ (deploy、配置する、展開する) といいます。
この節では、GitHub にアップロードされている Laravel アプリを、Ubuntu Server にダウンロードして実行できるようにします。
GitHub のアカウントの作成方法や、GitHub に Laravel アプリをアップロードする方法などは、後日記載しようと思いますが、今回は GitHub に用意されている無料サンプルを使います。 使うのは GitHub で「free laravel」と検索して、最初に出てきたアプリです。
ただのデフォルトページでしたね(笑)
############################
Ubuntu Server Physical
############################
#Ubuntuのバージョン確認
lsb_release -a
#ipを確認する
ip a
#Apache2
sudo apt install apache2
sudo service apache2 start
sudo service apache2 stop
sudo service apache2 restart
sudo service apache2 status
#Laravelのインストール
sudo apt install composer php-curl php-sqlite3
#sudo apt install composer php8.3-curl php8.3-sqlite3 #PHPのバージョンは指定しないほうが良い
#sudo apt install composer php8.4-curl php8.4-sqlite3 #PHPのバージョンは指定しないほうが良い
sudo apt install sqlite3 #必須ではない
sudo apt install php-xml php-dom
sudo apt install libapache2-mod-php
#sudo apt install libapache2-mod-php8.3 #PHPのバージョンは指定しないほうが良い
#sudo apt install libapache2-mod-php8.4 #PHPのバージョンは指定しないほうが良い
#Laravelプロジェクトの作成
composer create-project laravel/laravel MyApp(任意のアプリ名)
sudo chmod -R 777 MyApp
#認証機能をつける
sudo apt install npm
cd MyApp
composer require laravel/breeze --dev
php artisan breeze:install blade
#日本語化する
sudo apt install npm
cd /var/www/html/MyApp
composer require askdkc/breezejp --dev
php artisan breezejp
#Laravelのデプロイ
git clone https://github.com/アカウント名/アプリ名
cd アプリ名 #アプリのディレクトリに移動
.envを作成する
php artisan key:generate
.envの内容を変更するならここでする
composer install
php artisan migrate
ccd ..(アプリのディレクトリから出る)
sudo chmod -R 777 アプリ名
#php artisan コマンド
php artisan -V(--version) #laravelバージョン表示
#sqlite3 コマンド
.tables
.exists
#Ubuntuでのホームページ以外のリンク切れを解消する
/etc/apache2/apache2.conf 170行目あたり
<Directory /var/www>
...
AllowOverride All(None から All に変える)
...
/etc/apache2 へ移動
sudo a2enmod rewrite
Apache2 を再起動する
sudo service apache2 restart
############################
実機
############################
#wifiに接続する
ip link show
wlp4s0のようにwではじまるようなネットワークインターフェース名をメモする
cd /etc/netplan/
/etc/netplan$ la
00-installer-config-wifi.yamlを編集する、なければ作る
network:
version: 2
wifis:
wlp4s0:
dhcp4: true
optional: true
access-points:
your_wifi_network_name:
password: "your_wifi_password"
(yamlファイルはインデントを重視しているので半角スペース2個で上記のようにインデントすること)
sudo netplan apply(適用)
ip a(確認、インターフェース名が表れればOK)
#スリープしないようにする
/etc/systemd/logind.conf
HandleLidSwitch=ignore
sudo systemctl restart systemd-logind.service