美文网首页SQL Server
php7.3 容器安装SQL Server 扩展

php7.3 容器安装SQL Server 扩展

作者: 字字经心 | 来源:发表于2023-04-04 17:03 被阅读0次

    近期php 容器要访问一台远程服务器的sql server 数据库,中间遇到挺多问题的。记录一下

    install odbc/php extension

    安装操作SQL Server 需要的php扩展和软件驱动 ODBC,把安装命令写成shell script,在php 的Dcokerfile 里面执行,文件目录是:

    -- docker-compose.yml
    -- php
      -- Dockerfile
      -- sqlserver_extension.sh
    

    把下面内容放在 sqlserver_extension.sh 里面

    # sqlserver
    apt-get update && apt-get install -y gnupg2
    curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
    
    #Download appropriate package for the OS version
    #Choose only ONE of the following, corresponding to your OS version
    
    #Debian 9
    #curl https://packages.microsoft.com/config/debian/9/prod.list > /etc/apt/sources.list.d/mssql-release.list
    
    #Debian 10
    curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
    
    #Debian 11
    #curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list
    
    apt-get update
    ACCEPT_EULA=Y apt-get install -y msodbcsql17
    # optional: for bcp and sqlcmd
    ACCEPT_EULA=Y apt-get install -y mssql-tools
    echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
    #source ~/.bashrc
    # optional: for unixODBC development headers
    apt-get install -y unixodbc-dev
    # optional: kerberos library for debian-slim distributions
    apt-get install -y libgssapi-krb5-2
    
    # sqlserver php extension
    docker-php-source extract && cd /tmp \
    && curl -L -o /tmp/pdo_sqlsrv.tgz  https://pecl.php.net/get/pdo_sqlsrv-5.9.0.tgz \
    && curl -L -o /tmp/sqlsrv.tgz  https://pecl.php.net/get/sqlsrv-5.9.0.tgz \
    && tar zxvf pdo_sqlsrv.tgz && tar zxvf sqlsrv.tgz \
    && mv pdo_sqlsrv-5.9.0  /usr/src/php/ext/pdo_sqlsrv \
    && mv sqlsrv-5.9.0  /usr/src/php/ext/sqlsrv \
    && docker-php-ext-install pdo_sqlsrv && docker-php-ext-install sqlsrv
    

    Dockerfile

    FROM php:7.3.7-fpm
    # install sqlserver odbc/php extension
    COPY sqlserver_extension.sh /usr/local/bin/
    RUN chmod +x /usr/local/bin/sqlserver_extension.sh
    RUN sh /usr/local/bin/sqlserver_extension.sh
    

    如果命令执行出错,很可能是提示缺少其他依赖包。也可以进入容器执行单个命令,看是否出错。比如执行“curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -” 时就提示报错了,导致后面的msodbcsql17/mssql-tools 提示找不到包,无法安装。安装

    apt-get install -y gnupg2
    

    后就可以了,要仔细耐心阅读报错信息

    开放端口号,允许账号使用ip远程登入

    设置SQL Server 允许账号ip 远程登入,对方服务器是windows 的,设置方法可参看附录。设置好之后,可现在本地验证:

    # 看是否能否登入
    sqlcmd -S 127.0.0.1(或者外网ip) -U ske -P
    xxx
    
    use skedb
    go
    select top 1 * from table order by time desc;
    go
    

    还要设置数据库端口号对 php 容器服务器开放,联系学校网络中心的老师解决了。可以利用telnet 来验证是否开放,

    telnet $ip 1433
    

    还有一点要注意的是,数据库端口号开放是针对特定IP的,所以PHP容器的网络模式要使用host,不能使用bridge 模式,即和宿主机共享网络。docker-compose.yml 配置如下:

    version: '2.2'
    services:
      php73:
        build: ./php
        container_name: php73
        restart: always
        tty: true
        volumes:
          - ./web:/var/www/html
          - ./php/php.ini:/usr/local/etc/php/php.ini
          - ./php/php-fpm.d:/usr/local/etc/php-fpm.d
          - ./php/php-fpm.conf:/usr/local/etc/php-fpm.conf
          - ./php/cron:/var/spool/cron/crontabs
          - ./php/php_errors.log:/var/log/php_errors.log
          - ./php/other_config/openssl.cnf:/etc/ssl/openssl.cnf # resolve sql server err
        network_mode: host # host 是docker 预定义的网络,使用host 不能使用links option
    

    other problem

    ERR: SQLSTATE[08001]: [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol]

    解决方式:
    vim /etc/ssl/openssl.cnf

    # 末尾改为
    [system_default_sect]
    MinProtocol = TLSv1
    CipherString = DEFAULT@SECLEVEL=1
    

    参考文章:

    1. install odbc/php extension
    2. SQL Server 允许账号使用ip远程登入
    3. sql server 官方文档

    相关文章

      网友评论

        本文标题:php7.3 容器安装SQL Server 扩展

        本文链接:https://www.haomeiwen.com/subject/pebkddtx.html