【发布时间】:2021-05-20 04:43:17
【问题描述】:
我有一个 symfony 应用程序和三个 kubernetes 集群:dev、staging prod。
我正在使用 env 文件来设置环境。我使用正确的 .env 构建 docker 映像并通过 kubectl 进行部署。但事实上,APP_ENV 的值并没有被考虑在内,即使其他参数是(例如数据库连接)。
我的暂存环境设置为“测试”,但 composer 仍然安装开发依赖项,并且日志转到 /var/log/dev.log。在这些日志行中,我还有一个 app_environment 值,应根据 .env 文件将其设置为“test”。我还是找到了“本地”。
我做错了什么?
我的暂存 .env 文件:
# * .env contains default values for the environment variables needed by the app
# * .env.local uncommitted file with local overrides
# * .env.$APP_ENV committed environment-specific defaults
# * .env.$APP_ENV.local uncommitted environment-specific overrides
###> symfony/framework-bundle ###
APP_ENV=test
APP_SECRET=XXXXXXX
#TRUSTED_PROXIES=127.0.0.0/8,10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
#TRUSTED_HOSTS='^(localhost|example\.com)$'
###< symfony/framework-bundle ###
###> doctrine/doctrine-bundle ###
# Format described at https://www.doctrine-project.org/projects/doctrine-dbal/en/latest/reference/configuration.html#connecting-using-a-url
# For an SQLite database, use: "sqlite:///%kernel.project_dir%/var/data.db"
# For a PostgreSQL database, use: "postgresql://db_user:db_password@127.0.0.1:5432/db_name?serverVersion=11&charset=utf8"
# IMPORTANT: You MUST configure your server version, either here or in config/packages/doctrine.yaml
DATABASE_URL=postgresql://root:root@postgres:5432/dbb
###< doctrine/doctrine-bundle ###
###> nelmio/cors-bundle ###
#CORS_ALLOW_ORIGIN=^https?://(localhost|127\.0\.0\.1)(:[0-9]+)?$
CORS_ALLOW_ORIGIN=^https://my-domain.com
###< nelmio/cors-bundle ###
###> lexik/jwt-authentication-bundle ###
JWT_PUBLIC_KEY=%kernel.project_dir%/config/jwt/public.pem
###< lexik/jwt-authentication-bundle ###
###> nzo/elk-bundle ###
ELK_APP_NAME=my-app
ELK_APP_ENVIRONMENT=test
###< nzo/elk-bundle ###
Docker 文件:
FROM php:7.4-fpm
WORKDIR /app
# Install selected extensions (git, git-flow and other stuff)
RUN apt-get update \
&& apt-get install -y --no-install-recommends zlib1g-dev libpq-dev git git-flow libicu-dev libxml2-dev libzip-dev\
&& docker-php-ext-configure intl \
&& docker-php-ext-install intl \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
&& docker-php-ext-install pdo pdo_pgsql pgsql \
&& docker-php-ext-install zip xml \
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
# Install composer
RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer \
&& apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /usr/share/doc/*
COPY ./my-project/ /usr/src/my-project
COPY docker-dist/back/config/php/php.ini /usr/local/etc/php/
COPY docker-entrypoint.sh /entrypoint.sh
RUN composer install --working-dir=/usr/src/my-project
# WORKDIR is /var/www/html (inherited via "FROM php")
# "/entrypoint.sh" will populate it at container startup from /usr/src/my-project
VOLUME /var/www/app
ENTRYPOINT ["/entrypoint.sh"]
CMD ["php-fpm"]
【问题讨论】:
-
这个
APP_ENV是在所有 docker 镜像中被覆盖还是在你的暂存镜像中被覆盖? -
所有 docker 镜像
-
您检查过容器中的 env 文件吗?覆盖容器的 .env 文件的 .env.local 文件不是问题吗?
-
我做了,.env 文件没问题,值没问题。集群上没有 .env.local
-
我想
public/index.php是 symfony 的原始版本,这行$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
标签: docker symfony kubernetes