Laravel 环境变量在 Google Cloud Run 中不起作用

问题描述 投票:0回答:2

我已经成功部署了太多次 Laravel 项目直至 Cloud Run,但现在

Cloud Run 似乎无法读取环境变量(我已在 Cloud Run 实例的“变量和秘密”部分中指定)。

我正在使用 Laravel 8。出于测试目的(并确保 Cloud Run 正在读取环境变量),我在

api.php
部分添加了一条简单的路线,如下所示:

Route::get('/test-env', function () {
    echo 'debuggeando<br>';
   dd(config('variables.test_env'));
});

进入我的

config/variables.php
,我有以下内容:

<?php
return [
    'test_env' => env('TEST_ENV', 'no se encontro la variable')
];

这是我的最终结果:

我做错了什么?为什么 Cloud Run 无法从 Laravel 读取环境变量?

laravel google-cloud-platform laravel-8 google-cloud-run
2个回答
1
投票

你只能让 Laravel 获取环境变量,反之则不行。

config(['test_env' => getenv('TEST_ENV')]);

可能需要运行

php artisan config:clear
php artisan config:cache
。另一种选择可能是在部署期间生成一个新的
.env
文件,这仅仅意味着:在缓存之前已经定义了该值。


0
投票

我终于成功了。 让我分享一下我的背景

  1. Laravel 10.x
  2. 使用 Github Actions 部署到 Cloud Run
  3. 一开始我还发现Google Cloud Run中设置的环境变量,无法被Laravel访问
  4. 在 Dockerfile 中我使用 php8.2-fpm 和 NGINX

这是我的 Dockerfile 的一些示例

FROM ubuntu:latest AS base

# Install dependencies
RUN apt-get update && apt-get install -y software-properties-common && \
    add-apt-repository -y ppa:ondrej/php && \
    apt-get update && apt-get install -y \
    php8.2\
    php8.2-cli\
    php8.2-common\
    php8.2-fpm\
    php8.2-mysql\
    php8.2-zip\
    php8.2-gd\
    php8.2-mbstring\
    php8.2-curl\
    php8.2-xml\
    php8.2-bcmath\
    php8.2-pdo\
    php8.2-intl\
    php8.2-exif\
    php8.2-redis\
    git

# Install Composer
RUN apt-get update && apt-get install -y curl && \
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install nodejs
RUN apt-get update && apt-get install -y ca-certificates gnupg && \
    mkdir -p /etc/apt/keyrings && \
    curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg && \
    NODE_MAJOR=20 && \
    echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_MAJOR.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list && \
    apt-get update && \
    apt-get install -y nodejs

# Install nginx
RUN apt install -y nginx
RUN echo "\
    server {\n\
            listen 8080;\n\
            index index.php index.html;\n\
            error_log  /var/log/nginx/error.log;\n\
            access_log /var/log/nginx/access.log;\n\
            root /var/www/html/public;\n\
            charset utf-8;\n\
            location / {\n\
                try_files \$uri \$uri/ /index.php?\$query_string;\n\
                gzip_static on;\n\
            }\n\
            location = /favicon.ico { access_log off; log_not_found off; }\n\
            location = /robots.txt  { access_log off; log_not_found off; }\n\
            error_page 404 /index.php;\n\
            location ~ \.php$ {\n\
              fastcgi_pass unix:/run/php/php8.2-fpm.sock;\n\
              fastcgi_param SCRIPT_FILENAME \$realpath_root\$fastcgi_script_name;\n\
              include fastcgi_params;\n\
            }\n\
            location ~ /\.(?!well-known).* {\n\
                deny all;\n\
            }\n\
    }\n" > /etc/nginx/sites-available/default

RUN echo "\
    #!/bin/sh\n\
    echo \"Starting services...\"\n\
    service php8.2-fpm start\n\
    nginx -g \"daemon off;\" &\n\
    echo \"Ready.\"\n\
    tail -f > /dev/null\n\
    " > /start.sh
    
COPY . /var/www/html
WORKDIR /var/www/html

RUN chown -R www-data:www-data /var/www/html
RUN composer install
COPY entrypoint.sh /entrypoint.sh
RUN chmod +x /entrypoint.sh

EXPOSE 8080

CMD ["/entrypoint.sh"]

这是我项目根目录中的

entrypoint.sh
文件

#!/bin/bash

# Navigate to your application's directory
cd /var/www/html/

# By default phpfpm clear all env
# Need to add these lines to be available for php-fpm
echo "env[API_KEY] = ${API_KEY}" >> /etc/php/8.2/fpm/pool.d/www.conf

# Clear cache
php artisan cache:clear
php artisan config:clear

# Run migrations
php artisan migrate

# Run the start.sh script
sh /start.sh -d

# Start the application using passed arguments
exec "$@"

在这里找到要点

# By default phpfpm clear all env
# Need to add these lines to be available for php-fpm
echo "env[APP_KEY] = ${APP_KEY}" >> /etc/php/8.2/fpm/pool.d/www.conf

知道您检查 APP_KEY 现在可用于 php-fpm。 您也可以对其他环境变量执行相同的操作

© www.soinside.com 2019 - 2024. All rights reserved.