20210512のlaravelに関する記事は9件です。

docker+blackfire環境の構築(php)

blackfireとは パフォーマンスプロファイリングサービスです。 関数がどの経路で読み込んでいて、 どのくらい処理に時間がかかり、 どのくらいメモリを使用しているのか、 目視で確認できるので、アプリケーションのパフォーマンス向上などに使用します。 用意するもの docker(念の為最新にしておきましょう) blackfireのアカウント(ここから作れるよ!) chrome(拡張機能も使うので入れておく) 挫けない心 環境を構築していく docker-compose.yml blackfire: image: blackfire/blackfire ports: ["8707"] environment: BLACKFIRE_SERVER_ID: {サーバーキー} BLACKFIRE_SERVER_TOKEN: {サーバートークン} BLACKFIRE_CLIENT_ID: {クライアントキー} BLACKFIRE_CLIENT_TOKEN: {クライアントトークン} サーバーキー・トークン、クライアントキー・トークンは、blackfireのマイページから確認できます。 Dockerfile RUN version=$(php -r "echo PHP_MAJOR_VERSION.PHP_MINOR_VERSION;") \ && curl -A "Docker" -o /tmp/blackfire-probe.tar.gz -D - -L -s https://blackfire.io/api/v1/releases/probe/php/alpine/amd64/$version \ && mkdir -p /tmp/blackfire \ && tar zxpf /tmp/blackfire-probe.tar.gz -C /tmp/blackfire \ && mv /tmp/blackfire/blackfire-*.so $(php -r "echo ini_get ('extension_dir');")/blackfire.so \ && printf "extension=blackfire.so\nblackfire.agent_socket=tcp://blackfire:8707\n" > $PHP_INI_DIR/conf.d/blackfire.ini \ && rm -rf /tmp/blackfire /tmp/blackfire-probe.tar.gz 用意していたDockerfileに追記する形で問題ありません。 また、すでに構築ずみの環境でしたら、buildし直しましょう。 $ docker-compose buide --no-cache $ docker-compose up -d これで環境は問題なくできるはずです。 blackfileの使い方 計測したいページを開きます。(ローカル環境でも大丈夫です。) 拡張機能のblackfire profilerを起動し、profile!ボタンを元気よくクリックすれば計測してくれます。 結構待ちますが、終わったらView Call Graphをクリックで、ページ遷移し詳細がみれます。 使ってみた感想 当環境が、Laravelを使っています。 サービスプロバイダーやミドルウェア、ビジネスロジック、Collection操作などの見直しに便利だったなぁと思いました。 SQLチューニングも行ったのですが、blackfireはあくまでロジックの精査に使用し、SQLに関してはdebugbarなどで確認しました。 日々の開発の中でなかなか最高パフォーマンスを出しながら開発するのも難しいですが、気づいたらめっちゃ遅い!とかなると思うので、タイミング見てパフォーマンスを気にしながら進めるもの重要だなと実感しました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DBをMysql(Docker)にしたい

DBをMysql(Docker)にしたい ローカルにLaravelのアプリを作成し、DBだけDockerのMysqlを使用したい。 まずは下記に習ってdocker imageを取得 参考URLhttps://mmtomitomimm.blogspot.com/2018/04/docker-mysqldb.html Docker Desktopで確認するとlatestが入っている。 laravelアプリ内にdocker-compose.ymlファイルを作成 sampleapp  ├──docker-compose.yml docker-compose.yml version: "3" services: mysql: # imageの指定 image: "mysql" # 環境変数の設定 environment: - MYSQL_DATABASE=mydatabase - MYSQL_USER=myuser - MYSQL_PASSWORD=mypassword - MYSQL_ROOT_PASSWORD=mypassword 下記のコマンドで立ち上げ $ docker-compose up $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e317f73049c mysql "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp sampleapp_mysql_1 passwordを求められるdocker-compose.ymlに書いてあるpasswordを入力して進む $ docker exec -it sampleapp_mysql_1 sh # mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.24 MySQL Community Server - GPL Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydatabase | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec) 参考URL
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[Laravel][Docker]DBコンテナが正常に立ち上がっているのにLaravel側で接続できない場合の対処法

正常にDBコンテナは動いているのにLaravelでは接続できない! 結構この罠に引っかかる人多いんじゃないかなと思って書きました。 環境 Laravel8 docker-compose 3.8 エラー(Laravel) SQLSTATE[08006] [7] could not connect to server: Connection refused Is the server running on host "127.0.0.1" and accepting TCP/IP connections on port 5432? 直接DBには接続できる 解決策 Laravelのデフォルトのdbホストが127.0.0.1になっています。 dbクライアント(tableplus)で繋がるんだから、なんかこれでいけそうな気がするんですけど、無理です。 →理屈は分からないのでわかる方教えてくだせえ! env $ docker-compose ps Name Command State Ports ------------------------------------------------------------------------------------ api_project_app_1 docker-php-entrypoint php-fpm Up 0.0.0.0:19000->9000/tcp api_project_db_1 docker-entrypoint.sh postg ... Up 0.0.0.0:5432->5432/tcp api_project_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:80->80/tcp DBコンテナのホスト名をLaravelの.envに。 DB_HOST=127.0.0.1 ↓ DB_HOST=api_project_db_1 これでいけます
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laravel】ログイン時の追加処理

ログイン時に追加処理をするためのメモ。 前提 バージョン:Laravel6 LoginControlerの中身 LoginController.php <?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\AuthenticatesUsers; class LoginController extends Controller { /* |-------------------------------------------------------------------------- | Login Controller |-------------------------------------------------------------------------- | | This controller handles authenticating users for the application and | redirecting them to your home screen. The controller uses a trait | to conveniently provide its functionality to your applications. | */ use AuthenticatesUsers; /** * Where to redirect users after login. * * @var string */ protected $redirectTo = RouteServiceProvider::HOME; /** * Create a new controller instance. * * @return void */ public function __construct() { $this->middleware('guest')->except('logout'); } } デフォルトの状態ではログインコントローラーは上のようになっている。 今回重要なのはuse AuthenticatesUsers;。ログイン時の処理内容も本体はこのAuthenticatesUsersトレイトの中にある。 AuthenticatesUsersはvendor/laravel/framework/Illuminate/Foundation/Authの中にある。 AuthenticatesUsers.phpから抜粋 public function login(Request $request) { /* 割愛 */ if ($this->attemptLogin($request)) { return $this->sendLoginResponse($request); } /* 割愛 */ } protected function sendLoginResponse(Request $request) { /* 割愛 */ return $this->authenticated($request, $this->guard()->user()) ?: redirect()->intended($this->redirectPath()); } protected function authenticated(Request $request, $user) { // } AuthenticatesUsersの中を見るとloginではログインをする(attemptLogin)ときにsendloginResponseが呼び出されている。 さらにsendloginResponseではauthenticatedとredirect()...が三項演算子?:で比較されている。 つまり、authenticatedを実行してその返り値が存在しない、またはfalseの場合はredirect()...でログイン先のページへと移動する。 このauthenticatedは中身が空なのでLoginController側で上書きすればログイン実行時の処理を追加できる。 なお、$requestはログインフォームの入力値、$userはログインしたユーザーが入る。 返り値があればredirect()...は実行されないので、ユーザーごとにログイン先を変えるといった処理も可能。 注意点として、use Illuminate\Http\Request;も追記しないとLoginController側でRequestが呼び出だせずエラーになってしまう。 サンプル ログイン時の時間を記録する usersテーブルにlogin_atカラムを追加してユーザーごとにログインした時間を記録する。 ①マイグレーション add_login_at_to_users_table.php public function up() { Schema::table('users', function (Blueprint $table) { $table->dateTime('login_at')->nullable(); }); } public function down() { Schema::table('users', function (Blueprint $table) { $table->dropColumn('login_at'); }); } ②コントローラー LoginController.php <?php namespace App\Http\Controllers\Auth; use App\Http\Controllers\Controller; use App\Providers\RouteServiceProvider; use Illuminate\Foundation\Auth\AuthenticatesUsers; use Illuminate\Http\Request; // 追記 /* 割愛 */ protected function authenticated(Request $request, $user) { $user->login_at = now(); $user->save(); }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのDocker環境でDBを二つ立ち上げて、アプリケーション用DBとユニットテスト用DBを切り替える方法

アプリケーション用DBとユニットテスト用のDBを分けたいときがあると思います よく見かける手法がユニットテストをインメモリDBとして立ち上げてそこでデータを投入する方法です 今回は、インメモリDBではなく、通常使用するようなDB(オンディスクDBと呼ばれるらしい)でユニットテストの時だけ切り替える方式です 前提 Doker環境で二つのmysqlを立ち上げます 二つどうやって立ち上げるかわかない方はこちらの記事を参照してください 結論 テストDB用のドライバーを設定 ユニットテスト実行時に、そのドライバーを指定 設定方法詳細 テストDB接続用のドライバーを設定する LaravelがテストDBに接続できるようにドライバーを設定します config/database.php 'test_mysql' => [ 'driver' => 'mysql', 'host' => 'test_mysql', 'port' => '3306',//ここが3307だと繋がらない。なんで? 'database' => 'your_test_db', 'username' => 'user', 'password' => 'password', 'unix_socket' => '', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => false, 'engine' => 'InnoDB', 'options' => array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]), ], phpunitの実行時のDBドライバーを変更 ユニットテストを実行したときだけテストDBを読み込むようにドライバーを指定します phpunit.xml //before //<server name="DB_CONNECTION" value="mysql"/> //after <server name="DB_CONNECTION" value="test_mysql"/> 疑問 config/database.phpでportをデフォルト3306にしないと接続できないのはなぜなんだろう。。。 dockerでテスト用DBは3307にしていて、phpmyadminでは3307で接続できているのに 誰か知っていたらコメントなどで教えてください  宣伝 ツイッターもやってます 技術や製品開発に関する事などを呟いてますので、フォローお願いします https://twitter.com/wkyIghw8MlLpyJE
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravelとcomposerの名前空間やエイリアスの理解をしよう

Laravelを触っていて、use Illuminate\~~~~とかnamespace App\Http\Controllers;みたいなのを見て、 「いや、Illuminateってどのディレクトリ指してんの?」 「Appってappディレクトリのことだよね?なんでappをAppって最初大文字にしてるの?」 みたいな疑問を抱いたことはないでしょか。 別に知らなくても良い部分ですが、ソースコードを追うことは理解を深めて、より柔軟な設計をするためにも必要なので、この機会に知っておくと良いかもです。 ということで、早速調べたことをメモっていきます。 そもそもPHPにはautoloadという仕組みがある。 PHPにはファイルを自動でロードしてくれるautoloadという仕組みがあります。 autoloadを使わない場合は、 require_once "hoge.php"; みたいにしますが、こんなの面倒ですよね。 そこで登場するのがautoloadです。 Laravelでもautoloadが使われいる。 Laravelでapp/composer.jsonを見てみると、 composer.json "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, こんな記述があるはず。 "psr-4"というのは規約の名前なので、あまり気にしなくてOKです。 \\と2つのバックスラッシュがありますが、前の1つは次のバックスラッシュをエスケープしてるだけなので、実質\と同じ意味です。 そして、最初の"App\\": "app/",を見てください。 これはapp/をApp\と紐づけています。 つまり、App\と書けばappディレクトリを読み込んできます。 エイリアスについて Laravelではuse Authとするだけで、認証機能が使えます。 では、このAuthはなぜこれだけで使えるのでしょうか。 それはエイリアスが登録されているからです。 ではconfig.app.phpを開いてみてると 'Auth' => Illuminate\Support\Facades\Auth::class, こんな記述があるはず。 ここで、Authと記述したらIlluminate\Support\Facades\Auth::classを指しますよ。 と、登録しています。 composerでインストールしたライブラリは自動的に名前空間が登録される。 実はcomposerでライブラリをインストールしたら自動的に名前空間を定義してくれています。 名前空間はプロジェクト/vendor/composer/autoload_classmap.phpで定義されているので、見てみると、ズラーっと色々書かれていて、 'Illuminate\\Support\\Facades\\Auth' => $vendorDir . '/laravel/framework/src/Illuminate/Support/Facades/Auth.php', こんな感じで書かれているところもあるはずです。 ここで、Illuminate\Support\Facades\Authはvender/laravel/framework/src/Illuminate/Support/Facades/Auth.phpを指しますよと定義されています。 なので、use Authをすることで、vender/laravel/framework/src/Illuminate/Support/Facades/Auth.phpが読み込まれるわけです。 ちなみに vendor/laravelというのがあるはずです。 さらにvendor/laravel/frameworkディレクトリの中を見てみると、ここにもcomposer.jsonがあります。 ここでは下記のように記述されています。 autoload "autoload": { "files": [ "src/Illuminate/Collections/helpers.php", "src/Illuminate/Events/functions.php", "src/Illuminate/Foundation/helpers.php", "src/Illuminate/Support/helpers.php" ], "psr-4": { "Illuminate\\": "src/Illuminate/", "Illuminate\\Support\\": ["src/Illuminate/Macroable/", "src/Illuminate/Collections/"] } }, つまり、Illuminate/と記述すれば、src/Illuminate/を指しますので、Laravelのライブラリはこんな感じで作られてるのかーということがわかります。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS ec2 デプロイ laravel8 php8 mysql8

ほぼ受け売りです。 参考: 公式 LaravelをAWSのEC2へデプロイする手順 laravelをAWS EC2にデプロイする インバウンド HTTP (ポート 80) 接続をインスタンスに許可するセキュリティルールを追加していない場合には、ルールを追加する。 公式の最初のほうに書かれてあるのを参考に。 php8.0をインストール sudo amazon-linux-extras install -y php8.0 sudo yum install php-mbstring php-openssl php-xml unzip Apacheのインストール sudo yum install -y httpd 設定 wabサーバの起動 sudo service httpd start システムがブートするたびにapacheが起動するよう設定 sudo chkconfig httpd on 有効か確認 chkconfig --list httpd ウェブサーバーをテストします。ウェブブラウザで、インスタンスのパブリック DNS アドレス (またはパブリック IP アドレス) を入力します。 Apacheの初期画面が表示されれば成功です。 ec2-user アカウントがこのディレクトリで複数のファイルを操作することを許可するには、ディレクトリの所有権とアクセス許可を変更する必要があります。 ec2-userをapacheグループに追加 sudo usermod -a -G apache ec2-user いったんログアウトして、再度ログイン exit /var/www とそのコンテンツのグループ所有権を apache グループに変更 sudo chown -R ec2-user:apache /var/www グループに、/var/wwwの書き込み許可追加 sudo chmod 2775 /var/www /var/www とサブディレクトのディレクトリ許可を変更 find /var/www -type d -exec sudo chmod 2775 {} \; /var/www とサブディレクトリのファイル許可を変更 find /var/www -type f -exec sudo chmod 0664 {} \; MYSQL8インストール 既存でインストールされている邪魔者を削除 sudo yum remove mariadb-libs sudo rm -rf /var/lib/mysql リポジトリのインストール sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm MYSQLのインストール cd /usr/lib64 sudo ln libsasl2.so.3 libsasl2.so.2 sudo yum clean all sudo yum -y install mysql-community-server mysql-devel MYSQLの起動 sudo systemctl start mysqld.service sudo systemctl enable mysqld.service 初期パスワードに確認 sudo cat /var/log/mysqld.log | grep 'temporary password' パスワード変更 sudo mysql_secure_installation 再起動 sudo systemctl restart mysqld.service gitをインストール インストール sudo curl -sS https://getcomposer.org/installer | php パスを通す sudo mv composer.phar /usr/local/bin/composer composer自身のインストール curl -sS https://getcomposer.org/installer | php composerコマンドのパスを通す sudo mv composer.phar /usr/local/bin/composer パス確認(/usr/local/bin/composerと表示されればOK) which composer Laravelプロジェクトをgit clone sudo yum install git cd /var/www git clone [URL] Apacheの設定変更 http.confファイルのDocumentRootの変更 Laravelでは、プロジェクト内のpublicディレクトリをドキュメントルートに指定する必要がある sudo vi /etc/httpd/conf/httpd.conf キーボードで「i」を押して入力状態にする DocumentRoot "/var/www/html"の箇所をDocumentRoot "/var/www/プロジェクト名/public"に変更 http.confファイルに以下のDirectoryを追加(.htaccessの有効化) <Directory /var/www/プロジェクト名/public> AllowOverride All </Directory> Escキーを押して次のコマンドを入力(画面左下に入力中のコマンドが表示される) :wq Apacheの設定変更後は、再起動。 sudo service httpd restart パッケージのインストール cd /var/www/[プロジェクトのフォルダ名] composer.jsonファイルがない場合 composer init vendorディレクトリが生成される composer install Laravelプロジェクトの設定 sudo chmod -R 777 /var/www/[プロジェクト名]/storage sudo chmod -R 775 /var/www/[プロジェクト名]/bootstrap/cache config, routeのキャッシュクリア だいたいなんかエラー出たら、これ打っときゃ直る。 php artisan config:cache php artisan route:cache .envの設定 git cloneしたLaravelプロジェクトには.envファイルがないので、 composer insatallで作成された、.env.exampleを使用する cp .env.example .env vi .env APP_URL=http://IPアドレス ←サーバーのIPにする DB_CONNECTION=mysql DB_HOST=←RDSのエンドポイント DB_DATABASE=データベース名 DB_USERNAME=RDS作成時のユーザ名 DB_PASSWORD=設定したパスワード キーを作成し、キャッシュをクリアする php artisan key:generate php artisan config:clear 後は煮るなり焼くなり
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel6.x Authの導入

Laravel5.8まではLaravelインストール後にphp artisan make:authコマンドを実行するだけでログイン機能を実装することができていたが,6.xからは実装の手順が変わってしまいました。 実装環境 PHP 7.3 Laravel 6.20.26 1. laravel/uiをインストールする Laravel6.xからはlaravel/uiとゆう別のパッケージで管理されるよいうになった。上記コマンドを実行してlaravel/uiをインストールする。 composer require laravel/ui "^1.0" --dev インストールが完了したらuiArtisanコマンドが使用することができる。 2. フロントエンドのスカフォールドをインストールする php artisan ui bootstrap --auth --authオプションをつけることでログイン/ユーザー登録スカフォールドも生成される。他にも php artisan ui vue --authやphp artisan ui react --autuなどもある。 3.Node.js インストール Laravelはフロント開発がしやすいようにLaravel Mixとゆう機能がある。Larave Mixを使用するためにはNodeをインストールしておく必要がある。 sudo yum install nodejs //node.jsのインストール node -v //バージョンが表示されたらインストールできている v10.23.1 sudo yum install npm //npmのインストール npm -v 6.14.10 npmについて npmとはNode.jsで書かれたパッケージを管理、インストールしたりするツール。 Laravel Mixを使用するのにこおnpmが必要になる。 依存パケージをインストール npm install インストールしたパッケージをビルドする。 npm run dev 本番環境の場合 npm run production 4. Authの導入 下記のコマンドを実行すると新規登録、ログイン機能が追加される。 php artisan ui bootstrap --auth
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【Laradockバージョン】docker-composeでMinio起動時にデフォルトのバケットを作成する

現在業務で、WEBサイトの作成・改修を行なっています。 Minioを利用して、画像のダウンロード・アップロード処理を行なっています。 複数のバケットを使用しているので、docker-compose upの時に バケットを、さくっと一括作成できればと考えました。 こちらの記事で、既に同じ内容が投稿されていたのですが、Laradockの docker-compose.ymlファイルで試したところ、うまくいかなかったのでこの記事を書きました。 minioの設定 ・アクセスキー:Accesskey ・シークレットキー:Secretkey ・バケット名:firstbucket 今回は、上記の設定で進めていきます。 アクセスキー・シークレットキー・バケット名に決まりはありません。 ご自身の好きな文字列に置き換えてください。 docker-compose.yml(初期値) Minioの初期値は以下のようになっています。 environmentの下に、任意のアクセスキーとシークレットキーを設定してください。 しかし、このままだと、Minioを起動することしかできません。 新しくバケット作成を行うServiceを定義する必要があります。 docker-compose.yml ### Minio ################################################ minio: build: ./minio volumes: - ${DATA_PATH_HOST}/minio/data:/export - ${DATA_PATH_HOST}/minio/config:/root/.minio ports: - "${MINIO_PORT}:9000" environment: - MINIO_ACCESS_KEY=Accesskey - MINIO_SECRET_KEY=Secretkey networks: - frontend - backend docker-compose.yml(Bucket作成) それでは、バケット作成用のServiceを、上記のymlファイルに組み込んでいきましょう。 今回、Service名をcreateBucketsとします。(ここも任意の文字列で大丈夫です) docker-compose.yml minio:  ーーー省略ーーー createbuckets: image: minio/mc:latest depends_on: - minio entrypoint: > /bin/sh -c " until (/usr/bin/mc alias set myminio http://host.docker.internal:9000 Accesskey Secretkey --api S3v4) do echo '...waiting...' && sleep 1; done; /usr/bin/mc admin info myminio; /usr/bin/mc mb myminio/firstbucket; /usr/bin/mc policy set download myminio/firstbucket exit 0; " docker-compose up 実行結果 docker-compose up createbucketsを入力して、 下記のような出力が出ると成功です。 docker-compose_up_実行 $ docker-compose up createbuckets laradock_minio_1 is up-to-date Recreating laradock_createbuckets_1 ... done Attaching to laradock_createbuckets_1 createbuckets_1 | Added `myminio` successfully. createbuckets_1 | ● host.docker.internal:9000 createbuckets_1 | Uptime: 2 minutes createbuckets_1 | Version: 2021-04-22T15:44:28Z createbuckets_1 | Network: 1/1 OK createbuckets_1 | createbuckets_1 | 54 KiB Used, 8 Buckets, 5 Objects createbuckets_1 | Bucket created successfully `myminio/firstbucket`. createbuckets_1 | Access permission for `myminio/firstbucket` is set to `download` laradock_createbuckets_1 exited with code 0 http://localhost:9000にアクセスし、設定したアクセスキー・シークレットキーを使用して ログインするとバケットが作成されているのが確認できます。 解説 ここからは、createbucketsの内容を1行ずつ見ていきます。 Service createbuckets: ここは、docker-compose upの後に指定するサービス名です。 特に、決まりはないので、わかりやすく重複していない名前にしてください。 image image: minio/mc:latest ここでは、最新のMinio Clientのイメージを指定しています。 depends_on depends_on: - minio depends_onは、コンテナを起動させる順番を決めるものです。 ①minio ②createbucketsの順番で起動するように設定しています。 今回のcreatebucketsのサービスは、Minioにバケットを作成するものなので、 このサービスが動く前に、Minioが起動している必要があります。 従って、このdepends_onが必要になってきます。 しかし、この記事によると、保証してくれるのは起動の順番だけで、 起動が完了しているかどうかは、保証してくれないそうです。。 entrypoint entrypoint: > /bin/sh -c " until (/usr/bin/mc alias set myminio http://host.docker.internal:9000 Accesskey Secretkey --api S3v4) do echo '...waiting...' && sleep 1; done; /usr/bin/mc admin info myminio; /usr/bin/mc mb myminio/firstbucket; /usr/bin/mc policy set download myminio/firstbucket; exit 0; " 1行目 /bin/sh -c では、その後にコマンドを入力することを定義しています。 2行目前半 until (/usr/bin/mc alias set myminio http://host.docker.internal:9000 Accesskey Secretkey --api S3v4)   ・ until()   ・ カッコ内の条件が真になるまで繰り返し実行される制御文です。(minioの起動を待つためです/起動していないと失敗してしまうので。)  ・ /usr/bin/mc alias set myminio http://host.docker.internal:9000 Accesskey Secretkey --api S3v4   ・ 使用しているminioの情報(アクセスキー、シークレットキー、URL)myminioという名前でエイリアス登録しています。 2行目後半 do echo '...waiting...' && sleep 1; done;  ・...waiting...の文字列表示します。  ・1秒間の待機時間を設けています。(minioの起動を待つため) 3行目 /usr/bin/mc admin info myminio;  ・先ほど2行目前半で登録したエイリアス(myminio)の情報を表示できます。 4行目 /usr/bin/mc mb myminio/firstbucket;  ・バケットを作成するコマンドです。  ・mbはおそらく、make bucketの略語かな・・?  ・登録したエイリアス名/作成したいバケット名を指定してください。  ・複数のバケットを作りたい場合は、この行を複数記述してください。 5行目 /usr/bin/mc policy set download myminio/firstBucket;  ・既存のバケットにポリシーを設定できます。  ・今回は、downloadを指定しているので、ダウンロードだけを許可する設定にしています。  ・個人のニーズに応じて、複数記述したり、色々と変更してみてください。(使用可能なオプション:[none, download, upload, public]) 6行目 exit 0;  ・サービスを終了させるコードです。 間違っている情報、うまく動かないなどありましたら、ぜひコメント欄にて教えてください。 最後まで、お読みいただきありがとうございました。 参考 docker-composeでMinio起動時にデフォルトのbucketを作成する -Qiita- docker-compose depends_onとlinksの違い -Qiita- MinIO Client Complete Guide Laradock minio/mc -Github-
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む