Quantcast
Channel: PHP8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 546

Laravel8をDocker環境で構築し、ログインまで

$
0
0
はじめに こんにちは。DMM WEBCAMP Advent Calendar 2021 17日目を担当する@yuttana1223です! 最近1年ぶりにLaravelを使用するということになったので、そのときに学習した内容で需要がありそうな開発環境に関して書いていきます。 概要 Laravel sailでDocker環境を構築して、Breezeでログインまで行っていきます。基本的には公式ドキュメントを参考にし、便利なもののインストールや日本語化は行いますが、不必要な場合は飛ばしてください。チーム開発のことも考え、GitHubにpush後cloneしてからの扱い方まで考慮していきます。 実行環境 macOS Big Sur バージョン 11.5.2 docker desktop バージョン 4.1.1(インストールしていて、起動している前提) Laravelプロジェクト作成 Laravel Sailを使用していく。 Laravel Sailは、LaravelのデフォルトのDocker構成と、操作するための軽量のコマンドラインインターフェイスです。 Sailは、Dockerの経験がなくても、PHP、MySQL、Redisを使用してLaravelアプリケーションを構築するために良い出発点を提供しています。 利用可能なサービスは、mysql、pgsql、mariadb、redis、memcached、meilisearch、minio、selenium、mailhogになっており、withというクエリ文字列変数で選択する。 docker imageやプロジェクトに必要なファイルをインストール 今回はmysqlを選択し、アプリ名はexample-appを使用する。インストールには結構時間がかかるので気長に待ち、最後にmacのパスワードだけ聞かれるので入力しましょう。 # curl -s "https://laravel.build/アプリ名?with=サービス名,サービス名" | bash curl -s "https://laravel.build/example-app?with=mysql" | bash cd example-app # gitの管理下に入れたい場合のみ git init 参考: https://readouble.com/laravel/8.x/ja/installation.html 環境変数(.env)のファイルをお好みで変更 docker-compose.ymlにAPP_PORTという環境変数が指定されている(デフォルトだと80番)ので、自分のPCで使っていないポート番号を追記する。 お好みでAPP_NAME(アプリ名)やDB_DATABASE(データベース名)、DB_USERNAME(データベースのユーザー名)、DB_PASSWORD(データベースのパスワード)も変更してください。今回は特に変更せず、デフォルトのままで行う。 APP_NAME=Laravel APP_ENV=local APP_KEY=base64:mwWgIvS9K4seI+GQ+F7DOslToBuIRgw7ibXje8A9etI= APP_DEBUG=true APP_URL=http://example-app.test APP_PORT=8000 # 追記(http://localhost:8000/ で接続) # 以下省略 言語設定(config/app.php) 'fallback_locale' => 'en'は変更しなくてよい 大文字小文字を気をつける // 変更前 // 'timezone' => 'UTC', // 変更後(タイムゾーンを東京に変更) 'timezone' => 'Asia/Tokyo', // 変更前 // 'locale' => 'en', // 変更後(言語を日本語に変更) 'locale' => 'ja', // 変更前 // 'faker_locale' => 'en_US', // 変更後(ダミーデータを日本語に変更) 'faker_locale' => 'ja_JP', phpMyAdminを導入(docker-compose.yml) ※任意 データベースをGUIからも扱うためのもので、テーブルやどんなデータが入っているかをひと目で確認できたり、簡単にデータを挿入・変更・削除したりできて便利。 mariadbなどを使用している場合はphpmyadminのdepend_onの部分のmysqlをmariadbなどに変更する # For more information: https://laravel.com/docs/sail version: '3' services: laravel.test: build: context: ./vendor/laravel/sail/runtimes/8.0 dockerfile: Dockerfile args: WWWGROUP: '${WWWGROUP}' image: sail-8.0/app extra_hosts: - 'host.docker.internal:host-gateway' ports: - '${APP_PORT:-80}:80' environment: WWWUSER: '${WWWUSER}' LARAVEL_SAIL: 1 XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' volumes: - '.:/var/www/html' networks: - sail depends_on: - mysql mysql: image: 'mysql/mysql-server:8.0' ports: - '${FORWARD_DB_PORT:-3306}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: "%" MYSQL_DATABASE: '${DB_DATABASE}' MYSQL_USER: '${DB_USERNAME}' MYSQL_PASSWORD: '${DB_PASSWORD}' MYSQL_ALLOW_EMPTY_PASSWORD: 1 volumes: - 'sailmysql:/var/lib/mysql' networks: - sail healthcheck: test: ["CMD", "mysqladmin", "ping", "-p${DB_PASSWORD}"] retries: 3 timeout: 5s # 追記 phpmyadmin: image: phpmyadmin/phpmyadmin restart: always environment: PMA_ARBITRARY: 1 PMA_HOST: "${DB_HOST}" PMA_USER: "${DB_USERNAME}" PMA_PASSWORD: "${DB_PASSWORD}" ports: - 8080:80 volumes: - ./infra/docker/phpmyadmin/sessions:/sessions networks: - sail depends_on: - mysql networks: sail: driver: bridge volumes: sailmysql: driver: local エラーメッセージの日本語化 ※任意 デフォルトの英語のままでOKなら飛ばす 公式にもエラーメッセージの日本語化があるが、既にカスタムされているものを今回は使用。 次ののURLにアクセスし「https://github.com/Laravel-Lang/lang 」 ダウンロードしてくる ダウンロードしてきたlang/localesの中のjaを自分のプロジェクトのresources/langの直下に入れる。 自分のプロジェクトのresources/lang/jaの中のja.jsonを上の階層resources/lang直下に移動 補足: https://readouble.com/laravel/8.x/ja/validation-php.html コンテナを起動 docker compose up -dと同じような意味 ./vendor/bin/sail up -d 「 http://localhost:8000/ 」でlaravel、「 http://localhost:8080/ 」でphpMyAdminが起動した状態になる laravel-debugbarのインストール ※任意 デバッグをするときに便利なので入れる docker compose exec laravel.test bashでもコンテナに入れる # コンテナ内に入る ./vendor/bin/sail bash # インストール composer require barryvdh/laravel-debugbar --dev Laravel Breezeのインストール 認証に必要なので入れる Laravel Breezeにログイン、ユーザー登録、パスワードのリセット、メールの検証、パスワードの確認など、Laravelのすべての認証機能を最小限シンプルに実装しました。Laravel Breezeのデフォルトビュー層は、Tailwind CSSでスタイルを設定したシンプルなBladeテンプレートで構成しています。 # コンテナ内で実行 composer require laravel/breeze --dev php artisan breeze:install # tailwind cssなどを使用しているため必要 npm install && npm run dev # usersテーブルなどのマイグレーションを実行 php artisan migrate これで右上のRegisterのリンクからユーザ登録ができるようになった。 GitHubにpushしたものをcloneしてからの流れ チーム開発のときなどにGithubを使用すると思うが、そのときに注意点がある。 .gitingnoreに/vendorと書かれているので、コマンド時に使用していた./vendor/bin/sailが使用できない。/vendor/bin/sailはcurlを使用したときに現れたものである。 対策としては公式に書かれている。 PHPとComposerを含む小さなDockerコンテナを使用して、アプリケーションの依存関係をインストールする必要がある。 GitHubからcloneする git clone リポジトリURL # cloneしてきたプロジェクトに移動 cd example-app 環境変数(.env)を作成 GitHubには.envはpushされないようになっているので、まずは.env.exampleの中身をコピーして.envファイルを作成してから貼り付ける DB_CONNECTIONとDB_HOSTは使用しているデータベース名(今回はmysql)を記述し、DB_PASSWORDも設定(今回はpassword)。 APP_NAME、APP_PORT、DB_DATABASE、DB_USERNAMEはお好みで記述。 APP_NAME=Laravel APP_ENV=local # APP_KEYはエラーが出たときにコマンドで生成 APP_KEY= APP_DEBUG=true APP_URL=http://localhost # 書かなければ80になる APP_PORT=8000 LOG_CHANNEL=stack LOG_DEPRECATIONS_CHANNEL=null LOG_LEVEL=debug # mysqlを使用 DB_CONNECTION=mysql # mysqlに変更 DB_HOST=mysql DB_PORT=3306 DB_DATABASE=example_app # userに変更 DB_USERNAME=user # passwordに変更 DB_PASSWORD=password # これより下は変更なし BROADCAST_DRIVER=log CACHE_DRIVER=file FILESYSTEM_DRIVER=local QUEUE_CONNECTION=sync SESSION_DRIVER=file SESSION_LIFETIME=120 MEMCACHED_HOST=127.0.0.1 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 MAIL_MAILER=smtp MAIL_HOST=mailhog MAIL_PORT=1025 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=null MAIL_FROM_ADDRESS=null MAIL_FROM_NAME="${APP_NAME}" AWS_ACCESS_KEY_ID= AWS_SECRET_ACCESS_KEY= AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET= AWS_USE_PATH_STYLE_ENDPOINT=false PUSHER_APP_ID= PUSHER_APP_KEY= PUSHER_APP_SECRET= PUSHER_APP_CLUSTER=mt1 MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}" MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}" コンテナを起動する /vendorやdockerのイメージをインストール (dockerデスクトップは起動している前提でfishを使用している場合はzshやbashに切り替える) docker run --rm \ -u "$(id -u):$(id -g)" \ -v $(pwd):/var/www/html \ -w /var/www/html \ laravelsail/php80-composer:latest \ composer install --ignore-platform-reqs ./vendor/bin/sail up -d http://localhost:8000/ にアクセスすると、No application encryption key has been specified.というエラーが出るのでAPP_KEYを作成。 # コンテナに移動 ./vendor/bin/sail bash # APP_KEYを作成 php artisan key:generate npm install && npm run dev php artisan migrate http://localhost:8080/ にアクセスすると、テーブルができているのが確認できる。 以上でcloneをしてからログインまで完了! 参考: https://readouble.com/laravel/8.x/ja/sail.html

Viewing all articles
Browse latest Browse all 546

Trending Articles