Smartico Custom Hostnames

Проблема: Smartico подключается как внешний скрипт со стороннего CDN. В случае блокировки или недоступности этого CDN на продуктах перестает работать значительная часть функционала, связанная со Smartico.

Решение: Организовать раздачу скриптов и ресурсов Smartico через собственные поддомены продукта (Self-hosting/Proxying).

Ресурсы Smartico, требующие переноса:

  • JS-скрипт (пример: https://sm.atomcasino423.com/snextcode.js)
  • WebSocket Entry Point (пример: wss://ws.atomcasino423.com/websocket/services)
  • CDN для изображений

Перенос ресурсов на поддомены продукта позволит минимизировать риски блокировок.

Реализация

Созданы служебные хосты (Origins):

  • api5.s CNAME prod5-channel-1797681357.us-east-2.elb.amazonaws.com
  • libs.s CNAME d18xfax5gdc43x.cloudfront.net

Примечание: Из-за специфики (домены третьего уровня) для этих хостов не активирован SSL, поэтому проксирование для них отключено.

Маршрутизация трафика осуществляется через Cloudflare Worker с использованием механизма Origin Override. В DNS-зонах продуктов отсутствуют CNAME-записи, указывающие напрямую на эти служебные хосты. Пример настроек DNS.

За определение целевого origin и подмену данных отвечают скрипты воркеров:

Изменения на платформе

Для корректной работы необходимо перенаправить не только загрузку скрипта, но и WebSocket-соединения. Для этого в конфигурацию нашей версии скрипта Smartico была добавлена опция ws_url.

Пример инициализации:

<script>
(function(d, r, b, h, s){h=d.getElementsByTagName('head')[0];s = d.createElement('script');s.onload=b;s.src=r;h.appendChild(s);})
(document, 'https://sm.atom-casino.com/snextcode.js', function() {
    _smartico.init('_label_key_', { 
        brand_key: '_brand_key_', 
        ws_url: 'wss://ws.atom-casino.com/websocket/services' 
    });
});
</script>

Задача: Изменить механизм подключения на продукте следующим образом:

  1. Загружать скрипт с поддомена (например, sm.domain.com).
  2. Передавать параметр ws_url с адресом WebSocket на поддомене (например, ws.domain.com).

Сложность: Необходимо динамически формировать адреса поддоменов sm. и ws. относительно текущего базового домена, на котором находится пользователь.

Изменения в процессах IT Dept

При развертывании новых зеркал необходимо:

  1. Создавать соответствующие поддомены (sm, ws).
  2. Настраивать и привязывать воркеры для каждого зеркала.
  3. Проводить отдельную проверку работоспособности проксирования.

Текущий статус и TODO

  1. Временное костыль: В скриптах подмены (workers) сейчас реализована hardcode костыль, позволяющая работать с конкретным кастомным доменом даже без передачи параметра ws_url. Это временное решение, которое необходимо удалить после обновления платформы.
  2. Проксирование изображений: Часть изображений все еще не проксируется и пытается загрузиться с оригинального домена. Пример: https://static5.smr.vc/303dcdcd0987e36d3fde72-mail1-4.png