Laravel Sail 環境でExcelファイルを扱う

1.Docker コンテナ内で Composer コマンドを実行:

Laravel Sail は Docker コンテナ内で動作しています。そのため、コンテナ内で composer require コマンドを実行して、maatwebsite/excel パッケージをインストールする必要があります。以下のコマンドを使用してください:

./vendor/bin/sail composer require maatwebsite/excel

2.サービスプロバイダとエイリアスの確認:

config/app.php に Maatwebsite\Excel\ExcelServiceProvider::class と 'Excel' => Maatwebsite\Excel\Facades\Excel::class が正しく追加されていることを確認してください。

3.コンテナの再起動: 何か変更を加えた後、Docker コンテナを再起動する:

./vendor/bin/sail down
./vendor/bin/sail up -d

4.キャッシュのクリア:

コンテナ内で以下のコマンドを実行して、Laravel の設定キャッシュをクリアします:

./vendor/bin/sail artisan config:clear

デプロイ方法

ドメインの取得

ドメイン取得をクリック


ドメインの設定

ドメイン設定をクリック
ドメイン名を入力
→無料独自SSLを利用する(推奨)にチェック
SSL=サーバー、ブラウザ間の暗号化

 

サブドメイン設定

サブドメイン設定をクリック
サブドメイン名を入力
→シンプルなURLを選択

 

SSH
SSH=ローカル環境、サーバー間の暗号化

公開鍵認証方式
公開鍵:サーバー上
秘密鍵:ローカル上に保存。SSH接続するときに使う


SSH設定をクリック
SSH設定】タブ:ON →【戻る】ボタン

SSH接続時のポート番号:10022

→公開鍵認証用鍵ペアの生成 タブをクリック
パスフレーズを入力
秘密鍵ファイルをファイル名を id_rsa(拡張子なし)として、C:\Users\ユーザー名\.sshに保存

⑤-1 git
【プッシュ】
ローカル環境→リモートリポジトリ
※エックスサーバー上に、このリモートリポジトリを作る。GitHubにアップする時などは、GitHubがリモートリポジトリとなる。

【プル】
リモートリポジトリ→本番環境

→Git for Windowsインストール
https://gitforwindows.org/

・エディタの設定について、確認画面:Visual Studio Codoを選択
・行末の改行に関するオプション:Checkout as-is, commit as-is にチェック

⑥Sourcetreeのインストール
Bitbucket:スキップ
Mercurial :チェックを外す
SSH読み込み:いいえ

 

⑤-2 git(コミット
注)コミットの前に、npm run build

→Sourcetree:+Create ⇒ Create a repository
→【参照】ボタン⇒プロジェクトディレクトリを選択
→作業ツリー⇒全てインデックスに追加

注).gitignoreファイルをチェックし、もし /public/buildが入っていれば、削除

 

⑤-3 git(プッシュ)
Sourcetree:
→ ツール/オプション
SSHキー:\Users\ユーザー名\.ssh秘密鍵を保存した場所)
SSHクライアント:OpenSSH
パスフレーズを入力
→右上よりターミナルをクリック⇒Git Bashツールが起動
※起動しない⇒【ツール/オプション/Git】
そして、Git Bashをデフォルトのターミナルとして使用にチェック

→コマンド入力
ssh アカウント名@ホスト名 -p 10022
アカウント名:サーバーパネルのサーバーID
ホスト名:サーバー情報
→【yes】を入力
パスフレーズを入力→接続完了

 

⑥エックスサーバーの中にリモートレポジトリを作る
→Sourcetreeからターミナル立ち上げ
SSH接続
 ls
 pwd
 mkdir git
  cd git
  git init(リモートリポジトリ作成コマンド)
  git init --bare ○○.git
   --bare:作業ディレクトリを持たない、リモート用のリポジトリを作る
 ○○.git:リモートリポジトリの名前
※間違えた場合:rm-rfフォルダ名

リポジトリ/リポジトリ設定を選択
リモート名:origin
url/パス:ssh://アカウント名@ホスト名:10022/リポジトリのパス
アカウント名:サーバーID
ホスト名:サーバー情報
リポジトリのパス:/home/ドメイン名/git/リモートリポジトリ名/
→OKボタン
→Sourcetree左上のプッシュボタン
→masterにチェックを入れ、プッシュボタンをクリック

⑦プル
ホームディレクトリ(接続後の場所)/ドメイン名/ public_html /サブドメイン

ここにプロジェクトフォルダを配置
↓しかし。。
https://サブドメイン名.deploy.com /プロジェクトフォルダ名/public

ssh接続後
cd ドメイン
cd public_html
cd サブドメイン
git clone /home/サーバーID/git/リモートプロジェクト名
※初回のみ、以後git pull

home以降のアドレスはSourcetreeのリポジトリ/リポジトリ設定で確認できる。

※もしエックスサーバーに接続していない状態でgit cloneを行うには、ssh~10022の部分も必要

.htaccessファイル
→プロジェクトが設置してある場所のひとつ上の階層に移動
(つまりサブドメインディレクトリの中)
→vi .htaccess
iキー:挿入モード
<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteRule ^(.*)$ プロジェクトディレクトリ名/public/$1 [QSA,L]
</IfModule>
→Escキー:編集モード終了
→:(コロン)を押し、続けて wキーとqキー
→ls -a コマンド

⑨データベースの設定
MySQL追加タブをクリック
→データベースの名前を登録
→追加するボタンをクリック
MySQLユーザー追加タブをクリック
MySQLユーザーIDとパスワードを設定
MySQL一覧タブをクリック
追加ボタンを押す(アクセス権所有ユーザの中に、今追加したユーザが入る)
→データベース/phpmyadminをクリック
設定した ユーザーとパスワードを入力

→.envファイル
※開発環境用と本番環境用で、別々のファイルを用意

Sourcetreeからターミナルを開く
サーバーに接続
プロジェクトディレクトリに移動
ls -a コマンドを実行
vi .envコマンドを実行
iキー
ローカル環境上のプロジェクトの.envファイルをコピー
DB_DATABASE⇒/MYSQL設定/データベースから確認DB_USER_NAME⇒/MYSQL設定/データベースから確認(アクセス権所有ユーザ)
DB_PASSWORD⇒ユーザを登録したときに使ったパスワード

APP_ENV=local⇒ APP_ENV=production 
APP_DEBUG=TRUE⇒APP_DEBUG=FALSE
LOG_LEVEL=debug⇒LOG_LEVEL=info 
他には、メール送信の設定・APIの設定などを変更

:wq
ls -a

 

⑩ライブラリインストール
PHPのバージョンを変える
PHP Ver.切替】をクリック

 

⑪Composer Installの実行

sshで接続
composer install
↓エラーがでた場合
which composer コマンドを実行
~/bin/composer という文字が返ってくる
php8.0 ~/bin/composer install

Compsoerエラー対策
"Your requirements could not be resolved to an installable set of packages."エラー

cd

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('sha384', 'composer-setup.php') === '906a84df04cea2aa72f40b5f787e49f22d4c2f19492ac310e8cba5b96ac8b64115ac402c8cd292b8a03482574915d1a8') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

mkdir -p $HOME/bin

mv composer.phar $HOME/bin/composer

echo $PATH

vi ~/.bashrc


下記コードを追加
export PATH=$HOME/bin:$PATH

escキーを押し、:wq

source ~/.bashrc

 echo $PATHを実行
binディレクトリが一番前に表示されるか確認

php8.0 $HOME/bin/composer install

 

⑫マイクレーション
プロジェクトがある場所まで移動

php artisan migrate
php8.0 artisan migrate

composer update
php8.0 artisan migrate

https://lara.deptest.com

 

常時SSL化設定
プロジェクトがある場所のひとつ上に移動
 ls -a
.htaccessを確認
vi .htaccess
iキー
RewriteEngine On
RewriteCond %{HTTPS} !on
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
RewriteRule ^(.*)$ forum/public/$1 [QSA,L]

 

シンボリックリンク
本番用のプロジェクトがあるディレクトリに移動
php artisan storage:link
php8.0 artisan storage:link

public/storage/avatar の中の画像が表示されない
パーミッション(権限)がない
public/storageに移動
ls -la
chmod go+xr avatar
ls -la

 

⑮デプロイ後の反映

 

Vi操作

ノーマルモード

h 左移動。カーソルキー←と同じ
j 下移動。カーソルキー↓と同じ
k 上移動。カーソルキー↑と同じ
l(小文字のL) 右移動。カーソルキー→と同じ
Ctrl+f 1画面下へスクロール
Ctrl+b 1画面上へスクロール
Ctrl+d 半画面下(down)に移動
Ctrl+u 半画面上(up)に移動
ZZ あるいは :wq ファイルを保存してvimを閉じる(:wq!で強制的に保存して閉じます)
:q vimを閉じる。(:q! で強制的に閉じます)
:w ファイル保存
:w ファイル名 ファイル名を指定して保存。もともとのファイルには保存されないまま(ダーティフラグたったまま)

 

ZZ あるいは :wq ファイルを保存してvimを閉じる(:wq!で強制的に保存して閉じます)
:q vimを閉じる。(:q! で強制的に閉じます)
:w ファイル保存
:w ファイル名

ファイル名を指定して保存。もともとのファイルには保存されないまま(ダーティフラグたったまま)

挿入モード

J カーソル行と次の行を連結
D カーソル位置から行末まで削除
x カーソル位置の1文字を削除
yy カーソル行をコピー
dd カーソル行を切り取り
p yyかddで保存した文字列をカーソル行の次の行に貼り付け
   
u アンドゥ(操作取り消し)
Ctrl+r リドゥ(取り消した操作のやり直し)
. 直前の変更を繰り返す
J カーソル行と次の行を連結
D カーソル位置から行末まで削除
x カーソル位置の1文字を削除
yy カーソル行をコピー
dd カーソル行を切り取り
p yyかddで保存した文字列をカーソル行の次の行に貼り付け
   
u アンドゥ(操作取り消し)
Ctrl+r リドゥ(取り消した操作のやり直し)
. 直前の変更を繰り返す

which composer

composer install

php8.0 /usr/bin/composer install

mv 変更前ファイル名 変更後ファイル名

source

git pull

composer update

register.blade.phpをadminユーザーのみアクセルできるようにする

①AuthServiceProviderでGateの設定
        Gate::define('admin', function($user) {
            foreach($user->roles as $role){
                if($role->name=='admin') {
                    return true;
                }   
            }
            return false;
        });
②ルート設定(web.php)でミドルウェエア適用
Route::middleware(['auth', 'can:admin'])->group(function () {
    Route::get('/register', [RegisteredUserController::class, 'create'])->name('register');
});

③RegisteredUserControllerでコンストラクタに次のように制限をかける
    public function __construct()
    {
        $this->middleware('can:admin');
    }