LEMP, nginx pagespeed модуль, Memcached и phpMyAdmin в Docker контейнерах

Автор: Admin | 14.04.2018

Разворачивание LEMP (Linux, Nginx, MariaDB, PHP-FPM) плюс ngx_pagespeed module, Memcached и phpMyAdmin в Docker контейнерах

Весь код на гитхабе. Тут только описание и принцип работы.

Использование

Установить docker-compose при помощи pip или любым другим способом:

pip install docker-compose

Клонировать репу:

git clone [email protected]:maxmureev/docker_lepm_ngx-pagespeed.git

Скопировать файлы сайта в volumes/sites/[site_dir]. Заменить конфиги сайтов в каталоге images/nginx/conf.d/ на свои.

Запустить контейнеры:

cd docker_lepm_ngx-pagespeed
docker-compose up -d

Создать базы:

# Для example.ru
docker exec -it mysql-example.ru mysql -e 'CREATE DATABASE `site` CHARACTER SET utf8 COLLATE utf8_general_ci;'
# Для site.com
docker exec -it mysql-site.com mysql -e 'CREATE DATABASE `site` CHARACTER SET utf8 COLLATE utf8_general_ci;'

Готово. LEMP работает.

Описание

Репа разделена на два каталога images и volumes. Первый предназначен для хранения правил сборки контейнеров и конфигов демонов, второй для данных, каталоги из volumes аттачатся к хост системе.

Mysql

Mysql стартует с параметром --skip-grant-tables

phpMyAdmin

Коннект к базе:
Server: Имя mysql контейнера (mysql-example.ru или mysql-site.com)
Username: root
Password: Без пароля

Автостарт phpMyAdmin закомментирован намеренно для секьюрности и должен запускаться только по необходимости. Конфиг phpMyAdmin взят с официальной репы. Модифицирован только в части переменных для единообразия.

SSL

Файл dhparam.pem предлагаю сгенерировать один раз где угодно и просто добавлять инструкцией ADD, дабы не генерировать каждый раз при пересборке.
Let'sEncrypt так же предлагаю поставить на хост систему и аттачить готовые сертификаты в контейнер, 64 строка в docker-compose.yml

Почему у контейнера Nginx базовый образ Ubuntu, а не Alpine?

Так проще. Первое - Alpine должен быть пропатчен для сборки модуля ngx_pagespeed. Второе - патчить можно только Alpine не младше версии 3.4. И мне это не нравится, ибо костыли. Не хочу использовать Alpine ради Alpine'а.

Почему не сделал автоматическую сборку на DockerHub?

Поскольку DockerHub не работает с docker-compose.yml файлом (не исключено, что плохо искал), он не может определить передаваемые из него аргументы для сборки, а для меня предпочтительнее использовать глобальные переменные в docker-compose.yml, чем быстро скачивать уже готовые образы.


При добавлении нового сайта, будут неверные права на файлы, надо назначить владельцем пользователя от которого запущен процесс php-fpm:

docker exec -it php-fpm chown -R nginx:nginx /var/www/

Как это все бэкапить написано в данной заметке.


Данный сайт работает на описанном выше стеке. Добавив в WordPress плагин кеширования с возможностью хранения данных в Memcached, можно набрать 100 очков на PageSpeed Insights и Pingdom Website Speed Test. В моем случае стоит аналитика от гугла, поэтому только 99-98.


Комментарии к посту “LEMP, nginx pagespeed модуль, Memcached и phpMyAdmin в Docker контейнерах

  1. Александр

    Похоже вы закрыли свой git или забыли открыть )) А было бы интересно.
    $ git clone [email protected]:maxmureev/docker_lepm_ngx-pagespeed.git
    Клонирование в «docker_lepm_ngx-pagespeed»…
    The authenticity of host ‘github.com (192.30.253.113)’ can’t be established.
    RSA key fingerprint is SHA256:nThbg6kXUpJWGl7E1IGOCspRomTxdCARLviKw6E5SY8.
    Are you sure you want to continue connecting (yes/no)? yes
    Warning: Permanently added ‘github.com,192.30.253.113’ (RSA) to the list of known hosts.
    Permission denied (publickey).
    fatal: Не удалось прочитать из внешнего репозитория.
    Удостоверьтесь, что у вас есть необходимые права доступа
    и репозиторий существует.

    1. admin Автор записи

      Александр, репа точно доступна. Похоже у Вас не интегрирован SSH ключ для гитхаба, попробуйте склонировать по web протоколу
      git clone https://github.com/maxmureev/docker_lepm_ngx-pagespeed.git

  2. Александр

    >Автостарт phpMyAdmin закомментирован намеренно
    я раскомментировал блок phpMyAdmin в docker-compose.yml
    перестроил: docker-compose up -d —build
    все вроде завелось:
    docker-compose ps
    Name Command State Ports
    ——————————————————————————————————
    memcached memcached -u memcached -m 512 Up
    mysql-bj.an2k.org mysqld —user=root —skip- … Up
    nginx nginx -g daemon off; Up 0.0.0.0:443->443/tcp, 0.0.0.0:80->80/tcp
    php-fpm /usr/sbin/php-fpm7 —nodae … Up
    phpmyadmin /run.sh phpmyadmin Up 0.0.0.0:999->80/tcp, 9000/tcp

    сайт bj.an2k.org в браузере шевелиться, а вот как зайти в phpmyadmin не соображу
    похоже нужно домен прописать в зоне — это понятно
    но как его в nginx конфиг добавить правильно ?

    1. admin Автор записи

      Изначально предполагается, что контейнер с phpmyadmin билдится\работает отдельно от всей связки, поэтому внутри phpmyadmin контейнера уже есть свои nginx и php-fpm. Обратите внимание, что контейнер слушает порт 999.

      1. Александр

        хорошо, но как его в браузере вызвать?
        где прописывать в nginx адрес: phpmyadmin.an2k.org ?

        1. admin Автор записи

          Можно зайти
          — по IP 1.2.3.4:999
          — по любому имени, который сопоставлен с этим IP phpmyadmin.an2k.org:999
          Адрес прописывать специально не надо, любой адрес (который сопоставлен с этим IP) будет попадать на phpmyadmin, если ломиться на нужный порт. Если очень хочется, то конфиг находится в файле sites/images/phpmyadmin/etc/nginx.conf, параметр server_name _;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *