我已经成功部署了太多次 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 获取环境变量,反之则不行。
config(['test_env' => getenv('TEST_ENV')]);
可能需要运行
php artisan config:clear
和 php artisan config:cache
。另一种选择可能是在部署期间生成一个新的 .env
文件,这仅仅意味着:在缓存之前已经定义了该值。
我终于成功了。 让我分享一下我的背景
这是我的 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。 您也可以对其他环境变量执行相同的操作