influunt media

influunt media

Who am I?

Блог разработчика: обзор инструментов, практические примеры, мысли и исследования


October CMS docker


October CMS набирающая популярность система управления контентом. Среди её достоинств: удобный интерфейс администратора, простота установки плагинов, тем, а так же "бложик из коробки". Конечно, новизна системы доставляет некоторые неудобства - как, например, скудное количество тем(на момент написания статьи - 36), ограниченное количество плагинов. Однако, каких-либо сильных неудобств мною выявлено не было.

Установка

Установка осуществляется с помощью инсталлера или из коммандной строки. Для того, чтобы построить docker образ мы воспользуемся вторым.
Перед тем, как приступить к установке cms необходимо установить недостающие пакеты, а также загрузить и установить менеджер зависимостей composer

RUN apt-get update && \
    apt-get -y install curl php5 nginx php5-fpm php5-curl php5-mcrypt php5-memcache php5-memcached git php5-pgsql php5-json libphp-pclzip php5-gd && \
    curl -sS https://getcomposer.org/installer | php -- --install-dir=/bin --filename=composer

Вторым шагом необходимо сконфигурировать FastCGI (php-fpm), а также mrypt

# php-fpm config
RUN sed -i -e "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g" /etc/php5/fpm/php.ini && \
    sed -i -e "s/upload_max_filesize\s*=\s*2M/upload_max_filesize = 100M/g" /etc/php5/fpm/php.ini && \
    sed -i -e "s/post_max_size\s*=\s*8M/post_max_size = 100M/g" /etc/php5/fpm/php.ini && \
    sed -i -e "s/;daemonize\s*=\s*yes/daemonize = no/g" /etc/php5/fpm/php-fpm.conf && \
    sed -i -e "s/;catch_workers_output\s*=\s*yes/catch_workers_output = yes/g" /etc/php5/fpm/pool.d/www.conf && \
    find /etc/php5/cli/conf.d/ -name "*.ini" -exec sed -i -re 's/^(\s*)#(.*)/\1;\2/g' {} \; && \
    php5enmod mcrypt

И наконец установить October CMS

# Install OctoberCMS
RUN php /bin/composer -n create-project october/october /opt/october dev-master && \
    rm -rf /usr/share/nginx/html/ && \
    chown -R www-data:www-data /opt/october

Все пакеты установлены - пришло время очистить кэш и удалить больше не используемые пакеты

RUN apt-get autoremove && apt-get clean && apt-get autoclean

На этом установка завершена.

Конфигурация Nginx

Изменение конфигурации стоит начать с основной - nginx.conf. А именно: изменить пользователя, от имени которого он будет запущен, на www-data; перенаправить логи в домашний каталог пользователя; переопределить директиву расширения базовой конфигурации; запретить даемонизацию.

user www-data;

...

http {

    ...

    access_log /home/www-data/log/access.log;
    error_log /home/www-data/log/error.log;

    include /home/www-data/conf/*site.conf;
}

daemon off;

Не стоит забывать и о базовой конфигурации сервера. Обязательно необходимо указать порт, на котором nginx должен принимать запросы; корневую директорию сайта; определить отдельную директорию для статического контента; перенаправить обработку php на FastCGI; перенаправить поиск robots.txt в директорию для статического контента.

server {
    listen 80;

    server_name localhost;
    root /opt/october/;

    index index.php index.html index.htm;

    rewrite ^/robots.txt /static/robots.txt last;

    location ^~ /storage/app/media/ {
        try_files $uri =404;
    }

    location ^~ /static/ {
       try_files $uri =404;
    }

    location / {
        try_files $uri $uri/ /index.php;
    }

    location ~ \.php$ {
        include fastcgi_params;

        try_files  $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_index index.php;
    }
}
Создание точки входа

Точка входа - способ инициализации и запуска приложения. В ходе инициализации будут создаваться настройки "по умолчанию" - это позволит сократить время старта нового сайта.
В сокращенном варианте точка входа выглядит следующим образом:

#!/bin/bash

chown -R www-data:www-data /opt/october
chown -R www-data:www-data /home/www-data/conf
chown -R www-data:www-data /home/www-data/cms
chown -R www-data:www-data /home/www-data/log

/usr/sbin/php5-fpm -c /etc/php5/fpm &

$(/usr/sbin/nginx -c /home/www-data/conf/nginx.conf) &
nginx_pid=$!

sleep 10s

tail -f /var/log/php5-fpm.log /home/www-data/log/* &

wait $nginx_pid
Добавляем файлы в контейнер

Пора вернуться обратно к Dockerfile и добавить в него директивы для копирования конфигурационных файлов, а также точки входа.

ADD nginx.conf /opt/install/conf/
ADD fastcgi_params /opt/install/conf/
ADD nginx-site.conf /opt/install/conf/
ADD database.php /opt/install/conf/
ADD robots.txt /opt/install/conf/
ADD nginx-start.sh /opt/

RUN chmod +x /opt/nginx-start.sh

WORKDIR /home/www-data/
EXPOSE 80

ENTRYPOINT ["/opt/nginx-start.sh"]
CMD ["nginx"]
Итоги

Создание контейнера достаточно объёмный процесс, включающий в себя такие этапы как установка, первоначальная настройка, описание точки входа. Причем этот процесс не завершается после создания первой версии образа - его необходимо поддерживать и развивать. В случае если вам это не подходит, вы можете воспользоваться контейнером influunt/october доступным в hub.docker.com. Или просто написать в коммандной строке:

docker pull influunt/october

Все, что необходимо для сборки: