質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

解決済

CircleCI OrbsでFargateにデプロイする時に500ERRORになる

tomoki737
tomoki737

総合スコア2

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

1回答

0グッド

0クリップ

257閲覧

投稿2022/10/11 13:56

編集2022/10/14 13:37

解決したいこと

Laravelでポートフォリオ作成中です
CircleCI OrbsでFargateにデプロイする際に500ERRORが発生しました。
手動でデプロイする際には正常に動作します。
解決方法を教えてください

エラーコード

phpタスクログ
イメージ説明
nginxタスクログ
イメージ説明

該当するソースコード

yaml:config.yml

1version: 2.1 2orbs: 3 aws-ecr: circleci/aws-ecr@8.1 4 aws-ecs: circleci/aws-ecs@3.2 5 6executors: 7 docker_build: 8 machine: 9 docker_layer_caching: true 10 11workflows: 12 build-and-deploy: 13 jobs: 14 - build 15 - aws-ecr/build-and-push-image: 16 name: "php" 17 executor: docker_build 18 registry-id: AWS_ECR_REGISTRY_ID 19 region: "ap-northeast-1" 20 repo: "php" 21 tag: "${CIRCLE_SHA1}" 22 path: ./ 23 dockerfile: ./docker/php/Dockerfile 24 requires: 25 - build 26 filters: 27 branches: 28 only: 29 - main 30 31 - aws-ecr/build-and-push-image: 32 name: "nginx" 33 executor: docker_build 34 registry-id: AWS_ECR_REGISTRY_ID 35 region: "ap-northeast-1" 36 repo: "nginx" 37 tag: "${CIRCLE_SHA1}" 38 path: ./ 39 dockerfile: ./docker/nginx/Dockerfile 40 requires: 41 - build 42 filters: 43 branches: 44 only: 45 - main 46 47 - aws-ecs/deploy-service-update: 48 family: "distributed_learn_task_definition" 49 service-name: "distributed-learn-service" 50 cluster: "distributed-learn-cluster" 51 container-image-name-updates: "container=php,image-and-tag=${AWS_ECR_ACCOUNT_URL}/php:${CIRCLE_SHA1},container=nginx,image-and-tag=${AWS_ECR_ACCOUNT_URL}/nginx:${CIRCLE_SHA1}" 52 requires: 53 - php 54 - nginx 55 filters: 56 branches: 57 only: 58 - main 59

Dockerfile:nignx/Dockerfile

1FROM nginx:1.20-alpine AS base 2ENV TZ=Asia/Tokyo 3COPY ./docker/nginx/nginx.conf /etc/nginx/nginx.conf 4 5FROM base AS development 6COPY ./docker/nginx/development/default.conf /etc/nginx/conf.d/default.conf 7 8FROM base AS prod 9COPY ./docker/nginx/prod/default.conf /etc/nginx/conf.d/default.conf 10COPY ./src /var/www/html 11EXPOSE 80

Dockerfile:php/Dockerfile

1FROM php:8.1-fpm-bullseye 2 3WORKDIR /var/www/html 4 5# timezone environment 6ENV TZ=Asia/Tokyo \ 7 # locale 8 LANG=ja_JP.UTF-8 \ 9 LANGUAGE=ja_JP:ja \ 10 LC_ALL=ja_JP.UTF-8 \ 11 # composer environment 12 COMPOSER_ALLOW_SUPERUSER=1 \ 13 COMPOSER_HOME=/composer 14 15COPY --from=composer:2.3 /usr/bin/composer /usr/bin/composer 16 17RUN apt-get update \ 18 && apt-get -y install --no-install-recommends \ 19 locales \ 20 git \ 21 unzip \ 22 vim \ 23 libzip-dev \ 24 libicu-dev \ 25 libonig-dev \ 26 && apt-get clean \ 27 && rm -rf /var/lib/apt/lists/* \ 28 && locale-gen ja_JP.UTF-8 \ 29 && localedef -f UTF-8 -i ja_JP ja_JP.UTF-8 \ 30 && docker-php-ext-install \ 31 intl \ 32 pdo_mysql \ 33 zip \ 34 bcmath \ 35 && composer config -g process-timeout 3600 \ 36 && composer config -g repos.packagist composer https://packagist.org 37 38COPY ./src /var/www/html 39COPY ./docker/php/php.ini /usr/local/etc/php/php.ini 40 41RUN composer install -q -n --no-ansi --no-dev --no-scripts --no-progress --prefer-dist \ 42 && composer dump-autoload \ 43 && chown -R www-data:www-data ./ \ 44 && chmod -R 777 storage bootstrap/cache \ 45 && php artisan optimize:clear \ 46 && php artisan optimize \ 47 && php artisan cache:clear \ 48 && php artisan config:clear \ 49 && php artisan route:clear \ 50 && php artisan view:clear 51

ログ

nginxビルドログ

#7 [base 2/2] COPY ./docker/nginx/nginx.conf /etc/nginx/nginx.conf #7 DONE 0.1s #8 [prod 1/2] COPY ./docker/nginx/prod/default.conf /etc/nginx/conf.d/default.conf #8 DONE 0.0s #9 [prod 2/2] COPY ./src /var/www/html #9 DONE 0.0s #10 exporting to image #10 exporting layers #10 exporting layers 0.2s done #10 exporting manifest sha256:a9f4ce17afe8f7798d12099cd21c87c1266950d418e1c181518f24ba49b4cba9 done #10 exporting config sha256:8960dc5041bcb59397535b260577d448fdb89f47dfa1e5638ba8d99e474dd65f done #10 pushing layers

phpビルドログ

#14 [stage-0 7/7] RUN composer install -q -n --no-ansi --no-dev --no-scripts --no-progress --prefer-dist && composer dump-autoload && chown -R www-data:www-data ./ && chmod -R 777 storage bootstrap/cache && php artisan optimize:clear && php artisan optimize && php artisan cache:clear && php artisan config:clear && php artisan route:clear && php artisan view:clear #14 2.780 Generating optimized autoload files #14 3.574 > Illuminate\Foundation\ComposerScripts::postAutoloadDump #14 3.583 > @php artisan package:discover --ansi #14 3.670 Discovered Package: fruitcake/laravel-cors #14 3.670 Discovered Package: laravel/sanctum #14 3.670 Discovered Package: laravel/socialite #14 3.670 Discovered Package: laravel/tinker #14 3.670 Discovered Package: nesbot/carbon #14 3.670 Package manifest generated successfully. #14 3.675 Generated optimized autoload files containing 3393 classes #14 4.217 Cached events cleared! #14 4.218 Compiled views cleared! #14 4.218 Application cache cleared! #14 4.219 Route cache cleared! #14 4.219 Configuration cache cleared! #14 4.219 Compiled services and packages files removed! #14 4.219 Caches cleared successfully! #14 4.305 Configuration cache cleared! #14 4.309 Configuration cached successfully! #14 4.309 Route cache cleared! #14 4.316 Routes cached successfully! #14 4.316 Files cached successfully! #14 4.392 Application cache cleared! #14 4.468 Configuration cache cleared! #14 4.546 Route cache cleared! #14 4.629 Compiled views cleared! #14 DONE 4.7s

自分で試したこと

nginx/Dockerfileでbaseをprodのみにしてpush。
Orbsではなく、下のURLの方法を参考にaws/cliを使いbuld、pushをしてみましたが、上手くいきませんでした。
https://zenn.dev/takamin55/articles/6900fa8b2ac21c

APP_DEBUGをtrueにすると下記の内容が出力されました。
イメージ説明

npm install & npm run prodが必要であるため、nginxのDockerfileに下記のコードを追加しましたが、同様のエラーが発生します。

Dockerfile

1WORKDIR /var/www/html 2RUN apt update \ 3 && apt install -y nodejs npm \ 4 && npm install \ 5 && npm run prod 6 7EXPOSE 80

以下のような質問にはグッドを送りましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

グッドが多くついた質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

yu_1985

2022/10/11 16:45

500ERRORが出ました、だけではどこでエラーになったのかわからないので、エラーが出たところやその時の出力内容、またエラーの内容を正確にわかるように記載してください。 スクリーンショットでも良いです。
yu_1985

2022/10/12 06:13

> 手動でデプロイする際には正常に動作します。 これは手動でどこになにをどのようにデプロイしたとき、どのような結果になるのが正常ということでしょうか。 詳細を記載してください。
tomoki737

2022/10/12 06:29

手動ではこのようにしてECRにpushしています。 ``` docker build -t nginx:prod -f ./docker/nginx/Dockerfile . ; docker tag nginx:prod ECR-URL/nginx:prod ; docker push <ECR-URL>/nginx:prod docker build -t php:prod -f ./docker/php/Dockerfile . ;docker tag php:prod ECR-URL/php:prod ;docker pushECR-URL/php:prod ``` 正常というのはサーバーからステータスコード200がリスポンスされることです。 こちらはgithubリポジトリです https://github.com/tomoki737/distributed_learn
yu_1985

2022/10/12 08:13

それだとpushしているだけでタスクで動いているコンテナが更新されないのではないでしょうか。 あと、nginxのコンテナとphpのコンテナはどのように通信をしているんでしょうか。
tomoki737

2022/10/12 08:31

言葉足らずですみません。imageをビルドしてプッシュした後にAWSコンソールからサービスを更新しています。 この部分で良いのでしょうか。間違っていたらすみません ```conf:default.conf location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } ```
yu_1985

2022/10/12 16:58

同じタスクで2つのコンテナを起動してローカルホスト経由で通信をしているということでしょうか? タスク定義はどうなってますか?
tomoki737

2022/10/13 13:50 編集

そうですね。タスク定義は以下になります。 ``` { "containerDefinitions": [ { "portMappings": [ { "hostPort": 80, "protocol": "tcp", "containerPort": 80 } "name": "nginx" }, { "entryPoint": [ "sh", "-c" ], "portMappings": [], "command": [ "php artisan config:cache && chmod -R 777 storage/* && php-fpm" ], "environment": [ { "name": "APP_ENV", "value": "production" } ], "name": "php" } ], "requiresCompatibilities": [ "FARGATE" ], ```
yu_1985

2022/10/14 23:31

nginxのコンテナでnpmを動かす理由がよくわかりません。 もはや当初の質問と違い、アプリ動作環境のデバッグになっていませんか? ECSに乗せる前に、そもそもローカルではどのように動かしていたんでしょうか。
tomoki737

2022/10/15 03:57

アプリ動作環境ではなく、本番環境でのエラーメッセージです。ローカルではどのように動かしているのでしょうかというのは具体的にどういうことでしょうか。dokerfileは同じです。npmを動かす理由がよくわかりませんということですが、どの部分でnpmを動かすコードになりますか。

回答1

0

自己解決

mixコンパイルからassetコンパイルに変更し、webpack.mix.jsのversionを削除しました。さらに、nginxのDockerfileをnpm install && npm run prodすることで正しく動作しました。

php:app.blade.php

1<link rel="stylesheet" href="{{ mix('css/app.css') }}">

php:app.blade.php

1<link rel="stylesheet" href="{{ asset('css/app.css') }}">

js:webpack.mix.js

1const mix = require('laravel-mix'); 2 3 mix.js('resources/js/app.js', 'public/js').vue() 4 .postCss('resources/css/app.css', 'public/css'); 5

docker:nginx/Dockerfile

1FROM nginx:1.20 AS base 2ENV TZ=Asia/Tokyo 3COPY ./docker/nginx/nginx.conf /etc/nginx/nginx.conf 4 5FROM base AS development 6COPY ./docker/nginx/development/default.conf /etc/nginx/conf.d/default.conf 7 8FROM base AS prod 9COPY ./docker/nginx/prod/default.conf /etc/nginx/conf.d/default.conf 10COPY ./src /var/www/html 11WORKDIR /var/www/html 12RUN apt update \ 13 && apt install -y nodejs npm \ 14 && npm ci \ 15 && npm run prod 16 17EXPOSE 80

参考URL
https://stackoverflow.com/questions/45153738/the-mix-manifest-does-not-exist-when-it-does-exist

yu_1985さんご回答いただきありがとうございました。

投稿2022/10/16 00:37

編集2022/10/16 00:50
tomoki737

総合スコア2

良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。

下記のような回答は推奨されていません。

  • 間違っている回答
  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

AWS(Amazon Web Services)

Amazon Web Services (AWS)は、仮想空間を機軸とした、クラスター状のコンピュータ・ネットワーク・データベース・ストーレッジ・サポートツールをAWSというインフラから提供する商用サービスです。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。