Giter VIP home page Giter VIP logo

experiment_laravel's Introduction

はじめに

  • このリポジトリはlaravelの実験用のリポジトリ
  • ベタですが「レシピ作成」のRestAPIを作成しています

技術概要

  • laravelを使用
  • Dockerでローカル環境を構築
  • CloudFormation でAWSで本番環境構築

本番環境

構成

  • アプリケーションサーバーはALBとオートスケーリングで複数台構成
  • 踏み台サーバー経由でアプリケーションサーバー、DBサーバーにSSH接続
  • DBはAurora(MySQL)でDBクラスター使用(マルチAZ構成でレプリケーション)
  • CodeDeployとCodePipelineでGithubからデプロイ(CloudFormationでCodeDeployは定義しているが、CodePipelineはまだ定義していない)

初期設定

  1. AWSのCloudFormationで cloud_formaition_prod.yaml ファイルを実行してサーバーを作成する
  2. AWSのCodeDeployを実行してソースコードをデプロイする
  3. php artisan migrate を実行する

初期設定(ローカル)

# ソースDL
git clone [email protected]:suke-shun-kato/laravel-exp.git

# Docker立ち上げ
cd laravel-exp
docker-compose up -d --build

# laravelなどをインストール
docker-compose exec app-php composer install
docker-compose exec app-php cp .env.local.example .env
docker-compose exec app-php php artisan key:generate

# laravelでマイグレーション実行
docker-compose exec app-php php artisan migrate
# laravelでシーダー実行
docker-compose exec app-php php artisan db:seed

API

エンドポイント

{各環境でのURL}/api/

リクエストヘッダー

下記ヘッダーをリクエストに含めること

  • Authorization:Bearer {access_token}
  • Accept:application/json
  • Content-Type:application/json
  • X-Requested-With:XMLHttpRequest

{access_token} は、POST /users/login 又は POST /users で取得した access_token の値。なお、その POST /users/login, POST /users では、Authorization ヘッダーは不要。

エラーレスポンス

バリデーションNG

下記のエラーを返す

HTTPステータスコード

422 Unprocessable Content

レスポンスパラメータ

下記は、リクエストのnameemailの値でバリデーションNGのとき。

{
    "message": "The name field must be a string. (and 1 more error)",
    "errors": {
        "name": [
            "The name field must be a string."
        ],
        "email": [
            "The email has already been taken."
        ]
    }
}

ログイン関連API

メソッド URL Request Body 説明
GET /users/me - 現在ログイン中のユーザーを取得
POST /users name, email, password 新規ユーザーを作成
POST /users/login email, password ログイン処理を実行

レシピ関連API

メソッド URL Request Body 説明
GET /recipes - レシピ一覧を取得
GET /recipes/{recipe_id} - recipe_id のレシピを取得
POST /recipes title, description, u_image_ids レシピを新規に作成
PATCH /recipes/{recipe_id} title, description, u_image_ids recipe_id のレシピを更新
DELETE /recipes/{recipe_id} - recipe_id のレシピを削除

画像関連

メソッド URL Request Body 説明
GET /images image 画像をアップロード

バージョン

名前 バージョン 記載箇所
laravel 10.3.3 src/composer.json
php 8.2 docker/php/Dockerfile, src/composer.json, app_server_init.sh
composer 2.5.4 docker/php/Dockerfile

Docker コマンドメモ

コンテナ立ち上げる

docker compose up -d

コンテナに入る

docker compose exec app-php ash

コンテナ削除

ボリュームは削除しない

docker compose down

ボリュームは削除する(DBデータやS3データごと削除)

docker compose down -v

ローカルでMinIO(S3)にアップロードしたファイルを見る

http://localhost:9090/ にアクセスしてコンソールから見る

ユーザー名は .envMINIO_USERMINIO_PASS の値

laravel コマンドメモ

マイグレーション

マイグレーションファイルの作成

docker-compose exec app-php php artisan make:migration xxxxxx

※日付は自動で付く

マイグレーションの実行

docker-compose exec app-php php artisan migrate

マイグレーション ダウン

docker-compose exec app-php php artisan migrate:rollback

DB削除(マイグレーションダウンではない)→マイグレーション実行→シーダー実行

docker-compose exec app-php php artisan migrate:fresh --seed

シーダー

シーダーファイルの作成

docker-compose exec app-php php artisan make:seeder CareerSeeder

シーダーの実行

docker-compose exec app-php php artisan db:seed

ORM

モデルの作成

docker-compose exec app-php php artisan make:model Models/Career

※モデル名は命名規則があるのでデータベースのテーブル名から 's' を抜いたものにしないといけない

テスト

テスト実行

Laravelコマンドでのテスト

docker compose exec app-php php artisan test

こっちが分かりやすいのでオススメ

PHP Unit のコマンドでのテスト

docker compose exec app-php ./vendor/bin/phpunit

テストファイル作成

機能テスト

docker compose exec app-php php artisan make:test UserFetureTest

tests/Feature にファイルが作成される

ユニットテスト

docker compose exec app-php php artisan make:test UserUnitTest --unit

tests/Unit にファイルが作成される

AWS用コマンドメモ

踏み台サーバーにSSHログイン

ssh -o ProxyCommand='ssh -W %h:%p -i ~/.ssh/bastion_id_rsa.pem ec2-user@bastion_server' \
-i ~/.ssh/target_id_rsa.pem ec2-user@target_server

-W %h:%p 中継サーバーを通してターゲットサーバーに接続するためのオプション

参考リンク

laravel

Docker環境構築

参考書籍

experiment_laravel's People

Contributors

suke-shun-kato avatar

Watchers

 avatar

experiment_laravel's Issues

CodeDeployが失敗する不具合の修正

オートスケーリングのスケールアウトもCodeDeplyの部分で失敗する。

原因は、public/health_check.html がデプロイ前のサーバー作成時に既にあるので、デプロイ時に重複エラーになるため。

READMEの修正

  • git clone のアドレスが間違っている
  • laravel → Laravel

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.