20210511のPHPに関する記事は6件です。

Laravel6.x インストール方法

前提 composerはインストール済みであること。 composerとは,PHPアプリケーションのライブラリ、パッケージの依存関係を管理するツール。 composerインストール方法 1.composerを使用してLaravel6をインストールする。 composer create-project --prefer-dist laravel/laravel プロジェクト名 "6.*" crete-project --- composrでプロジェクトを作成 --prefer-dist --- リリース版、安定版をダウンロードする laravel/laravel --- ヘッダー名/パッケージ名 "6.x" --- バージョンの指定(指定していないと最新バージョンがインストールされる) 2..envの設定 DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=データベース名 DB_USERNAME=ユーザー名 DB_PASSWORD=パスワード 3./strageのパーミッションの変更 chmod 777 -R storage 4.bootstrap/cacheのパーミッションの設定 chmod -R 777 bootstrap/cache これでhttp://[IPアドレス]/[Laravelファイル名]/publicにアクセスするとLaravelのホーム画面が表示できるようになります!!!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのObserverについて

はじめに Observerではモデルのライフサイクル(create, updateなど)に合わせて設定した処理を行うようにすることができる。モデルをいじる時に毎回行う処理などを省略できるのでとても便利である。 ObserverファイルはLaravel 6.X以降であればphp artisan make:observer {Model名}Observer --model={Model名}で生成することができる({Model名}はモデルの名前で置き換えるという意味、Userモデルだったら{Model}=User)。それ以前のバージョンではApp\Observer配下に作成する。ファイル名は{Model名}Observer.phpと書く。 ReaDoubleでは、サービスプロバイダの一つであるbootメソッドで登録し、AppServiceProviderでオブザーバを登録しているが、この記事ではtraitを利用して登録する。traitとはコードを再利用するための仕組みの一つ。 オブザーバーの設定 オブザーバーは上記の方法で生成すると以下のような内容のファイルが生成される。そのままだが、createdメソッドには作られた後に行う処理を書く。updatedメソッドには更新した後に行う処理を書く。deletedメソッドには削除した後に行う処理を書く。restoredメソッドには再登録された後に行う処理を書く。forceDeletedメソッドには物理削除した後に行う処理を書く。 App\Observer\{Model名}Observer.php <?php namespace App\Observers; use App\Models\{Model名}; class {Model名}Observer { /** * Handle the {Model名} "created" event. * * @param \App\Models\{Model名} $model * @return void */ public function created({Model名} $model) { // } /** * Handle the User "updated" event. * * @param \App\Models\{Model名} $model * @return void */ public function updated({Model名} $model) { // } /** * Handle the User "deleted" event. * * @param \App\Models\{Model名} $model * @return void */ public function deleted({Model名} $model) { // } /** * Handle the User "restored" event. * * @param \App\Models\{Model名} $model * @return void */ public function restored({Model名} $model) { // } /** * Handle the User "force deleted" event. * * @param \App\Models\{Model名} $model * @return void */ public function forceDeleted({Model名} $model) { // } } あとは自分のしたい場所にしたい処理を書けば良い。デフォルトでは過去形のみが生成されるが、現在進行形(ing)の形でも動くようだ(処理前に呼び出される)。 オブザーバーの登録 まずはtraitに以下のように書く。bootクラス名はそのクラスが呼び出された時にそこに書かれた処理を行う。 App\Traits\{Model名}Observable.php <?php namespace App\Traits; trait {Model名}Observable.php { public static function boot{Model名}Observable() { self::observe({Model名}Observer::class); } } それを該当するModelsに呼び出す。 App\Models\{Model名} <?php namespace App\Models; use App\Traits\{Model名}Observable; use Illuminate\Database\Eloquent\Model; class {Model名} extends Model { use {Model名}Observable; } これをすることによって該当するモデルのEloquentが走ったときにboot{Model名}Observableメソッドを行うことが出来る。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

composer requireで could not delete エラーが出てきたときの解消法

*WindowsPCでvagrantで仮想環境を立てて、lamp環境を使っています 背景 doctrine/dbalのライブラリが必要になったのでインストールすることに。 composer require doctrine/dbalを実行 [vagrant@localhost testproject]$ composer require doctrine/dbal Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2 Using version ^3.1 for doctrine/dbal ./composer.json has been updated Loading composer repositories with package information Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2 Updating dependencies (including require-dev) ^[cPackage operations: 5 installs, 0 updates, 0 removals As there is no 'unzip' command installed zip files are being unpacked using the PHP zip extension. This may cause invalid reports of corrupted archives. Besides, any UNIX permissions (e.g. executable) defined in the archives will be lost. Installing 'unzip' may remediate them. - Installing composer/package-versions-deprecated (1.11.99.1): Loading from cache Plugin installation failed (include(/var/www/html/testproject/vendor/composer/package-versions-deprecated/src/PackageVersions/Installer.php): failed to open stream: No such file or directory), rolling back - Removing composer/package-versions-deprecated (1.11.99.1) Installation failed, reverting ./composer.json to its original content. [RuntimeException] Could not delete /var/www/html/testproject/vendor/composer/package-versions-deprecated/src/PackageVersions: require [--dev] [--prefer-source] [--prefer-dist] [--fixed] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] 上記のような Could not deleteエラー発生 解決法 まずは手早く結論から。。。! ① composer require composer/package-versions-deprecated --dev --prefer-source の実行 参考:https://github.com/barryvdh/laravel-ide-helper/issues/1135 [vagrant@localhost testproject]$ composer require composer/package-versions-deprecated --dev --prefer-source Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2 Using version 1.11.99.1 for composer/package-versions-deprecated ./composer.json has been updated Loading composer repositories with package information Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2 Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing composer/package-versions-deprecated (1.11.99.1): Cloning 7413f0b55a Package fzaninotto/faker is abandoned, you should avoid using it. No replacement was suggested. Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested. Writing lock file Generating optimized autoload files composer/package-versions-deprecated: Generating version class... composer/package-versions-deprecated: ...done generating version class > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: laravel/ui Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. 62 packages you are using are looking for funding. Use the `composer fund` command to find out more! ↑このコマンドを実行したことによりとりあえず第一段階はOK! やってみたこと 元々のエラーで、 - Installing composer/package-versions-deprecated (1.11.99.1): Loading from cache Plugin installation failed (include(/var/www/html/testproject/vendor/composer/package-versions-deprecated/src/PackageVersions/Installer.php): failed to open stream: No such file or directory), rolling back - Removing composer/package-versions-deprecated (1.11.99.1) こうでてたのでおそらくこのcomposer/package-versions-deprecatedは現状とりあえずなさそうだと判断し、 入れてみることにした いざ実行 [vagrant@localhost testproject]$ composer require composer/package-versions-deprecated Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2 Using version 1.11.99.1 for composer/package-versions-deprecated ./composer.json has been updated Loading composer repositories with package information Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2 Updating dependencies (including require-dev) Package operations: 1 install, 0 updates, 0 removals - Installing composer/package-versions-deprecated (1.11.99.1): Loading from cache Plugin installation failed (include(/var/www/html/testproject/vendor/composer/package-versions-deprecated/src/PackageVersions/Installer.php): failed to open stream: No such file or directory), rolling back - Removing composer/package-versions-deprecated (1.11.99.1) Installation failed, reverting ./composer.json to its original content. [RuntimeException] Could not delete /var/www/html/testproject/vendor/composer/package-versions-deprecated/src/PackageVersions: require [--dev] [--prefer-source] [--prefer-dist] [--fixed] [--no-progress] [--no-suggest] [--no-update] [--no-scripts] [--update-no-dev] [--update-with-dependencies] [--update-with-all-dependencies] [--ignore-platform-reqs] [--prefer-stable] [--prefer-lowest] [--sort-packages] [-o|--optimize-autoloader] [-a|--classmap-authoritative] [--apcu-autoloader] [--] [<packages>]... すると同じようなエラーが出る。 しばらくググっていたら参考に取り上げた記事を発見(https://github.com/barryvdh/laravel-ide-helper/issues/1135) --dev --prefer-sourceこれを付けたことにより無事インストール完了。(この意味は分からないが。。。) ② 再度 composer require doctrine/dbal の実行 [vagrant@localhost testproject]$ composer require doctrine/dbal Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2 Using version ^3.1 for doctrine/dbal ./composer.json has been updated Loading composer repositories with package information Warning from https://repo.packagist.org: You are using an outdated version of Composer. Composer 2 is now available and you should upgrade. See https://getcomposer.org/2 Updating dependencies (including require-dev) Package operations: 4 installs, 0 updates, 0 removals - Installing doctrine/event-manager (1.1.1): Downloading (100%) - Installing doctrine/deprecations (v0.5.3): Downloading (100%) - Installing doctrine/cache (1.11.0): Downloading (100%) - Installing doctrine/dbal (3.1.0): Downloading (100%) doctrine/cache suggests installing alcaeus/mongo-php-adapter (Required to use legacy MongoDB driver) Package fzaninotto/faker is abandoned, you should avoid using it. No replacement was suggested. Package phpunit/php-token-stream is abandoned, you should avoid using it. No replacement was suggested. Writing lock file Generating optimized autoload files composer/package-versions-deprecated: Generating version class... composer/package-versions-deprecated: ...done generating version class > Illuminate\Foundation\ComposerScripts::postAutoloadDump > @php artisan package:discover --ansi Discovered Package: facade/ignition Discovered Package: fideloper/proxy Discovered Package: laravel/tinker Discovered Package: laravel/ui Discovered Package: nesbot/carbon Discovered Package: nunomaduro/collision Package manifest generated successfully. 65 packages you are using are looking for funding. Use the `composer fund` command to find out more! ①つめのコマンド実行によってエラーが潰せたのか、 Could not delete のエラーもでることなく無事インストール完了!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

laravel fill() メソッドの定義場所 個人メモ

目的 各モデルクラスでモデルに配列を追加するときに使用するfill()メソッドの記載場所をメモ的にまとめておく 場所 アプリ名ディレクトリ/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.phpの中に記載されている。 下記に定義部分を抜粋して記載する。 アプリ名ディレクトリ/vendor/laravel/framework/src/Illuminate/Database/Eloquent/Model.php /** * Fill the model with an array of attributes. * * @param array $attributes * @return $this * * @throws \Illuminate\Database\Eloquent\MassAssignmentException */ public function fill(array $attributes) { $totallyGuarded = $this->totallyGuarded(); foreach ($this->fillableFromArray($attributes) as $key => $value) { $key = $this->removeTableFromKey($key); // The developers may choose to place some attributes in the "fillable" array // which means only those attributes may be set through mass assignment to // the model, and all others will just get ignored for security reasons. if ($this->isFillable($key)) { $this->setAttribute($key, $value); } elseif ($totallyGuarded) { throw new MassAssignmentException(sprintf( 'Add [%s] to fillable property to allow mass assignment on [%s].', $key, get_class($this) )); } } return $this; }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel×Heroku】シンボリックリンクが上手くいかない時の対処法

"laravel シンボリックリンク" を検索すると、多くの関連記事が出てくると思います。 自分も、今回laravelアプリを開発していて、本番環境でシンボリックリンクが効いておらずハマったのですが、全く同じ境遇という方が見受けられなかったため、記事を書いています。 対象者 ・Laravelでstorageディレクトリを使った画像表示、ファイルの操作を行う方 前提 ・Laravelアプリを、Herokuにデプロイする方 ローカル環境でシンボリックリンクが上手くいっていない方は Laravelでpublicフォルダ配下に保存したファイルにアクセスできないを参考にしてみてください。 まずはこれを試してみる 今回の解決策を述べる前に、まずまだ何も試していない方は、以下を確認してみてください。 そもそも本番環境にシンボリックリンクが無い。 laravelで普通に開発をしている場合、ローカル環境で設定したシンボリックリンクはGitにpushされません。本番環境にGitと連携してpushする場合、Gitに無いものはpushされないのは当然のことです。 これを解消するには、アプリのホームディレクトリ上にある.gitignoreから、public/storageを削除してください。これで、ローカル環境で作成したシンボリックリンクはGitで管理されるようになるため、pushして、本番環境にデプロイしてみてください。 .gitignore /node_modules /public/hot /public/storage #削除 /storage/*.key /vendor .env .env.backup .phpunit.result.cache docker-compose.override.yml Homestead.json Homestead.yaml npm-debug.log yarn-error.log heroku run php artisan storage:linkを実行すれば良いんじゃないの? と思うかも知れません。自分もそう考えてHerokuにpushした後に実行してみましたが、効果はありませんでした。試しに、Herokuにssh接続してみた結果、シンボリックリンクが作成されて無いことに気が付きました。 さらに、ssh接続したHeroku上で、php artisan storage:linkを実行します。この瞬間では、public/storageとしてシンボリックリンクが作成されます。しかし、一度ssh接続を終了し、再度接続した時にはもう消えています。 Heroku上で直接行うのは意味がない Heroku上で、直接ファイル操作をするのは、意味がなかったようです。 Herokuはマルチテナントであるが故に、インスタンスの切り替えが発生するらしいです。 以下のタイミングでその切り替えが発生し、直接アップ(Git以外から操作)したファイルなどが消えてしまいます。 Git Push時 Heroku config変更時 おおむね1日1度、自動的に再起動 Heroku初心者がつまづいたこと3つ それでも動かない ・ローカル環境ではシンボリックリンクで正常に動作する ・本番環境では動作しないが、シンボリックリンクは存在する この2点が重なった場合、考えられる可能性は、以下の2つです。 ・権限の問題でアクセスできない ・シンボリックリンクのパスが環境の差異による影響を受けている 権限が無い場合 当方は、こちらに遭遇したことはないのですが、一応載せておきます。一応。 app/storageディレクトリのパーミッションの設定~Laravel初期設定~ シンボリックリンクのパスが環境の差異による影響を受けている 当方の場合、こちらでした。 Docker環境で開発しており、Herokuにはアプリ本体だけをデプロイしていたために発生しました。 ローカル環境のシンボリックリンクのパスを確認 % cd public % ls -l ...省略 lrwxr-xr-x ... storage -> /workspace/[アプリのディレクトリ]/storage/app/public ...省略 Herokuのシンボリックリンクのパスの確認 % heroku run bash [~ $ cd public [~/public $ ls -l lrwxrwxrwx ... dyno ... storage -> /workspace/[アプリのディレクトリ]/storage/app/public ローカル環境で作成したシンボリックリンクがそのままです。 しかし、Heroku環境はこのようなディレクトリ構造になっていないため、リンク切れになっていると想定できます。 Heroku上の正しいシンボリックリンクのリンクを確認 Herokuで正常に動作させるには、Heroku上のディレクトリ構造に合わせてあげなければなりません。 ただ、Heroku上で直接変更しても意味がないのは前述の通りです。 なので、Heroku上の正しいパスを確認し、それをローカル環境で設定し、pushし直します。 heroku [ ~ $ cd public [ ~/public $ rm storage [ ~/public $ ls -l #storageが無いことを確認してください。 [ ~/public $ cd [ ~ $ php artisan storage:link [ ~ $ cd public [ ~/public $ ls -l lrwxrwxrwx ... dyno ... storage -> /app/storage/app/public このように、Heroku上の正しいパスでシンボリックリンクが作成されます。 このパスで再設定してあげます。 ローカル % cd public % rm storage #既存のシンボリックリンクを削除します。 % ln -s /app/storage/app/public storage $ ln -s リンク元 登録名 リンク元に設定するリンク、登録名にシンボリックリンクの名前を設定します。 php artisan storage:linkはlaravelのコマンドですが、lnはlinuxコマンドです。 windowsの場合はmklinkコマンドがあります。 確認します。 % ls -l ... lrwxr-xr-x ... storage -> /app/storage/app/public ... これで、Heroku上のディレクトリ構造に合わせることができました。 ただし、ローカル環境で正常に動作しなくなるので、再設定が必要です。 再デプロイ 以上が設定し終わったら、Herokuにデプロイします。 正常に動作するはずです。 最後に 対処療法的なものだと思うので、もしよりベターな方法があればアドバイスいただけるとありがたいです。 参考にした記事 シンボリックリンクの作成, 確認, 削除 Laravel シンボリックリンクで少しハマった話 Heroku初心者がつまづいたこと3つ lnコマンドについて詳しくまとめました 【Linuxコマンド集】 app/storageディレクトリのパーミッションの設定~Laravel初期設定~ Laravelでpublicフォルダ配下に保存したファイルにアクセスできない Windows 10でシンボリックリンクを作成する Mklink - DOS コマンド一覧 herokuでアプリを指定してsshログイン 大変参考になりました。有難うございます!
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Docker ComposeでNginx+PHP+MySQL+Redis環境を構築

Docker ComposeでNginx+PHP+MySQL+Redis環境を構築 2021年現在最新のNginx+PHP+MySQL+Redis環境を構築しました 各サービス項目の説明まで Docker構成 コンテナ ミドルウェア Web Nginx PHP PHP8 DB MySQL Redis Redis ディレクトリ構成 docker_lamp/ |-- mysql | |-- dump | | `-- setup.sql | |-- logs | |-- mount | `-- settings | `-- my.cnf |-- php | |-- logs | |-- settings | | |-- php.dev.ini | | |-- php.prod.ini | | |-- www.dev.conf | | `-- www.prod.conf | `-- Dockerfile |-- project | `-- html | `-- public | `-- index.php |-- redis | `-- mount |-- web | |-- logs | `-- settings | |-- default.conf | `-- nginx.conf `-- docker-compose.yml docker-compose.yaml PHPはDockerfileを使って自分でイメージを作成 他は公式イメージを利用 一旦全体 version: '3' services: web: image: nginx:alpine volumes: - "./web/settings/default.conf:/etc/nginx/conf.d/default.conf" - "./web/settings/nginx.conf:/etc/nginx/nginx.conf" - "./project/html:/var/www/html" - "./web/logs:/var/log/nginx" ports: - "8080:80" restart: always depends_on: - php - mysql - redis php: build: ./php volumes: - "./project/html:/var/www/html" restart: always mysql: image: mysql:8.0 ports: - "13306:3306" environment: MYSQL_ROOT_PASSWORD: p@ssw0rd MYSQL_DATABASE: test MYSQL_USER: dev MYSQL_PASSWORD: dev TZ: Asia/Tokyo volumes: - "./mysql/mount:/var/lib/mysql" - "./mysql/settings/my.cnf:/etc/mysql/conf.d/my.cnf" - "./mysql/dump/setup.sql:/docker-entrypoint-initdb.d/dump.sql" - "./mysql/logs:/var/log/mysql" restart: always redis: image: redis:alpine ports: - "16379:6379" volumes: - "./redis/mount:/data" 各項目説明 Nginx 外部アクセス用に8080ポートを公開 設定ファイル、プロジェクト、ログはvolumesで同期 ※ 設定ファイルは後半に紹介 web: image: nginx:alpine volumes: - "./web/settings/default.conf:/etc/nginx/conf.d/default.conf" - "./web/settings/nginx.conf:/etc/nginx/nginx.conf" - "./project/html:/var/www/html" - "./web/logs:/var/log/nginx" ports: - "8080:80" restart: always depends_on: - php - mysql - redis PHP プロジェクトはvolumesで同期 php: build: ./php volumes: - "./project/html:/var/www/html" Dockerfile PHP用イメージ Redis、MySQLを利用するためdocker-php-ext-installを使いPHP拡張をインストール 設定ファイルをCOPYを使い反映 ※ 設定ファイルは後半に紹介 FROM php:8.0-fpm RUN apt-get update && apt-get install -y git RUN git clone https://github.com/phpredis/phpredis.git /usr/src/php/ext/redis RUN docker-php-ext-install mysqli redis COPY settings/php.dev.ini /usr/local/etc/php/conf.d/php.ini COPY settings/www.dev.conf /usr/local/etc/php-fpm.d/www.conf MySQL 外部アクセス用に13306ポートを公開 environmentの設定を行うとコンテナ作成時に自動でパスワード作成、データベース作成などが自動で実行(今回はルートパスワード設定、データベース、ユーザー、タイムゾーンを設定) リソースはvolumesを使いmount以下に同期(Dockerを停止してもデータを残す) 設定ファイル、ログはvolumesで同期 作成時に実行させたいSQLはvolumesで /docker-entrypoint-initdb.d/dump.sql に同期すると自動で実行 mysql: image: mysql:8.0 ports: - "13306:3306" environment: MYSQL_ROOT_PASSWORD: p@ssw0rd MYSQL_DATABASE: test MYSQL_USER: dev MYSQL_PASSWORD: dev TZ: Asia/Tokyo volumes: - "./mysql/mount:/var/lib/mysql" - "./mysql/settings/my.cnf:/etc/mysql/conf.d/my.cnf" - "./mysql/dump/setup.sql:/docker-entrypoint-initdb.d/dump.sql" - "./mysql/logs:/var/log/mysql" restart: always Redis 外部アクセス用に16379ポートを公開 リソースはvolumesを使いmount以下に同期(Dockerを停止してもデータを残す) redis: image: redis:alpine ports: - "16379:6379" volumes: - "./redis/mount:/data" 設定ファイル デフォルトで動かしてもいいですが、ECS運用も考慮して設定ファイルを用意 Nginx default.conf ※ 構築時にCodeigniter, FuelPHP環境の構築を考えていたのでこの形になった ポイントは fastcgi_pass php:9000; ホストをdocker-composeのサービス名(php)に変更 server { listen 80 default; server_name localhost; charset utf-8; root /var/www/html/public; index index.php index.html index.htm; location / { index index.php index.html index.htm; try_files $uri $uri/ /index.php$is_args$args; } location /admin { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/.htpasswd; index index.php index.html index.htm; try_files $uri $uri/ /index.php$is_args$args; } location /reploxy { internal; resolver 8.8.8.8; set $reproxy $upstream_http_x_reproxy_url; proxy_pass $reproxy; proxy_set_header Authorization ""; } location ~ \.php$ { fastcgi_pass php:9000; fastcgi_index index.php; fastcgi_param FUEL_ENV "development"; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; include fastcgi_params; } } nginx.conf ログの場所など指定 user nginx nginx; worker_processes 2; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log warn; sendfile off; tcp_nopush on; tcp_nodelay off; keepalive_timeout 30; send_timeout 60; gzip on; gzip_http_version 1.0; gzip_comp_level 6; gzip_proxied any; gzip_min_length 10000; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; gzip_disable "MSIE [1-6] \."; include /etc/nginx/conf.d/*.conf; } PHP php.ini、www.conf設定ファイルは以下サイトを参考にさせていただきました MySQL my.cnf 文字コード、ログの場所など指定 [mysqld] # 文字コード/照合順序の設定 character-set-server = utf8mb4 collation-server = utf8mb4_bin # タイムゾーンの設定 default-time-zone = SYSTEM log_timestamps = SYSTEM # デフォルト認証プラグインの設定 default-authentication-plugin = mysql_native_password # エラーログの設定 log-error = /var/log/mysql/mysql-error.log # スロークエリログの設定 slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 5.0 log_queries_not_using_indexes = 0 # 実行ログの設定 general_log = 1 general_log_file = /var/log/mysql/mysql-query.log [mysql] default-character-set = utf8mb4 [client] default-character-set = utf8mb4 実行ファイル PHP index.php サンプルでMySQLとRedisを使う ポイントは接続ホストにDockerのサービス名を使うmysql redis <?php // MySQLテスト echo "MySQLテスト<br />"; $mysqli = mysqli_connect("mysql", "dev", "dev", "test"); $query = "SELECT * FROM `user`"; $result = $mysqli->query($query); $rows = array(); while ($row = $result->fetch_assoc()) { $rows[] = $row; } var_dump($rows); echo "<hr />"; // Redisテスト echo "Redisテスト<br />"; $redis = new Redis(); $redis->connect("redis", 6379); $redis->set('key', 'value'); echo $redis->get('key'); MySQL setup.sql サンプル用のSQL "./mysql/dump/setup.sql:/docker-entrypoint-initdb.d/dump.sql" の設定でコンテナ作成時にクエリ実行 use test; DROP TABLE IF EXISTS `test`; CREATE TABLE `user` ( `name` VARCHAR(255) NOT NULL COMMENT 'Name', `age` INT(10) unsigned NOT NULL COMMENT 'Age', `updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='テスト用'; INSERT INTO `user` VALUES ("TAKASHI", 34, "0000-01-01", "9999-12-31"); docker-compose 実行 ビルドして実行 $ docker-compose up --build 確認 http://127.0.0.1:8080/ にアクセス、表示を確認 次回はこの環境下にComposer、Xdebug、PHPフレームワーク(Codeigniter予定)、UnitTest等を使えるようしていきます。 いいね!と思ったら フォロー、LGTM お願いします 【PR】プログラミング新聞リリースしました! → https://pronichi.com 【PR】週末ハッカソンというイベントやってます! → https://weekend-hackathon.toyscreation.jp/about/
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む