Подключаем компонент:

composer require symfony/cache

Как сделать простой кеш в файлах?

require_once __DIR__ . '/vendor/autoload.php';

// создаём объект для управления кешом в файлах
$cache = new FilesystemAdapter(
    // поддиректория в папке кеша
    'mySubDirectoryName',

    // время жизни кеша по умолчанию
    86400,

    // путь к папке кеша 
    __DIR__ . '/cache'
);

// ключ кеша
$cacheKey = 'testKey1';

// получаем по этому ключу данные из кеша
$value = $cache->get(
    $cacheKey,

    // если актуального кеша нет, то выполнится этот callable: 
    function () {
        // тут мы получаем данные без кеша,
        // и отдаём их в return,
        // после этого данные сохранятся в кеш 
        $value = rand();

        return $value;
    }
);

Есть два места где независимо друг от друга хранятся переговорки:

  1. Инфоблок "Календарь" / "Бронирование переговорных". Каждый раздел это переговорка. Для этих переговорок при создании события в календаре работает бронирование с периодичностью.

  2. Таблица b_calendar_section. Сюда попадают переговорки, которые добавляютя в попапе по кнопке "Настроить список". И у этих переговорок на уровне ядра отключено бронирование с периодичностью - выводится ошибка: "Бронирование переговорной периодическим событием недоступно".

Пофиксить её можно так:

В файле:

local/modules/sprint.migration/lib/versionconfig.php:207

добавить условие:

if (strpos($values['migration_dir'], ':') === false) { // @todo fix для windows
    $values['migration_dir'] = Module::getDocRoot() . $values['migration_dir'];
}

Код всего блока:

if (empty($values['migration_dir'])) {
    $values['migration_dir'] = Module::getPhpInterfaceDir() . '/migrations';
} elseif (empty($values['migration_dir_absolute'])) {
    if (strpos($values['migration_dir'], ':') === false) { // @todo fix для windows
        $values['migration_dir'] = Module::getDocRoot() . $values['migration_dir'];
    }
}

Добавляем в папку /etc/systemd/system файл docker-compose-myappname.service со следующим содержимым:

[Unit]
Description=Docker Compose MyAppName Service
Requires=docker.service
After=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/home/username/myappname
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose stop
TimeoutStartSec=0
User=username
Group=username

[Install]
WantedBy=multi-user.target

Включаем сервис:

sudo systemctl enable docker-compose-myappname

Устанавливаем apache2-utils, если утилита htpasswd отсутствует:

sudo apt-get install apache2-utils

Выполняем следующее, заменив username и password:

echo $(htpasswd -nbB username "password")

В результате получаем строку, которую можно указать в файле traefik.toml:

username:$2y$05$zBpWD5KcCDxw9durV29ZSOTbhi8Ltef7g/f0C5mLTrd0enQILkBRy

Для использования в файле docker-compose.yml нужно добавить экранирование символа $:

echo $(htpasswd -nbB username "password") | sed -e s/\\$/\\$\\$/g

Страницы