LE_PHP_Docker_7.4
Описание
Docker контейнер для Le_framework, подходит для распространенных приложений на PHP, имеет все необходимые патчи и библиотеки.
Языки
- Dockerfile50,6%
- Shell49,4%
LE_PHP_Docker
Контейнер заточен для LE_Framework, выполняет функционал php-fpm
- php 7.4.22
- json, xml, zip, freetype, curl, bcmatch, ssl и другие полезные модули
- mysqli и sqlite
- поддержка png, jpeg, webp, gif
- поддержка RabbitMQ (amqp)
- пропатченная локаль, месяца с маленькой буквы и в родительном падеже
- отправка почты через ssmtp (транспорт smtp)
- корректная работа iconv на конструкциях //TRASLITE //IGNORE и других, в базовом докере PHP такого нет
- uid пользователя www-data изменен на 33, специально для Debian хостов, но при желании вы можете поменять его на свой, отредактировав Dockerfile. Созданные через php-fpm файлы внутри контейнера будут корректно читаться из папки на хосте.
Сборка из DockerFile
Запуск FPM
Если нужно просто поиграться в терминале
Продакшн режим примерно такой (но без поддержки php sendmail), по настройке sendmail из контейнера смотрите раздел ниже
Выполнение CLI скриптов
Настройка почты
Сперва на локальном компе сделаем конфиг, который прокинем
mkdir -p /docker_conf/etc/ssmtp/
nano /docker_conf/etc/ssmtp/ssmtp.conf
Вставим примерно такое
#see ptr
rewriteDomain=web.mydomain.ru
FromLineOverride=YES
#host ip, see "ip addr|grep docker0"
mailhub=172.17.0.1
UseTLS=YES
UseSTARTTLS=YES
Нужно прописать на ip вашего сервера PTR запись у хостера или провайдера и на эту обратную запись настроить postfix, в примере это web.mydomain.ru, проверить ваш обратный адрес можно так
, в примере выше есть ip 172.17.0.1, это IP моста в докере, его можно узнать так:nslookup 8.8.8.8ip addr | grep docker0
Postfix
Вместо локального Postfix можно прямо к почтовой учетке подключаться типа gmail, yandex etc... Но там будьте готовы к ограничениям, скорей всего придется платный аккаунт для домена покупать или использовать ящик вашего хостера.
- Настраиваем Postfix на хосте.
При подобном методе есть вероятность полететь в спам, если у вас несколько разных сайтов с разных доменов будут отправлять, поэтому в Postfix нужно прописать следующее
и еще создать файлик и прописать в него
/.+/ postmaster@web.mydomain.ru
Запуск контейнера с настройками sendmail
docker run -d \
--restart=always \
--name project1.ru \
-p 127.0.0.1:9000:9000 \
-v /www:/www \
-v /docker_conf/etc/ssmtp/ssmtp.conf:/etc/ssmtp/ssmtp.conf \
php-le
Тестовый скриптик для отправки почты
<?php
$to = 'mymail@gmail.com';
$subject = 'the subject';
$message = 'hello4';
$headers = 'From: admin2@site.ru' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
mail($to, $subject, $message, $headers);
NGINX Example
С конфигам пока не было времени вникнуть до конца, вероятно он не очень оптимален, если так, то сообщите мне
#project1
server
{
listen 80;
server_name project1.loc;
root /www/project1.loc/web;
index index.php;
location ~* ^/pub/(.+\.(?:gif|jpe?g|png|js|css|woff|ttf|svg|eot|html|htm|txt))$
{
alias /mp/v1.8/PUB/$1;
access_log off;
expires 10d;
}
location ~* ^.+\.(txt|jpe?g|gif|png|ico|css|txt|bmp|rtf|js|svg|eot|ttf|woff|html?)$
{
access_log off;
add_header Cache-Control "public, max-age=31536000, immutable";
}
#все запросы направить на index.php
location / {
rewrite ^/(.*)$ /index.php;
}
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass localhost:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Про даты
Обычно PHP берет из локали название месяца и оно там в именительном падеже
01 август 2021
Но нам нужно вот так
01 августа 2021
В данном контейнере скомпилированы локали с патчами на русский язык. Проверить можно примерно вот так:
Обратная связь
Буду рад любой критике в пользу оптимизации.
Если у вас возникли сложности, то тоже пишите, вероятно помогу. Моя почта pavelbbb@gmail.com , меня зовут Павел Беляев.