20210728のlaravelに関する記事は1件です。

LaravelのキューアプリをDockerでサクっと構築

LaravelのキューアプリをサクっとDocker化したい、そんな記事です。 前置き Docker化に重きを置きたいので、ジョブ実装などには触れません。 (実装まで触れるともう記事が長いってば!になっちゃう) キューはMySQL、workerのデーモン化はsupervisordを採用します。 バージョン PHP / Laravel: 8系 MySQL: 5.7系 やってみよう さっそくですが、以下がディレクトリ構成です。 project |- docker | |- app // laravelアプリケーションのDockerfile など | |- mysql // docker-entrypoint-initdb.d など | |- supervisord // supervisordのDockerfile など | └ docker-compose.yml └ app // 以下ソースコード ... 各ディクトリ中身について触れていきます。 appディレクトリ app |- Dockerfile └ httpd.conf LaravelアプリケーションのDockerビルド関連のディレクトリです。 今回はapacheを採用、Dockerfileは以下。 centosベースにphpなど必要なものをインストールしていく。 FROM centos:centos7 RUN yum -y update && yum -y install \ https://repo.ius.io/ius-release-el7.rpm \ https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \ https://rpms.remirepo.net/enterprise/remi-release-7.rpm \ yum-utils \ git \ unzip \ curl \ && yum-config-manager --disable "remi-php*" \ && yum-config-manager --enable remi-php80 \ && yum clean all RUN yum -y install --enablerepo=remi,remi-php80 \ httpd24u \ php \ php-mbstring \ php-mcrypt \ php-pdo \ php-mysqlnd \ php-opcache \ php-process \ php-xml RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer COPY httpd.conf /etc/httpd/conf.d/httpd.conf WORKDIR /var/www/html ENTRYPOINT ["/usr/sbin/httpd", "-D", "FOREGROUND"] mysqlディレクトリ mysql └ docker-entrypoint-initdb.d └ init.sql 初期で作成するテーブル情報などを記載したsqlファイルを用意。 僕の場合、このsqlファイルにキューで使うjobsテーブル、failed_jobsテーブルのCREATE文もまとめています。 (公式ドキュメントでは、php artisan queue:table && php artisan migrate でテーブル生成してくれますので、このコマンドを使うってのも一つかと思いますがなんだかめんどくさそう) supervisordディレクトリ supervisord |- Dockerfile |- job-worker.conf └ supervisord.conf jobを消化するworkerをデーモン化(キューを常に監視)する必要があり、その役割がsupervisordです。 (ちなみに、supervisordはLaravel公式ドキュメントでもデーモン化の一つの手段として言及されています) 「Laravelアプリがjobをキューへプッシュ → workerがキューからjobを取り出す」的な構成の、後者にあたるものがこのコンテナになります。 job-worker.confはworkerの動作設定を記述したファイル、supervisord.confはsupervisord全体の設定ファイルになります。 ここでは特に載せません、必要に応じてググってください。(Laravel公式ドキュメントにもヒントレベルのものなら載っています) ここでのDockerfileは以下になります。 FROM centos:centos7 RUN yum -y update && yum -y install \ https://repo.ius.io/ius-release-el7.rpm \ https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm \ https://rpms.remirepo.net/enterprise/remi-release-7.rpm \ yum-utils \ git \ unzip \ curl \ && yum-config-manager --disable "remi-php*" \ && yum-config-manager --enable remi-php80 \ && yum clean all RUN yum -y install --enablerepo=remi,remi-php80 \ php \ php-mbstring \ php-mcrypt \ php-pdo \ php-mysqlnd \ php-opcache \ php-process \ php-xml RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer RUN yum -y install supervisor RUN mkdir -p /var/log/supervisor COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY job-worker.conf /etc/supervisor/conf.d/job-worker.conf CMD bash -c "/usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf && /bin/bash" 今回はworkerを別コンテナで立ち上げたため、Larabelアプリコンテナと同様にPHPのインストールが必要になります。 docker-compose.yml そして最後ですね。 docker-compose.yml version: '3.8' services: app: build: ./app image: app:latest container_name: app working_dir: /var/www/html ports: - 8000:80 volumes: - /path/to/project-root/:/var/www/html/ supervisord: build: ./supervisord image: supervisord:latest container_name: supervisord tty: true volumes: - /path/to/project-root/:/var/www/html/ depends_on: - app mysql: image: mysql:5.7.32 container_name: mysql environment: MYSQL_ROOT_PASSWORD: root volumes: - ./mysql/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d ports: - 3306:3306 最後に こんな感じでサクッと。 とりあえずローカルでーとかってパターンなら、これで十分かなーと思います。 また気が向けば、別記事でジョブ実装やらsupervisordやらのこと書こうかなーと思います。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む