【问题标题】:Symfony deploy on kubernetes - env issuesSymfony 在 kubernetes 上部署 - 环境问题
【发布时间】: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


【解决方案1】:

看来预热工作不正常。

我仔细查看了我的 docker-entrypoint 并设法在里面运行 composer install 和缓存清理。

问题解决了。

谢谢大家。

入口点.sh:

set -e

cd /var/www/app

tar cf - --one-file-system -C /usr/src/myapp . | tar xf -

rm -rf var/cache var/log

composer install

php bin/console cache:clear --env=dev

chown -R www-data:www-data .

exec "$@"```


【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-13
    • 1970-01-01
    • 2020-05-13
    • 1970-01-01
    • 2022-07-15
    • 2018-06-13
    • 1970-01-01
    • 2020-04-28
    相关资源
    最近更新 更多