apiVersion: apps/v1 kind: Deployment metadata: name: {{ include "phpfpm.fullname" . }} labels: {{- include "phpfpm.labels" . | nindent 4 }} spec: replicas: {{ .Values.replicaCount }} selector: matchLabels: {{- include "phpfpm.selectorLabels" . | nindent 6 }} template: metadata: labels: {{- include "phpfpm.selectorLabels" . | nindent 8 }} spec: containers: - name: nginx image: "{{ .Values.image.nginx.registry }}/{{ .Values.image.nginx.repository }}:{{ .Values.image.nginx.tag }}" imagePullPolicy: {{ .Values.image.nginx.pullPolicy }} ports: - containerPort: 80 volumeMounts: - name: app-storage mountPath: /var/www/html subPath: html - name: nginx-config mountPath: /etc/nginx/nginx.conf subPath: nginx.conf - name: php-fpm image: "{{ .Values.image.php.registry }}/{{ .Values.image.php.repository }}:{{ .Values.image.php.tag }}" imagePullPolicy: {{ .Values.image.php.pullPolicy }} command: - sh - -c - | echo "Starting PHP-FPM setup process..." {{- if or .Values.composer.enabled .Values.selenium.enabled .Values.externalDatabase.enabled }} # ======================================== # APKパッケージのインストール # ======================================== APK_PACKAGES="" {{- if or .Values.composer.enabled .Values.selenium.enabled }} # Composer本体に必要なパッケージ APK_PACKAGES="$APK_PACKAGES curl zip libzip-dev" {{- end }} {{- if .Values.externalDatabase.enabled }} # MySQL/MariaDB接続に必要なパッケージ APK_PACKAGES="$APK_PACKAGES mysql-client mysql-dev" {{- end }} {{- if .Values.smtp.enabled }} # SMTP送信に必要なパッケージ APK_PACKAGES="$APK_PACKAGES msmtp ca-certificates" {{- end }} {{- if .Values.composer.additionalApkPackages }} # ユーザー指定の追加APKパッケージ {{- range .Values.composer.additionalApkPackages }} APK_PACKAGES="$APK_PACKAGES {{ . }}" {{- end }} {{- end }} if [ -n "$APK_PACKAGES" ]; then echo "Installing APK packages: $APK_PACKAGES" apk add --no-cache $APK_PACKAGES fi # ======================================== # PHP拡張のインストール # ======================================== {{- if or .Values.composer.enabled .Values.selenium.enabled }} echo "Installing PHP zip extension..." docker-php-ext-install zip {{- end }} {{- if .Values.externalDatabase.enabled }} echo "Installing pdo_mysql extension..." docker-php-ext-install pdo_mysql {{- end }} {{- if .Values.composer.additionalPhpExtensions }} echo "Installing additional PHP extensions..." {{- range .Values.composer.additionalPhpExtensions }} docker-php-ext-install {{ . }} {{- end }} {{- end }} # ======================================== # Composerのインストールと実行 # ======================================== {{- if or .Values.composer.enabled .Values.selenium.enabled }} echo "Installing Composer..." curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer cd /var/www/html {{- if .Values.composer.enabled }} # ユーザー定義のComposer設定 {{- if .Values.composer.useComposerJson }} # composer.jsonファイルを使用 echo "Creating composer.json from values..." cat > composer.json << 'COMPOSER_JSON_EOF' {{ .Values.composer.composerJson }} COMPOSER_JSON_EOF {{- if .Values.composer.composerLock }} echo "Creating composer.lock from values..." cat > composer.lock << 'COMPOSER_LOCK_EOF' {{ .Values.composer.composerLock }} COMPOSER_LOCK_EOF {{- end }} echo "Running composer install..." composer install {{ .Values.composer.installOptions }} {{- else if .Values.composer.packages }} # パッケージリストから直接インストール echo "Installing Composer packages..." {{- range .Values.composer.packages }} composer require {{ . }} {{- end }} {{- if .Values.composer.installOptions }} # オプティマイズ実行 composer install {{ .Values.composer.installOptions }} {{- end }} {{- else }} # composer.jsonが既に存在する場合はそれを使用 if [ -f composer.json ]; then echo "Found existing composer.json, running composer install..." composer install {{ .Values.composer.installOptions }} else echo "No composer configuration found, skipping package installation" fi {{- end }} {{- end }} {{- if .Values.selenium.enabled }} # Selenium用のパッケージインストール(レガシー互換性) echo "Installing Selenium WebDriver package..." composer require php-webdriver/webdriver {{- end }} {{- end }} {{- end }} {{- if .Values.smtp.enabled }} # ======================================== # SMTP設定(msmtp) # ======================================== echo "Configuring SMTP for mail sending..." # msmtprc設定ファイルをコピー cp /etc/smtp-config/msmtprc /etc/msmtprc chmod 600 /etc/msmtprc # PHP設定をphp.ini.d/に作成 cat > /usr/local/etc/php/conf.d/99-smtp.ini << 'PHP_SMTP_EOF' ; SMTP設定 - msmtp経由でメール送信 sendmail_path = "/usr/bin/msmtp -t" sendmail_from = "{{ .Values.smtp.from }}" PHP_SMTP_EOF echo "SMTP configured:" echo " Host: {{ .Values.smtp.host }}:{{ .Values.smtp.port }}" echo " Protocol: {{ .Values.smtp.protocol }}" echo " From: {{ .Values.smtp.from }}" {{- end }} echo "Setup complete, starting PHP-FPM..." php-fpm ports: - containerPort: 9000 # PHP-FPMは9000ポートでリッスン volumeMounts: - name: app-storage mountPath: /var/www/html subPath: html {{- if and .Values.composer.enabled .Values.composer.useComposerJson }} - name: composer-config mountPath: /tmp/composer-init {{- end }} {{- if .Values.smtp.enabled }} - name: smtp-config mountPath: /etc/smtp-config readOnly: true {{- if .Values.smtp.auth.enabled }} - name: smtp-secrets mountPath: /etc/smtp-secrets readOnly: true {{- end }} {{- end }} env: {{- if .Values.externalDatabase.enabled }} - name: DB_HOST value: {{ .Values.externalDatabase.host | quote }} - name: DB_PORT value: {{ .Values.externalDatabase.port | quote }} - name: DB_NAME value: {{ .Values.externalDatabase.database | quote }} - name: DB_USER value: {{ .Values.externalDatabase.username | quote }} - name: DB_PASS valueFrom: secretKeyRef: name: {{ include "phpfpm.fullname" . }}-db-secret key: {{ include "phpfpm.fullname" . }}-db-key {{- end }} {{- if .Values.selenium.enabled }} - name: selenium image: "{{ .Values.image.selenium.registry }}/{{ .Values.image.selenium.repository }}:{{ .Values.image.selenium.tag }}" imagePullPolicy: {{ .Values.image.selenium.pullPolicy }} ports: - containerPort: 4444 # Selenium用ポート volumeMounts: - name: app-storage mountPath: /var/www/html subPath: html {{- end }} dnsPolicy: ClusterFirst dnsConfig: options: - name: ndots value: "1" volumes: - name: app-storage {{- if .Values.persistence.enabled }} persistentVolumeClaim: claimName: {{ include "phpfpm.fullname" . }}-pvc {{- else }} emptyDir: {} {{- end }} - name: nginx-config configMap: name: {{ include "phpfpm.fullname" . }}-nginx-config {{- if and .Values.composer.enabled .Values.composer.useComposerJson }} - name: composer-config configMap: name: {{ include "phpfpm.fullname" . }}-composer-config {{- end }} {{- if .Values.smtp.enabled }} - name: smtp-config configMap: name: {{ include "phpfpm.fullname" . }}-smtp-config items: - key: msmtprc path: msmtprc {{- if .Values.smtp.auth.enabled }} - name: smtp-secrets secret: secretName: {{ include "phpfpm.fullname" . }}-smtp items: - key: password path: password mode: 0600 {{- end }} {{- end }}