【发布时间】:2020-11-04 19:36:53
【问题描述】:
我正在构建一个应该部署在 Google 的 App Engine 上的应用程序 (PHP/Laravel)。该应用程序的组件之一是能够连接到 MSSQL 服务器。当我调试它时一切正常,但是一旦我将它部署到 App Engine - 你猜怎么着?它不起作用(错误:找不到驱动程序)。
我通过Google documentation 发现MSSQL 驱动程序(pdo_sqlsrv、sqlsrv)在标准环境中未启用也不可用。我检查了flexible environment,但那是一样的。不同的是我可以use my own runtime使用Dockerfile。
我在根目录中更改了我的app.yaml 的两行:
runtime: custom
env: flex
然后我也在根目录中创建了我的 Dockerfile,它应该是 install sqlsrv and pdo_sqlsrv using PECL 并启用它:
FROM gcr.io/google-appengine/php72:latest
ARG COMPOSER_FLAGS='--prefer-dist --ignore-platform-reqs --optimize-autoloader'
ENV COMPOSER_FLAGS=${COMPOSER_FLAGS}
ENV SWOOLE_VERSION=4.3.4
ENV DOCUMENT_ROOT=/app/public
ENV ACCEPT_EULA=Y
COPY . $APP_DIR
RUN apt-get update -y \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -\
&& curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt-get update -y \
&& apt-get install -y \
unzip \
autoconf \
build-essential \
libmcrypt-dev \
libmpdec-dev \
libpq-dev \
unixodbc-dev \
msodbcsql17 \
mssql-tools \
php-common \
&& apt-get update \
&& pecl install \
decimal \
sqlsrv \
pdo_sqlsrv \
xdebug \
&& apt-get update \
&& phpenmod sqlsrv pdo_sqlsrv \
&& curl -o /tmp/swoole.tar.gz https://github.com/swoole/swoole-src/archive/v$SWOOLE_VERSION.tar.gz -L \
&& tar zxvf /tmp/swoole.tar.gz \
&& cd swoole-src* \
&& phpize \
&& ./configure \
--enable-coroutine \
--enable-async-redis \
--enable-coroutine-postgresql \
--enable-sqlsrv=static --with-pdo_sqlsrv=static \
&& make \
&& make install \
&& chown -R www-data.www-data $APP_DIR \
&& /build-scripts/composer.sh;
ENTRYPOINT ["/build-scripts/entrypoint.sh"]
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
EXPOSE 8080
我也有自己的php.ini,根目录下有两行:
extension = pdo_sqlsrv.so
extension = sqlsrv.so
根据 Google 文档,将此文件放在应用程序的根目录中将使用我的配置扩展/替换它们的默认 php.ini。但是,我只在非自定义运行时的文档中找到了这个语句。我通过更改 display_errors 的值然后phpinfo() 对其进行了测试。 display_errors 仍然设置为默认值,get_loaded_extensions() 没有显示 sqlsrv 和 pdo_sqlsrv。
我检查了构建日志,似乎驱动程序已正确安装,因为在 3714 行中我发现:
Installing '/opt/php72/lib/x86_64-linux-gnu/extensions/no-debug-non-zts-20170718/sqlsrv.so'
install ok: channel://pecl.php.net/sqlsrv-5.8.1
.....
Installing '/opt/php72/lib/x86_64-linux-gnu/extensions/no-debug-non-zts-20170718/pdo_sqlsrv.so'
install ok: channel://pecl.php.net/pdo_sqlsrv-5.8.1
.....
configuration option "php_ini" is not set to php.ini location
You should add "extension=sqlsrv.so" to php.ini
configuration option "php_ini" is not set to php.ini location
You should add "extension=pdo_sqlsrv.so" to php.ini
请问有人有这方面的经验吗?我需要在 Dockerfile 中进行哪些更改以使 Google App Engine 启用 PHP 扩展?
【问题讨论】:
标签: php sql-server ubuntu google-app-engine dockerfile