20210728のPHPに関する記事は2件です。

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で続きを読む

プログラミング言語別文法早見表(基礎)

1.変数 *値を更新できる箱 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 変数名=値 let 変数名=値 var 変数名=直 $変数名=値 例 money=100 let money=100 var money=100 money=100 2.定数 *値を更新できない箱 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 変数と差異なし const 変数名=値 let 変数名=直 $変数名=値4 例 const=100 const tax=100 let tax=100 tax=100 3.四則演算子 *基本的に同じ 四則演算子 項目 + ー × ÷ 余り 書き方 + - * / % 例 price + tax apple - orange price * count price / tax price % tax インクリメント演算子(足し算) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 なし ++; なし $++; 例 なし const y = x++; なし $num++; インクリメント演算子(引き算) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 なし --; なし --; 例 なし const y = x--; なし $num--; 4.配列 配列(記入方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名 = [値1, 値2, 値3] 配列名 = [値1, 値2, 値3] 配列名 = [値1, 値2, 値3] 配列名 = [値1, 値2, 値3] 例 array = [1,2,3] const fruits = ['りんご', 'バナナ'] let fruits = ['りんご', 'バナナ'] $fruits = ['りんご', 'バナナ'] 配列(追加方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名[順番] = 値 配列名[順番] = 値配列名.push('値') 配列名.append(値) $配列名[] = "値" 例 array[4] = "e" array[4] = "e" list1.append("品川") $stack[] = "ぶどう"; 配列(削除方法) 後で更新 配列(抽出方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名[順番] 配列名[順番] 配列名[順番] $配列名[順番] 例 print 配列名[順番] print 配列名[順番] なし print $配列名[順番] 5.配列 ハッシュ 配列(記入方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名 = {"キー" => 値,"キー" => 値} 配列名 = ["キー": 値, "キー": 値] $配列名 = ["キー"=> 値, "キー"=> 値]; 例 hash = {"Lemon" => 100, "Orange" => 150} let dictionary = ["りんご": 青森, "バナナ": フィリピン] $hash = ["Lemon" => 100, "Orange" => 150]; 配列(追加方法) 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 配列名[キー] = 値 配列名[キー] = 値 $配列名[キー] = "値" 例 hash["Banana"] = 90 fruits["いちご"] = 300 $stack["フルーツ"] = "ぶどう";  繰り返し文 for 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 for 変数 in オブジェクト do 実行する処理1 end for (初期化式; 条件式; 変化式){ 実行する処理1;} for 変数 in 開始値 ..< 終了値 {実行する処理1} for(初期値; 条件式; 変化式){実行する処理1} 例 for num in 1..3 doprint("num = ", num, "¥n")endprint("End") for (let i = 0; i < 5; i++) { console.log((i + 1) + '回目の処理です');} for i in 1..<10 {print("i: (i)")} for($i=0;$i<5;$i++){echo $i;}  while  関数 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 def メソッドの名前 やりたい処理endメソッドの名前 function 関数名(変数) {やりたい処理}関数名(変数名) func 関数名 (引数1:引数1の型, ...) -> 戻り値の型 {やりたい処理return 戻り値}関数名(変数) function 関数名(変数){処理内容return 返り値関数名(変数名)} 例 def hello puts "Hello World!"endhello function square(number){{return number * number;}] let arrayData = [3, 5, 8, 10]for data in arrayData{print("data: (data)")} <?phpfunction goaisatsu() {$message = 'Hello world!'; return $message;}echo goaisatsu(); ?> 条件分岐 IF 項目 RUBY JAVASCRIPT SWIFT PHP 書き方 if 条件式1 then処理elsif 条件式2 then処理2elsedo 処理3end if (条件式1) {実行1}else if(条件式2){条件式2} if 条件式1 {処理1} else if 条件式2 {条件式2} else {処理3} if(条件){処理1}else{条件が偽であれば実行}else{条件が偽であれば実行} 例 a = 1if a > 3 thenputs "a is greater than 3"end var num = 70;if (num > 80) {console.log("numは80より大きいです。");} else if (num >= 60) {console.log("numは60~80の間です。"); } else {console.log("numは60未満です。");} var num = 5if ( num > 10 ) {print("10以上です")} else if ( num < 10 ) {print("10未満です")} else {print("それ以外");} $score = 90;if($score >= 80){echo “合格です!おめでとうございます!”;}else($score < 80){echo “不合格です!がんばりましょう!”} クラス 項目 RUBY JAVASCRIPT SWIFT PHP 書き方(作成方法) class クラス名{//プロパティの宣言public $変数名 = 値;//メソッドの宣言public function メソッド名(){メソッド内処理...} 書き方(生成方法) $クラスオブジェクト = new クラス名(); 書き方(作成方法) echo $生成->変数名; 例(作成方法) class SampleClass{//プロパティの宣言public $var = 'This is Sample Class.';} 例(生成方法) $sample = new SampleClass(); 例(出力方法) echo $sample->var;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む