Как организовывают разделение на production и development в Okay-CMS?

Правила раздела: faq.php?mode=okay
Модератор: Модераторы

Zepp M
Zepp M
Возраст: 34
Репутация: 1
Сообщения: 12
Зарегистрирован: 22.09.2023
С нами: 7 месяцев 5 дней

Сообщение #1 Zepp » 22.09.2023, 16:44

По долгу службы столкнулся с Okay-CMS. У компании, где я тружусь, некоторые сайты используют эту систему. Нужно кое-где переделать вёрстку использующихся шаблонов, возможно, появится необходимость где-то переработать логику и всё такое.

Так вот, с привычной разработкой, мне понятно, есть разделение на development и production. То есть, я делаю подходящую среду со всем необходимым в Докере (кто-то виртуальные машины делает, насколько я знаю), веду там разработку, заканчиваю её и тестирую, это dev. Затем готовый продукт я выкладываю на хостинг, подключаю нужные штуки, он оказывается в интернете, это prod.

А тут получается, что у меня есть FTP доступ на хостинг, где лежат все файлы сайта, в том числе те, которые мне нужно менять. Этот сайт уже есть в сети и прекрасно работает. Я скопировал файлы к себе, положил в Докер с PHP и Nginx, настроил точку входа на нужный index.php. Но ничего не работает, появляется 500'ая ошибка "internal server error".

Возможно это связанно с моим стандартным конфигом для Nginx, который не подходит к данной ситуации.

Конфиг:
Спойлер

Код: Выделить всё

server {
    index index.php;
    server_name station.loc;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www;

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php: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, вроде как, подходящая:
Спойлер

Код: Выделить всё

FROM php:7-fpm

RUN apt-get update && apt-get install -y \
        curl \
        wget \
        git \
        zip \
        unzip \
        vim \
        libfreetype6-dev \
        libjpeg62-turbo-dev \
        libmcrypt-dev \
        libpng-dev \
   libzip-dev \
    && docker-php-ext-install -j$(nproc) iconv mysqli pdo_mysql zip \
    && docker-php-ext-configure gd --with-freetype=/usr/include/ --with-jpeg=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

USER www-data:www-data

WORKDIR /var/www

CMD ["php-fpm"]

Автозагрузку обновил ("composer dump-autoload").

Причина скрывается где-то в этом направлении:
Спойлер

Код: Выделить всё

try {
    /** @var Router $router */

    $router = $DI->get(Router::class);
    phpinfo();
    // Редирект с повторяющихся слешей
    $uri = str_replace(Request::getDomainWithProtocol(), '', Request::getCurrentUrl());
    if (($destination = preg_replace('~//+~', '/', $uri, -1, $countReplace)) && $countReplace > 0) {
        Response::redirectTo($destination, 301);
    }
    $router->resolveCurrentLanguage();

    if ($config->get('debug_mode') == true) {
        ini_set('display_errors', 'on');
        error_reporting(E_ALL);
    }

    /** @var Response $response */
    $response = $DI->get(Response::class);

    /** @var Request $request */
    $request = $DI->get(Request::class);
    // Установим время начала выполнения скрипта
    $request->setStartTime($startTime);

    if (isset($_GET['logout'])) {
        unset($_SESSION['admin']);
        unset($_SESSION['last_version_data']);
        setcookie('admin_login', '', time()-100, '/');

        $response->redirectTo($request->getRootUrl());
    }

    /** @var Modules $modules */
    $modules = $DI->get(Modules::class);
    DebugBar::stopMeasure('init');
    $modules->startEnabledModules();

    $router->run();

    if ($response->getContentType() == RESPONSE_HTML) {
        // Отладочная информация
        print "<!--\r\n";
        $timeEnd = microtime(true);
        $execTime = $timeEnd - $startTime;

        if (function_exists('memory_get_peak_usage')) {
            print "memory peak usage: " . memory_get_peak_usage() . " bytes\r\n";
        }
        print "page generation time: " . $execTime . " seconds\r\n";
        print "-->";
    }

} catch (\Exception $e) {

    /** @var LoggerInterface $logger */
    $logger = $DI->get(LoggerInterface::class);

    $message = $e->getMessage() . PHP_EOL . $e->getTraceAsString();
    if ($config->get('debug_mode') == true) {
        print $message;
    } else {
        $logger->critical($message);
        header($_SERVER['SERVER_PROTOCOL'].' 500 Internal Server Error');
    }
}

"phpinfo()" до этой строчки: "$router = $DI->get(Router::class);" (она почти в самом начале) работает, после - уже не работает, появляется ошибка 500.

"php index.php" в ПоверШелле говорит:
"PHP Warning: Undefined array key "SERVER_PROTOCOL" in ..." ссылаясь на тот же try-catch блок, на последнюю строчку - "header($_SERVER['SERVER_PROTOCOL'].' 500 Internal Server Error');"

Один мой коллега предположил, что это может происходить из-за того, что я выдернул эти файлы из контекста самой CMS и стараюсь отдельно запихнуть в Докер (я так и делаю, взял все файлы сайта и пихаю в Докер).

Однако возникают вопросы. Прав ли он? Если он прав, тогда как правильно сделать разделение на разработку и продакшн? Как обычно рекомендуется делать тогда?

Помогите, пожалуйста, буду очень вам признателен!
Лучшие люди форума: korshunov, makki, Aleks! Спасибо за неоценимую помощь этим великим знатокам Okay-CMS!

korshunov
korshunov
Репутация: 148
Сообщения: 1862
Зарегистрирован: 03.12.2015
С нами: 8 лет 4 месяца
Skype

Сообщение #2 korshunov » 23.09.2023, 06:32

Вот читаю на
https://habr.com/ru/articles/253877/
про Docker:
Докер — это открытая платформа для разработки, доставки и эксплуатации приложений. Docker разработан для более быстрого выкладывания ваших приложений. С помощью docker вы можете отделить ваше приложение от вашей инфраструктуры и обращаться с инфраструктурой как управляемым приложением. Docker помогает выкладывать ваш код быстрее, быстрее тестировать, быстрее выкладывать приложения и уменьшить время между написанием кода и запуска кода. Docker делает это с помощью легковесной платформы контейнерной виртуализации, используя процессы и утилиты, которые помогают управлять и выкладывать ваши приложения.

Если сопоставить цель "кое-где переделать вёрстку использующихся шаблонов", то зачем такие сложности? Выложить папку с шаблоном через FTP занимает несколько секунд. Надо еще быстрее, а то подгорает?

На то же странице сказано:
Платформа и средства контейнерной виртуализации могут быть полезны в следующих случаях:
- упаковывание вашего приложения (и так же используемых компонент) в docker контейнеры;
- раздача и доставка этих контейнеров вашим командам для разработки и тестирования;
- выкладывания этих контейнеров на ваши продакшены, как в дата центры так и в облака.

Как я понимаю, тут главное "доставка вашим командам". Сколько у ТС команд и сколько человек в командах?

А у ТС еще и процесс локального запуска текущей копии сайта занимает часы (если не дни), и даже коллега не может особо помочь...

Оно, конечно, у любого может случаться так, что выдает ошибку 500. Но находить место ошибки - часто возникающий стандартный момент работы программиста и обычно с этим трудностей не бывает.

Везет же некоторым со зряплатой...

Aleks
Aleks
Репутация: 56
Сообщения: 387
Зарегистрирован: 24.05.2021
С нами: 2 года 11 месяцев

Сообщение #3 Aleks » 23.09.2023, 06:58

Для Zepp. Ваш коллега прав.
Попробуйте лучше локальный сервер.
OkayCMS прекрасно работает в OpenServer.
Устанавливаете в него ту же версию, что и на сайте. Редактируете шаблоны, файлы, CSS и потом закачали нужные файлы с заменой на сайт через FTP.

Zepp M
Zepp M
Возраст: 34
Репутация: 1
Сообщения: 12
Зарегистрирован: 22.09.2023
С нами: 7 месяцев 5 дней

Сообщение #4 Zepp » 23.09.2023, 07:43

korshunov писал(а):
Спойлер
Вот читаю на
https://habr.com/ru/articles/253877/
про Docker:
Докер — это открытая платформа для разработки, доставки и эксплуатации приложений. Docker разработан для более быстрого выкладывания ваших приложений. С помощью docker вы можете отделить ваше приложение от вашей инфраструктуры и обращаться с инфраструктурой как управляемым приложением. Docker помогает выкладывать ваш код быстрее, быстрее тестировать, быстрее выкладывать приложения и уменьшить время между написанием кода и запуска кода. Docker делает это с помощью легковесной платформы контейнерной виртуализации, используя процессы и утилиты, которые помогают управлять и выкладывать ваши приложения.

Если сопоставить цель "кое-где переделать вёрстку использующихся шаблонов", то зачем такие сложности? Выложить папку с шаблоном через FTP занимает несколько секунд. Надо еще быстрее, а то подгорает?

На то же странице сказано:
Платформа и средства контейнерной виртуализации могут быть полезны в следующих случаях:
- упаковывание вашего приложения (и так же используемых компонент) в docker контейнеры;
- раздача и доставка этих контейнеров вашим командам для разработки и тестирования;
- выкладывания этих контейнеров на ваши продакшены, как в дата центры так и в облака.

Как я понимаю, тут главное "доставка вашим командам". Сколько у ТС команд и сколько человек в командах?

А у ТС еще и процесс локального запуска текущей копии сайта занимает часы (если не дни), и даже коллега не может особо помочь...

Оно, конечно, у любого может случаться так, что выдает ошибку 500. Но находить место ошибки - часто возникающий стандартный момент работы программиста и обычно с этим трудностей не бывает.

Везет же некоторым со зряплатой...
Да у меня и зряплаты-то нет пока особо никакой. Я стажёр, который впервые столкнулся с CMS, потому что учился на чистых PHP + JS, а потом на Laravel + AlpineJS. Компания раньше была на аутсорсе, теперь создаёт свой отдел, я в нём первый, рядом есть только сис. админы, опытного наставника у меня нет, а желание ничего не поломать и сделать нормально - есть.
Докер нужен в первую очередь, чтобы запустить у себя проект точно так же, как он работает на проде, создав такую же среду локально, дабы потом делать с этой рабочей копией прода всё что угодно, заливая на прод только законченные и оттестированные изменения.

Добавлено спустя 1 минуту 8 секунд:
Aleks писал(а):Для Zepp. Ваш коллега прав.
Попробуйте лучше локальный сервер.
OkayCMS прекрасно работает в OpenServer.
Устанавливаете в него ту же версию, что и на сайте. Редактируете шаблоны, файлы, CSS и потом закачали нужные файлы с заменой на сайт через FTP.
Спасибо за информацию!
Лучшие люди форума: korshunov, makki, Aleks! Спасибо за неоценимую помощь этим великим знатокам Okay-CMS!

korshunov
korshunov
Репутация: 148
Сообщения: 1862
Зарегистрирован: 03.12.2015
С нами: 8 лет 4 месяца
Skype

Сообщение #5 korshunov » 23.09.2023, 08:38

Zepp писал(а):впервые столкнулся с CMS, потому что учился на чистых PHP + JS

Тогда должны знать, как на чистом PHP выводить сведения об ошибках:
https://php.ru/manual/function.error-reporting.html

Кроме того, в CMS есть для этого своя настройка debug_mode = false в config/config.php...

Zepp писал(а):Докер нужен в первую очередь, чтобы запустить у себя проект точно так же, как он работает на проде, создав такую же среду локально...

Звучит красиво и впечатляюще, но в большинстве случаев совершенно не нужна такая точность. Да и не уверен, что она достижима полностью даже в теории. А по Вашей задаче точно излишнее усложнение.

Если Вам надо точно такую среду, проще запустить на том же сервере копию сайта, например, на поддомене. И будет среда куда точнее.
И в самой CMS есть возможность сделать копию темы шаблонов, включить ее для админа и с ней экспериментировать, не затрагивая сайта.

Zepp писал(а):...заливая на прод только законченные и оттестированные изменения.

Всегда удивлялся таким фразам. Маститые компании с солидным штатом программистов регулярно по своим продуктам выпускают обновления, в которых половина изменений - по исправлению ошибок. В той же OkayCMS почитайте на форуме новости по обновлениям - море исправленных ошибок. А еще больше осталось. На форуме можно найти сообщения об ошибках довольно давние, которые разработчики исправлять не спешат.
Сомневаюсь, что Вы в одиночку сможете протестировать так, чтоб давать ПОЛНУЮ гарантию отсутствия ошибок.

Zepp M
Zepp M
Возраст: 34
Репутация: 1
Сообщения: 12
Зарегистрирован: 22.09.2023
С нами: 7 месяцев 5 дней

Сообщение #6 Zepp » 23.09.2023, 12:20

korshunov писал(а):
Спойлер
Zepp писал(а):впервые столкнулся с CMS, потому что учился на чистых PHP + JS

Тогда должны знать, как на чистом PHP выводить сведения об ошибках:
https://php.ru/manual/function.error-reporting.html

Кроме того, в CMS есть для этого своя настройка debug_mode = false в config/config.php...

Zepp писал(а):Докер нужен в первую очередь, чтобы запустить у себя проект точно так же, как он работает на проде, создав такую же среду локально...

Звучит красиво и впечатляюще, но в большинстве случаев совершенно не нужна такая точность. Да и не уверен, что она достижима полностью даже в теории. А по Вашей задаче точно излишнее усложнение.

Если Вам надо точно такую среду, проще запустить на том же сервере копию сайта, например, на поддомене. И будет среда куда точнее.
И в самой CMS есть возможность сделать копию темы шаблонов, включить ее для админа и с ней экспериментировать, не затрагивая сайта.

Zepp писал(а):...заливая на прод только законченные и оттестированные изменения.

Всегда удивлялся таким фразам. Маститые компании с солидным штатом программистов регулярно по своим продуктам выпускают обновления, в которых половина изменений - по исправлению ошибок. В той же OkayCMS почитайте на форуме новости по обновлениям - море исправленных ошибок. А еще больше осталось. На форуме можно найти сообщения об ошибках довольно давние, которые разработчики исправлять не спешат.
Сомневаюсь, что Вы в одиночку сможете протестировать так, чтоб давать ПОЛНУЮ гарантию отсутствия ошибок.
Спасибо за информацию! Можно создать копию для админа, говорите, которая не затрагивает сайт? Это очень интересно! Спасибо за наводку.
Лучшие люди форума: korshunov, makki, Aleks! Спасибо за неоценимую помощь этим великим знатокам Okay-CMS!

Aleks
Aleks
Репутация: 56
Сообщения: 387
Зарегистрирован: 24.05.2021
С нами: 2 года 11 месяцев

Сообщение #7 Aleks » 23.09.2023, 13:18

Zepp писал(а):Я стажёр, который впервые столкнулся с CMS, потому что учился на чистых PHP + JS, а потом на Laravel + AlpineJS. Компания раньше была на аутсорсе, теперь создаёт свой отдел, я в нём первый, рядом есть только сис. админы, опытного наставника у меня нет, а желание ничего не поломать и сделать нормально - есть.
Докер нужен в первую очередь, чтобы запустить у себя проект точно так же, как он работает на проде, создав такую же среду локально, дабы потом делать с этой рабочей копией прода всё что угодно, заливая на прод только законченные и оттестированные изменения.
Вот это и надо было сообщить в первую очередь. А также какая версия OkayCMS.
Докер не нужен. Это лишние проблемы и ошибки.
Используйте OpenServer. Он сполна обеспечит вам и dev и prod. Или рекомендации г. korshunov

Zepp M
Zepp M
Возраст: 34
Репутация: 1
Сообщения: 12
Зарегистрирован: 22.09.2023
С нами: 7 месяцев 5 дней

Сообщение #8 Zepp » 23.09.2023, 18:47

Aleks писал(а):
Спойлер
Zepp писал(а):Я стажёр, который впервые столкнулся с CMS, потому что учился на чистых PHP + JS, а потом на Laravel + AlpineJS. Компания раньше была на аутсорсе, теперь создаёт свой отдел, я в нём первый, рядом есть только сис. админы, опытного наставника у меня нет, а желание ничего не поломать и сделать нормально - есть.
Докер нужен в первую очередь, чтобы запустить у себя проект точно так же, как он работает на проде, создав такую же среду локально, дабы потом делать с этой рабочей копией прода всё что угодно, заливая на прод только законченные и оттестированные изменения.
Вот это и надо было сообщить в первую очередь. А также какая версия OkayCMS.
Докер не нужен. Это лишние проблемы и ошибки.
Используйте OpenServer. Он сполна обеспечит вам и dev и prod. Или рекомендации г. korshunov
Спасибо! Ребята, на самом деле, молодцы, я посмотрел, они в новых версиях сами внедрили Докер, в папке 'dev'. Развивают проект, респект!
Лучшие люди форума: korshunov, makki, Aleks! Спасибо за неоценимую помощь этим великим знатокам Okay-CMS!


Название раздела: Вопросы по работе с OkayCMS
Правила раздела: faq.php?mode=okay

Быстрый ответ


Введите код в точности так, как вы его видите. Регистр символов не имеет значения.
Код подтверждения

   

Вернуться в «Вопросы по работе с OkayCMS»

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 131 гость