laravel | さゆフィクション http://it.kensan.net/it aws wordpress などなどゆるーく書いてます Fri, 05 Jul 2024 11:21:42 +0000 ja hourly 1 https://wordpress.org/?v=6.5.2 https://it.kensan.net/wp-content/uploads/2023/03/cropped-icon-32x32.png laravel | さゆフィクション http://it.kensan.net/it 32 32 LaravelでSendGrid-smtp送信のメール送信をテスト・デバッグする最短の方法ーSendGridの設定方法 https://it.kensan.net/laravel-sendgrid-smtp-mail-send.html Fri, 05 Jul 2024 10:54:47 +0000 http://18.179.19.147/it/?p=2113 LaravelでSendGrid-smtp送信のメール送信をテスト・デバッグする最短の方法について記載します。

こうすれば、SendGridのメール設定ができて、簡単に設定後の動作確認ができるよ、ということを記載していきます。

SendGridのテスト・デバッグ時のメール送信確認の設定周りを中心に記載します。

メール送信のLaravelプログラムの書き方については記載していません。

Laravelのローカル開発環境構築

ローカル開発環境構築は以下の記事をご参照ください。本記事ではローカル開発環境構築が済んでいることを前提に記載します。

DockerでLaravel 11のローカル開発環境を構築する。ついでにphpmyadminも入れてみる。
DockerでLaravel 11のローカル開発環境を構築していきます。 DB確認用に、phpmyadminもインストールします。 コンテナは以下のような構成です。本番環境に応用できるように、あえてSailは使いません。 アプリコンテナ P...

SendGrid側の設定

本記事ではSendGrid側の設定ができていることを前提に記載します。

SendGrid側の設定がまだの場合は以下のステップで設定できます。

  1. 以下の記事を参考に申し込みをする
  2. 申し込みが終わったら、以下の記事を参考に、差出人情報を設定する

LaravelにSendGrid-smtp送信の設定をして動作確認

メールをSendGridで送信するように設定変更

.envファイルでメールをSendGridで送信するように設定します。

以下のコマンドでプロジェクト直下の「.env」ファイルを開きます

vi .env

以下のとおり、「.env」ファイルを編集します。

MAIL_MAILER=smtp 
MAIL_HOST=smtp.sendgrid.net
MAIL_PORT=587
MAIL_USERNAME=apikey
MAIL_PASSWORD=<SendGridで払い出されたAPIキーを設定>
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="<送信元メールアドレスを設定>"
MAIL_FROM_NAME="${APP_NAME}"

MAIL_PASSWORDには「SendGridで払い出されたAPIキー」を設定し、MAIL_FROM_ADDRESSには「送信元メールアドレス」を設定します。

メールを送って受信確認してみる

以下のコマンドでメールを送信可能です。

// コンテナの中に入る
docker compose exec app php artisan tinker
// メール送信
Mail::raw('test mail',function($message){$message->to('<実際に送信する送信先アドレス>')->subject('test');});

送付先のメールアドレスに実際にメールが届いていれば、SendGridの設定完了です。

まとめ

SendGridのメール設定ができて、簡単に設定後の動作確認ができたと思います。

]]>
Laravelのローカル開発環境でメール送信をテスト・デバッグする最短の方法(メール送信のための設定確認方法) https://it.kensan.net/laravel-mail-send-test.html Fri, 05 Jul 2024 10:17:45 +0000 http://18.179.19.147/it/?p=2106 Laravelのローカル開発環境でメール送信をテスト・デバッグする最短の方法について記載します。

以下の2つの方法を記載します。

  • ログで確認する方法
  • mailhog(コンテナ)で確認する方法

こうすれば、テスト時のメール設定ができて、簡単に設定後の動作確認ができるよ、ということを記載していきます。

テスト・デバッグ時のメール送信確認の設定周りを中心に記載します。

メール送信のLaravelプログラムの書き方については記載していません。

Laravelのローカル開発環境構築

ローカル開発環境構築は以下の記事をご参照ください。本記事ではローカル開発環境構築が済んでいることを前提に記載します。

DockerでLaravel 11のローカル開発環境を構築する。ついでにphpmyadminも入れてみる。
DockerでLaravel 11のローカル開発環境を構築していきます。 DB確認用に、phpmyadminもインストールします。 コンテナは以下のような構成です。本番環境に応用できるように、あえてSailは使いません。 アプリコンテナ P...

メール送信をログで確認する方法

メールの内容をログ出力するように設定変更

.envファイルでメールをログに吐き出すように設定します。

以下のコマンドでプロジェクト直下の「.env」ファイルを開きます

vi .env

以下のとおり、「.env」ファイル内のMAIL_MAILERにlogを設定します。

MAIL_MAILER=log

メールを送ってログを確認してみる

以下のコマンドでメールを送信可能です。

// コンテナの中に入る
docker compose exec app php artisan tinker
// メール送信
Mail::raw('test mail',function($message){$message->to('test@example.com')->subject('test');});

以下のようにcatコマンドなどを使ってログを確認します。

cat storage/logs/laravel.log 

以下のようにメールのログが確認できれば成功です。

From: Laravel <hello@example.com>
To: test@example.com
Subject: test
MIME-Version: 1.0
Date: Fri, 05 Jul 2024 09:41:54 +0000
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable

test mail  

メール送信をmailhog(コンテナ)で確認する方法

メールをmailhog(コンテナ)に送信する設定変更

.envファイルでメールをmailhogに吐き出すように設定します。

以下のコマンドでプロジェクト直下の「.env」ファイルを開きます

vi .env

以下のとおり、「.env」ファイル内のMAIL_HOSTmailhogを設定します。

ポートは1025を指定します。

MAIL_MAILER=smtp
MAIL_HOST=mailhog
MAIL_PORT=1025

次にdocker-compose.ymlを編集します。

vi docker-compose.yml

ファイルの中身は以下のように記載します。

services:
  mailhog:
    image: mailhog/mailhog
    ports:
      - target: 8025
        published: ${MAILHOG_PUBLISHED_PORT:-8025}
        protocol: tcp
        mode: host

dockerを立ち上げます

// コンテナを立ち上げている場合は一度落とす
docker compose down
// コンテナを立ち上げる
docker compose up

メールを送ってをmailhogで送信内容を確認してみる

以下のコマンドでメールを送信可能です。

// コンテナの中に入る
docker compose exec app php artisan tinker
// メール送信
Mail::raw('test mail',function($message){$message->to('test@example.com')->subject('test');});

http://127.0.0.1:8025/にアクセスして、以下のようにメール受信を確認できればOKです。

まとめ

以下の2通りでのメールの確認方法を記載しました。

  • ログで確認する方法
  • mailhog(コンテナ)で確認する方法

これでメール実装の設定準備はできたと思いますー

]]>
Laravel Adminのgridでの細かい検索とformでの1対多のデータ登録のやり方~todoリストを作成しつつ解説~ https://it.kensan.net/laravel-admin-grid-form.html Sat, 08 Jun 2024 03:22:02 +0000 http://35.78.204.110/it/?p=2052 Laravel Adminのgridとformの使い方について記載していきます。

Laravel Adminって何者?という方は以下の記事をご参照ください。

Laravel Adminで効率的に管理画面を作成する。Dockerを使用した環境構築と使い方について記載。
Laravel Adminは、ウェブアプリケーションの管理画面を効率的かつ簡単に作成できるツールです。 この記事では、Laravel Adminの利点と使い方について詳しく記載します。 Laravel Adminを利用すると、データベースの...

gridとformについて簡単に書くと、以下のようになります。gridとformを理解することでLaravel Adminの大部分を使いこなせると思います。

  • grid:一覧表示
  • form:新規登録・編集機能

本記事でやること

  • 登録・編集(formメソッド)
    • セレクトボックスの設置
      • 選択肢はDBから取得
    • 入力ボックスを使わないデフォルト値設定
    • 1対多のテーブルでのデータ登録
  • フィルター・一覧(gridメソッド)
    • デフォルトでの検索条件の指定
    • チェックボックスでor検索の実装
    • 一覧の文字色変更

 

では、todoリストを作成しつつ、説明していきます

Laravel Adminを動作させる環境構築

環境構築は以下の記事をご参照ください。Dockerで簡単に構築できます。

Laravel Adminで効率的に管理画面を作成する。Dockerを使用した環境構築と使い方について記載。
Laravel Adminは、ウェブアプリケーションの管理画面を効率的かつ簡単に作成できるツールです。 この記事では、Laravel Adminの利点と使い方について詳しく記載します。 Laravel Adminを利用すると、データベースの...

テーブルとModelとControllerの準備

テーブルの作成

テーブル構成は以下のようになります。

  • todo情報を格納するtodosテーブル
  • todo情報に対するコメントを格納するcommentsテーブル

では、以下のコマンドでマイグレートファイルを作成します。

php artisan make:migration create_todos_table --create=todos

php artisan make:migration create_comments_table --create=comments

マイグレーションファイルは以下のように修正します。

<todosテーブル>


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('todos', function (Blueprint $table) {
            $table->increments('id');
            $table->string('todo_name')->nullable(false)->index();    # todoの名前
            $table->string('target_user_id')->nullable(false);    # todoの担当者
            $table->string('regist_user_id')->nullable(true);    # todoの登録者
            $table->integer('status')->nullable(true)->default(0);    # 完了ステータス 0:未完了、1:完了
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('todos');
    }
};

<commentsテーブル>


<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->increments('id');
            $table->integer('todo_id');
            $table->text('comment');
            $table->string('regist_user_id')->nullable(true);
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('comments');
    }
};

Modelの準備

以下のコマンドでModelを作成します。

php artisan make:model Todo
php artisan make:model Comment

Modelは以下のように修正します。

<Todo.php>


<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Todo extends Model
{
    use HasFactory;
    public function comments()
    {
        return $this->hasMany(comment::class);
    }
}

<Comment.php>


<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Comment extends Model
{
    protected $fillable = [
        'todo_id',
        'comment',
        'regist_user_id',
    ];
    use HasFactory;
    
    public function todo()
    {
        return $this->belongsTo(Todo::class);
    }
}

動作確認

http://localhost:8000/admin/todos にアクセスして、以下のようにカラのリスト画面が表示されればOKです。

準備ができましたので、formメソッドを編集しつつ、説明していきます。

Laravel adminのformメソッドの使い方

まずformメソッドについて記載します。

formメソッドとは

以下のような機能を持っています。新規登録・編集用のメソッドですね。

  • 入力フィールド:テキスト、数値、パスワード、セレクトボックス、ラジオボタン、チェックボックスなど。
  • バリデーション:入力データの検証機能。
  • リレーション管理:関連するデータモデルの管理。
  • イベントフック:フォームの保存前後に処理を追加。

それではformメソッドを編集していきます。

formメソッドの編集内容

編集前(コマンドでコントローラ作成直後)は、以下の登録画面になっています。

直したいポイントは以下です。

  1. Target user id(todoの担当者) を選択形式にしたい
  2. Regist user id(todoの作成者)はセッション情報から自動的に登録したい
  3. Statusは「0:未完了」で自動的に登録したい
  4. コメントを登録できるようにしたい(1対多のデータ登録)

完成系の画面イメージは以下のような感じです。

では順番に修正していきます。

Target user id(todoの担当者) を選択形式にしたい

ファイル上部でLaravel-adminのAdminクラスの名前空間を宣言します。

use Encore\Admin\Facades\Admin;

次に以下のように「target_user_id」をテキストからセレクトボックスに変更し、セレクトボックスの選択肢に、Adminユーザを指定します。

// $form->text('target_user_id', __('Target user id'));  //コメントアウト
$form->select('target_user_id', __('Target user id'))->options(Admin::user()->pluck('username', 'id')); //追加

完了です。次にいきます。

Regist user id(todoの作成者)はセッション情報から自動的に登録したい

regist_user_idの入力ボックスをコメントアウトします。

//$form->text('regist_user_id', __('Regist user id'));

次に$form->savingを使ってregist_user_idにログイン中ユーザのIDを登録します。

        $form->saving(function (Form $form) {
            // regist_user_idは「Admin::user()->id」を設定する
            $form->model()->regist_user_id = Admin::user()->id;
        });

完了です。次にいきます。

Statusは「0:未完了」で自動的に登録したい

statusの入力ボックスをコメントアウトします。

//$form->number('status', __('Status'));

次に$form->savingを使ってstatusに「0」を登録します。

        $form->saving(function (Form $form) {
            // regist_user_idは「Admin::user()->id」を設定する
            $form->model()->regist_user_id = Admin::user()->id;
            // statusは「0」を設定する
            $form->model()->status = 0;   //ここを追加
        });

完了です。次はコメントです。

コメントを登録できるようにしたい(1対多のデータ登録)

以下のように記載することで、コメントを登録できるようになります。

        # コメント
        $form->hasMany('comments', 'コメント欄', function (Form\NestedForm $form) {
            $form->hidden('regist_user_id', __('regist_user_id'))->default(Admin::user()->id);
            $form->textarea('comment','コメント');
        });

hasManyメソッドを使い、複数のコメントをフォームに追加できるようにしています。

完成した画面

以下の通り、実現したかった画面が出来上がりましたー

 

編集画面でステータスを完了できるようにする

このままだと、ステータスを完了にできないので、編集画面でステータスを完了できるようにします。

以下のコードを書いてあげれば、ステータス更新可能になります。

        // ステータス更新(編集時のみ更新可能)
        if ($form->isEditing()) {
            $form->switch('status', '完了')->states([
                'on' => ['value' => 1, 'text' => '完了', 'color' => 'success'],
                'off' => ['value' => 0, 'text' => '未完了', 'color' => 'danger'],
            ]);
        }

$form->isEditing()で登録か更新かの判定をしています。

更新の場合、入力パーツswitchを表示するコードになっています。

編集画面の完成系は以下のようになります!

 

Laravel adminのgridメソッドの使い方

まずgridメソッドについて記載します。

gridメソッドとは

以下のような機能を持っています。一覧ページ表示用のメソッドですね。

  • データ表示:データベースのレコードをテーブル形式で表示。
  • フィルタリング:条件に基づいてデータを絞り込む。
  • ソート:特定のカラムでデータを昇順または降順に並べ替え。

一覧画面の直したいポイント

直したいポイントは以下です。

  1. 自分が登録したtodoまたは自分が担当のtodoで検索したい
  2. 一覧で自分が担当のtodoは赤文字表示したい

自分が登録したtodoまたは自分が担当のtodoで検索したい

以下のコードを書いてあげれば、検索可能になります。

作成者(regist_user_id)と担当者(target_user_id)のor検索になります。

        $grid->filter(function ($filter) {
            $filter->where(function ($query) {
                if(array_search('1', $this->input) !== false) {
                    $query->orWhere('regist_user_id', Admin::user()->id);
                }
                if(array_search('2', $this->input) !== false) {
                    $query->orWhere('target_user_id', Admin::user()->id);
                }
            }, '自分のtodoを表示', 'search_tantou')->checkbox([
                '1' => '作成したtodoを表示',
                '2' => '担当のtodoを表示',
            ]);
        });

デフォルトで(画面アクセス時に)「作成者(regist_user_id)と担当者(target_user_id)のor検索」で絞り込みをしたい場合は、メニュー編集で対応できます。http://localhost:8000/admin/auth/menu にアクセスし、メニューを編集します。編集時に、URIを以下の通り設定します。

todos?&search_tantou%5B%5D=1&search_tantou%5B%5D=2

画面で説明すると、以下の画面のURIに上記の値を入力して保存です。

一覧で自分が担当のtodoは赤文字表示したい

以下のコードで、自分が担当のtodoを赤字で表示できます。

        // 文字色設定
        $grid->rows(function ($row) {
            # 自分が担当のtodoは、赤字にする
            if ($row->target_user_id == Admin::user()->id ) {
                $row->style('color: red');
            }
        });

完成した画面

完成した一覧画面は以下の通りです。

URIを「todos?&search_tantou%5B%5D=1&search_tantou%5B%5D=2」に変更した場合、画面表示直後は、「自分のtodoの表示」のチェックボックスはONになっているはずです。

以下が実現できましたー

  • デフォルトでの検索条件の指定
  • チェックボックスでor検索の実装
  • 一覧の文字色変更

修正後のコントローラの全体ソース

修正後のコントローラの全体ソースは以下の通りです。


<?php

namespace App\Admin\Controllers;

use App\Models\Todo;
use Encore\Admin\Controllers\AdminController;
use Encore\Admin\Form;
use Encore\Admin\Grid;
use Encore\Admin\Show;
use Encore\Admin\Facades\Admin;

class TodoController extends AdminController
{
    /**
     * Title for current resource.
     *
     * @var string
     */
    protected $title = 'Todo';

    /**
     * Make a grid builder.
     *
     * @return Grid
     */
    protected function grid()
    {
        $grid = new Grid(new Todo());


        $grid->filter(function ($filter) {
            $filter->where(function ($query) {
                if(array_search('1', $this->input) !== false) {
                    $query->orWhere('regist_user_id', Admin::user()->id);
                }
                if(array_search('2', $this->input) !== false) {
                    $query->orWhere('target_user_id', Admin::user()->id);
                }
            }, '自分のtodoを表示', 'search_tantou')->checkbox([
                '1' => '作成したtodoを表示',
                '2' => '担当のtodoを表示',
            ]);
        });

        $grid->column('id', __('Id'));
        $grid->column('todo_name', __('Todo name'));
        $grid->column('target_user_id', __('Target user id'));
        $grid->column('regist_user_id', __('Regist user id'));
        $grid->column('status', __('Status'));
        $grid->column('created_at', __('Created at'));
        $grid->column('updated_at', __('Updated at'));

        // 表示色
        $grid->rows(function ($row) {
            # 自分が担当のtodoは、赤字にする
            if ($row->target_user_id == Admin::user()->id ) {
                $row->style('color: red');
            }
        });

        return $grid;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(Todo::findOrFail($id));

        $show->field('id', __('Id'));
        $show->field('todo_name', __('Todo name'));
        $show->field('target_user_id', __('Target user id'));
        $show->field('regist_user_id', __('Regist user id'));
        $show->field('status', __('Status'));
        $show->field('created_at', __('Created at'));
        $show->field('updated_at', __('Updated at'));

        return $show;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new Todo());

        $form->text('todo_name', __('Todo name'));
//        $form->text('target_user_id', __('Target user id'));
        $form->select('target_user_id', __('Target user id'))->options(Admin::user()->pluck('username', 'id'));
//        $form->text('regist_user_id', __('Regist user id'));
//        $form->number('status', __('Status'));

        # コメント
        $form->hasMany('comments', 'コメント欄', function (Form\NestedForm $form) {
            $form->hidden('regist_user_id', __('regist_user_id'))->default(Admin::user()->id);
            $form->textarea('comment','コメント');
        });

        // ステータス更新(編集時のみ更新可能)
        if ($form->isEditing()) {
            $form->switch('status', '完了')->states([
                'on' => ['value' => 1, 'text' => '完了', 'color' => 'success'],
                'off' => ['value' => 0, 'text' => '未完了', 'color' => 'danger'],
            ]);
        }

        $form->saving(function (Form $form) {
            // regist_user_idは「Admin::user()->id」を設定する
            $form->model()->regist_user_id = Admin::user()->id;
            // statusは「0」を設定する
            $form->model()->status = 0;
        });

        return $form;
    }
}

 

まとめ

Laravel adminで以下の修正をしてみました。結構短時間でできたと思います。Laravel admin素晴らし〜

  • 登録・編集(formメソッド)
    • セレクトボックスの設置
      • 選択肢はDBから取得
    • 入力ボックスを使わないデフォルト値設定
    • 1対多のテーブルでのデータ登録
  • フィルター・一覧(gridメソッド)
    • デフォルトでの検索条件の指定
    • チェックボックスでor検索の実装
    • 一覧の文字色変更
]]>
Laravelをコンテナで運用する際のログ出力は、JSON形式で標準出力した方が良い https://it.kensan.net/laravel11-log.html Sun, 02 Jun 2024 00:51:23 +0000 http://18.181.252.126/it/?p=2004 Laravelをコンテナで運用する際のログ出力は、JSON形式で標準出力した方が良いということを書いていきます。

Laravelに限らず、コンテナでは、JSON形式で標準出力が良いと思いますが、Laravelでは簡単にログをJSON形式で標準出力可能ですので、設定しておいた方が良いと思います!

なぜ、ログをJSON形式で標準出力するのか

なぜJSON形式か

JSON形式はデータを構造化し、分析や監視ツールで扱いやすい形式です。

また、新しい情報を追加するのも容易なため、ログ出力はJSON形式が良いと考えています。

JSON化しておけば、たとえば、AWSのCloudWatchでログ検索する際などで便利です。

なぜ標準出力か

多くのクラウドプロバイダーは、コンテナの標準出力からログを収集し、そのログを分析や可視化するためのツールやサービスを提供しているためです。

AWSで言うと、Fargateでのコンテナでログを標準出力すると、CloudWatchログの1つのロググループにまとまってくれて、簡単にログ検索できます。

これにより、運用やデバッグがスムーズに行えます。

以下の記事のようなメトリクスフィルターも簡単に作れたりします。

CloudWatchLogsのメトリクスフィルターの使い方ーログデータをメトリクス化して監視する
メトリクスフィルターを使いCloudWatchLogsのログデータを 「CloudWatchのメトリクスで見える化する」「メトリクスを監視してアラートをあげる」ということをやってみます。JSONログデータのメトリクス化も可能です。メトリクス化ができれば監視は通常のアラーム設定と同様となります

では、Laravel11を例にログをJSON形式で標準出力する方法を記載します。

Laravel11でログをJSON形式で標準出力する

config/logging.phpの修正

  • config/logging.phpの2箇所修正します
    •  「use Monolog\Formatter\JsonFormatter;」を追加
    • channelsの中に以下のようにstdoutを追加


use Monolog\Formatter\JsonFormatter;   // これを追加
:
:
:



    'channels' => [
        // 以下を追加
        'stdout' => [
            'driver' => 'monolog',
            'level' => env('LOG_LEVEL', 'debug'),
            'handler' => StreamHandler::class,
            'with' => [
                'stream' => 'php://stdout',
            ],
            'formatter' => JsonFormatter::class,
        ],

.envの修正

.envを修正します。

以下のように、LOG_CHANNEL=stackをコメントアウトして、LOG_CHANNEL=stdoutを追加します。


#LOG_CHANNEL=stack  // コメントアウト
LOG_CHANNEL=stdout  // 追加

 

動作確認

routes/web.phpでログ出力するようにして動作確認します。

  •  routes/web.phpの2箇所を修正します
    • 「use Illuminate\Support\Facades\Log;」を追加する
    • 「Log::debug(‘test’);」を追加する
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Log;   // 追加

Route::get('/', function () {
    Log::debug('json_log_test');   // 追加
    return view('welcome');
});

Laravelアプリにアクセスし、以下のようにターミナル上に出力されれば、JSON形式でログを標準出力できています。


{"message":"json_log_test","context":{},"level":100,"level_name":"DEBUG","channel":"local","datetime":"2024-06-02T00:27:24.540572+00:00","extra":{}}

まとめ

Laravelをコンテナで運用する際には、ログをJSON形式で標準出力することで、運用やデバッグを効率化できます。設定方法も簡単です!

]]>
Laravel Adminで効率的に管理画面を作成する。Dockerを使用した環境構築と使い方について記載。 https://it.kensan.net/laravel-admin.html Sun, 26 May 2024 03:12:23 +0000 http://35.78.232.10/it/?p=1959
Laravel Adminは、ウェブアプリケーションの管理画面を効率的かつ簡単に作成できるツールです。
この記事では、Laravel Adminの利点と使い方について詳しく記載します。
Laravel Adminを利用すると、データベースのCRUD(作成、読み取り、更新、削除)操作を簡単に実行でき、管理画面の作成がより柔軟で効率的になります。

多機能なデータテーブルやグラフなどの便利な機能もあり、Laravel Adminを使用することで、データの可視化や分析も簡単に行えます!!

Laravel Adminとは

Laravel Adminは、Laravelフレームワークで作成されたパッケージです。

このパッケージを使用すると、管理画面を簡単に作成することができます。

Laravel Adminは、Laravelの特徴であるシンプルさと柔軟性を活かして、効率的な管理画面を作成するためのツールとなっています。

データベースの管理画面を作成するための機能が豊富に揃っていて、さまざまなデータ型やリレーションシップをサポートし、関連するデータの管理も容易に行うことができます。さらに、Laravel Adminは、データの表示や操作に関する多くのオプションを提供しています。

Laravel Adminの利点

Laravel Adminを使用することには、以下のような利点があります。

1. 開発効率UP

Laravel Adminを使用すると、データベースのテーブル設計やCRUD操作のためのコードの記述が不要になります。これにより、開発者は時間と労力を節約することができます。

2. 柔軟性と拡張性

Laravel Adminは、カスタムフィールドやフィルタリングオプションの追加が容易です。

これにより、開発者は管理画面の作成において柔軟性と拡張性を持つことができます。

必要な機能や要件に応じて、Laravel Adminをカスタマイズすることができます。

3. 直感的なインターフェり効果的な管理画面を作成することができます。

Laravel Adminには、以下のような機能と機能があります。

CRUD操作

Laravel Adminは、CRUD操作(作成、読み取り、更新、削除)を自動化するためのツールです。データベースのテーブルと関連するフォームやリストを簡単に作成することができます。CRUD操作は、直感的なインターフェースを使用して行うことができます。

カスタムフィールドとフィルタリングオプション

Laravel Adminでは、カスタムフィールドやフィルタリングオプションの追加が容易です。開発者は、データベースのテーブルにさまざまなフィールドを追加することができます。また、データのフィルタリングや検索を行うためのオプションも提供されています。

パーミッションとロールの管理

Laravel Adminは、パーミッションとロールの管理をサポートしています。開発者は、ユーザーに対して特定の操作やデータへのアクセス権を設定することができます。これにより、セキュリティを強化し、適切なアクセス制御を実現することができます。

Dockerを使用したLaravel-adminのインストール方法

Docker上でLaravelを動くようにしてから、Laravel-adminをインストールしていきます。

まずはDocker周りから準備していきます。

用意するコンテナ

コンテナは以下のような構成です。DB確認用に、phpmyadminもインストールします。

  • アプリコンテナ
    • PHP:8.3をインストールして、Laravel 10をインストールする
  • Nginxコンテナ
    • 最新のNginxをインストール
  • DBコンテナ
    • MySQL:8.0.36をインストール
  • phpmyadminコンテナ
    • 最新のphpmyadminをインストール(現時点の最新バージョン5.2.1をインストール)

では実際にローカル開発環境を構築していきます。

各コマンドをコピペで環境構築できます!

Laravelのローカル開発環境構築

まずは、完成系のディレクトリ構成から記載します。

ディレクトリ構成

以下のような構成となります。


├── docker
│   ├── db  # MySQL(DB)コンテナの設定ファイル等を入れるディレクトリ
│   │   └── my.cnf
│   ├── nginx  # nginxコンテナの設定ファイル等を入れるディレクトリ
│   │   └── default.conf
│   └── php  # アプリ(PHP)コンテナの設定ファイル等を入れるディレクトリ
│       └── Dockerfile
└── docker-compose.yml

ディレクトリの作成

上記ディレクトリ構成を作成するためのディレクトリを作成します。

mkdir test_laravel
cd test_laravel/

準備はできましたので、ディレクトリ構成に記載のディレクトリとファイルを作成していきます。

docker-compose.ymlの作成

docker-compose.ymlを作成します。

vi docker-compose.yml

<ファイルの中身>


version: '3'
services:
  app:
    container_name: app_laravel  
    build: ./docker/php
    volumes:
      - .:/var/www
  nginx:
    image: nginx 
    container_name: nginx
    ports:
      - 8000:80 
    volumes:
      - .:/var/www
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    working_dir: /var/www
    depends_on:
      - app
  db:
    image: mysql:8.0.36
    container_name: db
    environment: 
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: database 
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    volumes:  
      - ./docker/db/data:/var/lib/mysql
      - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf 
      - ./docker/db/sql:/docker-entrypoint-initdb.d
    ports:
      - 3306:3306
  # phpMyAdmin
  phpmyadmin:
    container_name: test_phpmyadmin
    image: phpmyadmin
    environment:
    - PMA_USER=root
    - PMA_PASSWORD=password
    ports:
    - 8080:80

MySQLのmy.confを作成

MySQLのmy.confを作成します。

mkdir docker

mkdir docker/db

vi docker/db/my.conf

<ファイルの中身>


[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default_authentication_plugin=mysql_native_password

[client]
default-character-set=utf8mb4

nginxのdefault.confを作成

nginxのdefault.confを作成します。

mkdir docker/nginx

vi docker/nginx/default.conf

<ファイルの中身>


server {
  listen 80;
  root /var/www/laravel-project/public;
  index index.php;
  location / {
    root /var/www/laravel-project/public;
    index index.php;
    try_files $uri $uri/ /index.php?$query_string;
  }
  location ~ \.php$ {
    try_files $uri =404;
    fastcgi_split_path_info ^(.+\.php)(/.+)$;
    fastcgi_pass app:9000; 
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param PATH_INFO $fastcgi_path_info;
  }
}

アプリコンテナのDockerfile作成

アプリコンテナのDockerfile作成を作成します。

mkdir docker/php

vi docker/php/Dockerfile

<ファイルの中身>


FROM php:8.3-fpm

RUN apt-get update \
  && apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
  && docker-php-ext-install zip pdo_mysql

#Composer install
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer

ENV COMPOSER_ALLOW_SUPERUSER 1

ENV COMPOSER_HOME /composer

ENV PATH $PATH:/composer/vendor/bin


WORKDIR /var/www

RUN composer global require "laravel/installer"

必要なファイル作成が終わりましたので、コンテナ立ち上げてLaravel11をインストールしていきます。

コンテナ立ち上げ

以下のコマンドでコンテナを立ち上げます。

docker compose up -d

Laravel 10のインストール

アプリコンテナの中に入りLaravel10をインストールします。

# アプリコンテナに入るコマンド
docker compose exec app bash
# Laravel11インストールコマンド
composer create-project --prefer-dist laravel/laravel laravel-project "10.*"

DBの接続先をsqlliteからmysqlに変更します。

vi laravel-project/.env

<ファイルの中身(DB設定箇所を編集します)>

DB_CONNECTION=mysql
DB_HOST=db
DB_PORT=3306
DB_DATABASE=laravel
DB_USERNAME=root
DB_PASSWORD=password

以下のコマンドでマイグレーションを実行します。

cd laravel-project/
php artisan migrate

laravel-admin のインストール

以下のコマンドでLaravel-adminをインストールします。

composer require encore/laravel-admin

chmod -R 777 ./*

./artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"

./artisan admin:install

http://localhost:8000/admin/auth/loginにアクセスして、ログイン画面が表示されれば成功です。

一番最初は、ユーザー名:admin、パスワード:admin でログイン可能です。

Laravel Adminのカスタマイズ方法

Laravel Adminをカスタマイズする方法は以下の通りです。

  1. コントローラのカスタマイズ
  2. ビューのカスタマイズ
  3. ルーティングのカスタマイズ
  4. テーマのカスタマイズ

Laravel Adminは、カスタマイズによりさまざまな要件に対応することができます。開発者は、自分のプロジェクトに応じてLaravel Adminをカスタマイズすることができます。そのため、柔軟性と拡張性を持つ管理画面を作成することができます。

Laravel Adminの基本操作

Laravel Adminの基本的な操作方法は以下の通りです。

  1. テーブルの作成
  2. データの追加・編集・削除
  3. データの表示・検索・フィルタリング
  4. ページネーションの設定

Laravel Adminは、直感的なインターフェースを使用してこれらの操作を行うことができます。開発者は、簡単にデータの操作や表示を行うことができます。

Laravel Adminでのデータの管理と表示

Laravel Adminを使用すると、データの管理と表示が容易になります。データベースのテーブルと関連するデータを簡単に管理することができます。また、データの表示や操作に関する多くのオプションを提供しています。

Laravel Adminでは、データの追加、編集、削除などの操作を直感的なインターフェースで行うことができます。さらに、データの表示やフィルタリング、検索なども簡単に行うことができます。これにより、開発者はデータを効率的に管理することができます。

Laravel Adminでのパーミッションとロールの管理

Laravel Adminは、パーミッションとロールの管理をサポートしています。開発者は、ユーザーに対して特定の操作やデータへのアクセス権を設定することができます。これにより、セキュリティを強化し、適切なアクセス制御を実現することができます。

Laravel Adminでのデータのフィルタリングと検索

Laravel Adminでは、データのフィルタリングと検索が容易に行えます。開発者は、データベースのテーブルにフィルタリングオプションを追加することができます。これにより、特定の条件に一致するデータのみを表示することができます。

実際にCRUD画面を作成してみる

実際にCRUD(作成、読み込み、更新、削除)できる画面を作成してみます。

Postテーブルを作成して、Postテーブルに対するCRUDをできるようにします。

以下で作成した環境で試してみます!

Laravel Adminで効率的に管理画面を作成する。Dockerを使用した環境構築と使い方について記載。
Laravel Adminは、ウェブアプリケーションの管理画面を効率的かつ簡単に作成できるツールです。 この記事では、Laravel Adminの利点と使い方について詳しく記載します。 Laravel Adminを利用すると、データベースの...

 

マイグレーション

以下のコマンドでマイグレーションファイルを作成します。

php artisan make:migration create_staffs_table --create=posts

database/migrations配下にマイグレーションファイルが作成されたので、作成されたファイルを以下の通り編集します。


<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { /** * Run the migrations. */ public function up(): void { Schema::create('posts', function (Blueprint $table) { $table->id();
            $table->string('name');
            $table->text('post');
            $table->integer('user_id');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('posts');
    }
};

以下のコマンドでマイグレーションを実行して、テーブルを作成します。

php artisan migrate

以下のコマンドでモデルとコントローラを作成します。

php artisan make:model Post

php artisan admin:make PostController --model=App\\Models\\Post

ルーティング追加

app/Admin/routes.phpを以下の通り編集します。HomeControllerの記述の下に「$router->resource(‘posts’, PostController::class);」を追加です。

$router->get('/', 'HomeController@index')->name('home');
$router->resource('posts', PostController::class);   // これを追加!!

メニューの追加

http://localhost:8000/admin/auth/menuにアクセスして、以下の設定でメニューを追加します。

Title:投稿

RUI:posts

Role:Administrator

Permission:All Permission

画面的には以下のようになります。入力してSubmitです!

動作確認

http://localhost:8000/admin/postsにアクセスすると、以下のように、Postテーブルに対するCRUDができる画面が出来上がっています。

プログラムの中身についてみてみる

以下のコマンドでモデルとコントローラを作成しましたが、作成されたプログラムについてみていきます。

php artisan make:model Post 
php artisan admin:make PostController --model=App\\Models\\Post
モデル

作成されたプログラムは以下の通りです。


<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;

class Post extends Model
{
    use HasFactory;
}

特殊な記載はありません。モデルは通常のLaravelと同様の記載となります。

コントローラ

作成されたプログラムは以下の通りです。


<?php 
namespace App\Admin\Controllers; 

use App\Models\Post; 
use Encore\Admin\Controllers\AdminController; 
use Encore\Admin\Form; 
use Encore\Admin\Grid; 
use Encore\Admin\Show; 

class PostController extends AdminController { 
    /** * Title for current resource. 
     * 
     * @var string 
    */ 
    protected $title = 'Post'; 
    /** 
    * Make a grid builder. 
    * 
    * @return Grid 
    */ 
    protected function grid() { 
        $grid = new Grid(new Post()); 
        $grid->column('id', __('Id'));
        $grid->column('name', __('Name'));
        $grid->column('post', __('Post'));
        $grid->column('user_id', __('User id'));

        return $grid;
    }

    /**
     * Make a show builder.
     *
     * @param mixed $id
     * @return Show
     */
    protected function detail($id)
    {
        $show = new Show(Post::findOrFail($id));

        $show->field('id', __('Id'));
        $show->field('name', __('Name'));
        $show->field('post', __('Post'));
        $show->field('user_id', __('User id'));

        return $show;
    }

    /**
     * Make a form builder.
     *
     * @return Form
     */
    protected function form()
    {
        $form = new Form(new Post());

        $form->text('name', __('Name'));
        $form->textarea('post', __('Post'));
        $form->number('user_id', __('User id'));

        return $form;
    }
}

上記プログラムの各メソッドの役割を以下に記載します。

  1. grid()メソッド
    • 管理画面の一覧表示を設定するメソッドです。Encore\Admin\Gridクラスを使用して、データの表示やフィルタリング、ソートなどの機能を設定します。
  2. detail($id)メソッド
    • 単一のレコードの詳細表示を設定するメソッドです。Encore\Admin\Showクラスを使用して、レコードの各フィールドを表示します。
  3. form()メソッド
    • フォームの設定を行うメソッドです。Encore\Admin\Formクラスを使用して、レコードの作成・編集のためのフォームを設定します。
コントローラのgridメソッドをカスタマイズしてみる

<カスタマイズの概要>

  • 一覧にソートとコピー機能を追加
  • フィルタにpostの内容を部分一致検索する項目を追加

上記のカスタマイズをする場合のソースコードは以下のようになります。



    protected function grid()
    {
        $grid = new Grid(new Post());

        // ソート追加
        $grid->column('id', __('Id'))->sortable();
        // コピー機能追加
        $grid->column('name', __('Name'))->copyable();
        // ソートとコピー機能追加
        $grid->column('post', __('Post'))->copyable()->sortable();
        $grid->column('user_id', __('User id'));

        // フィルタ
        $grid->filter(function ($filter) {
            // postの内容を部分一致検索
            $filter->like('post',  __('Post'));
        });

        return $grid;
    }

以下、カスタマイズ後の画面です。

 

コントローラのformメソッドをカスタマイズしてみる

<カスタマイズの概要>

  1. user_id項目のコメントアウト:
    • ログイン中のユーザー情報から設定するためにコメントアウト
  2. 保存時のコールバック:
    • フォームが保存される前に実行されるコールバックを定義
    • フォームが新規作成の場合、user_id項目に、現在ログイン中のユーザーのIDが設定されます。
    • 投稿時に投稿者のユーザーIDを自動的に設定することで、投稿が誰によって作成されたかを追跡できるようにしています。

上記のカスタマイズをしたソースコードは以下のようになります。


    protected function form()
    {
        $form = new Form(new Post());

        $form->text('name', __('Name'));
        $form->textarea('post', __('Post'));
        
        // user_idはログイン情報から設定するため、コメントアウト
        //$form->number('user_id', __('User id'));

        $form->saving(function (Form $form) {
            // 登録時、user_idを設定
            if ($form->isCreating()) {
                $form->model()->user_id = Admin::user()->id;
            }
        });

        return $form;
    }

以下、カスタマイズ後の画面です。

まとめ

Laravel Adminという管理画面を作成するのに便利なツールを紹介させていただきました!!

]]>
Laravel11をEC2で動かす https://it.kensan.net/ec2-laravel11.html Tue, 14 May 2024 22:56:28 +0000 http://43.207.159.108/it/?p=1917 Laravel11をEC2で動かしてみます。

なるべくお金をかけずに、かつ、高速なLaravel環境を構築したいので、CPUはArm、WEBサーバはNginxを使っていきます

まずは具体的な構成を記載していきます!

構成

  • EC2を使用
    • インスタンスはt4g.mediumを使用
      • t4gは、Arm ベースの AWS Graviton2 のインスタンスです
      • T3 インスタンスよりも価格パフォーマンスが最大で 40% 高いようです
Amazon EC2 T4g インスタンス – Amazon Web Services
AWS Graviton2 プロセッサを搭載した T4g インスタンスは、Amazon EC2 のバースト可能な汎用ワークロードとしては最高のコストパフォーマンスを提供します。
  • OS
    • Amazon Linux 2023
  •  Webサーバ
    • Nginxを使用
    • Apacheより高速
  • PHP
    • バージョン:8.2.15
    • Laravelを動かすのに必要なもの
  • Webサーバで動かすもの
    • Laravel

では実際にEC2起動からLaravelインストールまでやっていきます!

EC2起動

  • 以下の設定でEC2を起動します
    • Amazon マシンイメージ (AMI)でAmazon Linux 2023を指定する
    • アーキテクチャで64ビット(Arm)を指定する
    • インスタンスタイプでt4g.mediumを指定する
    • ネットワーク設定で「からの SSH トラフィックを許可」「インターネットからの HTTP トラフィックを許可」を指定する
      • セキュリティを考慮して、アクセス元は絞った方がいい
    • EC2へはEC2 Instance Connectで接続するため、キーペアはなしでOK

EC2の中に入る

  • 諸々設定するため、以下の流れで起動したEC2の中に入ります
    • AWSコンソールのEC2の一覧で、該当のEC2を選択して、接続を押下
      • EC2 Instance Connectタブの接続を押下

もろもろインストール

パッケージ最新化

  • パッケージ最新化
sudo dnf update -y

Nginxインストール〜設定

  • Nginxインストール
sudo dnf -y install nginx
  • Nginx設定変更
sudo vi /etc/nginx/nginx.conf

serverの箇所を以下通り修正


    server {
        listen       80;
        listen       [::]:80;
        server_name  _;
        root         /usr/share/nginx/html/public;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        index index.php;
        location / {
            try_files $uri $uri/ /index.php?$query_string;
        }
        location ~ \.php$ {
            fastcgi_pass unix:/var/run/php-fpm/www.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
            include        fastcgi_params;

       }
    }
  • Nginx起動
sudo systemctl start nginx
  • Nginx自動起動をON
sudo systemctl enable nginx
  • ブラウザでNginxが正常に動作していることを確認
    • EC2に割り当てられているパブリックIPにhttpでアクセスする
      • Welcome to nginx!」が出れば、Nginxが起動できているので問題なし

PHPインストール

  • PHPをインストールする
sudo dnf install -y php-fpm php-mysqli php-json php php-devel

php-fpm起動

  • php-fpmを起動します
sudo systemctl start php-fpm.service

 

composerをインストールする

    • composerインストールします
    php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
    php composer-setup.php
    php -r "unlink('composer-setup.php');"
    sudo mv composer.phar /usr/local/bin/composer

     

    Laravel11をインストール

    • Laravel11をインストールします。
    composer create-project --prefer-dist laravel/laravel laravel-project "11.*"
    • 出来上がったファイルをNginxのルートディレクトリにコピー
    sudo cp -r laravel-project/* /usr/share/nginx/html/
    • storageディレクトリの権限設定
    cd /usr/share/nginx/html/
    chmod -R 777 storage
    • .envファイルの作成
    
    vi .env
    
    <ファイルの中身>
    APP_KEY={APIキー}
    DB_CONNECTION=sqlite
    
    APIキーは
    php artisan key:generate
    で発行可能
    •  以下のコマンドでsqlite用ファイルを作成し権限を付与します。
    
    touch database/database.sqlite
    chmod 777 database/database.sqlite
    

    動作確認

    • 動作確認
      • 「http://{EC2のIPアドレス}」にアクセスして、以下の画面表示されればOK〜〜

      ]]>
      Laravel11をECS-Fagateにデプロイする https://it.kensan.net/laravel11-ecs-fagate-deploy.html Sun, 12 May 2024 07:14:00 +0000 http://13.231.204.68/it/?p=1888 Laravel11をECS(Amazon Elastic Container Service)-Fagateにデプロイします!!!

      以下の順で進めていきます。今回はとりあえずFargate上で動くことをゴールにしますので、MySQLは使いません。

      1. ローカルでLaravel11を立ち上げる
      2. ECR(Amazon Elastic Container Registry)にLaravelイメージをpushする
      3. ECRのイメージを使って、ECS(Amazon Elastic Container Service)-Fagateにデプロイ

      まずは、ローカルでLaravel11を起動していきます。

      ローカルでLaravel11を起動する

      まずは、完成系のディレクトリ構成から記載します。

      ディレクトリ構成

      以下のような構成となります。

      
      ├── docker
      │   ├── nginx
      │   │   ├── Dockerfile
      │   │   └── default.conf
      │   └── php
      │       └── Dockerfile
      └── docker-compose.yml

      ディレクトリの作成

      上記ディレクトリ構成を作成するためのディレクトリを作成します。

      mkdir fargate_laravel
      cd fargate_laravel/

      準備はできましたので、ディレクトリ構成に記載のディレクトリとファイルを作成していきます。

      docker-compose.ymlの作成

      docker-compose.ymlを作成します。

      vi docker-compose.yml

      <ファイルの中身>

      
      version: '3'
      services:
        app:
          build:
            context: .
            dockerfile: ./docker/php/Dockerfile
          container_name: app_laravel
          volumes:
            - .:/var/www
        nginx:
          build:
            context: .
            dockerfile: ./docker/nginx/Dockerfile
          container_name: nginx_laravel
          ports:
            - 8000:80
          working_dir: /var/www
          depends_on:
            - app

      nginxのdefault.confを作成

      nginxのdefault.confを作成します。

      mkdir -p docker/nginx
      
      vi docker/nginx/default.conf

      <ファイルの中身>

      
      server {
        listen 80;
        root /var/www/laravel-project/public;
        index index.php;
        location / {
          try_files $uri $uri/ /index.php?$query_string;
        }
        location ~ \.php$ {
          fastcgi_pass 127.0.0.1:9000;   # 正常に動作しない場合は、app:9000に書き換える
          fastcgi_index index.php;
          include fastcgi_params;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
      }
      

      nginxのDockerfileの作成

      nginxのDockerfileを作成します。

      vi docker/nginx/Dockerfile

      <ファイルの中身>

      FROM nginx:1.25
      COPY  docker/nginx/default.conf /etc/nginx/conf.d/

      アプリコンテナのDockerfile作成

      アプリコンテナのDockerfile作成を作成します。

      mkdir docker/php
      
      vi docker/php/Dockerfile

      <ファイルの中身>

      
      FROM php:8.3-fpm
      
      RUN apt-get update \
        && apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
        && docker-php-ext-install zip pdo_mysql
      
      #Composer install
      RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
      RUN php composer-setup.php
      RUN php -r "unlink('composer-setup.php');"
      RUN mv composer.phar /usr/local/bin/composer
      
      ENV COMPOSER_ALLOW_SUPERUSER 1
      
      ENV COMPOSER_HOME /composer
      
      ENV PATH $PATH:/composer/vendor/bin
      
      COPY ./ /var/www/
      
      RUN chmod -R 777 /var/www/
      
      WORKDIR /var/www
      
      
      RUN composer global require "laravel/installer"
      

      必要なファイル作成が終わりましたので、コンテナ立ち上げてLaravel11をインストールしていきます。

      コンテナ立ち上げ

      以下のコマンドでコンテナを立ち上げます。

      docker compose up -d

      Laravel 11のインストール

      アプリコンテナの中に入りLaravel11をインストールします。

      # アプリコンテナに入るコマンド
      docker compose exec app bash
      # Laravel11インストールコマンド
      composer create-project --prefer-dist laravel/laravel laravel-project "11.*"

      ブラウザで「http://localhost:8000/」 へアクセスして以下の画面が表示されればOK!

       

       

      次は、ECRにイメージをpushして行きます。

      ECR(Amazon Elastic Container Registry)にLaravelイメージをpush

      以下のコマンドで、AWSの接続設定をしておきます。

      aws configure

      次にECRログインします。

      
      aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com

      以下のコマンドでリポジトリを作成します。

      
      aws ecr create-repository \
              --repository-name laravel.test \
              --image-scanning-configuration scanOnPush=true \
              --region ap-northeast-1 
      
      aws ecr create-repository \
              --repository-name nginx \
              --image-scanning-configuration scanOnPush=true \
              --region ap-northeast-1 

      以下のコマンドでビルドします。

      docker compose up --build 

      Laravelアプリのタグ作成します

      docker tag fargate_laravel-app:latest {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/laravel.test:latest

      Laravelアプリのpushです

      docker push {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/laravel.test:latest

      Nginxのタグ作成します

      docker tag nginx:latest {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest

      Nginxのpushです

      docker push {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest

      次に、Fagateにデプロイします!

      ECS(Amazon Elastic Container Service)-Fagateにデプロイ

      クラスターの作成

      以下の設定で作成します。指定箇所以外は任意の値で大丈夫です。

      • インフラストラクチャ:AWS Fargate (サーバーレス)

      タスク定義の作成

      以下の設定で作成します。指定箇所以外は任意の値で大丈夫です。

      • インフラストラクチャの要件
        • 起動タイプ:AWS Fargate
        • オペレーティングシステム/アーキテクチャ:自分のPCと一致するもの(基本はx86_64でOK、M1/M2 MacはARM64を選択)
          • この設定に誤りがあると「exec /usr/local/bin/start-container: exec format error」エラーになります。
        • タスクサイズ
          • CPU:.5 vCPU
          • メモリ:1GB
      • コンテナ – 1
        • 名前:app
        • イメージURI:{AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/laravel.test:latest
      • コンテナ – 2
        • 名前:nginx
        • イメージURI:{AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest
        • コンテナポート:80
        • アプリケーションプロトコル:HTTP

      タスク起動

      作成したクラスターのタスクタブにある「新しいタスクの実行」を押下

      • コンピューティング設定:起動タイプ
      • デプロイ設定
        • ファミリー:先ほど作成したタスクを設定
        • リビジョン:最新
      • ネットワーキング
        • セキュリティグループ:ポート80の許可を追加

      動作確認

      作成したクラスターのタスクタブの任意のタスクの詳細を開きます。

      パブリックIPが表示されるので、パブリックIPでブラウザからアクセスします。

      以下の画面が表示されればOKです。

      コンテナ利用時のログ出力に関する記事もありますので、気になる方は以下をクリックくださーい

      Laravelをコンテナで運用する際のログ出力は、JSON形式で標準出力した方が良い
      Laravelをコンテナで運用する際のログ出力は、JSON形式で標準出力した方が良いということを書いていきます。 Laravelに限らず、コンテナでは、JSON形式で標準出力が良いと思いますが、Laravelでは簡単にログをJSON形式で標...
      ]]>
      DockerでLaravel 11のローカル開発環境を構築する。ついでにphpmyadminも入れてみる。 https://it.kensan.net/docker-laravel-11-phpmyadmin.html Mon, 06 May 2024 02:07:18 +0000 http://13.112.45.21/it/?p=1844 DockerでLaravel 11のローカル開発環境を構築していきます。

      DB確認用に、phpmyadminもインストールします。

      コンテナは以下のような構成です。本番環境に応用できるように、あえてSailは使いません。

      • アプリコンテナ
        • PHP:8.3をインストールして、Laravel 11をインストールする
      • Nginxコンテナ
        • 最新のNginxをインストール
      • DBコンテナ
        • MySQL:8.0.36をインストール
      • phpmyadminコンテナ
        • 最新のphpmyadminをインストール(現時点の最新バージョン5.2.1をインストール)

      では実際にローカル開発環境を構築していきます。

      各コマンドをコピペで環境構築できます!

      Laravelのローカル開発環境構築

      まずは、完成系のディレクトリ構成から記載します。

      ディレクトリ構成

      以下のような構成となります。

      
      ├── docker
      │   ├── db  # MySQL(DB)コンテナの設定ファイル等を入れるディレクトリ
      │   │   └── my.cnf
      │   ├── nginx  # nginxコンテナの設定ファイル等を入れるディレクトリ
      │   │   └── default.conf
      │   └── php  # アプリ(PHP)コンテナの設定ファイル等を入れるディレクトリ
      │       └── Dockerfile
      └── docker-compose.yml

      ディレクトリの作成

      上記ディレクトリ構成を作成するためのディレクトリを作成します。

      mkdir test_laravel
      cd test_laravel/

      準備はできましたので、ディレクトリ構成に記載のディレクトリとファイルを作成していきます。

      docker-compose.ymlの作成

      docker-compose.ymlを作成します。

      vi docker-compose.yml

      <ファイルの中身>

      
      version: '3'
      services:
        app:
          container_name: app_laravel  
          build: ./docker/php
          volumes:
            - .:/var/www
        nginx:
          image: nginx 
          container_name: nginx
          ports:
            - 8000:80 
          volumes:
            - .:/var/www
            - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
          working_dir: /var/www
          depends_on:
            - app
        db:
          image: mysql:8.0.36
          container_name: db
          environment: 
            MYSQL_ROOT_PASSWORD: password
            MYSQL_DATABASE: database 
          command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
          volumes:  
            - ./docker/db/data:/var/lib/mysql
            - ./docker/db/my.cnf:/etc/mysql/conf.d/my.cnf 
            - ./docker/db/sql:/docker-entrypoint-initdb.d
          ports:
            - 3306:3306
        # phpMyAdmin
        phpmyadmin:
          container_name: test_phpmyadmin
          image: phpmyadmin
          environment:
          - PMA_USER=root
          - PMA_PASSWORD=password
          ports:
          - 8080:80

      MySQLのmy.confを作成

      MySQLのmy.confを作成します。

      mkdir docker
      
      mkdir docker/db
      
      vi docker/db/my.conf

      <ファイルの中身>

      
      [mysqld]
      character-set-server=utf8mb4
      collation-server=utf8mb4_unicode_ci
      default_authentication_plugin=mysql_native_password
      
      [client]
      default-character-set=utf8mb4

      nginxのdefault.confを作成

      nginxのdefault.confを作成します。

      mkdir docker/nginx
      
      vi docker/nginx/default.conf

      <ファイルの中身>

      
      server {
        listen 80;
        root /var/www/laravel-project/public;
        index index.php;
        location / {
          try_files $uri $uri/ /index.php?$query_string;
        }
        location ~ \.php$ {
          try_files $uri =404;
          fastcgi_split_path_info ^(.+\.php)(/.+)$;
          fastcgi_pass app:9000; 
          fastcgi_index index.php;
          include fastcgi_params;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
          fastcgi_param PATH_INFO $fastcgi_path_info;
        }
      }
      

      アプリコンテナのDockerfile作成

      アプリコンテナのDockerfile作成を作成します。

      mkdir docker/php
      
      vi docker/php/Dockerfile

      <ファイルの中身>

      
      FROM php:8.3-fpm
      
      RUN apt-get update \
        && apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
        && docker-php-ext-install zip pdo_mysql
      
      #Composer install
      RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
      RUN php composer-setup.php
      RUN php -r "unlink('composer-setup.php');"
      RUN mv composer.phar /usr/local/bin/composer
      
      ENV COMPOSER_ALLOW_SUPERUSER 1
      
      ENV COMPOSER_HOME /composer
      
      ENV PATH $PATH:/composer/vendor/bin
      
      
      WORKDIR /var/www
      
      RUN composer global require "laravel/installer"
      

      必要なファイル作成が終わりましたので、コンテナ立ち上げてLaravel11をインストールしていきます。

      コンテナ立ち上げ

      以下のコマンドでコンテナを立ち上げます。

      docker compose up -d

      Laravel 11のインストール

      アプリコンテナの中に入りLaravel11をインストールします。

      # アプリコンテナに入るコマンド
      docker compose exec app bash
      # Laravel11インストールコマンド
      composer create-project --prefer-dist laravel/laravel laravel-project "11.*"

      DBの接続先をsqlliteからmysqlに変更します。

      vi laravel-project/.env

      <ファイルの中身(DB設定箇所を編集します)>

      DB_CONNECTION=mysql
      DB_HOST=db
      DB_PORT=3306
      DB_DATABASE=laravel
      DB_USERNAME=root
      DB_PASSWORD=password

      以下のコマンドでマイグレーションを実行します。

      cd laravel-project/
      php artisan migrate

      以上で環境が出来上がりましたので、最後に動作確認します!

      動作確認

      • http://localhost:8000/にアクセスして
        • 以下のLaravelの画面が見れればOK
      • http://localhost:8080/にアクセスして
        • phpmyadminが見れればOK

      sailを使う場合

      以下のコマンドでプロジェクトインストールします。

      curl -s "https://laravel.build/example-app" | bash

      以下のコマンドでコンテナを立ち上げます。

      cd プロジェクト名 && ./vendor/bin/sail up

      ブラウザで「http://localhost/」 へアクセスすると以下のエラーが出ます。

      SQLSTATE[42S02]: Base table or view not found: 1146 Table 'laravel.sessions' doesn't exist

      「RUN MIGRATIONS」をクリックした後、「Refresh now」をクリックするとLaravelのスタート画面が表示されます。成功〜〜

      ]]>
      Docker上で動くLaravel(PHP)をAWS ECS-Fargateにデプロイする(codecommit/codepipeline/codebuild/codedeploy) https://it.kensan.net/docker%e4%b8%8a%e3%81%a7%e5%8b%95%e3%81%8flaravelphp%e3%82%92aws-ecs%e3%81%ab%e3%83%87%e3%83%97%e3%83%ad%e3%82%a4%e3%81%99%e3%82%8b.html Sat, 12 Sep 2020 05:54:19 +0000 https://itblog.verdy-it.xyz/?p=220

      Docker上で動くLaravel(PHP)をAWS ECS-Fargateにデプロイするということをやっていきます!

      Laravelプログラムをローカル開発環境で開発完了後、

      AWS code4兄弟のcodecommit/codepipeline/codebuild/codedeployとECRを使用して、

      ECS-Fargateへのデプロイする方法を記載していきます。

      ECSへのデプロイ

      <デプロイ対象の環境構成>
      Nginx
      laravel(PHP)
      docker
      <使用するAWSサービス>
      codepipeline
      codecommit
      codebuild
      codedeploy
      ECR
      ECS-Fargate
      <やること>
      codecommitへpushした後のECSへのデプロイを自動化する

      どんな環境?

      以下で構成された環境をECSへデプロイします!

      • Nginx
      • Laravel(PHP)
      • Docker

      どんなAWSサービスを使うの?

      以下でAWSサービスを使用してECS-Fargateへデプロイします!

      • codepipeline
      • codecommit
      • codebuild
      • codedeploy
      • ECR
      • ECS-Fargate

      デプロイフロー

      ローカル開発環境で開発後、codecommitへpushした後のECS-Fargateへのデプロイを自動化していきます!

      デプロイフロー

      ①ローカル開発環境で開発
      ②codecommitへpush
      ③codepipelineが動き出し、codebuildを実行
      ④ビルドが終わったらdockerイメージをECRへ格納
      ⑤codepipelineに処理が戻りECSへのデプロイを実行

      では、ローカル開発環境の作成から始めていきます

      Laravelローカル開発環境の作成

      以下のことをやっていきます!

      ローカル開発環境構築

      ①dockerファイルなど必要なファイルの作成
      ②Laravelプロジェクト作成
      ③dockerコンテナ立ち上げ
      ④動作確認

      まずは、完成系のディレクトリ構成から記載します。

      ディレクトリ構成

      以下のような構成となります。

      
      ├── docker
      │   ├── nginx
      │   │   ├── Dockerfile
      │   │   └── default.conf
      │   └── php
      │       └── Dockerfile
      └── docker-compose.yml

      ディレクトリの作成

      上記ディレクトリ構成を作成するためのディレクトリを作成します。

      mkdir fargate_laravel
      cd fargate_laravel/

      準備はできましたので、ディレクトリ構成に記載のディレクトリとファイルを作成していきます。

      docker-compose.ymlの作成

      docker-compose.ymlを作成します。

      vi docker-compose.yml

      <ファイルの中身>

      
      version: '3'
      services:
        app:
          build:
            context: .
            dockerfile: ./docker/php/Dockerfile
          container_name: app_laravel
          volumes:
            - .:/var/www
        nginx:
          build:
            context: .
            dockerfile: ./docker/nginx/Dockerfile
          container_name: nginx_laravel
          ports:
            - 8000:80
          working_dir: /var/www
          depends_on:
            - app

      nginxのdefault.confを作成

      nginxのdefault.confを作成します。

      mkdir docker/nginx
      
      vi docker/nginx/default.conf

      <ファイルの中身>

      
      server {
        listen 80;
        root /var/www/laravel-project/public;
        index index.php;
        location / {
          try_files $uri $uri/ /index.php?$query_string;
        }
        location ~ \.php$ {
          fastcgi_pass 127.0.0.1:9000;   # 正常に動作しない場合は、app:9000に書き換える
          fastcgi_index index.php;
          include fastcgi_params;
          fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
      }
      

      nginxのDockerfileの作成

      nginxのDockerfileを作成します。

      vi docker/php/Dockerfile

      <ファイルの中身>

      FROM nginx:1.25
      COPY  docker/nginx/default.conf /etc/nginx/conf.d/

      アプリコンテナのDockerfile作成

      アプリコンテナのDockerfile作成を作成します。

      mkdir docker/php
      
      vi docker/php/Dockerfile

      <ファイルの中身>

      
      FROM php:8.3-fpm
      
      RUN apt-get update \
        && apt-get install -y zlib1g-dev mariadb-client vim libzip-dev \
        && docker-php-ext-install zip pdo_mysql
      
      #Composer install
      RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
      RUN php composer-setup.php
      RUN php -r "unlink('composer-setup.php');"
      RUN mv composer.phar /usr/local/bin/composer
      
      ENV COMPOSER_ALLOW_SUPERUSER 1
      
      ENV COMPOSER_HOME /composer
      
      ENV PATH $PATH:/composer/vendor/bin
      
      COPY ./ /var/www/
      
      RUN chmod -R 777 /var/www/
      
      WORKDIR /var/www
      
      
      RUN composer global require "laravel/installer"
      

      必要なファイル作成が終わりましたので、コンテナ立ち上げてLaravel11をインストールしていきます。

      コンテナ立ち上げ

      以下のコマンドでコンテナを立ち上げます。

      docker compose up -d

      Laravel 11のインストール

      アプリコンテナの中に入りLaravel11をインストールします。

      # アプリコンテナに入るコマンド
      docker compose exec app bash
      # Laravel11インストールコマンド
      composer create-project --prefer-dist laravel/laravel laravel-project "11.*"

      ブラウザで「http://localhost:8000/」 へアクセスして以下の画面が表示されればOK!

      デプロイフローの作成

      まず、codecommitの設定から始めていきます。

      codecommit

      リポジトリ作成

      Codecommit

      リポジトリ名:laravel-docker

      後は設定を変えずに作成

      ソースコードをpush

      HTTPS (GRC)でcodecommitにソースをpushします。

      pip install git-remote-codecommit
      git init
      git add --all
      git commit -m "initial"
      git remote add codecommit codecommit://laravel-docker
      git push codecommit HEAD
      
      

      ECR

      以下の2つのリポジトリを作成します。

      • リポジトリ名:laravel-docker
      • リポジトリ名:laravel-docker-nginx

      codebuild

      まず、プロジェクト直下にbuildspec.ymlを作成します。

      buildspec.ymlの作成

      vi buildspec.yml
      
      version: 0.2
      
      phases:
       pre_build: # commands to be run before build
         commands:
         - AWS_ACCOUNT_ID=<AWSアカウントID>
         - echo Logging in to Amazon ECR....
         - aws --version
         - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com
         - REPOSITORY_URI=$AWS_ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/laravel-docker
         - REPOSITORY_NGINX_URI=$AWS_ACCOUNT_ID.dkr.ecr.ap-northeast-1.amazonaws.com/laravel-docker-nginx
       build:
         commands:
         - echo Build started on `date`
         - echo installing composer..
         - cd laravel-project
         - composer install
         - echo creating .env file..
         - cp .env.example .env
         - echo generating app key
         - php artisan key:generate
         - echo Building the Docker image...
         - cd ../
         - docker build -t laravel-docker . -f  ./docker/php/Dockerfile
         - docker tag laravel-docker:latest $REPOSITORY_URI:latest
         - docker build -t laravel-docker-nginx . -f  ./docker/nginx/Dockerfile
         - docker tag laravel-docker-nginx:latest $REPOSITORY_NGINX_URI:latest
       post_build:
         commands:
           - echo Build completed on `date`
           - echo Pushing the Docker image...
           - docker image ls -a
           - docker push $REPOSITORY_URI:latest
           - docker push $REPOSITORY_NGINX_URI:latest
           - echo Writing image definitions file...
           - printf '[{"name":"app","imageUri":"%s"},{"name":"nginx","imageUri":"%s"}]' $REPOSITORY_URI:latest $REPOSITORY_NGINX_URI:latest > imagedefinitions.json
      artifacts:
        files: imagedefinitions.json
      
      
      

      作成したbuildspec.ymlをHTTPS (GRC)でcodecommitにpushします。

      git add --all
      git commit -m "modify"
      git push codecommit HEAD

      codebuildビルドプロジェクトを作成

      Codebuild

      プロジェクト名:laravel-docker-build

      Codebuild

      ソースプロバイダ:CodeCommit

      リポジトリ:laravel-docker

      イメージ:「x86_64」を含むものを選ぶ

      Buildspec:buildspec ファイルを使用する

      後は設定を変えずに作成

      ロール設定

      ロール「codebuild-laravel-docker-service-role」に「ECRアクセス権」を付与する

      <ECRアクセス権>

      
      {
          "Statement": [
              {
                  "Action": [
                      "ecr:BatchCheckLayerAvailability",
                      "ecr:CompleteLayerUpload",
                      "ecr:GetAuthorizationToken",
                      "ecr:InitiateLayerUpload",
                      "ecr:PutImage",
                      "ecr:UploadLayerPart"
                  ],
                  "Resource": "*",
                  "Effect": "Allow"
              }
          ],
          "Version": "2012-10-17"
      }

      ECS

      クラスターの作成

      以下の設定で作成します。指定箇所以外は任意の値で大丈夫です。

      • インフラストラクチャ:AWS Fargate (サーバーレス)

      ECSタスクの定義

      以下の設定で作成します。指定箇所以外は任意の値で大丈夫です。

      • インフラストラクチャの要件
        • 起動タイプ:AWS Fargate
        • オペレーティングシステム/アーキテクチャ:x86_64
          • この設定に誤りがあると「exec /usr/local/bin/start-container: exec format error」エラーになります。
        • タスクサイズ
          • CPU:.5 vCPU
          • メモリ:1GB
      • コンテナ – 1
        • 名前:app
        • イメージURI:{AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/laravel.test:latest
      • コンテナ – 2
        • 名前:nginx
        • イメージURI:{AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/nginx:latest
        • コンテナポート:80
        • アプリケーションプロトコル:HTTP

      ECSサービス

      以下の設定で作成します。

      クラスタ:laravel-cluster

      コンピューティング設定:起動タイプ

      タスクの数:1

      タスク定義:作成したタスクを指定

      サービス名:laravel-docker-service

      後は設定を変えずに作成

      codepipeline

      codepipeline作成

      codepipelineを以下の設定で作成します。

      <ソースステージ>

      ソースプロバイダー:AWS CodeCommit

      リポジトリ:laravel-docker

      ブランチ名:master

      <ビルドステージ>

      プロバイダ:AWS CodeBuild

      プロジェクト名:laravel-docker-build

      <デプロイステージ>

      プロバイダー:Amazon ECS

      クラスタ名:laravel-cluster

      サービス名:laravel-docker-service

      後は設定を変えずに作成

       

      作成すると、ビルドが実行され、ECS-Fargateへデプロイされます。

      Laravel動作確認

      タスクのIPをコピーして、ブラウザーに貼り付けアクセスしてみる

      以下の画面が表示されればOKです。

      ]]>
      スターサーバー(Star Server)を使ってみた-WordPressとLaravel/CakePHPを試してみましたー https://it.kensan.net/%e3%82%b9%e3%82%bf%e3%83%bc%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bcstar-server%e3%82%92%e4%bd%bf%e3%81%84%e3%81%9f%e3%81%8a%e3%81%99%e3%80%82wordpress-laravel.html Sat, 09 May 2020 03:20:00 +0000 https://itblog.verdy-it.xyz/?p=201 スターサーバー(Star Server)を使ってみたので、使ってみてわかったことやスターサーバーの特徴などなど書いていきます!

      まず試したことです。以下のことを試してみました。

      スターサーバーで試したこと

      WordPress単体インストール
      WordPress複数インストール
      Laravel(PHPフレームワーク)
      CakePHP(PHPフレームワーク)

      プランは「ライトプラン:月額220円」契約です!

      結論としては、月額220円でWordPress複数起動できて、Laravel/CakePHPも使え、PHPであれば何でも使い放題という感想です。安くPHPのプログラムをサーバ上で動かしたい方にオススメです。

      また、WordPressが簡単に使えて、とにかく早くて安い印象ですので、Wordpressを手軽に始めたい方にもオススメです。

      まず、スターサーバーの特徴からみていきます!

      スターサーバーの特徴

      スターサーバーの特徴として、以下の点を記載していきます。

      スターサーバーの特徴
      メリット
      デメリット
      プラン

       

      スターサーバー(Star Server)の7つのメリット

      7つのメリットを記載します。

      7つのメリット

      ①安価
      ②2週間無料お試しが可能です!
      ③高速サーバー環境が利用できる
      ④高い安定性
      ⑤無料SSLがある
      ⑥不正なアクセスに対するセキュリティを強化する機能もあり
      ⑦Cron設定も可能

       

      ①安価

      DBを使用する場合でも月額220円(ライトプラン)で利用できる

      →WordPressが月額220円(ライトプラン)で始められます

      →WordPressだけではなくPHPで作られたプログラムは動作可能です

      ②2週間無料お試しが可能です!

      迷ったらお試しができます!試しに使ってみましょ!

      お試しの際はこちらから

      ③高速サーバー環境が利用できる

      スターサーバーは、オールSSDの高速サーバー環境です。

      →WordPressも高速です!高速であることはSEO的にも有利です。

      ④高い安定性

      急なアクセス増加時も即時プラン変更可能です。

      →詳細は以下をご参照くださーい

      プラン変更について | レンタルサーバー【スターサーバー】
      レンタルサーバー「スターサーバー」のご利用マニュアル | より上位のプランに契約プランを変更する場合の手順です。

      ⑤無料SSLがある

      無料でサイトをSSL化できます(httpsでアクセスできます)。

      SSL化することで、SEO的に有利になります。

      また、アクセスする人にとって安心感のあるサイトになります。

      ⑥不正なアクセスに対するセキュリティを強化する機能もあり

      セキュリティ強化機能があり安心して使用可能

      以下公式からの引用です

      ご利用のWordPressにおいて、管理者ツール(ダッシュボード)に対する国外IPアドレスからの接続を制限したり、パスワード総当り(ブルートフォースアタック)による第三者のログインを防止するなど、不正なアクセスに対するセキュリティを強化する機能です。

      WordPressセキュリティ設定 | レンタルサーバー【スターサーバー】
      レンタルサーバー「スターサーバー」のご利用マニュアル | ご利用のWordPressのセキュリティを強化する「WordPressセキュリティ設定」機能のご説明です。本機能によって国外IPのアクセスを制限したり、ログイン試行回数を制限するなどの設定が可能です。

      ⑦Cron設定も可能

      プログラムの定期実行が可能です。

      Cronの設定 | レンタルサーバー【スターサーバー】
      レンタルサーバー「スターサーバー」のご利用マニュアル | 指定した日時や一定期間毎にプログラムを実行することのできるCronについての説明や、サーバー管理ツールからCronを設定する際の手順についてのご説明です。

      次はデメリットについて記載していきます

      スターサーバー(Star Server)のデメリット

      2つのデメリットについて記載していきます。

      2つのデメリット

      ①自動バックアップ機能は用意されていない
      ②ネット上の情報はあまり多くない

       

      ①自動バックアップ機能は用意されていない

      基本的に手動バックアップですので、忘れずにバックアップ取りましょう!

      ②ネット上の情報はあまり多くない

      他のレンタルサーバと比べてネット上の情報はあまり多くない印象です。

      自分で使いこなせそうか、まずはお試ししてみるのがオススメです。お試しの際はこちらから!

      次はプランについてです!

      スターサーバー(Star Server)のプラン

      WordPressが使えるプランとして

      WordPressが使えるプラン

      ライト
      スタンダード
      ハイスピード
      エンタープライズ

      があり、アクセス数等によってプランを柔軟に選ぶことができます。

      ライトプランが月額:220円で色々できるのでオススメです。具体的に何ができるかはこちらをご参照ください。

      月額550円のハイスピードプランも「独自ドメイン永久無料特典付き」などお得な特典があるのでオススメです。

      次は実際にスターサーバーを使ってみます!

      スターサーバーを実際に使ってみる

      4つ試してみます!

      ①WordPress単体インストール
      ②WordPress複数インストール
      ③Laravel(PHPフレームワーク)
      ④CakePHP(PHPフレームワーク)

      ①WordPressを1つ使ってみる

      まずは、WordPressを試してみます。

      GUI操作で設定可能なので簡単!!下のページ参考に簡単に使えるようになります。

      WordPressのインストール方法(簡単インストール) | レンタルサーバー【スターサーバー】
      レンタルサーバー「スターサーバー」のご利用マニュアル | コンテンツ管理システム(CMS)の「WordPress 日本語版」を「簡単インストール」機能を使ってインストールする際の手順です。

      ②WordPressを複数使ってみる

      WordPressを複数インストールして、複数サイトの運用を試してみます。

      下の5ステップでできるので簡単!!

      ①1つ目のWordPressはGUI操作で立ち上げる(下記ページ参照)

      WordPressのインストール方法(簡単インストール) | レンタルサーバー【スターサーバー】
      レンタルサーバー「スターサーバー」のご利用マニュアル | コンテンツ管理システム(CMS)の「WordPress 日本語版」を「簡単インストール」機能を使ってインストールする際の手順です。

      ②WordPress公式ページから自分のPCにWordPressをダウンロードする

      ダウンロード
      Get WordPress Everything you need to set up your site j…

      ③FTPソフトを使用してサーバにWordPressアップロード用のフォルダを作成する。

      ④作成したフォルダにWordPressをアップロードする。

      ⑤「http://ドメイン/③で作成したフォルダ」にアクセスしてインストールをする。その際、「テーブル接頭辞」は、すでにインストールしてあるものと被らないよう設定する。被ると既に作っているブログが上書きされてしまう事態に陥りおます。

      以上でインストール完了。

      ③Laravelを使ってみる

      次にLaravelを動かしてみます。

      こちらは下記の3ステップでできるので簡単!!

      ①自分のPCローカルで開発する

      ②①で出来上がったソースコード全てをスターサーバーにアップロードする。

      ③DBを使用する場合「.env」ファイルのDB設定箇所をスターサーバーのDB情報に書き換える。

      Laravelをプロジェクト新規作成からスターサーバー上で動かす

      以下公式ページを参考にLaravelプロジェクト作成から、スターサーバ上で動かすとこまでやってみます!

      Laravel - The PHP Framework For Web Artisans
      Laravel is a PHP web application framework with expressive, elegant syntax. We’ve already laid the foundation — freeing you to create without sweating the small...

      ①ローカルで(PC上で)プロジェクトを作成します

      composer create-project laravel/laravel example-app

      ②ローカルでLaravelを立ち上げます。

      cd example-app
      php artisan serve

      ③ブラウザで「http://localhost:8000」にアクセスして以下の画面が出ればOKです。

      laravel+starserver

      laravel+starserver

      ④ソースコードをftpソフトでスターサーバー へアップロードします。

      ⑤「http://{ドメイン}/public/index.php」にアクセスし、再度以下の画面が表示され、スターサーバ上でLaravelが動いていることがわかります。

      laravel+starserver

      laravel+starserver

      ④CakePHPを使ってみる

      次はCakePHPです。以下公式ページを参考にCakePHPプロジェクト作成から、スターサーバ上で動かすとこまでやってみます!

      インストール - 3.10

      ①ローカルで(PC上で)プロジェクトを作成します

      composer self-update && composer create-project --prefer-dist cakephp/app:^3.8 my_app_name

      ②ソースコードをftpソフトでスターサーバー へアップロードします。

      ③「http://{ドメイン}/index.php」にアクセスし、再度以下の画面が表示され、スターサーバ上でCakePHPが動いていることがわかります。

      CakePHP+StarServer

      CakePHP+StarServer

      使ってみた感想

      PHP系は結構何でもできるので満足している。

      Laravel/CakePHPも使えるし、wordpressの複数起動も簡単。

      そして安くて早い!

      次は、スターサーバーを2週間試しに使う方法を記載します。

      試しに使ってみたい方はご参照ください。

      スターサーバーを2週間試しに使う方法

      スターサーバーをお試しで使う方法を記載します。

      スターサーバーを2週間試し


      ①以下のリンクから申し込みをする。

      ②サーバーの設定が完了したらメールがくるので待つ

      ③サーバ設定(WordPressの設定等)をする。

      まとめ

      スターサーバー(Star Server)の「ライトプラン:月額220円」で、以下のことをできることが確認できました。

      スターサーバーで出来たこと

      WordPress単体インストール
      WordPress複数インストール
      Laravel(PHPフレームワーク)
      CakePHP(PHPフレームワーク)

      コスパ最高ではないかと!

      ]]>