2024年7月15日月曜日

php log(ECS ログ出力)

# PHPエラーログの設定
ENV PHP_INI_DIR /usr/local/etc/php
RUN { \
echo 'log_errors = On'; \
echo 'error_log = /proc/self/fd/2'; \
echo 'error_reporting = E_ALL'; \
echo 'display_errors = Off'; \
} > $PHP_INI_DIR/conf.d/docker-php-error-log.ini



設定内容の説明
  1. log_errors = On:

    • PHPのエラーログを有効にします。これにより、エラーがログファイルに記録されます。
  2. error_log = /proc/self/fd/2:

    • エラーログの出力先を標準エラー出力に設定します。ECS Fargateでは、この設定によってエラーログが自動的にCloudWatch Logsに送信されます。
  3. error_reporting = E_ALL:

    • すべてのエラーを報告する設定です。これにより、全てのエラーレベル(警告や通知など)がログに記録されます。
  4. display_errors = Off:

    • エラーメッセージをブラウザに表示しない設定です。本番環境では、セキュリティの観点からエラーメッセージを表示しないことが推奨されます。

2024年6月30日日曜日

MPM preforkメモ

▪️デフォルト値のprefork 

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxRequestWorkers   256
    MaxConnectionsPerChild  0
</IfModule>


▪️vCPUが2048の場合

<IfModule mpm_prefork_module>
    StartServers          50
    MinSpareServers       50
    MaxSpareServers       100
    ServerLimit           2048
    MaxRequestWorkers     2048
    MaxConnectionsPerChild  0
</IfModule>


ApacheのMPM設定の確認

 apachectl -V | grep -i mpm


2024年6月20日木曜日

apache dump出力方法

FROM php:7.4-apache

## ダンプ設定 ###
RUN apt-get update && apt-get install -y \
gdb \
procps

# コアダンプの生成を有効化
RUN echo '* soft core unlimited' >> /etc/security/limits.conf && \
echo '* hard core unlimited' >> /etc/security/limits.conf

# ダンプファイルの出力先
RUN echo 'kernel.core_pattern=/tmp/core.%e.%p.%h.%t' > /etc/sysctl.d/99-custom.conf

# コアダンプを有効にするシェルスクリプトを追加
RUN echo 'ulimit -c unlimited' >> /etc/profile

2024年6月19日水曜日

apache abベンチマーク(https)のURLで実行する方法

 

ab -n 100 -c 100  -k -H "Accept-Encoding: gzip, deflate" https://www.test.com/


ここで使用しているオプションについて説明します:

  • -n 100: 総リクエスト数を100とします。必要に応じて変更してください。
  • -c 10: 同時に実行するリクエスト数を10とします。必要に応じて変更してください。
  • -k: Keep-Aliveを使用して接続を再利用します。これにより、同じ接続で複数のリクエストを行います。
  • -H "Accept-Encoding: gzip, deflate": HTTPヘッダーとしてAccept-Encodingを指定します。これは、サーバーからの圧縮されたレスポンスを受け取るための設定です。
  • https://example.com/: HTTPSプロトコルを使用してテストしたいサイトのURLを指定します。

apache チューニング


RUN sed -i '$a<IfModule mpm_prefork_module>' /etc/apache2/apache2.conf
RUN sed -i '$a StartServers 5' /etc/apache2/apache2.conf
RUN sed -i '$a MinSpareServers 5' /etc/apache2/apache2.conf
RUN sed -i '$a MaxSpareServers 10' /etc/apache2/apache2.conf
RUN sed -i '$a ServerLimit 100' /etc/apache2/apache2.conf
RUN sed -i '$a MaxClients 100' /etc/apache2/apache2.conf
RUN sed -i '$a MaxRequestsPerChild 80' /etc/apache2/apache2.conf
RUN sed -i '$a</IfModule>' /etc/apache2/apache2.conf

2024年6月16日日曜日

docker(php:7.4-apache)について

apacheとphpの連携は、 apacheモジュール(php7_module)を使うことで
HTTPリクエストに対してPHPを正しく処理できる状態にしている。

具体的には、php7_moduleがApacheのロードモジュールとしてリストされている場合、Apacheは.php拡張子を持つファイルを受け取った際に、そのファイルをPHPスクリプトとして解釈し、PHPエンジンを通じて処理することができます。

2024年5月26日日曜日

504 Gateway time outについて考察

以下のアイドルタイムの変更が必要なのかもしれない 

登場リソース;

①ALB                           : Idle timeoutの値を60秒(例)に設定

②PHP                          : max_execution_time = 180秒 [スクリプトの最大実行時間](例)

③SQL(MS SQL2019)   : remote query timeout 300秒(例)


参照先:

https://qiita.com/nagaakihoshi/items/f7326978221ee053d208


https://repost.aws/knowledge-center/504-error-alb

2024年5月25日土曜日

phpのチューニング(504 Gateway Timeout Error)

504 Gateway Timeout Errorが出たので、改善方法を記載してみる


1)php.iniを作成する

; エラーログを有効にする
log_errors = On

; エラーログの出力先ファイルを指定する
error_log = /var/log/php_errors.log

; エラー表示を有効にする(開発環境用)
display_errors = On

; エラーレポートのレベルを指定する(開発環境用)
error_reporting = E_ALL

; デバッグレベルのログを出力する
; 以下のように設定することで全てのログが出力される
log_errors_max_len = 0

max_execution_time = 180
max_input_time = 300


2)dockerfileの作成を行う

FROM php:7.4-apache


# 新しいphp.iniファイルをコピー
COPY php.ini /usr/local/etc/php/


3)php infoにて、設定内容を確認してみる



2024年5月22日水曜日

apache2 チューニング(for dockerfile)

参照先:
https://qiita.com/kaihei777/items/4e3c257e073eb886b38a

RUN sed -i 's/KeepAliveTimeout 5/KeepAliveTimeout 750/' /etc/apache2/apache2.conf
RUN sed -i 's/Timeout 300/Timeout 750/' /etc/apache2/apache2.conf

2024年5月20日月曜日

FROM php:7.4-apache(apacheのuser&groupの変更方法)

訳あって、FROM php:7.4-apacheでの実行ユーザーとグループの変更が必要になってので
以下の記載により再現させてみることに。


1)start-apache.shを作成

#!/bin/bash
# Apacheをapacheユーザーとして起動

# ログファイルの所有権を変更
chown apache:apache /var/log/apache2 /var/log/apache2/*

# Apacheをapacheユーザーとして起動
exec gosu apache /usr/sbin/apache2ctl -D FOREGROUND


2)dockerfileの作成を行う

FROM php:7.4-apache


# 新しいユーザー(test)とグループ(apache)を作成
RUN groupadd -r apache
RUN useradd -r -g apache test

# Apacheの環境変数のファイルを更新する(ユーザーとグループを変更)
RUN sed -i 's/APACHE_RUN_USER:=www-data/APACHE_RUN_USER:=test/g' /etc/apache2/envvars
RUN sed -i 's/APACHE_RUN_GROUP:=www-data/APACHE_RUN_GROUP:=apache/g' /etc/apache2/envvars

# apache log(所有者変更)
RUN chown test:apache -R /var/log/apache2
RUN chown test:apache -R /var/www/html
RUN chown test:apache -R /run/lock/apache2
RUN chown test:apache -R /run/apache2
RUN chown test:apache -R /var/cache/apache2/mod_cache_disk


# gosuのインストールに必要なパッケージのインストール
RUN apt-get update && apt-get install -y \  
wget \  
gnupg2 \  
dirmngr \  
&& rm -rf /var/lib/apt/lists/*

# gosuのインストール
RUN set -eux; \  
wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64"; \
wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/1.12/gosu-amd64.asc"; \
export GNUPGHOME="$(mktemp -d)"; \  
gpg --keyserver keyserver.ubuntu.com --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4; \  
gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu; \  
rm -rf "$GNUPGHOME" /usr/local/bin/gosu.asc; \  
chmod +x /usr/local/bin/gosu; \  
gosu --version; \  
apt-get purge -y --auto-remove wget gnupg2 dirmngr

# スクリプトをコピーして実行権限を付与
COPY start-apache.sh /usr/local/bin/start-apache.sh
RUN chmod +x /usr/local/bin/start-apache.sh

CMD ["start-apache.sh"]

php log(ECS ログ出力)

# PHPエラーログの設定 ENV PHP_INI_DIR /usr/local/etc/php RUN { \ echo 'log_errors = On' ; \ echo 'error_log = /proc/self/...