diff --git a/backend/helm/cloudhost-app/templates/_helpers.tpl b/backend/helm/cloudhost-app/templates/_helpers.tpl index 8c1b0a8..bbc0a57 100644 --- a/backend/helm/cloudhost-app/templates/_helpers.tpl +++ b/backend/helm/cloudhost-app/templates/_helpers.tpl @@ -90,6 +90,25 @@ PostgreSQL PGDATA path — must be a subdirectory of the mount to avoid "initdb: /var/lib/postgresql/data/pgdata {{- end }} +{{- define "cloudhost-app.laravelDbConnection" -}} +{{- if eq .Values.database.type "postgresql" }}pgsql{{- else if eq .Values.database.type "mongodb" }}mongodb{{- else }}mysql{{- end }} +{{- end }} + +{{/* +Laravel-specific DB env vars (DB_CONNECTION, DB_DATABASE, DB_USERNAME) +*/}} +{{- define "cloudhost-app.laravelDbEnv" -}} + - name: DB_CONNECTION + value: {{ include "cloudhost-app.laravelDbConnection" . | quote }} + - name: DB_DATABASE + value: {{ include "cloudhost-app.dbName" . }} + - name: DB_USERNAME + valueFrom: + secretKeyRef: + name: {{ include "cloudhost-app.name" . }}-db-secret + key: username +{{- end }} + {{/* App storage mount path based on runtime */}} diff --git a/backend/helm/cloudhost-app/templates/deployment.yaml b/backend/helm/cloudhost-app/templates/deployment.yaml index 07adfd3..ce09c78 100644 --- a/backend/helm/cloudhost-app/templates/deployment.yaml +++ b/backend/helm/cloudhost-app/templates/deployment.yaml @@ -54,13 +54,7 @@ spec: - name: DATABASE_URL value: "postgresql://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:5432/{{ include "cloudhost-app.dbName" . }}" {{- if or (eq .Values.app.runtime "laravel") (eq .Values.app.runtime "php") }} - - name: DB_DATABASE - value: {{ include "cloudhost-app.dbName" . }} - - name: DB_USERNAME - valueFrom: - secretKeyRef: - name: {{ $name }}-db-secret - key: username +{{ include "cloudhost-app.laravelDbEnv" . }} {{- end }} {{- end }} {{- if and .Values.database.enabled (eq .Values.database.type "mysql") }} @@ -83,13 +77,7 @@ spec: - name: DATABASE_URL value: "mysql://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:3306/{{ include "cloudhost-app.dbName" . }}" {{- if or (eq .Values.app.runtime "laravel") (eq .Values.app.runtime "php") }} - - name: DB_DATABASE - value: {{ include "cloudhost-app.dbName" . }} - - name: DB_USERNAME - valueFrom: - secretKeyRef: - name: {{ $name }}-db-secret - key: username +{{ include "cloudhost-app.laravelDbEnv" . }} {{- end }} {{- end }} {{- if and .Values.database.enabled (eq .Values.database.type "mariadb") }} @@ -112,13 +100,7 @@ spec: - name: DATABASE_URL value: "mysql://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:3306/{{ include "cloudhost-app.dbName" . }}" {{- if or (eq .Values.app.runtime "laravel") (eq .Values.app.runtime "php") }} - - name: DB_DATABASE - value: {{ include "cloudhost-app.dbName" . }} - - name: DB_USERNAME - valueFrom: - secretKeyRef: - name: {{ $name }}-db-secret - key: username +{{ include "cloudhost-app.laravelDbEnv" . }} {{- end }} {{- end }} {{- if and .Values.database.enabled (eq .Values.database.type "mongodb") }} @@ -143,13 +125,7 @@ spec: - name: DATABASE_URL value: "mongodb://$(DB_USER):$(DB_PASSWORD)@{{ include "cloudhost-app.dbDeploymentName" . }}:27017/{{ include "cloudhost-app.dbName" . }}?authSource=admin" {{- if or (eq .Values.app.runtime "laravel") (eq .Values.app.runtime "php") }} - - name: DB_DATABASE - value: {{ include "cloudhost-app.dbName" . }} - - name: DB_USERNAME - valueFrom: - secretKeyRef: - name: {{ $name }}-db-secret - key: username +{{ include "cloudhost-app.laravelDbEnv" . }} {{- end }} {{- end }} {{- /* Redis connection env vars */}} diff --git a/backend/src/build/build.service.ts b/backend/src/build/build.service.ts index 6defbb5..3f80516 100644 --- a/backend/src/build/build.service.ts +++ b/backend/src/build/build.service.ts @@ -1009,7 +1009,7 @@ RUN composer dump-autoload --optimize --no-dev # --- Production stage --- FROM php:${phpVersion}-fpm-alpine -RUN apk add --no-cache nginx supervisor curl \\ +RUN apk add --no-cache nginx supervisor curl openssl \\ && docker-php-ext-install pdo pdo_mysql opcache \\ && docker-php-ext-install pdo_pgsql 2>/dev/null || true @@ -1063,14 +1063,20 @@ RUN [ -f docker/supervisord.conf ] && cp docker/supervisord.conf /etc/supervisor # Ensure storage and cache directories exist and are writable RUN mkdir -p storage/logs storage/framework/cache storage/framework/sessions storage/framework/views bootstrap/cache \\ && chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache -RUN php artisan config:cache && php artisan route:cache && php artisan view:cache || true -RUN php artisan storage:link || true RUN echo '#!/bin/sh' > /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ echo 'set -e' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ echo 'cd /var/www/html' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ - echo 'mkdir -p storage/logs storage/framework/cache storage/framework/sessions storage/framework/views' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ - echo 'chown -R www-data:www-data storage' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'mkdir -p storage/logs storage/framework/cache storage/framework/sessions storage/framework/views storage/app/public bootstrap/cache' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'chown -R www-data:www-data storage bootstrap/cache' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'if [ -z "$APP_KEY" ] || [ "$APP_KEY" = "null" ]; then export APP_KEY="base64:$(openssl rand -base64 32)"; fi' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'php artisan config:clear || true' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'php artisan cache:clear || true' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'php artisan migrate --force --no-interaction || true' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'php artisan storage:link || true' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'php artisan config:cache || true' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'php artisan route:cache || true' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ + echo 'php artisan view:cache || true' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ echo 'exec /usr/bin/supervisord -c /etc/supervisord.conf' >> /usr/local/bin/cloudhost-laravel-entrypoint.sh && \\ chmod +x /usr/local/bin/cloudhost-laravel-entrypoint.sh diff --git a/backend/src/kubernetes/kubernetes.service.ts b/backend/src/kubernetes/kubernetes.service.ts index d8bc312..9bdfb2f 100644 --- a/backend/src/kubernetes/kubernetes.service.ts +++ b/backend/src/kubernetes/kubernetes.service.ts @@ -435,7 +435,14 @@ export class KubernetesService implements OnModuleInit { (ctx.runtime === AppRuntime.LARAVEL || ctx.runtime === AppRuntime.PHP) && ctx.databaseType !== DatabaseType.NONE ) { + const dbConnection = + ctx.databaseType === DatabaseType.POSTGRESQL + ? 'pgsql' + : ctx.databaseType === DatabaseType.MONGODB + ? 'mongodb' + : 'mysql'; extraEnv.push( + { name: 'DB_CONNECTION', value: dbConnection }, { name: 'DB_DATABASE', value: ctx.appName.replace(/-/g, '_') }, { name: 'DB_USERNAME', valueFrom: { secretKeyRef: { name: `${ctx.appName}-db-secret`, key: 'username' } } }, );