php_modが非推奨になったのね

昔のバージョンのphp環境でphpバージョンを上げるという対応中。 apache + PHP8のインスタンスを構築してドキュメントルートまで到達を確認。 対応する人にドキュメントルートまで到達するからプロジェクトのファイルを置いてバージョンアップのエラーを確認してもらうため依頼しましたが HTTP 503 Service Unavailable のエラーが出ているとのこと。 HTMLファイルはアクセスできているからPHPの実行ができていないと思い調べると Apache HTTP サーバーで使用するために PHP に提供されている mod_php モジュールが非推奨になりました。 php-fpmをインストールして起動し、リクエストを流してphp-fmpでphpを実行するようにして解決。 しばらくPHPを触っていなかったのでモジュールが非推奨になったことに気づかずでした。

aws copilotを試しに使う⑥ 〜サイドカーでより利用想定に近いと思われるものを試していく①

前回はcopilot-cliのアップデートで少しserviceのデプロイまでが変わっていたので記事にしました。
今回ですが、より実際に使うであろう構造に近いものを試してみます。

WEBサービスの場合におおよそですが、HTTPクライアントが要求を受け取り、バックエンドが処理してHTTPクライアントがレスポンスをするという構成が私の経験してきているところなのでこれを試してみます。

今回はローカルであらかじめコンテナを立ち上げて、さらにコンテナ間通信まで確認したものでcopilotでのデプロイとHTTPでのアクセスを確認するまでを目標とします。
まずはLaravel(composerで特に指定していなくインストールされたもの Laravel Framework 9.21.6)をインストールして、php artisan serveで開発サーバーをポート8000で立ち上げてたコンテナに、nginxのコンテナがユーザーからの要求を80番ポートで受け取りLaravelのコンテナに8000番に流してLaravelの初期画面を表示されるまでを確認しました。

続いてそれをAWSのcopilotでデプロイできるようにしたいと思います。
サイドカーで実行して80番ポートでリクエストを受け取り8000番で起動しているLaravelに流すというものを作成したいと思います。

ちなみにDockerfileはこんなものを用意しました。

php8/laravel

FROM arm64v8/php:latest
RUN cd /usr/local/src \
    && php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" \
    && php -r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" \
    && php composer-setup.php \
    && php -r "unlink('composer-setup.php');"
RUN cd /usr/local/bin && ln -s /usr/local/src/composer.phar composer
RUN apt update && apt-get install -y unzip
RUN cd /usr/local/src && composer create-project laravel/laravel laravel
#RUN cd /usr/local/src/laravel && php artisan serve --host=0.0.0.0 --port=8000
EXPOSE 8000
WORKDIR /usr/local/src/laravel
CMD ["php","artisan","serve","--host","0.0.0.0"]

nginxはconfを用意してLaravelのサービスに流せるようにします。
default.conf

upstream laravel {
    server localhost:8000;
}
server {
    listen 80;

    location / {
        proxy_pass http://laravel;
    }
}

nginxのコンテナを作成するDockerfileはこんな感じで作成しています。


FROM nginx:1.23
ADD default.conf /etc/nginx/conf.d/default.conf

こちらでローカルでのコンテナ間通信が確認できましたのでcopilotでデプロイまでしていきたいと思います。(ローカルのnginxコンテナからlocalhostでは名前解決できないのでそこはIPで確認しています。)

copilot app initをまずは実行してアプリケーションを作成すると、copilotディレクトリができて.workspaceが作成することを確認しました。

次にcopilot env initを実行します。
環境名はtestで環境を作成して試行的なものなのでdefaultのVPCを作成しました。
copilot-cliのアップデート後に新たなセクションが追加されていて
observabilityという項目があります。
cloudwatchコンテナーインサイトを有効にするかどうかというものなので今回は有効にしなくていいという判断をしました。

observability:
  container_insights: false

こちらでcopilot env deployを実行します。
ECSクラスターが作成され、VPCなどのネットワーク設定がされた環境が出来上がりました。

次にcopilot svc initを実行しました。
Load Balanced Web Serviceを選択し、サービス名を設定しDockerfileを指定して作成を選びます。
Dockerfileのパスはcopilotディレクトリからのパスを指定します。
サービスのmanifestが作成されました。

まずこれでサービスをデプロイしてみましょう。

copilot svc deploy
test環境しかないので特に指定しなくてもtest環境へデプロイしてくれます。
実行でプライベートネットワークの名前解決やロードバランサーなどを作成してくれます。

ただ結果的に実行してもうまく起動しませんでした。

原因を探っていきたいと思います。
続きは次回で。

コメント

このブログの人気の投稿

nginxで画像が表示されない。。

AWSのS3バケットをマウントするs3fsでマウントが外れた件

CakePHP3でHTTPSにする