- このリポジトリはlaravelの実験用のリポジトリ
- ベタですが「レシピ作成」のRestAPIを作成しています
- laravelを使用
- Dockerでローカル環境を構築
- CloudFormation でAWSで本番環境構築
- アプリケーションサーバーはALBとオートスケーリングで複数台構成
- 踏み台サーバー経由でアプリケーションサーバー、DBサーバーにSSH接続
- DBはAurora(MySQL)でDBクラスター使用(マルチAZ構成でレプリケーション)
- CodeDeployとCodePipelineでGithubからデプロイ(CloudFormationでCodeDeployは定義しているが、CodePipelineはまだ定義していない)
- AWSのCloudFormationで
cloud_formaition_prod.yaml
ファイルを実行してサーバーを作成する - AWSのCodeDeployを実行してソースコードをデプロイする
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
{各環境での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
ヘッダーは不要。
下記のエラーを返す
422 Unprocessable Content
下記は、リクエストのname
とemail
の値でバリデーション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."
]
}
}
メソッド | URL | Request Body | 説明 |
---|---|---|---|
GET | /users/me | - | 現在ログイン中のユーザーを取得 |
POST | /users | name , email , password |
新規ユーザーを作成 |
POST | /users/login | email , password |
ログイン処理を実行 |
メソッド | 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 compose up -d
docker compose exec app-php ash
docker compose down
docker compose down -v
http://localhost:9090/ にアクセスしてコンソールから見る
ユーザー名は .env
の MINIO_USER
と MINIO_PASS
の値
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
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
docker-compose exec app-php php artisan make:model Models/Career
※モデル名は命名規則があるのでデータベースのテーブル名から 's' を抜いたものにしないといけない
docker compose exec app-php php artisan test
こっちが分かりやすいのでオススメ
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
にファイルが作成される
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
中継サーバーを通してターゲットサーバーに接続するためのオプション