- 投稿日:2021-01-11T23:32:39+09:00
VSCode + Docker + PHP の開発環境を、XDebugでデバッグする。
はじめに
扱っていたプロジェクトは Laravel を使ったPHPアプリケーションで、VSCodeによって製作されていました。
Java や Swift を使った作業には慣れていたのですが、PHPのデバッグが久しぶりで大いにはまったので備忘録です。やったこと
PHPのデバッグには XDebug を使うということなので、XDebug解説記事 をふむふむと読み(大変わかりやすい記事です)作業に当たりました。
たくさんの記事が丁寧に説明しているので詳細は端折りますが
php.ini;...省略 [XDebug] zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so xdebug.default_enable=1 xdebug.remote_port=9000 xdebug.remote_autostart=1 xdebug.remote_handler=dbgp xdebug.remote_connect_back=0 xdebug.remote_host=host.docker.internal xdebug.remote_log=/tmp/xdebug.log xdebug.idekey=VSCODEDockerfileFROM php:7.4-apache # XDebug RUN pecl install xdebug \ && docker-php-ext-enable xdebug #...省略launch.json{ "version": "0.2.0", "configurations": [ { "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9000, "log": true, "pathMappings": { "/var/www/html": "${workspaceFolder}/src" }, "ignore": [ "**/vendor/**/*.php" ] } ] }こんな感じで、PHP初期化、Docker初期化、XCodeのデバッグ設定を終えました。
これが全然びくとも動かない。
解決策
いろんなパラメータをいじり倒しましたが全然動かず諦めかけましたが、最終的には xdebug のバージョンの問題ということに気づきました。
$ php -v | grep -i "xdebug" with Xdebug v3.0.2, Copyright (c) 2002-2021, by Derick RethansXdebug 2.x から 3.x で、設定値が様変わりしています。
https://xdebug.org/docs/upgrade_guide
このドキュメントに詳しくわかりやすく書いてあります。たとえば、
xdebug.remote_log
はxdebug.log
に Rename されています。どうりで、ログもさっぱり出ないわけです。細かい意味はそちらを見ていただくとして、上記の
php.ini
は正しくはこうなりました。php.ini;...省略 [XDebug] zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20190902/xdebug.so xdebug.mode=debug xdebug.client_port=9000 xdebug.start_with_request=yes xdebug.discover_client_host=0 xdebug.client_host=host.docker.internal xdebug.log=/tmp/xdebug.log現場からは以上です。
- 投稿日:2021-01-11T21:59:44+09:00
Laravelでのnginxのdefault.conf
default.confの内容
公式ページからコピーするだけ.
laravel公式ページdefault.confserver{ listen 80; server_name example.com; root /srv/example.com/public; fastcgi_pass unix:/var/run/php/php-fpm.sock; }コピーしたら上の場所を適当に変えるだけで基本動く。
ちなみに
dockerにおいて、nginxコンテナにapt, apt-getは実行できない。
そのためapk update
などを使う。
- 投稿日:2021-01-11T19:42:11+09:00
Windowsでvagrant upが出来なかった
前提
Windows10でHomesteadを使ってlaravel開発をしようとしている。
以下のサイトを参考にした。
Laravel開発のはじめかた Windows編 | Hypertext Candy本題
git, vagrant, homesteadをインストールし、さあ仮想環境を起動しようと
$vagrant up
を実行。
すると、、、
Check your Homestead.yaml (or Homestead.json) file, the path to your private key does not exist.
というメッセージが。解決
結局、以下の記事を参考にさせて頂き、解決しました。
LaravelのHomestead設定 | BeCrazy
どうやらサーバーに接続するための鍵がないから作れってことみたい。手順
1.必要なディレクトリを作る
$mkdir %HOMEDRIVE%%HOMEPATH%\.ssh
2.鍵を作る
$ssh-keygen -t rsa -f %HOMEDRIVE%%HOMEPATH%\.ssh\id_rsa
途中でパスワードの作成を求められるが、2回Enterキーだけを押して空のままでいい。
もう一度
$vagrant up
で今度は成功した。
- 投稿日:2021-01-11T14:59:22+09:00
【ギリ初心者向け】Laravel Docker AWS(EC2) Webアプリ(PHP)を0から簡単にデプロイする方法(無料)② ーDocker開発環境構築編(Laravel)ー
0.概要
何度もいいますが、知らない単語が出た瞬間ググってください!!!!!
①の全体像編がこちらにあるのでこちらを一読してからだと理解がスムーズかと!!!
https://qiita.com/SG_Sg/items/6b8ce48567b6b6602805
今回で作成するは具体的にいうと赤いとこ
Dokcerを利用してLaravel(PHP)のプロジェクトを作成(dockerの説明)
さて具体的にDockerをを利用して環境構築したいが、、、、
「Dockerってなんやねん」「Docker使うメリットなんやねん」「開発現場でどうやって使うねん」
疑問だらけのため、ざっっくり説明してからにしよう!(最初いくらググってもマジでちょっと何言ってるかわかんないっすねって感じでした)
Dockerとは??等細かいところはググってくださいな、、1.Dockerのメリット、なぜプロのエンジニアは使うのか
①MACを汚さずに環境とプロジェクト、プログラムを作れる!
どういうことかって???
Dockerを使わずにプロジェクトをつくるとどうなるかみてみよう!!
こんな風にバージョン違いだったり他のPCの環境に依存してしまう!!Dockerを使うプロジェクトをつくるとどうなるかみてみよう!!
Dockerを使えばDockerの中に環境をインストールしてプロジェクトごとgithub上にのっけるイメージ
Docker内に必要な環境をインストールするから
Macに必要な環境をインストールしなくて良い!!2.まずはいろいろ準備(GitとかDockerをインストールとか)
以下デフォルトのターミナル使ってるよ!
①githubアカウントの作成
https://github.com
②Gitの初期設定
すみません。。「Mac git初期設定」でググってください汗
最終的に下記のように表示されればokです。MacBook-Pro% git config --list | grep user user.name=[githubname] user.email=67626524+[githubname]@users.noreply.github.com③GithubSSH接続設定
これも「Mac Github SSH接続」とかでググってね!エラーとかがでたらまたそのエラー文をぐぐるんや!!!MacBook-Pro% ssh -T github.com Hi [githubの名前]! You've successfully authenticated, but GitHub does not provide shell access.こんなかんじに
successfully
の文字が出れば大体いける!④ docker, docker-compose(起動したり停止できたりするやつ)のインストール
Docker for Macをインストール
https://docs.docker.com/docker-for-mac/install
インストール確認(なにかインストールしたら必ずインストールされてるか確認!)MacBook-Pro% docker --version Docker version 20.10.0, build 7287ab3 MacBook-Pro% docker-compose --version docker-compose version 1.27.4, build 405241923.Dockerプロジェクトを作る!!
3-1.github動作確認まで
①プロジェクト(ディレクトリ)を作成する
私はホームディレクトリに「LaravelProjext」をつくってその中に「docker-test」ディレクトリを作成!!このへんはご自由に!!!MacBook-Pro % mkdir LaravelProject MacBook-Pro % cd LaravelProject MacBook-Pro LaravelProject % mkdir docker-test MacBook-Pro LaravelProject % cd docker-test MacBook-Pro docker-test %②リモートリポジトリを作る
作り方は「giuhubリモートリポジトリ 作成」でググろう!!
「DockerLaravelTestProject」を作成
②リモートリポジトリにテストプッシュ!Gitが機能しているかの確認
//README.mdファイルを作成 MacBook-Pro docker-test % echo "README import First" >> README.md //git管理できるようにする MacBook-Pro docker-test % git init //ステージングにaddする! MacBook-Pro docker-test % git add . //commitする!! MacBook-Pro docker-test % git commit -m "first commit README" //push先のリモートリポジトリをGithubに!!(SSHで接続 ※URLはSSH) MacBook-Pro docker-test % git remote add origin git@github.com:SugiKoki/DockerLaravelTestProject.git //リモートリポジトリ先を確認!しっかりgithubのプロジェクトになっている MacBook-Pro docker-test % git remote -v origin git@github.com:SugiKoki/DockerLaravelTestProject.git (fetch) origin git@github.com:SugiKoki/DockerLaravelTestProject.git (push) //gitのブランチを確認 MacBook-Pro docker-test % git branch * master //gitのブランチ(master)にプッシュ MacBook-Pro docker-test % git push -u origin master kokisugi@sugihirokinoMacBook-Pro docker-test %③VScodeで確認する
しっかりディレクトリの中に書かれていることを確認!!これで作業できる!!!!3-2.最終ゴールの確認
ファイル構成はこんな感じをめざすよ!!
backendの中が実際にプログラミングするところ!!3-3.アプリケーションサーバー(app)を作る(入れる)
①docker-compose.yml を作成する
MacBook-Pro docker-test % touch docker-compose.ymlVScodeでディレクトリを開いて以下のようにする
以下が内容version: "3.8" services: app: build: ./infra/php volumes: - ./backend:/work web: image: nginx:1.18-alpine ports: - 10080:80 volumes: - ./backend:/work - ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf working_dir: /work db: build: ./infra/mysql volumes: - db-store:/var/lib/mysql volumes: db-store:上のappってとこがアプリケーションサーバー
真ん中のwebってとこがwebサーバー
下のdbがデータベースサーバー
作りたい環境をここで設定してこれに合わせてDockerにインストールしていく!!!
②./docker/php/Dockerfile を作成する
MacBook-Pro docker-test % mkdir -p infra/php MacBook-Pro docker-test % touch infra/php/DockerfileFROM php:7.4-fpm-buster SHELL ["/bin/bash", "-oeux", "pipefail", "-c"] ENV COMPOSER_ALLOW_SUPERUSER=1 \ COMPOSER_HOME=/composer COPY --from=composer:1.10 /usr/bin/composer /usr/bin/composer RUN apt-get update && \ apt-get -y install git unzip libzip-dev libicu-dev libonig-dev && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ docker-php-ext-install intl pdo_mysql zip bcmath COPY ./php.ini /usr/local/etc/php/php.ini WORKDIR /workここで行っていること
Composerコマンドのインストール
Laravelで必要な
bcmath, pdo_mysql が不足しているのでインストール③./docker/php/Dockerfile を作成する
MacBook-Pro docker-test % touch infra/php/php.ini以下のコードをphp.iniへ
zend.exception_ignore_args = off expose_php = on max_execution_time = 30 max_input_vars = 1000 upload_max_filesize = 64M post_max_size = 128M memory_limit = 256M error_reporting = E_ALL display_errors = on display_startup_errors = on log_errors = on error_log = /dev/stderr default_charset = UTF-8 [Date] date.timezone = Asia/Tokyo [mysqlnd] mysqlnd.collect_memory_statistics = on [Assertion] zend.assertions = 1 [mbstring] mbstring.language = Japanese3-4.ウェブサーバー(web)を作る(入れる)
①docker/nginx/default.conf を作成する
MacBook-Pro docker-test % mkdir infra/nginx MacBook-Pro docker-test % touch infra/nginx/default.confserver { listen 80; server_name example.com; root /work/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass app:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }3-5.データベース(db)サーバーを作る(入れる)
①./docker/mysql/Dockerfile を作成する
MacBook-Pro docker-test % mkdir infra/mysql MacBook-Pro docker-test % touch infra/mysql/Dockerfile以下のコードを貼り付ける!
FROM mysql:8.0 ENV MYSQL_DATABASE=sg_db \ MYSQL_USER=sg \ MYSQL_PASSWORD=sg \ MYSQL_ROOT_PASSWORD=sg \ TZ=Asia/Tokyo COPY ./my.cnf /etc/mysql/conf.d/my.cnf RUN chmod 644 /etc/mysql/conf.d/my.cnfここは任意なので好きにしてもらって結構!
データベースを接続するときの名前とパスワードだから
忘れないようにおぼえておこう!MYSQL_USER=sg \ MYSQL_PASSWORD=sg \ MYSQL_ROOT_PASSWORD=sg \②docker/mysql/my.cnf を作成する
MacBook-Pro docker-test % touch infra/mysql/my.cnf以下のコードを貼り付ける
[mysqld] # character set / collation character_set_server = utf8mb4 collation_server = utf8mb4_0900_ai_ci # timezone default-time-zone = SYSTEM log_timestamps = SYSTEM # Error Log log-error = mysql-error.log # Slow Query Log slow_query_log = 1 slow_query_log_file = mysql-slow.log long_query_time = 1.0 log_queries_not_using_indexes = 0 # General Log general_log = 1 general_log_file = mysql-general.log [mysql] default-character-set = utf8mb4 [client] default-character-set = utf8mb4これで3つのコンテナが完成!!!!しっかり最終的なディレクトリ構成になりましたか???
3-6.Docker起動!(中身の確認)
①dockerを動かしたいときに使うよ!
MacBook-Pro docker-test % docker-compose up -d --build ・・・・ Successfully built 9813d5181de8 Successfully tagged docker-test_db:latest Creating docker-test_app_1 ... done Creating docker-test_db_1 ... done Creating docker-test_web_1 ... done MacBook-Pro docker-test %上の感じにdoneとでたらそれらはOKということ!
・動かした状態でどう動いてるのか確認!MacBook-Pro docker-test % docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------- docker-test_app_1 docker-php-entrypoint php-fpm Up 9000/tcp docker-test_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp docker-test_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:10080->80/tcpちなみにリスタートしたりしたかったら、一度止めたかったらdown!
MacBook-Pro docker-test % docker-compose down //一度止めたらまた起動しよう MacBook-Pro docker-test % docker-compose up -d --buildDockerに入れたそれぞれサーバー(コンテナ)内に入れたのバージョン確認する方法
・appサーバー
MacBook-Pro docker-test % docker-compose exec app bash //PHPのバージョン確認 root@5ce9c9fa1435:/work# php -V //composerのバージョン確認 root@5ce9c9fa1435:/work# composer -v //インストール済みの拡張機能一覧の確認 root@5ce9c9fa1435:/work# php -m //dockerから出る root@5ce9c9fa1435:/work# exit・webサーバー
MacBook-Pro docker-test % docker-compose exec web nginx -v・DBサーバー
MacBook-Pro docker-test % docker-compose exec db bash //mysqlのバージョン確認 root@6bcf6de7e31e:/# mysql -V //dockerから出る root@6bcf6de7e31e:/work# exitこれでDocker環境構築終了だ!!!さあLaravelを入れてプログラミングしていきます!!!
定期的にGitコミットはしていったほうがよいですよ!
MacBook-Pro docker-test % git add . MacBook-Pro docker-test % git commit -m "laravel commit" MacBook-Pro docker-test % git push3-7.Laravelをインストールする(appサーバー上でやります)
①appに入って、Laravelをインストール
MacBook-Pro docker-test % docker-compose exec app bash root@5ce9c9fa1435:/work# composer create-project --prefer-dist "laravel/laravel=8.*" . //laravelバージョン確認 root@5ce9c9fa1435:/work# php artisan -V Laravel Framework 8.21.0 root@5ce9c9fa1435:/work# exit②Laravel ウェルカム画面の表示
http://127.0.0.1:10080
にアクセス!!!
・VScode確認するとbackendこんな感じになっているはず!
3-8.プログラミングしてみる!!(html,blade.phpファイルを作って表示できるか確認!)
HTML(.blade.php)を表示してみよう!!MVCモデルで進めていきます!
①backend/resources/viewsのなかに
helloディレクトリを作成
helloディレクトリの中にhello.blade.phpを作成<html> <body> <h1>HELLO Larabel<h1> </body> </html>②URLから呼び出すコントローラーを設定!
・backend/routes/web.phpを修正
以下のコードをbackend/routes/web.phpに追加する!/// URL/helloのとき「HelloController」を呼び出す Route::get('hello', 'App\Http\Controllers\HelloController@index');③backend/app/http/Controllers/の中に
HelloController.phpを作成する
以下のコードをbackend/app/http/Controllers/の中に
HelloController.phpに追加する!<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\KrononUser; use Faker\Provider\ar_JO\Person; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; class HelloController extends Controller { public function index() { return view('hello.hello'); } }④URLにアクセスして表示!!!
http://127.0.0.1:10080/hello
3-9.データベースに接続してみる!!!!
ソースコード上で backend/.env のDB接続設定を修正する。
①以下のコードに変更!!DBサーバー作った時のに合わせながら!DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=sg_db DB_USERNAME=sg DB_PASSWORD=sg
②backend/.env.example も同様に変更するDB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=sg_db DB_USERNAME=sg DB_PASSWORD=sgちなみにgitcloneした際はここからやれば動きます
③Laravelインストール
app コンテナにはいってからいろいろ
MacBook-Pro docker-test % docker-compose exec app bash //コンポーザーをインストールする root@36ffabe3ffc9:/work# composer install //.env.exampleを.envファイルにコピーする root@36ffabe3ffc9:/work# cp .env.example .env //このコマンドでアプリケーションキーを生成できます。 root@36ffabe3ffc9:/work# php artisan key:generate Application key set successfully. //デフォルトで入っているマイグレーションを実行!!デフォルトのテーブルがDBに反映される root@36ffabe3ffc9:/work# php artisan migrate Migration table created successfully. Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (40.88ms) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (37.06ms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (35.00ms)これでデフォルトですが、DBにテーブルなどが入りました!!
④データベースの確認(デフォルト)
MacBook-Pro docker-test % docker-compose exec db bash //設定したUSERでmysqlにログイン root@d94d20dd2212:/# mysql -u sg -p //設定したPASSWORDを入力.envに書いた!! Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | sg_db | +--------------------+ 2 rows in set (0.01 sec) mysql> use sg_db Database changed mysql> show tables; +-----------------+ | Tables_in_sg_db | +-----------------+ | failed_jobs | | migrations | | password_resets | | users | +-----------------+⑤migrationをつくってアプリに反映する!!
/backend/database/migration/2021_01_03_090902_create_people_table.php
を作成
※/backend/database/migration/の中にデフォルトでいろいろ入っているからそれをコピーすればいいかも!!
以下のコードを貼り付け!<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePeopleTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('people', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('mail'); $table->integer('age'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('people'); } }⑥migrationを実行(appコンテナ)の中に入って実行!
appのなかじゃないとdockerにあるDBコンテナに届かないMacBook-Pro docker-test % docker-compose exec app bash root@36ffabe3ffc9:/work# php artisan migrate Migrating: 2021_01_03_090902_create_people_table Migrated: 2021_01_03_090902_create_people_table (49.03ms)⑦Seederを作成する!!まずはデフォルトにあるDatabaseSeeder.phpから
"Seederとは??"
ダミーデータ。データベースにコマンドを実行するだけでデータを入れられる!!
DatabaseSeeder.phpに以下のソースを貼り付け$this->call(PeopleTableSeeder::class);呼び出される側のPeopleTableSeeder.phpを作成
PeopleTableSeeder.phpに以下のソースを貼り付け<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class PeopleTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $param = [ 'id' => 1, 'name' => 'test', 'mail' => 'test', 'age' => 20, ]; DB::table('people')->insert($param); } }⑧Seederを実行する!
MacBook-Pro docker-test % docker-compose exec app bash root@36ffabe3ffc9:/work# php artisan db:seed Seeding: Database\Seeders\PeopleTableSeeder Seeded: Database\Seeders\PeopleTableSeeder (29.08ms) Database seeding completed successfully.これでテーブルはできたし、ダミーデータもできました!あとはweb上で表示すれば完璧ですね!!
データベースに登録されているデータを表示する
①views/hello.blade.phpを作成
以下のソースhello.blade.phpを変更<html> <body> <h1>HELLO Larabel<h1> <h1>DBから表示しているよ<h1> <tr><th>Name</th><th>Mail</th><th>Age</th></tr> <br> @foreach ($items as $item) <tr> <td>{{$item -> name}}</td> <td>{{$item -> mail}}</td> <td>{{$item -> age}}</td> </tr> @endforeach </body> </html>②Controllers/HelloController.phpを変更
以下のソースに変更する<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\KrononUser; use Faker\Provider\ar_JO\Person; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; class HelloController extends Controller { public function index() { $items = DB::table('people')->get(); return view('hello.hello',['items' => $items]); } }③作成したアプリにアクセス!!
http://127.0.0.1:10080/hello
これでDBさきほどSeederでいれたダミーデータが表示されていたら完璧ですね!!!
最後にcommmitして終了!!!MacBook-Pro docker-test % git add . MacBook-Pro docker-test % git commit -m "db complete" MacBook-Pro docker-test % git pushあとはこれを世の中に出すためAWSを使えればOK!!!
次回にご期待!!お疲れ様でした
こういった環境構築かなり疲れますよねーもうへとへとです
全体像を確認したければこちら
【ギリ初心者向け】Laravel Docker AWS(EC2) Webアプリ(PHP)を0から簡単にデプロイする方法(無料)① ー全体像編ー
https://qiita.com/SG_Sg/items/6b8ce48567b6b6602805
次回は③
【ギリ初心者向け】Laravel Docker AWS(EC2) Webアプリ(PHP)を0から簡単にデプロイする方法(無料)③ ーEC2にデプロイ編ー
を予定してます。参考文献
【超入門】20分でLaravel開発環境を爆速構築するDockerハンズオン
https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
↑の方の記事めちゃくちゃわかりやすいし、細かく書いてあるのでこちらも参考にしていただければ
特に最初の初期設定の情報のまとまりがすばらしいです。この記事の上位互換。
- 投稿日:2021-01-11T14:59:22+09:00
【ギリ初心者向け】Laravel Docker AWS(EC2) Webアプリ(PHP)を0から簡単にデプロイする方法(無料)② ーDocker開発環境構築編ー
0.概要
何度もいいますが、知らない単語が出た瞬間ググってください!!!!!
①の全体像編がこちらにあるのでこちらを一読してからだと理解がスムーズかと!!!
https://qiita.com/SG_Sg/items/6b8ce48567b6b6602805
今回で作成するは具体的にいうと赤いとこ
Dokcerを利用してLaravel(PHP)のプロジェクトを作成(dockerの説明)
さて具体的にDockerをを利用して環境構築したいが、、、、
「Dockerってなんやねん」「Docker使うメリットなんやねん」「開発現場でどうやって使うねん」
疑問だらけのため、ざっっくり説明してからにしよう!(最初いくらググってもマジでちょっと何言ってるかわかんないっすねって感じでした)
Dockerとは??等細かいところはググってくださいな、、1.Dockerのメリット、なぜプロのエンジニアは使うのか
①MACを汚さずに環境とプロジェクト、プログラムを作れる!
どういうことかって???
Dockerを使わずにプロジェクトをつくるとどうなるかみてみよう!!
こんな風にバージョン違いだったり他のPCの環境に依存してしまう!!Dockerを使うプロジェクトをつくるとどうなるかみてみよう!!
Dockerを使えばDockerの中に環境をインストールしてプロジェクトごとgithub上にのっけるイメージ
Docker内に必要な環境をインストールするから
Macに必要な環境をインストールしなくて良い!!2.まずはいろいろ準備(GitとかDockerをインストールとか)
以下デフォルトのターミナル使ってるよ!
①githubアカウントの作成
https://github.com
②Gitの初期設定
すみません。。「Mac git初期設定」でググってください汗
最終的に下記のように表示されればokです。MacBook-Pro% git config --list | grep user user.name=[githubname] user.email=67626524+[githubname]@users.noreply.github.com③GithubSSH接続設定
これも「Mac Github SSH接続」とかでググってね!エラーとかがでたらまたそのエラー文をぐぐるんや!!!MacBook-Pro% ssh -T github.com Hi [githubの名前]! You've successfully authenticated, but GitHub does not provide shell access.こんなかんじに
successfully
の文字が出れば大体いける!④ docker, docker-compose(起動したり停止できたりするやつ)のインストール
Docker for Macをインストール
https://docs.docker.com/docker-for-mac/install
インストール確認(なにかインストールしたら必ずインストールされてるか確認!)MacBook-Pro% docker --version Docker version 20.10.0, build 7287ab3 MacBook-Pro% docker-compose --version docker-compose version 1.27.4, build 405241923.Dockerプロジェクトを作る!!
3-1.github動作確認まで
①プロジェクト(ディレクトリ)を作成する
私はホームディレクトリに「LaravelProjext」をつくってその中に「docker-test」ディレクトリを作成!!このへんはご自由に!!!MacBook-Pro % mkdir LaravelProject MacBook-Pro % cd LaravelProject MacBook-Pro LaravelProject % mkdir docker-test MacBook-Pro LaravelProject % cd docker-test MacBook-Pro docker-test %②リモートリポジトリを作る
作り方は「giuhubリモートリポジトリ 作成」でググろう!!
「DockerLaravelTestProject」を作成
②リモートリポジトリにテストプッシュ!Gitが機能しているかの確認
//README.mdファイルを作成 MacBook-Pro docker-test % echo "README import First" >> README.md //git管理できるようにする MacBook-Pro docker-test % git init //ステージングにaddする! MacBook-Pro docker-test % git add . //commitする!! MacBook-Pro docker-test % git commit -m "first commit README" //push先のリモートリポジトリをGithubに!!(SSHで接続 ※URLはSSH) MacBook-Pro docker-test % git remote add origin git@github.com:SugiKoki/DockerLaravelTestProject.git //リモートリポジトリ先を確認!しっかりgithubのプロジェクトになっている MacBook-Pro docker-test % git remote -v origin git@github.com:SugiKoki/DockerLaravelTestProject.git (fetch) origin git@github.com:SugiKoki/DockerLaravelTestProject.git (push) //gitのブランチを確認 MacBook-Pro docker-test % git branch * master //gitのブランチ(master)にプッシュ MacBook-Pro docker-test % git push -u origin master kokisugi@sugihirokinoMacBook-Pro docker-test %③VScodeで確認する
しっかりディレクトリの中に書かれていることを確認!!これで作業できる!!!!3-2.最終ゴールの確認
ファイル構成はこんな感じをめざすよ!!
backendの中が実際にプログラミングするところ!!3-3.アプリケーションサーバー(app)を作る(入れる)
①docker-compose.yml を作成する
MacBook-Pro docker-test % touch docker-compose.ymlVScodeでディレクトリを開いて以下のようにする
以下が内容version: "3.8" services: app: build: ./infra/php volumes: - ./backend:/work web: image: nginx:1.18-alpine ports: - 10080:80 volumes: - ./backend:/work - ./infra/nginx/default.conf:/etc/nginx/conf.d/default.conf working_dir: /work db: build: ./infra/mysql volumes: - db-store:/var/lib/mysql volumes: db-store:上のappってとこがアプリケーションサーバー
真ん中のwebってとこがwebサーバー
下のdbがデータベースサーバー
作りたい環境をここで設定してこれに合わせてDockerにインストールしていく!!!
②./docker/php/Dockerfile を作成する
MacBook-Pro docker-test % mkdir -p infra/php MacBook-Pro docker-test % touch infra/php/DockerfileFROM php:7.4-fpm-buster SHELL ["/bin/bash", "-oeux", "pipefail", "-c"] ENV COMPOSER_ALLOW_SUPERUSER=1 \ COMPOSER_HOME=/composer COPY --from=composer:1.10 /usr/bin/composer /usr/bin/composer RUN apt-get update && \ apt-get -y install git unzip libzip-dev libicu-dev libonig-dev && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* && \ docker-php-ext-install intl pdo_mysql zip bcmath COPY ./php.ini /usr/local/etc/php/php.ini WORKDIR /workここで行っていること
Composerコマンドのインストール
Laravelで必要な
bcmath, pdo_mysql が不足しているのでインストール③./docker/php/Dockerfile を作成する
MacBook-Pro docker-test % touch infra/php/php.ini以下のコードをphp.iniへ
zend.exception_ignore_args = off expose_php = on max_execution_time = 30 max_input_vars = 1000 upload_max_filesize = 64M post_max_size = 128M memory_limit = 256M error_reporting = E_ALL display_errors = on display_startup_errors = on log_errors = on error_log = /dev/stderr default_charset = UTF-8 [Date] date.timezone = Asia/Tokyo [mysqlnd] mysqlnd.collect_memory_statistics = on [Assertion] zend.assertions = 1 [mbstring] mbstring.language = Japanese3-4.ウェブサーバー(web)を作る(入れる)
①docker/nginx/default.conf を作成する
MacBook-Pro docker-test % mkdir infra/nginx MacBook-Pro docker-test % touch infra/nginx/default.confserver { listen 80; server_name example.com; root /work/public; add_header X-Frame-Options "SAMEORIGIN"; add_header X-XSS-Protection "1; mode=block"; add_header X-Content-Type-Options "nosniff"; index index.php; charset utf-8; location / { try_files $uri $uri/ /index.php?$query_string; } location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; } error_page 404 /index.php; location ~ \.php$ { fastcgi_pass app:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } }3-5.データベース(db)サーバーを作る(入れる)
①./docker/mysql/Dockerfile を作成する
MacBook-Pro docker-test % mkdir infra/mysql MacBook-Pro docker-test % touch infra/mysql/Dockerfile以下のコードを貼り付ける!
FROM mysql:8.0 ENV MYSQL_DATABASE=sg_db \ MYSQL_USER=sg \ MYSQL_PASSWORD=sg \ MYSQL_ROOT_PASSWORD=sg \ TZ=Asia/Tokyo COPY ./my.cnf /etc/mysql/conf.d/my.cnf RUN chmod 644 /etc/mysql/conf.d/my.cnfここは任意なので好きにしてもらって結構!
データベースを接続するときの名前とパスワードだから
忘れないようにおぼえておこう!MYSQL_USER=sg \ MYSQL_PASSWORD=sg \ MYSQL_ROOT_PASSWORD=sg \②docker/mysql/my.cnf を作成する
MacBook-Pro docker-test % touch infra/mysql/my.cnf以下のコードを貼り付ける
[mysqld] # character set / collation character_set_server = utf8mb4 collation_server = utf8mb4_0900_ai_ci # timezone default-time-zone = SYSTEM log_timestamps = SYSTEM # Error Log log-error = mysql-error.log # Slow Query Log slow_query_log = 1 slow_query_log_file = mysql-slow.log long_query_time = 1.0 log_queries_not_using_indexes = 0 # General Log general_log = 1 general_log_file = mysql-general.log [mysql] default-character-set = utf8mb4 [client] default-character-set = utf8mb4これで3つのコンテナが完成!!!!しっかり最終的なディレクトリ構成になりましたか???
3-6.Docker起動!(中身の確認)
①dockerを動かしたいときに使うよ!
MacBook-Pro docker-test % docker-compose up -d --build ・・・・ Successfully built 9813d5181de8 Successfully tagged docker-test_db:latest Creating docker-test_app_1 ... done Creating docker-test_db_1 ... done Creating docker-test_web_1 ... done MacBook-Pro docker-test %上の感じにdoneとでたらそれらはOKということ!
・動かした状態でどう動いてるのか確認!MacBook-Pro docker-test % docker-compose ps Name Command State Ports ---------------------------------------------------------------------------------- docker-test_app_1 docker-php-entrypoint php-fpm Up 9000/tcp docker-test_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp docker-test_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:10080->80/tcpちなみにリスタートしたりしたかったら、一度止めたかったらdown!
MacBook-Pro docker-test % docker-compose down //一度止めたらまた起動しよう MacBook-Pro docker-test % docker-compose up -d --buildDockerに入れたそれぞれサーバー(コンテナ)内に入れたのバージョン確認する方法
・appサーバー
MacBook-Pro docker-test % docker-compose exec app bash //PHPのバージョン確認 root@5ce9c9fa1435:/work# php -V //composerのバージョン確認 root@5ce9c9fa1435:/work# composer -v //インストール済みの拡張機能一覧の確認 root@5ce9c9fa1435:/work# php -m //dockerから出る root@5ce9c9fa1435:/work# exit・webサーバー
MacBook-Pro docker-test % docker-compose exec web nginx -v・DBサーバー
MacBook-Pro docker-test % docker-compose exec db bash //mysqlのバージョン確認 root@6bcf6de7e31e:/# mysql -V //dockerから出る root@6bcf6de7e31e:/work# exitこれでDocker環境構築終了だ!!!さあLaravelを入れてプログラミングしていきます!!!
定期的にGitコミットはしていったほうがよいですよ!
MacBook-Pro docker-test % git add . MacBook-Pro docker-test % git commit -m "laravel commit" MacBook-Pro docker-test % git push3-7.Laravelをインストールする(appサーバー上でやります)
①appに入って、Laravelをインストール
MacBook-Pro docker-test % docker-compose exec app bash root@5ce9c9fa1435:/work# composer create-project --prefer-dist "laravel/laravel=8.*" . //laravelバージョン確認 root@5ce9c9fa1435:/work# php artisan -V Laravel Framework 8.21.0 root@5ce9c9fa1435:/work# exit②Laravel ウェルカム画面の表示
http://127.0.0.1:10080
にアクセス!!!
・VScode確認するとbackendこんな感じになっているはず!
3-8.プログラミングしてみる!!(html,blade.phpファイルを作って表示できるか確認!)
HTML(.blade.php)を表示してみよう!!MVCモデルで進めていきます!
①backend/resources/viewsのなかに
helloディレクトリを作成
helloディレクトリの中にhello.blade.phpを作成<html> <body> <h1>HELLO Larabel<h1> </body> </html>②URLから呼び出すコントローラーを設定!
・backend/routes/web.phpを修正
以下のコードをbackend/routes/web.phpに追加する!/// URL/helloのとき「HelloController」を呼び出す Route::get('hello', 'App\Http\Controllers\HelloController@index');③backend/app/http/Controllers/の中に
HelloController.phpを作成する
以下のコードをbackend/app/http/Controllers/の中に
HelloController.phpに追加する!<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\KrononUser; use Faker\Provider\ar_JO\Person; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; class HelloController extends Controller { public function index() { return view('hello.hello'); } }④URLにアクセスして表示!!!
http://127.0.0.1:10080/hello
3-9.データベースに接続してみる!!!!
ソースコード上で backend/.env のDB接続設定を修正する。
①以下のコードに変更!!DBサーバー作った時のに合わせながら!DB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=sg_db DB_USERNAME=sg DB_PASSWORD=sg
②backend/.env.example も同様に変更するDB_CONNECTION=mysql DB_HOST=db DB_PORT=3306 DB_DATABASE=sg_db DB_USERNAME=sg DB_PASSWORD=sgちなみにgitcloneした際はここからやれば動きます
③Laravelインストール
app コンテナにはいってからいろいろ
MacBook-Pro docker-test % docker-compose exec app bash //コンポーザーをインストールする root@36ffabe3ffc9:/work# composer install //.env.exampleを.envファイルにコピーする root@36ffabe3ffc9:/work# cp .env.example .env //このコマンドでアプリケーションキーを生成できます。 root@36ffabe3ffc9:/work# php artisan key:generate Application key set successfully. //デフォルトで入っているマイグレーションを実行!!デフォルトのテーブルがDBに反映される root@36ffabe3ffc9:/work# php artisan migrate Migration table created successfully. Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table (40.88ms) Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table (37.06ms) Migrating: 2019_08_19_000000_create_failed_jobs_table Migrated: 2019_08_19_000000_create_failed_jobs_table (35.00ms)これでデフォルトですが、DBにテーブルなどが入りました!!
④データベースの確認(デフォルト)
MacBook-Pro docker-test % docker-compose exec db bash //設定したUSERでmysqlにログイン root@d94d20dd2212:/# mysql -u sg -p //設定したPASSWORDを入力.envに書いた!! Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | sg_db | +--------------------+ 2 rows in set (0.01 sec) mysql> use sg_db Database changed mysql> show tables; +-----------------+ | Tables_in_sg_db | +-----------------+ | failed_jobs | | migrations | | password_resets | | users | +-----------------+⑤migrationをつくってアプリに反映する!!
/backend/database/migration/2021_01_03_090902_create_people_table.php
を作成
※/backend/database/migration/の中にデフォルトでいろいろ入っているからそれをコピーすればいいかも!!
以下のコードを貼り付け!<?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePeopleTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('people', function (Blueprint $table) { $table->increments('id'); $table->string('name'); $table->string('mail'); $table->integer('age'); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('people'); } }⑥migrationを実行(appコンテナ)の中に入って実行!
appのなかじゃないとdockerにあるDBコンテナに届かないMacBook-Pro docker-test % docker-compose exec app bash root@36ffabe3ffc9:/work# php artisan migrate Migrating: 2021_01_03_090902_create_people_table Migrated: 2021_01_03_090902_create_people_table (49.03ms)⑦Seederを作成する!!まずはデフォルトにあるDatabaseSeeder.phpから
"Seederとは??"
ダミーデータ。データベースにコマンドを実行するだけでデータを入れられる!!
DatabaseSeeder.phpに以下のソースを貼り付け$this->call(PeopleTableSeeder::class);呼び出される側のPeopleTableSeeder.phpを作成
PeopleTableSeeder.phpに以下のソースを貼り付け<?php namespace Database\Seeders; use Illuminate\Database\Seeder; use Illuminate\Support\Facades\DB; class PeopleTableSeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $param = [ 'id' => 1, 'name' => 'test', 'mail' => 'test', 'age' => 20, ]; DB::table('people')->insert($param); } }⑧Seederを実行する!
MacBook-Pro docker-test % docker-compose exec app bash root@36ffabe3ffc9:/work# php artisan db:seed Seeding: Database\Seeders\PeopleTableSeeder Seeded: Database\Seeders\PeopleTableSeeder (29.08ms) Database seeding completed successfully.これでテーブルはできたし、ダミーデータもできました!あとはweb上で表示すれば完璧ですね!!
データベースに登録されているデータを表示する
①views/hello.blade.phpを作成
以下のソースhello.blade.phpを変更<html> <body> <h1>HELLO Larabel<h1> <h1>DBから表示しているよ<h1> <tr><th>Name</th><th>Mail</th><th>Age</th></tr> <br> @foreach ($items as $item) <tr> <td>{{$item -> name}}</td> <td>{{$item -> mail}}</td> <td>{{$item -> age}}</td> </tr> @endforeach </body> </html>②Controllers/HelloController.phpを変更
以下のソースに変更する<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Models\KrononUser; use Faker\Provider\ar_JO\Person; use Illuminate\Support\Facades\Auth; use Illuminate\Support\Facades\DB; class HelloController extends Controller { public function index() { $items = DB::table('people')->get(); return view('hello.hello',['items' => $items]); } }③作成したアプリにアクセス!!
http://127.0.0.1:10080/hello
これでDBさきほどSeederでいれたダミーデータが表示されていたら完璧ですね!!!
最後にcommmitして終了!!!MacBook-Pro docker-test % git add . MacBook-Pro docker-test % git commit -m "db complete" MacBook-Pro docker-test % git pushあとはこれを世の中に出すためAWSを使えればOK!!!
次回にご期待!!お疲れ様でした
こういった環境構築かなり疲れますよねーもうへとへとです
全体像を確認したければこちら
【ギリ初心者向け】Laravel Docker AWS(EC2) Webアプリ(PHP)を0から簡単にデプロイする方法(無料)① ー全体像編ー
https://qiita.com/SG_Sg/items/6b8ce48567b6b6602805
次回は③
【ギリ初心者向け】Laravel Docker AWS(EC2) Webアプリ(PHP)を0から簡単にデプロイする方法(無料)③ ーEC2にデプロイ編ー
を予定してます。参考文献
【超入門】20分でLaravel開発環境を爆速構築するDockerハンズオン
https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4
↑の方の記事めちゃくちゃわかりやすいし、細かく書いてあるのでこちらも参考にしていただければ
特に最初の初期設定の情報のまとまりがすばらしいです。この記事の上位互換。
- 投稿日:2021-01-11T14:36:43+09:00
Laravelで 【composer install 】した時に 【command not found: composer】と表示された時
composer install時の、エラー処理方法
【状態】
Laravelをdockerで環境構築し、下記コマンドでコンテナを立ち上げた状態docker-compose up -d --build〜補足説明〜
-d
→デタッチド・モード: バックグラウンドでコンテナを実行するということ。
--build
→Dockerfileの再読み込みをしてくれて、更新した情報を反映してくれる。【問題】
コンテナが立ち上がったので、 http://localhost/にアクセスすると、下記のようなエラー文が表示された!
【原因】
composer が install できていなかった、、、【解決策】
1.Laravelが入っているディレクトリに移動(
cd
でディレクトリを変更しながらapp
やbootstrap
が入っているフォルダに移ってください)2.インストールを実行
composer installor
composer updateで実行できます。
※上記で指定したディレクトリでないと、
command not found: composer
と表示されてしまうので、注意してください!!【感想】
最近は調べる力ばかり、伸びている気がしますね、、、There is no shame in not knowing; the shame lies in not finding out
知らないことは恥ではない。知ろうとしないことこそ恥である
と言い聞かせて、
- 投稿日:2021-01-11T12:24:15+09:00
[Laravel]LaravelでBLOB型のMigrationに失敗した件
LaravelでのMigrationに失敗した件について。
LaravelでMigrationしたところ、
Method Illuminate\Database\Schema\Blueprint::blob does not exist.とのエラーが出ました。
環境
- windows10
- laravel6
- php(7.4.6)
結果
Laravelにはblog型はないとのこと。
代わりにbinary型が用意されているとのことでした。さっそくデータ型を変更。
hoge_table.phppublic function up() { Schema::create('hoges', function (Blueprint $hoge) { /****省略****/ $hoge->binary('****'); }); }通りました?
次からはきちんと確認すべきですね。。
- 投稿日:2021-01-11T03:39:30+09:00
【Laravel】LaradockでPostgreSQLを起動できないときの対処法
事象
psqlでデータベースを作ることを試みるが以下のエラーが発生し、失敗。
laradock % docker-compose exec workspace psql -U default -h postgres psql: could not translate host name "postgres" to address: Name or service not knownlaradock % docker-compose exec workspace psql -U default -h postgres psql: could not connect to server: Connection refused Is the server running on host "postgres" (172.21.0.4) and accepting TCP/IP connections on port 5432?確認事項と解消法
1. 本当にコンテナは起動しているのか?
docker-compose up -d
コマンドで全てdoneになっていたが本当に起動しているか
docker-compose ps
コマンドで確認する。laradock % docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------------ laravel-sns_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp laravel-sns_php-fpm_1 docker-php-entrypoint php-fpm Up 0.0.0.0:9000->9000/tcp laravel-sns_postgres_1 docker-entrypoint.sh postgres Exit 1 laravel-sns_workspace_1 docker-php-entrypoint php-fpm Up 9000/tcp起動できていないことを確認し、
docker-compose up -d
コマンドを再度実行してみる。laradock % docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------------------------------- laravel-sns_mailhog_1 MailHog Up 0.0.0.0:1025->1025/tcp, 0.0.0.0:8025->8025/tcp laravel-sns_nginx_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp laravel-sns_php-fpm_1 docker-php-entrypoint php-fpm Up 0.0.0.0:9000->9000/tcp laravel-sns_postgres_1 docker-entrypoint.sh postgres Up 0.0.0.0:5432->5432/tcp laravel-sns_workspace_1 docker-php-entrypoint php-fpm Up 9000/tcp全て起動した!
2. laradock配下の
.env
ファイルの確認laradock配下の
.env
ファイルのDATA_PATH_HOST
を確認。
デフォルトだと以下のようになっている。DATA_PATH_HOST=~/.laradock/dataデフォルトのままだとローカルPCの共通のディレクトリを参照してしまうので動きません。
以下のように変更をします。DATA_PATH_HOST=../data3.
postgresql.conf
ファイルのポート番号を確認私はここを確認し、解消しました。
data
ディレクトリにあるpostgresql.conf
ファイルのポート番号を確認。# port = 5432 # (change requires restart)あれ?5433じゃね?しかもコメントアウトされてる...
ということで修正し、docker-compose up -d
コマンドを再度実行したら
無事データベースを作成できました!参考サイト
- 投稿日:2021-01-11T00:11:48+09:00
Docker(docker-compose)で、Laravelの環境を作成
初めに
もともと作られた方のものを参考(パクって)展開
※こちらの方のページを参考(パク…)こんな感じで作成
・php7.4 / mysql8 / nginx1.19 のイメージで作成
・sampleprojectというプロジェクト名で作成
・確認はDocker Desktop for Windows で確認フォルダ構成
laravel ├ docker-compose.yml ├ docker │ ├ php │ │ ├ php.ini │ │ └ Dockerfile │ └ nginx │ └ default.conf └ server各ファイル内容
docker-compose.ymlversion: '3' services: laravel_php: container_name: laravel_php build: ./docker/php volumes: - ./server:/var/www laravel_nginx: image: nginx:1.19 container_name: laravel_nginx ports: - 80:80 volumes: - ./server:/var/www - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - laravel_php laravel_db: image: mysql:8.0 container_name: laravel_db environment: MYSQL_ROOT_PASSWORD: rootpass MYSQL_DATABASE: sampleproject MYSQL_USER: dbuser MYSQL_PASSWORD: dbpass TZ: 'Asia/Tokyo' 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./docker/nginx/default.conf[Date] date.timezone = "Asia/Tokyo" [mbstring] mbstring.internal_encoding = "UTF-8" mbstring.language = "Japanese"./docker/php/DockerfileFROM php:7.4-fpm COPY php.ini /usr/local/etc/php/ RUN apt-get update && apt-get -y upgrade RUN apt-get install -y zlib1g-dev && apt-get install -y libzip-dev RUN docker-php-ext-install pdo_mysql zip COPY --from=composer /usr/bin/composer /usr/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"./docker/nginx/default.confserver { index index.php index.html; server_name localhost; root /var/www/sampleproject/public; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.php$ { fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass laravel_php:9000; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }実行コマンド
1.コンテナ構築
docker-compose up -d
2.Laravelプロジェクト作成
docker exec -ti laravel_php bashコンテナ内(バージョン6の作成コマンド)
composer create-project "laravel/laravel=6.*" sampleproject
プロジェクト作成後(コンテナ内)
cd sampleproject chmod -R 777 storage chmod -R 777 bootstrap/cache php artisan serve※localhostのみで接続できるはず
3.DB関連
.env の編集(プロジェクトフォルダ以下)
.envDB_CONNECTION=mysql DB_HOST=laravel_db DB_PORT=3306 DB_DATABASE=sampleproject DB_USERNAME=dbuser DB_PASSWORD=dbpass※composeのymlで記述した参考に
接続確認
php argisan migrate