You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

105 lines
3.6 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# LE_PHP_Docker
Контейнер заточен для LE_Framework, выполняет функционал php-fpm
* php 7.4.22
* json, xml, zip, freetype, curl, bcmatch, mysqli
* поддержка RabbitMQ (amqp)
* пропатченная локаль, месяца с маленькой буквы и в родительном падеже
* отправка почты через ssmtp
## Установка
```bash
mkdir php_le_docker;
cd php_le_docker;
wget https://raw.githubusercontent.com/TechResearchRu/LE_PHP_Docker/main/Dockerfile
docker build -t php-le .
```
## Запуск
Если нужно просто поиграться в терминале
```bash
docker run -it --rm php-le /bin/sh
```
Продакшн режим примерно такой (но без поддержки php sendmail), по настройке sendmail из контейнера смотрите раздел ниже
```bash
docker run -d \
--restart=always \
--name project1.ru \
-p 127.0.0.1:9000:9000 \
-v /www:/www \
php-le
```
## Настройка почты
Сперва на локальном компе сделаем конфиг, который прокинем
```
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**,
> проверить ваш обратный адрес можно так `nslookup 8.8.8.8`,
> в примере выше есть ip **172.17.0.1**, это IP моста в докере, его можно узнать так: `ip addr | grep docker0`
Далее настраиваем Postfix на хосте.
При подобном методе есть вероятность полететь в спам, если у вас несколько разных сайтов с разных доменов будут отправлять, поэтому в Postfix нужно прописать следующее
```sh
#тут хак для подмены отправителя из докеров
sender_canonical_classes = envelope_sender
sender_canonical_maps = regexp:/etc/postfix/sender_canonical_maps
```
и еще создать файлик `/etc/postfix/sender_canonical_maps` и прописать в него
```
/.+/ 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:/docker_conf/etc/ssmtp/ssmtp.conf \
php-le
```
## Про даты
Обычно PHP берет из локали название месяца и оно там в именительном падеже
> 01 август 2021
Но нам нужно вот так
> 01 августа 2021
В данном контейнере скомпилированы локали с патчами на русский язык.
Проверить можно примерно вот так:
```php
if(setlocale(LC_ALL, 'ru_RU.UTF-8','Russian_Russia.65001')===false)
exit('not find UTF-8 LOCALE');
if(setlocale(LC_NUMERIC, 'en_US.UTF-8', 'C.UTF-8','C')===false)
exit('not find C NUMERIC LOCALE');
// 01 августа 2021
echo strftime('%d %B %Y', time());
```