今回は、実機にインストールした Fedora Server 42 で Laravel の開発環境の構築からデプロイまでの一連の流れを説明します。
用意した実機は MacBook Air 2012 Core i5/1.7GHz です。かなり古い機種です。
インターネットで「Fedora Server」と検索すると、ダウンロードサイトが見つかります。X86版も ARM版も同じページからダウンロードできます。今回は X86 版の DVD iso をダウンロードしました。
今回は Mac を使ってインストールメディアを作成します。ダウンロードした iso をホームディレクトリに置き、USB メモリを装着してください。そしてターミナルを開き、次のようにしてインストールメディアを作成します。
diskutil list
接続されているディスクの一覧を表示しています。
/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
容量や名前、external(外部)、physical(物理的)などから /dev/disk4 が USB メモリだとわかります。
LINUX という名前は、私が USB メモリに付けた名前です。
diskutil eraseDisk MS-DOS FEDORA /dev/disk4
/dev/disk4 を M-DOS フォーマットで初期化しています。
diskutil unmountDisk /dev/disk4
/dev/disk4 をアンマウントしています。ここでアンマウントするのは不思議な気がしますが、これで合っています。
sudo dd if=./Fedora-Server-dvd-x86_64-42-1.1.iso of=/dev/disk4 bs=16m
iso イメージを /dev/disk4 に書き込んでいます。書き込み中は何も表示されません。
diskutil eject /dev/disk4
書き込みが終わったので USB メモリを取り出しています。書き込みが終わった時は、その旨が表示されます。
Fedora Server が起動したら、まず Wi-Fi の設定します。Fesora Server の画面で次のコマンドを打ち込んでください。
nmcli device wifi list
Wi-fi のリストが表示されます。
nmcli device wifi connect <SSID> password <パスワード>
<SSID>はあなたの Wi-fi 名です。
nmcli device status
設定を有効にします。
これでネットに接続されました。ip a と入力してパブリックアドレスを確認してくださ。結果がいっぱい表示されると思いますが、その中に、inet という項目が2つあります。そのうち「127.0.0.1」と違うほうの数字の列がインターネットに公開されるパブリックアドレスです。127.0.0.1 はローカルアドレスです。パブリックアドレスは「xxx.xxx.xxx.xxx/xx」という形になっていますが、最後の / とそれ以降の2桁の数字はいりません。パブリックアドレをメモしてくだい。Fedora Server はそのまま起動しておいてください。
Mac あるいはお使いのコンピュータのターミナルを開いて、 「ssh Fedoraのユーザー名@パブリックアドレス 例: ssh name@100.100.100.100」と入力してエンターキーを押してください。(yes/no/[fingerprint]) と聞かれたら yes と答えてください。パスワードを聞かれたら、Fedora Server に登録したユーザーのパスワードを入力してください。これで Fedora Server に SSH 経由でつながりました。今後はこちらのターミナルで作業を進めていきます。Fedora Server はそのまま起動しておいてください。
ノートパソコンなどに Fedora Server をインストールした場合、ノートパソコンのフタを閉じれば、そのノートパソコンはスリープしてしまいます。それではサーバーとして都合が悪いので、フタを閉じてもスリープしない設定にします。
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
システムがスリープしない設定にしています。
systemctl daemon-reload
設定を有効にしています。
Laravel アプリを使うには WEB 上に公開しなければなりません。しかし Fedora Server にはデフォルトで WEB サーバーがインストールされていません。そこで今回は httpd という WEB サーバーをインストールします。
引き続き、ターミナルを使って SSH 経由で Fedora Server に httpd をインストールします。なお、SSH を経由せず、直接 Fedora Server の画面で作業することもできますが、ターミナルのほうが簡単にコピペを使えたりと、いろいろと便利です。
引き続き、ターミナルを使って SSH 経由で Fedora Server に Laravel 環境を構築していきます。なお、SSH を経由せず、直接 Fedora Server の画面で作業することもできますが、ターミナルのほうが簡単にコピペを使えたりと、いろいろと便利です。
インストールコマンドは次のとおりです。なおここではデータベースに SQLite を使っています。
前節までで Laravel アプリを構築する環境が整いました。この節では、はじめての Laravel アプリを作ります。
前節のエラーは Fedora Server の中に含まれている SELinux が邪魔をしているからです。ここでは、 その SELinux を停止させます。
前節のパーミッションエラー以外に、PHP ページで、PHP のソースコードがそのまま表示されるという問題が発生する場合があります。その場合は次のようにして、修復します。
さきほどのアプリではホームページ(最初のページ)の1画面だけでした。これにリンク先をつけるために、認証機能をつけてみます。Laravel には簡単に認証機能をつける仕組みが準備されています。
アプリを日本語化する機能も、有志により便利な仕組みが用意されています。次のようにしてアプリを日本語化します。さきほどの npm がインストールされていることが前提です。
お使いのブラウザで「パブクリックアドレス/MyApp/public」を開いてください。 ホームページ(最初のページ)は英語のままですが、登録画面やログイン画面、その他メニューなど、すべて日本語になっています。
前節まででは Ubuntu Server の中で Laravel アプリを作ってきました。しかし、実際には、サーバー以外のコンピューターで Laravel アプリを作り、それを、サーバーに移動して実行できるようにします。このサーバーで実行できるようにすることをデプロイ (deploy、配置する、展開する) といいます。
この節では、GitHub にアップロードされている Laravel アプリを、Ubuntu Server にダウンロードして実行できるようにします。
GitHub のアカウントの作成方法や、GitHub に Laravel アプリをアップロードする方法などは、後日記載しようと思いますが、今回は GitHub に用意されている無料サンプルを使います。 使うのは GitHub で「free laravel」と検索して、最初に出てきたアプリです。
ただのデフォルトページでしたね(笑)
############################
Fedora Server Physical
############################
#Wi-Fi 接続
nmcli device wifi list
nmcli device wifi connect password <パスワード>
nmcli device status
#パブリックアドレスの確認
ip a
#スリープ機能の停止
systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
systemctl daemon-reload
#Fedora httpd コマンド
sudo dnf install httpd
sudo systemctl start httpd
sudo systemctl enable httpd
sudo systemctl restart httpd
#httpd.confの編集
/etc/httpd/conf/httpd.conf
149行目あたり、Indexes を削除
Options FollowSymLinks
156行目あたり、None を All に変更
AllowOverride All
169行目あたり、index cgi と index.php を追加
DirectoryIndex index.html index.cgi index.php
最終行に次の記述を追加
ServerTokens Prod
#Firewallの設定
sudo firewall-cmd --add-service=http --permanent
success と表示されればOK
sudo firewall-cmd --reload
success と表示されればOK
#PHPとLaravelのインストール
sudo dnf install php php-mbstring php-pear php-sqlite3
sudo dnf install composer
sudo systemctl restart httpd.service
#Laravelプロジェクトの作成
composer create-project laravel/laravel MyApp(任意のアプリ名)
sudo chmod -R 777 MyApp
#FedoraでLaraveサイトが表示できない問題を解決する
#SELinuxの確認
sestatus
#enabledだったら次のようにして停止する
/etc/selinux/config
SELINUX =enforcing を SELINUX=permissive に変更
Fedora Server を再起動する
#認証機能をつける
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
#phpのソースコードがそのまま表示される場合
次のファイルを書き込み可能で開きます。
/etc/httpd/conf.modules.d/00-mpm.conf
次の行のコメント(#)を外します。
LoadModule mpm_prefork_module modules / mod_mpm_prefork.so
次の行にコメント(#)を付けます。
#LoadModule mpm_event_module modules / mod_mpm_event.so
httpd サーバーを再起動します。
sudo systemctl restart httpd