浅野直樹の学習日記

この画面は、簡易表示です

2021 / 11月

docker-composeでミニマムなLaravel(LEMP)環境を構築する

私はこれまでローカル環境でも本番サーバ環境でもdebian系のlinuxマシンの上で直接Laravel(LEMP)環境を構築してきました。

 

dockerを知り、共同開発を楽に行うために、そしてあわよくばkubernetesを使うなどして本番環境でも使えるような形で、dockerを活用してLaravel(LEMP)環境を構築できないかと考えてみました。

 

Installation – Laravel – The PHP Framework For Web Artisansの公式ドキュメントで紹介されているSailを使うやり方は、簡単に環境を構築できますが、何をしているのかよくわからず、php – Is Laravel Sail deployment-ready – Stack Overflowあたりを読む限り本番環境で使うためには作られていないようなので、却下しました。

 

そこで、これならわかるDocker上にLaravel環境構築 | アールエフェクトを主に参照して、自分なりにdocker-composeでミニマムなlaravel(LEMP)環境を構築してみました。

 

結論は以下のgithubをご覧ください。

 

Asano-Naoki/docker_laravel_minimum: docker-compose for minimum laravel(LEMP) environment

 

使い方は上記のgithubの日本語版 README はこちらに書いてあるとおりです。

 

ここからは詰まった箇所などを紹介していきます。

 

まず、全体構成をどうするかに悩みました。既存のプロジェクトにも簡単に適用できるように、Sailを使った場合の構成を参考にして、通常のlaravelプロジェクトディレクトリの中にdockerディレクトリとdocker-compose.yamlを入れる形にしました。mysqlのデータベース関係のファイルは、Sailを使った場合と異なり、dockerティレクトリの中にvolumeを構築してその中に保存するようにしました。

 

このやり方ではlaravelプロジェクトディレクトリはdocker-composeとは別に事前に用意することになります。その際にdockerのcomposerを使うと楽に新しいlaravelプロジェクトディレクトリを作成することができるのですが、デフォルト設定で行うと所有者がrootになってしまうということにしばらく気づかず少しハマりました。

 

理解のためにまずはphpのコンテナだけを作成して、php artisan serveコマンドで確認しようとしました。そのときには、

--host=0.0.0.0

というオプションを設定しないとdocker外のブラウザからアクセスできないということにしばらくハマりました。このあたりのdockerコンテナ内外での通信といった概念はややこしいです。

 

次にmysqlコンテナを加えました。

 

phpからmysqlを扱うために、pdo_mysqlをインストールします。phpからmlocati/docker-php-extension-installer: Easily install PHP extension in Docker containersへとリンクをたどり、その指示に従いました。

 

いつものクセでシェルから「mysql -u root -p」でmysqlにログインしようとしても一向にできる気配がなく悩みました。よく考えればそりゃそうです。mysql-clientが入っていないのですから。「php artisan db」も同じです。

 

mysql-clientをphpコンテナにインストールしてからもmysqlにログインできず困りました。エラーメッセージを手がかりにして調べてみると、パスワード方式の問題のようだと判明し、docker-compose.yamlに

command: --default-authentication-plugin=mysql_native_password

の行を追加しました。

 

その他、mysqlコンテナの初回立ち上げ時にはそれなりの時間がかかる、.envで指定するDB_HOSTが127.0.0.1ではなくmysqlだということにも少し詰まりました。

 

最後はnginxです。ここでは “The stream or file “/var/www/html/storage/logs/laravel.log” could not be opened in append mode: Failed to open stream: Permission denied”エラーに悩まされました。パーミションを777に設定して解決するのは簡単ですが、誰でも書き込めるようにするのは抵抗があったので、www-dataを所有グループに変更し、パーミションは775にするということで対応しました。どうやらdockerコンテナ内外で同じUID/GIDが付与されているようです。そのUID/GIDがコンテナの内外ではそれぞれ別のユーザーやグループを指しているとしても。

 

こうした試行錯誤の過程ではdocker-composeをupしたりdownしたりを繰り返します。それが面倒なので.bashrcにdocker-composeコマンドの別名(エイリアス)としてdcを登録しました。

 

けっこう苦労しましたが、おかげでdockerにも慣れつつ、理解しながらdocker-composeでミニマムなLaravel(LEMP)環境を構築することができたと思います。



Python3エンジニア認定データ分析試験を受験しました

python3エンジニア認定データ分析試験を受験してきました。その記録を残しておきます。

 

1.結果

間違えた数問に心当たりはあります。

 

2.受験動機

この夏にpythonの機械学習に手を出して、その内容について調べているときにpython3エンジニア認定データ分析試験の存在を知り、力試しに受けてみました。

 

3.模擬試験

python3エンジニア認定データ分析試験を受験しようと少しでも思う人は、模擬試験を受けてみるべきです。インターネット上で簡単に無料で受験できます。

DIVER | DIVE INTO CODE(DIC)

PRIME STUDY(プライム・スタディ) – Python試験とPHP試験の無料模擬試験サイト

問題の形式や雰囲気は本番そっくりです。

本番の試験の難易度は、DIVERより難しいと感じました。

DIVERのほうはランダムに40問出題されるので知識のインプットと同時並行で普段使いをし、3回分の問題セットがあるPRIME STUDYを節目節目で活用するのがよいと思います。私もそうしました。

そしてこの模擬試験で安定して高得点を取れるようになり、なぜそうなるのか、なぜ他の選択肢ではダメなのかを説明できるようになれば、合格が見えてきます。

 

4.本などの教材

優先度が高い順番に紹介します。

数学の基礎の部分に不安がある場合は、高校数学用の教材で補うとよいと思います。高校数学用の教材はたくさんあるので自分の好みに合ったものを選べばよいです(ここで紹介はしません)。

(1)Pythonによるあたらしいデータ分析の教科書


Pythonによるあたらしいデータ分析の教科書


作 者: 

出版社: 翔泳社

発売日: 2018年10月04日

公式に認定されているテキストです。おそらくこの本に書いてある内容しか出題されません。

 

(2)Python Data Science Handbook

なんとオリジナルの英語版は全部の内容が無料公開されています。

Python Data Science Handbook | Python Data Science Handbook

私はpython3エンジニア認定データ分析試験のことを知る前に上記リンク先を熟読していました。

出題範囲に含まれない内容もたくさん書かれており、試験対策という意味では効率が悪いかもしれませんが、実際に機械学習を使うためには大いに役立ちます。

日本語訳も出版されています。


Pythonデータサイエンスハンドブック : Jupyter、NumPy、pandas、Matplotlib、scikit-learnを使ったデータ分析、機械学習


作 者: 

出版社: オライリー・ジャパン

発売日: 2024年03月05日

 

(3)Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎


Pythonではじめる機械学習 : scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎


作 者: 

出版社: オライリー・ジャパン

発売日: 2017年07月27日

scikit-learn部分に関してはこの本もおすすめです。

5.受験後の感想

この試験に合格したからといって機械学習を自由に操れるようになるわけではありませんが、機械学習に対するアレルギーをなくす最初の第一歩としては悪くないかなと思いました。




top