浅野直樹の学習日記

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

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を使ったデータ分析、機械学習


作 者: Jake VanderPlas 著,菊池彰 訳

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

発売日: 2018年07月03日

 

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


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


作 者: Andreas C.Müller, Sarah Guido 著,中田秀基 訳

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

発売日: 2017年07月27日

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

5.受験後の感想

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



emathをdockerで手軽に使う

数学の教材を作成する際にはemathが重宝します。記号や図形を表示するための気の利いたコマンドがあるからです。

 

しかし、emathを使える環境を構築するのが面倒です。

 

そこで、dockerを活用してemathを手軽に使えるようにしました。dockerhubとgithubで公開しています。

 

asanonaoki/emath – Docker Image | Docker Hub

 

emath/README_ja.md at main · Asano-Naoki/emath

 

上のリンク先を読んでいただければ使い方はわかると思います。

 

docker環境は各自でご用意ください。「docker インストール」のようなワードで検索すればやり方が出てくるはずです。

 

dockerについて調べていくうちにこれは環境構築を楽にしてくれるツールだということがわかり、それなら面倒な日本語latex環境の構築を楽にできないかと探してみたら、paperist/alpine-texlive-ja – Docker Image | Docker Hubにたどり着きました。

 

emath環境のイメージはdockerhubになかったので、paperist/alpine-texlive-jaを拡張する形で自分で作ってみたという次第です。



PHP技術者認定試験を受験します

Python3エンジニア認定基礎試験(10月受験済み)、Python3エンジニア認定データ分析試験(11月受験予定)に続いて、2022年1月末までにPHP技術者認定試験を受験します。

SNSで受験宣言をされた方にPHP7初級試験公式問題集をプレゼント – PHP技術者認定機構につられて宣言してみました。

Python3エンジニア認定データ分析試験を受験します – 浅野直樹の学習日記では本当に教科書のPython本が送られきました。

Webプログラミングではpythonよりもphp(laravel)を使うことが多く、これを機に基礎を固めておきたいです。

 



python3エンジニア認定基礎試験を受験しました

python3エンジニア認定基礎試験を受験してきました。その記録を残しておきます。

 

1.結果

自信がなかった数問のうち1問を間違えたようです。

 

2.受験動機

見様見真似でpythonを趣味や仕事で使ってきました。わからないことがあればその都度調べていました。基本的な文法などを調べずにすらすらとコードを書けるようになりたくて、python3エンジニア認定基礎試験の受験を決意しました。

 

3.模擬試験

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

 

DIVER | DIVE INTO CODE(DIC)

 

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

 

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

 

本番の試験の難易度は、DIVERより難しく、PRIME STUDYより簡単だという印象でした。

 

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

 

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

 

4.本などの教材

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

 

(1)Pythonチュートリアル

Python チュートリアル — Python 3.10.0b2 ドキュメントが最重要です。Pythonエンジニア認定試験 | Odyssey CBT | オデッセイ コミュニケーションズの出題率と照らし合わせて強弱をつけてもよいです。おそらくこのチュートリアルに書いてある内容しか出題されません。

 

(2)Pythonエンジニア育成推進協会監修 Python 3スキルアップ教科書


Python 3スキルアップ教科書 = Python 3 Skill-up Textbook


作 者: Pythonエンジニア育成推進協会 監修,辻真吾, 小林秀幸, 鈴木庸氏, 細川康博 著

出版社: 技術評論社

発売日: 2019年11月06日

チュートリアルは無味乾燥で記述が簡潔すぎると感じたらこの本がよいでしょう。python3エンジニア認定基礎試験に準拠しています。

 

(3)入門 Python 3


入門Python 3


作 者: Bill Lubanovic 著,鈴木駿 監訳,長尾高弘 訳

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

発売日: 2021年04月19日

python3エンジニア認定基礎試験に準拠してはいませんが、およそ内容はかぶっています。手を動かして練習問題を解くと力がつきます。15章のデータと時間:プロセスと並行処理以降はざっと目を通すだけでよいでしょう。

 

(4)初めてのPython


初めてのPython


作 者: Mark Lutz 著,夏目大 訳

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

発売日: 2009年04月03日

主にpython2が基準となっており古さを感じますが、それがかえって新しい便利な機能の理解を深めてくれたりもします。部ごとについている練習問題で手を動かすと理解が増します。

 

5.受験後の感想

検索せずにファイルのオープンやリスト内包表記ができるようになったので、pythonのコードを書くときにひっかかることが減りました。python3エンジニア認定基礎試験はpythonを学ぶ一つのきっかけや視点になると思います。




top