# .env.deploy generation. Renders templates/env/env.template (token # substitution) and appends conditional blocks for the chosen options. # The file is written with mode 600 and never echoed to stdout. # render_template FILE — substitutes @KEY@ tokens from the RENDER assoc array. # Prints the result to stdout. render_template() { local file="$1" content key content="$(cat "$file")" for key in "${!RENDER[@]}"; do content="${content//@${key}@/${RENDER[$key]}}" done printf '%s\n' "$content" } # build_database_url — sets CFG_DATABASE_URL from the collected DB config. build_database_url() { if [[ "$CFG_DB_MODE" == "embedded" ]]; then CFG_DATABASE_URL="postgresql+asyncpg://${CFG_DB_USER}:${CFG_DB_PASS}@db:5432/${CFG_DB_NAME}" else CFG_DATABASE_URL="postgresql+asyncpg://${CFG_DB_USER}:${CFG_DB_PASS}@${CFG_DB_HOST}:${CFG_DB_PORT}/${CFG_DB_NAME}" fi } # generate_env — writes $ENV_FILE from template + conditional sections. generate_env() { build_database_url declare -A RENDER=( [MCMA_IMAGE_TAG]="$CFG_TAG" [DATABASE_URL]="$CFG_DATABASE_URL" [REDIS_URL]="$CFG_REDIS_URL" [JWT_SECRET]="$CFG_JWT_SECRET" [MEDIA_HOST_PATH]="$CFG_MEDIA_HOST_PATH" [STORAGE_BACKEND]="$CFG_STORAGE" [PUBLIC_API_BASE_URL]="$CFG_PUBLIC_API_BASE_URL" [HTTP_PORT]="$CFG_HTTP_PORT" [API_PORT]="$CFG_API_PORT" [WEBUI_PORT]="$CFG_WEBUI_PORT" ) umask 077 render_template "${BOOTSTRAP_DIR}/templates/env/env.template" >"$ENV_FILE" # -- embedded Postgres credentials (needed by the db service) --------- if [[ "$CFG_DB_MODE" == "embedded" ]]; then { echo "" echo "# -- built-in Postgres --------------------------------------------------" echo "POSTGRES_USER=${CFG_DB_USER}" echo "POSTGRES_PASSWORD=${CFG_DB_PASS}" echo "POSTGRES_DB=${CFG_DB_NAME}" } >>"$ENV_FILE" fi # -- S3 storage ------------------------------------------------------- if [[ "$CFG_STORAGE" == "s3" ]]; then { echo "" echo "# -- S3 storage ---------------------------------------------------------" echo "S3_ENDPOINT_URL=${CFG_S3_ENDPOINT}" echo "S3_BUCKET=${CFG_S3_BUCKET}" echo "S3_REGION=${CFG_S3_REGION}" echo "S3_ACCESS_KEY=${CFG_S3_KEY}" echo "S3_SECRET_KEY=${CFG_S3_SECRET}" } >>"$ENV_FILE" fi # -- optional ML service ---------------------------------------------- if [[ -n "${CFG_ML_URL:-}" ]]; then { echo "" echo "# -- optional ML service ------------------------------------------------" echo "ML_SERVICE_URL=${CFG_ML_URL}" } >>"$ENV_FILE" fi chmod 600 "$ENV_FILE" }