Bonjour,
Voici un Dockerfile pour une image PHP (php7-fpm), avec support PDO + Microsoft ODBC + Gettext (externationalisation) et envoi d'emails via relais externe (msmtp):
Image de base : php:7.4.1-fpm
Ports exposé: 9000 (pour écouter les requêtes apache/nginx)
Fichier:
FROM php:7.4.1-fpm
LABEL version="0.1"
LABEL description="PHP7 base image with MS-SQL ODBC - WARNING: TLSV1 for outdated sqlserver"
LABEL maintainer="ayak973@ayak973.io"
EXPOSE 9000
# for php PDO extensions
RUN set -x && DEBIAN_FRONTEND=noninteractive \
&& apt update && apt install gnupg unixodbc unixodbc-dev -y \
&& docker-php-ext-configure pdo_odbc --with-pdo-odbc=unixODBC,/usr \
&& docker-php-ext-install pdo_odbc \
&& docker-php-ext-configure gettext \
&& docker-php-ext-install gettext
# for emails:
RUN set -x && DEBIAN_FRONTEND=noninteractive \
&& apt install -y --no-install-recommends msmtp mailutils
RUN echo "sendmail_path = /usr/bin/msmtp -t -i" >> /usr/local/etc/php/conf.d/php-msmtp.ini
# test email from container: echo -e "Subject: Test Mail\r\n\r\nThis is a test mail" |msmtp --debug --from=php@****.com -t nicolas.***@***.com
# for msodbc, to connect to old MSSQL Server, disable modern TLS (BWAAAAAAAAAAAAAAAAAAAAAH !!)
RUN set -x && DEBIAN_FRONTEND=noninteractive \
&& apt install -y --no-install-recommends openssl \
&& sed -i 's,^\(MinProtocol[ ]*=\).*,\1'TLSv1.0',g' /etc/ssl/openssl.cnf \
&& sed -i 's,^\(CipherString[ ]*=\).*,\1'DEFAULT@SECLEVEL=1',g' /etc/ssl/openssl.cnf
# for MS ODBC
RUN set -x && DEBIAN_FRONTEND=noninteractive \
&& curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
&& curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list \
&& apt update \
&& ACCEPT_EULA=Y apt-get install -y msodbcsql17 \
&& rm /etc/apt/sources.list.d/mssql-release.list \
&& apt autoremove -y \
&& rm -rf /var/lib/apt/lists/*
Dans le docker-compose php, ajouter le fichier de conf msmtp via un volume (afin de pouvoir utiliser un relais mail par conteneur, mais il existe peut-etre un meilleur moyen, ici dans le répertoire ./php7/conf/msmtp.conf)
volumes:
- "./php7/conf/msmtp.conf:/etc/msmtprc"
Avec le fichier de conf MSMTP:
defaults
#tls on
tls_certcheck off
tls_starttls on
#tls_trust_file /etc/ssl/certs/ca-certificates.crt
account current_account
host 192.168.xx.xxx
port 587
timeout 10
from php@***.com
account default : current_account
Ce qui a été le plus galère, c'est de comprendre pourquoi php_PDO ne se connectait pas au serveur MSSQL2008: ce dernier est trop vieux, et ne gère pas de protocole TLS assez récent, et PHP, dans la version 7 il me semble, bloque les anciennes versions de TLS. Voila pourquoi il a fallu recourir a une image custom, sachant que la MAJ du serveur SQL n'est pas d'actualité (snif)
Au passage, si ca correpond pas au sujet ou ressemble trop a un tuto, n'hésitez pas à delete sans mon accord !
Bonne fin de journée à vous !