<?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>Add Sky</title><generator>teletype.in</generator><description><![CDATA[Add Sky]]></description><image><url>https://img4.teletype.in/files/7b/d7/7bd7f62e-fe38-4185-ada8-8bfb4a9ad799.png</url><title>Add Sky</title><link>https://ttype.addsky.ru/</link></image><link>https://ttype.addsky.ru/?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/addsky?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/addsky?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Wed, 08 Apr 2026 20:07:06 GMT</pubDate><lastBuildDate>Wed, 08 Apr 2026 20:07:06 GMT</lastBuildDate><item><guid isPermaLink="true">https://ttype.addsky.ru/gZUtXVttosY</guid><link>https://ttype.addsky.ru/gZUtXVttosY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/gZUtXVttosY?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Обновление Planka с версии 1.х на 2.х ( docker )</title><pubDate>Wed, 25 Jun 2025 09:06:38 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/da/a1/daa1c11b-efb3-4a3c-89f7-7ee7deb7a0dc.png"></media:content><category>Администрирование</category><description><![CDATA[<img src="https://img1.teletype.in/files/83/63/8363a5a1-d191-4f74-a98c-7af6970de3b1.png"></img>Перейдите к каталогу, содержащему ваш файл docker compose.yml.]]></description><content:encoded><![CDATA[
  <figure id="DFK4" class="m_original">
    <img src="https://img1.teletype.in/files/83/63/8363a5a1-d191-4f74-a98c-7af6970de3b1.png" width="715" />
  </figure>
  <h2 id="1-create-a-backup">1. Создать резервную копию<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#1-create-a-backup" target="_blank">​</a></h2>
  <p id="YqTo">Перейдите к каталогу, содержащему ваш файл docker compose.yml.</p>
  <h3 id="database-backup">Database Backup<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#database-backup" target="_blank">​</a></h3>
  <pre id="MM8i" data-lang="bash">docker compose exec postgres pg_dump -U postgres planka &gt; planka_backup_$(date +%Y%m%d).sql</pre>
  <h3 id="volume-backups">Volume Backups<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#volume-backups" target="_blank">​</a></h3>
  <pre id="Azk2" data-lang="bash">docker run --rm -v $(pwd):/backup -v planka_user-avatars:/data alpine tar -czvf /backup/user-avatars.tar.gz -C /data .
docker run --rm -v $(pwd):/backup -v planka_attachments:/data alpine tar -czvf /backup/attachments.tar.gz -C /data .
docker run --rm -v $(pwd):/backup -v planka_project-background-images:/data alpine tar -czvf /backup/project-background-images.tar.gz -C /data .</pre>
  <h2 id="2-stop-and-remove-containers">2. Остановите и удалите контейнеры<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#2-stop-and-remove-containers" target="_blank">​</a></h2>
  <pre id="aKev">docker compose down</pre>
  <h2 id="3-change-image-tag-to-200-rc3">3. Измените тег образа на <code>2.0.0-rc.3</code><a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#3-change-image-tag-to-200-rc3" target="_blank">​</a></h2>
  <p id="ILLo">Отредактируйте свой файл docker-compose.yml и обновите образ PLANKA:</p>
  <pre id="ERTO" data-lang="yaml">services:
  planka:
-   image: ghcr.io/plankanban/planka:latest
+   image: ghcr.io/plankanban/planka:2.0.0-rc.3
    ...</pre>
  <h2 id="ATzB">4. Добавьте новые хранилища<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#4-add-new-volumes" target="_blank">​</a></h2>
  <p id="Oos1">Update the <code>volumes</code> sections:</p>
  <pre id="eQrc" data-lang="yaml">services:
  planka:
    ...
    volumes:
+     - favicons:/app/public/favicons
      - user-avatars:/app/public/user-avatars
      - project-background-images:/app/public/project-background-images # Will be deleted after migration
+     - background-images:/app/public/background-images
      - attachments:/app/private/attachments
    ...

volumes:
+ favicons:
  user-avatars:
  project-background-images:
+ background-images:
  attachments:
  db-data:</pre>
  <h2 id="P6Mv">5. Очистка переменных среды<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#5-clean-up-environment-variables" target="_blank">​</a></h2>
  <h3 id="remove-deprecated-variables">Удалите устаревшие переменные</h3>
  <p id="4h4W">Удалите следующее из раздела environment:</p>
  <ul id="8Ujc">
    <li id="V7N5"><code>ALLOW_ALL_TO_CREATE_PROJECTS</code> — Now managed via user-specific global roles.</li>
    <li id="kiHr"><code>SLACK_*</code>, <code>GOOGLE_*</code>, <code>TELEGRAM_*</code> — Replaced by in-app notifications with support for 100+ services.</li>
  </ul>
  <h3 id="update-the-trust_proxy-value">Обновите значение <code>TRUST_PROXY</code></h3>
  <p id="uxdy">Независимо от того, устанавливали ли вы ранее переменную окружения TRUST_PROXY, вы должны убедиться, что она использует правильное логическое строковое значение. Если в настоящее время она установлена ​​на 0, обновите ее на false (даже если переменная закомментирована). Если она установлена ​​на 1, обновите ее на true. Использование числовых значений (0 или 1) больше не поддерживается и может привести к неожиданному поведению.</p>
  <h3 id="add-new-variable">Добавьте новую переменную:</h3>
  <pre id="rhbD">DEFAULT_LANGUAGE=en-US</pre>
  <p id="tvuf">Это устанавливает язык по умолчанию для отправки уведомлений для пользователя (если пользователь не выбрал язык) и для доски. Это также действует как резервный вариант, когда переводы недоступны.</p>
  <h2 id="6-pull-the-docker-image">6. Извлеките образ Docker<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#6-pull-the-docker-image" target="_blank">​</a></h2>
  <pre id="Sqda" data-lang="bash">docker compose pull</pre>
  <h2 id="7-copy-background-images-to-new-location">7. Скопируйте фоновые изображения в новое место<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#7-copy-background-images-to-new-location" target="_blank">​</a></h2>
  <p id="FvAV">Копировать фоновые изображения в новое место:</p>
  <pre id="IQQL" data-lang="bash">docker compose run --rm planka cp -av /app/public/project-background-images/. /app/public/background-images</pre>
  <h2 id="8-run-the-database-upgrade-script">8. Запустите скрипт обновления базы данных<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#8-run-the-database-upgrade-script" target="_blank">​</a></h2>
  <p id="xWLL">Это необходимо сделать перед первым запуском PLANKA.</p>
  <pre id="aIU0" data-lang="bash">docker compose run --rm planka npm run db:upgrade</pre>
  <h2 id="9-remove-the-old-volume-reference">9. Удалить старую ссылку на хранилище<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#9-remove-the-old-volume-reference" target="_blank">​</a></h2>
  <p id="outk">Обновите docker-compose.yml, чтобы удалить старый том project-background-images:</p>
  <pre id="67pT" data-lang="yaml">services:
  planka:
    ...
    volumes:
      - favicons:/app/public/favicons
      - user-avatars:/app/public/user-avatars
-     - project-background-images:/app/public/project-background-images
      - background-images:/app/public/background-images
      - attachments:/app/private/attachments
    ...

volumes:
  favicons:
  user-avatars:
- project-background-images:
  background-images:
  attachments:
  db-data:</pre>
  <h2 id="iKs7">10. Запустите PLANKA и проверьте<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#10-start-planka-and-verify" target="_blank">​</a></h2>
  <p id="WQ4L">Запустите PLANKA:</p>
  <pre id="GrIZ" data-lang="bash">docker compose up -d</pre>
  <p id="VjqK">Мониторинг журналов на предмет проблем:</p>
  <pre id="9riR" data-lang="bash">docker compose logs -f</pre>
  <h3 id="verify">11. Очистка<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#11-clean-up" target="_blank">​</a></h3>
  <p id="Bx7W">Убедившись, что все работает, удалите старый том:</p>
  <pre id="7HMQ" data-lang="bash">docker volume rm planka_project-background-images</pre>
  <h2 id="troubleshooting">Поиск неисправностей<a href="https://docs.planka.cloud/docs/upgrade-to-v2/docker/#troubleshooting" target="_blank">​</a></h2>
  <p id="7f5q">Если у вас возникли проблемы:</p>
  <ul id="fniX">
    <li id="d6Aq">Проверьте журналы с помощью <code>docker compose logs -f planka</code></li>
    <li id="pylM">Убедитесь, что миграция базы данных выполнена успешно</li>
    <li id="l1Pi">При необходимости восстановите данные из резервной копии и повторите попытку</li>
  </ul>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/w9T_yQtkON4</guid><link>https://ttype.addsky.ru/w9T_yQtkON4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/w9T_yQtkON4?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Настройка Fail2ban для Kerio Connect</title><pubDate>Wed, 18 Jun 2025 08:40:20 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/1b/de/1bdeff80-a8a7-40e6-bdf9-4de09c95d4c2.png"></media:content><category>Администрирование</category><description><![CDATA[<img src="https://img3.teletype.in/files/a3/18/a3185764-01d2-4dcc-bff7-0545285a8584.jpeg"></img>Kerio Connect установлен в данном примере на Ubuntu.]]></description><content:encoded><![CDATA[
  <figure id="DXKg" class="m_original">
    <img src="https://img3.teletype.in/files/a3/18/a3185764-01d2-4dcc-bff7-0545285a8584.jpeg" width="1024" />
  </figure>
  <p id="CvhM">Kerio Connect установлен в данном примере на Ubuntu. </p>
  <p id="vgvf">Устанавливаем fail2ban:</p>
  <pre id="RlG7">sudo apt update
sudo apt install fail2ban</pre>
  <p id="pUR3">Прописываем набор правил:</p>
  <p id="it1q"><code>sudo nano /etc/fail2ban/jail.local</code></p>
  <pre id="ee86">[DEFAULT]
# Игнорируем свои доверенные IP (white list)
ignoreip = 192.168.0.0/16

[kerio-connect]
enabled = true
filter = kerio-connect
logpath = /media/data/store/logs/security.log
backend = auto
maxretry = 3
findtime = 10m
bantime = 1h
banaction = iptables-multiport
port = smtp,ssmtp,submission

</pre>
  <p id="2ufV">Определяем как нам вычислять атаки из журнала security.log :</p>
  <p id="s6uv"><code>sudo nano /etc/fail2ban/filter.d/kerio-connect.conf</code></p>
  <pre id="YGRY">[Definition]
failregex = ^.*SMTP: User .* doesn&#x27;t exist\\. Attempt from IP address &lt;HOST&gt;\\.$
ignoreregex =
</pre>
  <p id="prOe">Перезагружаем сервис fail2ban, включаем и смотрим статус:</p>
  <p id="73Xg"><code>sudo systemctl restart fail2ban<br />sudo systemctl enable fail2ban<br />sudo systemctl status fail2ban</code><br /></p>
  <pre id="NWVq">#смотрим статус заданий
sudo fail2ban-client status
</pre>
  <pre id="6B4O">#смотрим забаненные IP
sudo fail2ban-client status kerio-connect
</pre>
  <h3 id="9g7W">Посмотреть детали по одному из IP:</h3>
  <pre id="GWyN">sudo fail2ban-client get kerio-connect baninfo &lt;IP&gt;
</pre>
  <h3 id="cp5k">Разблокировать IP:</h3>
  <pre id="zZR2">sudo fail2ban-client set kerio-connect unbanip &lt;IP&gt;
</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/bNVd2aqpjPl</guid><link>https://ttype.addsky.ru/bNVd2aqpjPl?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/bNVd2aqpjPl?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Мониторинг VMware vCenter с помощью Zabbix 7</title><pubDate>Mon, 27 Jan 2025 07:07:10 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/67/a5/67a5be0d-c1f1-4703-9318-8c1395be8856.png"></media:content><category>Администрирование</category><description><![CDATA[<img src="https://img2.teletype.in/files/1e/6e/1e6e1812-ed48-4201-b154-50bb4f296bec.jpeg"></img>Zabbix 7.0 имеет встроенные средства мониторинга для vCenter, кластеров, гипервизоров и виртуальных машин.]]></description><content:encoded><![CDATA[
  <p id="seTm">Имеются специальные предустановленные шаблоны:</p>
  <ul id="YXGf">
    <li id="WWoj">Шаблон VM VMware</li>
    <li id="5S9N">Шаблон VM VMware Guest</li>
    <li id="soWA">Шаблон VM VMware Hypervisor</li>
  </ul>
  <p id="AnbV"></p>
  <figure id="P5QR" class="m_original">
    <img src="https://img2.teletype.in/files/98/c3/98c374da-754e-4aeb-b4df-3e579230a490.png" />
  </figure>
  <h2 id="t1EX">1. Настройка Zabbix-сервера:</h2>
  <p id="3QZF">В файле конфигурации Zabbix-сервера (например, <em>/etc/zabbix/zabbix_server.conf</em>) для мониторинга vCenter необходимо настроить следующие параметры:</p>
  <p id="mSZ2"><strong>StartVMwareCollectors</strong> - количество префорков процессов коллектора VMware.<br />Это значение зависит от количества vCenter. Для большинства случаев значение должно быть таким:<br />vCenter count &lt; StartVMwareCollectors &lt; (vCenter count * 2).<br />Например, если у вас 1 контролируемый vCenter, установите StartVMwareCollectors равным 2, если у вас 3 vCenters, установите параметр равным 5. Обратите внимание, что в большинстве случаев это значение не должно быть меньше 2 и не должно превышать количество контролируемых vCenters более чем в 2 раза. Помните, что это значение также зависит от размера среды VMware, параметров конфигурации VMwareFrequency и VMwarePerfFrequency (см. ниже).</p>
  <p id="UmAz"><br /><strong>VMwareCacheSize</strong> - общая память для хранения данных VMware. Для мониторинга использования кэша VMware можно использовать внутренние проверки VMware - zabbix[vmware, buffer,...] (см. раздел о внутренних проверках). Обратите внимание, что общая память не выделяется, если экземпляры коллектора VMware не настроены на запуск.</p>
  <p id="9BQv"><strong>VMwareFrequency</strong> - задержка в секундах между сбором данных от одной службы VMware. Это значение должно быть установлено на наименьшее значение интервала обновления для любого элемента данных мониторинга VMware.<br />VMwarePerfFrequency - задержка в секундах между получением статистики по счетчикам производительности от одной службы VMware. Это значение должно быть установлено на наименьшее значение интервала обновления для любого элемента данных мониторинга VMware, использующего счетчики производительности VMware.</p>
  <p id="jOxl"><br /><strong>VMwareTimeout</strong> - максимальное количество секунд, в течение которых коллектор VMware будет ожидать ответа от службы VMware (vCenter или гипервизора ESX).</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="c7z8">Обязательно укажите количество StartVMwareCollectors. Если вы отслеживаете один небольшой vCenter, напишите 2. Остальные параметры можно установить по умолчанию, а затем настроить.</p>
  </section>
  <p id="BAtI"> </p>
  <p id="wDTU">Перезапустите службу zabbix-server.</p>
  <p id="o0ie"><code>sudo systemctl restart zabbix-server</code></p>
  <p id="US1O"></p>
  <h2 id="z5iA">2. Настройка пользователя в vCenter:</h2>
  <p id="eeqR"> В vCenter необходимо создать пользователя, под которым zabbix будет входить в vCenter, естественно, с правами только на чтение. В Menu &gt; Administration &gt; Single Sign On &gt; Users and Groups.</p>
  <figure id="HY5h" class="m_original">
    <img src="https://img4.teletype.in/files/78/b8/78b8a01d-3ee2-49f9-bf0e-467289b9f8a8.png" width="1071" />
  </figure>
  <p id="3sXv">Добавьте нового пользователя. Добавить пользователя. Запомните свой логин и пароль.<br /></p>
  <figure id="tc6p" class="m_original">
    <img src="https://img3.teletype.in/files/2b/77/2b77f173-9f83-4d0b-8312-e753b4c9af92.png" width="528" />
  </figure>
  <p id="nxrx">Мы даем пользователю права на чтение vCenter с вложениями (Hosts and Clusters &gt; your vCenter &gt; Permissions).</p>
  <p id="shbc"></p>
  <figure id="C8tO" class="m_original">
    <img src="https://img4.teletype.in/files/77/93/7793684b-81e9-4d4b-b0e8-77ea3bdbafbe.png" width="531" />
  </figure>
  <figure id="zIlt" class="m_original">
    <img src="https://img3.teletype.in/files/e3/5e/e35ec4aa-2ddd-442b-a0e1-dc06b3da0216.png" width="762" />
  </figure>
  <h2 id="TOHp"></h2>
  <h2 id="GVvI">3. Добавляем vCenter в Zabbix 7:<br /></h2>
  <p id="Psrm">Data collection -&gt; Hosts -&gt; Create Hosts</p>
  <figure id="Uykh" class="m_original">
    <img src="https://img4.teletype.in/files/f7/7c/f77ccd71-109d-4933-bf80-65871a51601f.png" width="1042" />
  </figure>
  <p id="9oCK">Добавляем макросы:</p>
  <ul id="EbHr">
    <li id="DGN3">{$VMWARE.PASSWORD} — пароль для пользователя zabbix созданного выше</li>
    <li id="avrh">{$VMWARE.URL} — IP vCenter, а примере https://192.168.1.100/sdk</li>
    <li id="nGdr">{$VMWARE.USERNAME} — в примере zabbix@vsphere.local</li>
  </ul>
  <figure id="yARg" class="m_original">
    <img src="https://img2.teletype.in/files/5d/9e/5d9e7b8e-35d9-49a0-8422-b052c11f6304.png" width="975" />
  </figure>
  <p id="Kfzb">Добавьте хост.</p>
  <p id="QgJA">Теперь вам нужно подождать несколько часов, и все кластеры, гипервизоры и виртуальные машины будут обнаружены.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/sp7VneP571n</guid><link>https://ttype.addsky.ru/sp7VneP571n?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/sp7VneP571n?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Регистрация SSL сертификата для веб сервиса на Linux в домене AD</title><pubDate>Fri, 27 Dec 2024 10:08:49 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/1d/f8/1df80c00-fecc-4031-9766-6382568f234c.png"></media:content><category>Администрирование</category><description><![CDATA[<img src="https://img3.teletype.in/files/af/f9/aff9aacc-44f4-4699-8738-69632beb0fc6.jpeg"></img>На примере linux сервера MYWEB с nginx на борту.]]></description><content:encoded><![CDATA[
  <p id="JlRR">На примере linux сервера MYWEB с nginx на борту.</p>
  <figure id="ejCJ" class="m_original">
    <img src="https://img3.teletype.in/files/af/f9/aff9aacc-44f4-4699-8738-69632beb0fc6.jpeg" width="512" />
  </figure>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="V7wG"><strong>1. Создаем CSR запрос для центра сертификации в AD. В домене MYDOMAIN - это RDS.MYDOMAIN.DOM .</strong></p>
  </section>
  <p id="VzFg"><strong><em>1.1. Если приватный ключ еще не создан (</em>.key), то команда. Выполняем на MYWEB:</strong></p>
  <pre id="3wfh" data-lang="bash">openssl req -new -inform DER -sha1 -newkey rsa:2048 -nodes -keyout myweb.key -out myweb.csr -config openssl.conf</pre>
  <p id="FpEh"></p>
  <p id="CfkE"><em><strong>1.2. Если приватный ключ уже есть, то:</strong></em></p>
  <pre id="ctSG" data-lang="bash">openssl req -new -key myweb.key -out myweb.csr -config openssl.conf</pre>
  <p id="RHVt">где <strong>openssl.conf</strong> - это наш типовой конфиг</p>
  <pre id="pbSE" data-lang="bash">[req]
 default_bits = 2048
 prompt = no
 default_md = sha256
 req_extensions = req_ext
 distinguished_name = dn
 
[ dn ]
 C=RU
 ST=SO
 L=Moscow
 O=MyOrg
 OU=IT
 emailAddress=it@mydomain.dom
 CN = myweb.mydomain.dom
 
[ req_ext ]
 subjectAltName = @alt_names
 
[ alt_names ]
 DNS.1 = myweb
 DNS.2 = myweb.mydomain
 DNS.3 = myweb.mydomain.dom 
</pre>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="q1TU"><strong>2. Подписываем запрос в Центре сертификации. Проще выполнять в PS.</strong></p>
  </section>
  <p id="WYyG">Размещаем файл с запросом в папку C:\Temp и указываем в запросе необходимый нам шаблон сертификата, в примере, это WebServer5Years.</p>
  <p id="JuTx">Понадобится модуль <strong>PSPKI</strong></p>
  <pre id="IcRO" data-lang="powershell">Import-Module PSPKISubmit-CertificateRequest -path C:\Temp\myweb.csr -CertificationAuthority (Get-CertificationAuthority rds.mydomain.dom) -Attribute CertificateTemplate:WebServer5Years
</pre>
  <p id="ZFwA">где <strong>C:\Temp\myweb.csr</strong> - наш запрос, <strong>rds.mydomain.dom</strong> - сервер ЦС, <strong>WebServer5Years</strong> - название шаблона сертификатов</p>
  <p id="hFF7">и выгружаем полученный сертификат</p>
  <pre id="QcGW" data-lang="powershell">(Get-IssuedRequest -CertificationAuthority (Get-CertificationAuthority rds.mydomain.dom) -RequestID 20) | Receive-Certificate -Path C:\Temp -Force
</pre>
  <p id="GVmD">где <strong>-RequestID 20</strong> - номер запроса, его видно в консоли сервера ЦС (запуск PKIView.msc), <strong>C:\Temp</strong> - папка для выгрузки</p>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="QBsn"><em>3. Переименовываем полученный сертификат в myweb.crt, т.к. он выгружается в формате .cer . Копируем его на веб сервер.</em></p>
  </section>
  <p id="R0j6"><em>3.1. Для некоторых серверов необходимо создать цепочку сертификатов, тогда необходимо создать такой файл <strong>(это нужно не для всех)</strong>:</em></p>
  <pre id="IHur" data-lang="bash">cat myweb.crt ca.crt &gt; apweb-bundle.crt*
</pre>
  <p id="pQPB"><em>где <strong>apweb.crt</strong> - сертификат веб сервера, <strong>ca.crt</strong> - сертификат CA</em></p>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="lmd1">4. Подключаем файлы <em>.key и .crt в конфиг веб сервера (в нашем случае NGINX).</em></p>
  </section>
  <pre id="op07" data-lang="bash">ssl_certificate /var/www/cert/myweb.crt;
ssl_certificate_key /var/www/cert/myweb.key;
</pre>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6AUt"><strong>5. Перезагружаем веб сервер</strong></p>
  </section>
  <pre id="F3vk" data-lang="bash">sudo systemctl restart nginx.service
</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/l-t6FJVOXi6</guid><link>https://ttype.addsky.ru/l-t6FJVOXi6?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/l-t6FJVOXi6?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Mobaxterm - удобный ssh, scp, vnc, rdp клиент</title><pubDate>Tue, 24 Dec 2024 12:52:46 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/f6/11/f6116b46-19fc-4c71-87dc-176d3b79b668.png"></media:content><category>Администрирование</category><description><![CDATA[<img src="https://img3.teletype.in/files/ea/dc/eadca2a7-655d-44b0-bf4b-1c21697b6619.png"></img>MobaXterm - это ваш универсальный набор инструментов для удаленной работы. В одном приложении для Windows он предоставляет множество функций, предназначенных для программистов, веб-мастеров, IT-администраторов и практически всех пользователей, которым необходимо упростить работу с удаленными компьютерами.]]></description><content:encoded><![CDATA[
  <figure id="m8Fz" class="m_original">
    <img src="https://img3.teletype.in/files/ea/dc/eadca2a7-655d-44b0-bf4b-1c21697b6619.png" width="1129" />
  </figure>
  <p id="29gd">MobaXterm - это ваш универсальный набор инструментов для удаленной работы. В одном приложении для Windows он предоставляет множество функций, предназначенных для программистов, веб-мастеров, IT-администраторов и практически всех пользователей, которым необходимо упростить работу с удаленными компьютерами.</p>
  <p id="q5tl">MobaXterm предоставляет все важные удаленные сетевые инструменты (SSH, X11, RDP, VNC, FTP, MOSH, ...) и команды Unix (bash, ls, cat, sed, grep, awk, rsync, ...) на рабочий стол Windows в одном портативном exe-файле, который работает «из коробки». Дополнительная информация о <a href="https://mobaxterm.mobatek.net/features.html" target="_blank">поддерживаемых сетевых протоколах.</a></p>
  <hr />
  <p id="rLwF">Free version имеет ограничения, но пользоваться можно. Чтобы отучить от жадности - есть способ на github.</p>
  <p id="CKJc"><a href="https://github.com/mzjdy/MobaXterm-Keygen" target="_blank">https://github.com/mzjdy/MobaXterm-Keygen</a></p>
  <p id="vQsw">Прикладываю дистриб ПО <a href="https://addsky.ru/distr/mobaxterm/MobaXterm_Installer_v24.3.zip" target="_blank">v24.3</a> и дистриб <a href="https://addsky.ru/distr/mobaxterm/MobaXterm-Keygen-master.zip" target="_blank">KG</a> с github.</p>
  <p id="MeAN"><strong>Как работает KG?</strong></p>
  <pre id="Qqcg" data-lang="powershell">MobaXterm-Keygen.py &lt;UserName&gt; &lt;Version&gt;</pre>
  <p id="TgGu">Пример:</p>
  <pre id="zbVr" data-lang="powershell">PS C:\\Users\\DoubleSine\\Github\\MobaXterm-Keygen&gt; .\\MobaXterm-Keygen.py &quot;User&quot; 24.3
[*] Success!
[*] File generated: C:\\Users\\DoubleSine\\Github\\MobaXterm-Keygen\\Custom.mxtpro
[*] Please move or copy the newly-generated file to MobaXterm&#x27;s installation path.

</pre>
  <p id="TOjv">Формируется файл <code><strong>Custom.mxtpro</strong></code> , его надо скопировать в папку с ПО <code>C:\Program Files (x86)\Mobatek\MobaXterm</code>.</p>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/zYcsYFv1Wzr</guid><link>https://ttype.addsky.ru/zYcsYFv1Wzr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/zYcsYFv1Wzr?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>WatchTower - автообновление docker контейнеров с уведомлением в tg</title><pubDate>Tue, 16 Jul 2024 09:19:41 GMT</pubDate><media:content medium="image" url="https://img4.teletype.in/files/fc/39/fc392af6-c448-475b-ba31-86ebe4e98727.png"></media:content><description><![CDATA[<img src="https://img4.teletype.in/files/b5/f7/b5f7aecf-1099-4ff6-99fa-064f42d53cc3.png"></img>Создаем папку, переходим в неё и создаём конфигурацию docker compose]]></description><content:encoded><![CDATA[
  <p id="uGth">Создаем папку, переходим в неё и создаём конфигурацию docker compose ( <a href="https://lsetc.ru/ustanovka-udalenie-docker-i-docker-compose/" target="_blank">быстро установить docker compose</a> )</p>
  <pre id="0SuT" data-lang="bash">mkdir watchtower
cd watchtower
nano docker-compose.yml</pre>
  <p id="3fnr">Прописываем наши настройки - токен бота telegram и номер чата для уведомлений, каждый день в 23:00 выполняется проверка</p>
  <pre id="qwmK" data-lang="bash">---
version: &#x27;3.3&#x27;

services:
  watchtower:
    image: containrrr/watchtower
    container_name: watchtower
    restart: unless-stopped
    volumes:
      - &#x27;/var/run/docker.sock:/var/run/docker.sock&#x27;
    environment:
      - TZ=Asia/Yekaterinburg
      - WATCHTOWER_LIFECYCLE_HOOKS=True
      - WATCHTOWER_NOTIFICATIONS=shoutrrr
      - WATCHTOWER_NOTIFICATION_URL=telegram://ТОКЕН_ВАШЕГО_БОТА@telegram/?channels=ID_ВАШЕГО_ЧАТА_ИЛИ_ГРУППЫ
      - WATCHTOWER_DEBUG=true
      - WATCHTOWER_CLEANUP=true
      - WATCHTOWER_SCHEDULE=0 0 23 * * *

</pre>
  <pre id="s2Hx" data-lang="bash">sudo docker compose up -d
</pre>
  <p id="tXus"></p>
  <p id="uW7g">Для обновления <a href="https://github.com/containrrr/watchtower" target="_blank">WatchTower</a>:</p>
  <pre id="8YA9" data-lang="bash">sudo docker compose down
sudo docker compose pull
sudo docker compose up -d
</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/XBng37VpirV</guid><link>https://ttype.addsky.ru/XBng37VpirV?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/XBng37VpirV?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Описание инструмента STT Whisper → Анализ Openai</title><pubDate>Tue, 16 Jul 2024 09:06:35 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/6e/7e/6e7eeb6b-1513-471d-a05b-faba1e61d7ec.png"></media:content><category>Администрирование</category><description><![CDATA[<img src="https://img3.teletype.in/files/ad/34/ad344fab-3ec9-47d0-a765-36929e136520.png"></img>В итоге остановились на Whisper. У него высокое качество распознавания в больших моделях LARGE и выше. Присутствуют необходимые выходные форматы с временными метками. Но скорость обработки очень низкая при использовании CPU.]]></description><content:encoded><![CDATA[
  <p id="gxkq">Оглавление:</p>
  <nav>
    <ul>
      <li class="m_level_1"><a href="#eiWL"></a></li>
      <li class="m_level_1"><a href="#xh6N">1. Выбор инструмента для преобразования речи в текст (STT).</a></li>
      <li class="m_level_1"><a href="#CYaN">2. Настройка обработки звуковых файлов - телефонных диалогов.</a></li>
      <li class="m_level_1"><a href="#PvgO">3. Анализ диалога с помощью ИИ.</a></li>
      <li class="m_level_1"><a href="#AuPB">4. Фронт- и бэкенд для контроля системы</a></li>
    </ul>
  </nav>
  <h2 id="eiWL"></h2>
  <p id="iOZ3"></p>
  <h2 id="xh6N">1. Выбор инструмента для преобразования речи в текст (STT).</h2>
  <p id="P8n8">Были протестированы следующие инструменты:</p>
  <ul id="mnUY">
    <li id="qAoe"><strong>[x] Yandex STT</strong></li>
    <li id="p8zx"><strong>[x] Google speech</strong></li>
    <li id="tt5i"><strong>[x] Silero STT</strong></li>
    <li id="5D7y"><strong>[x] AssemblyAI</strong></li>
    <li id="VUqW"><strong>[x] VOSK</strong></li>
    <li id="Gb9z"><strong>[x] WHISPER</strong></li>
  </ul>
  <p id="FNf3"></p>
  <p id="NTgN">Короткие выводы:</p>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="RkHy"><strong>Yandex STT проверена с помощью post запросов.</strong></p>
  </section>
  <p id="kFat">Плюсы: хорошее распознавание русской речи, высокая скорость</p>
  <p id="zHlT">Минусы: платная, сложность настройки</p>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="YjUU"><strong>Google speech была проверена в тестовом режиме.</strong></p>
  </section>
  <p id="yLUZ">Плюсы: неплохое распознавание русской речи</p>
  <p id="kZGs">Минусы: платная, сложность оплаты(карты не РФ), сложность настройки</p>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="GU2M"><strong>Silero STT</strong> на данное время существует только в виде бота.</p>
  </section>
  <p id="0gcM">API направление не развивается, предоставляют доступ только в индивидуальном режиме.</p>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="Js0p"><strong>AssemblyAI</strong> был протестирован на собственном сервере. Нет хороших моделей для распознавания русской речи.</p>
  </section>
  <section style="background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="182f"><strong>VOSK</strong> - тестировался на собственном сервере.</p>
  </section>
  <p id="oYZL">На момент теста модель vosk-model-ru-0.10 (2.5G)</p>
  <p id="BLRX">Плюсы: высокая скорость обработки, среднее качество распознавания русской речи</p>
  <p id="u1JB">Минусы: не было необходимых выходных форматов, среднее качество распознавания русской речи</p>
  <section style="background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="XGWL">В итоге остановились на Whisper. У него высокое качество распознавания в больших моделях LARGE и выше. Присутствуют необходимые выходные форматы с временными метками. Но скорость обработки очень низкая при использовании CPU.</p>
  </section>
  <p id="uFNA">Нашли более быстрый форк Faster-whisper:</p>
  <p id="K2P6"><a href="https://github.com/SYSTRAN/faster-whisper/tree/master" target="_blank">GitHub - SYSTRAN/faster-whisper: Faster Whisper transcription with CTranslate2</a></p>
  <p id="VcRV">Скорость обработки значительно возросла при сохранении качества.</p>
  <h2 id="CYaN">2. Настройка обработки звуковых файлов - телефонных диалогов.</h2>
  <p id="zuAA">В качестве ОС решили использовать последний LTS Ubuntu Server (на тот момент 22.04), т.к. для этой ОС всегда есть необходимые пакеты ПО.</p>
  <p id="NO8R">Общая схема предполагалась следующей:</p>
  <ol id="bYVQ">
    <li id="SSsL">Сервер АТС (asterisk) выдает файлы тел. диалогов в директорию на файловом сервере в формате *.wav .</li>
    <li id="1pYR">После чего сервер STT начинает его обработку:</li>
  </ol>
  <p id="vKEs">В диалоге есть 2 канала - первый - это операторы ДЦ, второй - клиент. Поэтому мы решили сначала делить аудио файл на два и транскрибировать их отдельно с выводом в 2 отдельных текстовых файла с временными метками. После чего объединяем 2 файла в один.</p>
  <p id="aWNn">Для обработки выбрали Python (v3.10) - библиотеки pydub (для обработки аудио) и <strong>faster_whisper</strong> (для транскрибации).</p>
  <p id="f15y">Python скрипт:</p>
  <pre id="SAMM" data-lang="python">from pydub import AudioSegment
from faster_whisper import WhisperModel
import sys
import os

input_name = sys.argv[1]

# Разделение аудиофайла на каналы
audio = AudioSegment.from_wav(&quot;/mnt/media/OP/&quot; + input_name +  &quot;.wav&quot;)

# Извлечение каналов
left_channel = audio.split_to_mono()[0]
right_channel = audio.split_to_mono()[1]

# Сохранение отдельных каналов во временные файлы
left_channel.export(&quot;&quot; + input_name +  &quot;left_channel.wav&quot;, format=&quot;wav&quot;)
right_channel.export(&quot;&quot; + input_name +  &quot;right_channel.wav&quot;, format=&quot;wav&quot;)

# Инициализация модели
model_size = &quot;large-v3&quot;
model = WhisperModel(model_size, device=&quot;cpu&quot;, compute_type=&quot;int8&quot;)

def transcribe_and_label(channel_file, channel_label):
    segments, _ = model.transcribe(
        channel_file,
        beam_size=5,
        language=&quot;ru&quot;,
        condition_on_previous_text=False,
        vad_filter=True,
        vad_parameters=dict(min_silence_duration_ms=500),
    )
    labeled_segments = [
        {&quot;start&quot;: segment.start, &quot;end&quot;: segment.end, &quot;text&quot;: segment.text, &quot;channel&quot;: channel_label}
        for segment in segments
    ]
    return labeled_segments

# Транскрипция каналов с маркировкой
left_segments = transcribe_and_label(&quot;&quot; + input_name +  &quot;left_channel.wav&quot;, &quot;Клиент&quot;)
right_segments = transcribe_and_label(&quot;&quot; + input_name +  &quot;right_channel.wav&quot;, &quot;Оператор&quot;)

# Объединение и сортировка сегментов по времени начала
all_segments = left_segments + right_segments
all_segments.sort(key=lambda x: x[&quot;start&quot;])

# Запись в файл
with open(&quot;/mnt/media/OP/&quot; + input_name +  &quot;.txt&quot;, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
    for segment in all_segments:
        segment_text = &quot;[%.2fs -&gt; %.2fs] (%s channel) %s&quot; % (segment[&quot;start&quot;], segment[&quot;end&quot;], segment[&quot;channel&quot;], segment[&quot;text&quot;])
        f.write(segment_text + &quot;\\n&quot;)
        print(segment_text)

# Удаление временных файлов (если необходимо)
os.remove(&quot;&quot; + input_name +  &quot;left_channel.wav&quot;)
os.remove(&quot;&quot; + input_name +  &quot;right_channel.wav&quot;)

# Функция для удаления временных меток и замены текста
def clean_transcription_file(input_file, output_file):
    with open(input_file, &quot;r&quot;, encoding=&quot;utf-8&quot;) as f:
        lines = f.readlines()

    with open(output_file, &quot;w&quot;, encoding=&quot;utf-8&quot;) as f:
        for line in lines:
            # Удаление временных меток
            cleaned_line = line.split(&#x27;] &#x27;)[1] if &#x27;] &#x27; in line else line
            # Замена текста &quot;(Оператор channel)&quot; на &quot;Оператор:&quot;
            cleaned_line = cleaned_line.replace(&quot;(Клиент channel)&quot;, &quot;Клиент:&quot;).replace(&quot;(Оператор channel)&quot;, &quot;Оператор:&quot;)
            f.write(cleaned_line)

# Использование функции для очистки файла
clean_transcription_file(&quot;/mnt/media/OP/&quot; + input_name +  &quot;.txt&quot;, &quot;/mnt/media/OP/txt/&quot; + input_name +  &quot;.txt&quot;)
os.rename(&quot;/mnt/media/OP/&quot; + input_name +  &quot;.txt&quot;, &quot;/mnt/media/OP/txt_temp/&quot; + input_name +  &quot;.txt&quot;)

os.rename(&quot;/mnt/media/OP/&quot; + input_name +  &quot;.wav&quot;, &quot;/mnt/media/OP/done/&quot; + input_name +  &quot;.wav&quot;)

</pre>
  <h2 id="PvgO">3. Анализ диалога с помощью ИИ.</h2>
  <p id="8enH">Далее была поставлена задача по анализированию диалога с помощью ИИ. Мы выбрали для данного решения ChatGPT, как наиболее развитую ИИ технологию. На тот момент использовали модель gpt-4o.</p>
  <p id="LW32">Возникла проблема в доступности API ChatGPT из РФ. Для решения данной проблемы мы использовали собственный прокси сервер в виде локального TOR.</p>
  <ol id="AHGl">
    <li id="MHeg">Устанавливаем TOR на сервер STT для обработки в ChatGPT, добавляем порт в “/etc/tor/torrc” и перезагружаем TOR “sudo systemctl restart tor”</li>
  </ol>
  <pre id="IYIh">HTTPTunnelPort 9081
</pre>
  <ol id="cJmn">
    <li id="G221">Для обработки в ChatGPT мы так же решили использовать Python - библиотеки requests и json, напрямую библиотеку openai использовать не получилось из-за обхода ограничений.</li>
  </ol>
  <pre id="On9H" data-lang="python">import requests
import sys
import os
import json

# Добавляем чтение аргументов из cmd
input_name = sys.argv[1]

# Your OpenAI API key
api_key = &quot;sk-****-*********************************************&quot;

# Пути к вх. и исх. файлам
file_path = f&quot;/mnt/media/OP/txt/{input_name}.txt&quot;
output_file_path = f&quot;/mnt/media/OP/openai/{input_name}.txt&quot;
prompt = &quot;Прошу проверить разговор продавца с клиентом, используя следующий чек-лист-\\nВопрос 1- Продавец поздоровался?\\nВопрос 2- Продавец представился?\\nВопрос 3- Продавец в течении разговора обратился к клиенту по имени не менее 2 раз?\\nВопрос 4- Продавец назвал первичные потребности клиента?\\nВопрос 5- Продавец задавал открытые вопросы, направленные на выявление потребностей клиента в автомобиле?\\nВопрос 6- Продавец предложил клиенту альтернативные варианты автомобилей?\\nВопрос 7- Продавец согласовал с клиентом дату и время следующей встречи или звонка?\\nВопрос 8- Продавец в конце разговора подтвердил номер телефона клиента?\\nВопрос 9- Продавец подвел итоги диалога?\\nВопрос 10- Продавец спросил, есть ли у клиента еще какие-либо вопросы?\\nВопрос 11- Продавец в конце разговора предложил свою электронную визитку или номер телефона?\\nВопрос 12- Продавец поблагодарил клиента за звонок?\\nВопрос 13- Продавец вежливо попрощался?\\nВопрос 14- Какая договоренность была озвучена в итоге разговора?\\nВопрос 15- Продавец проявлял инициативность и заинтересованность в разговоре с клиентом? Сделай оценку так - каждый вопрос - это 1 балл и рассчитай долю положительных ответов.&quot;
# Конф. Proxy 
proxies = {
    &quot;http&quot;: &quot;&lt;http://localhost:9081&gt;&quot;,
    &quot;https&quot;: &quot;&lt;http://localhost:9081&gt;&quot;,
}

# Читаем содержимое файла
with open(file_path, &#x27;r&#x27;, encoding=&#x27;utf-8&#x27;) as file:
    file_content = file.read()

# Объединяем текст промта и содержимое текст. файла
full_prompt = prompt + file_content

# JSON payload для API запроса
payload = {
    &quot;model&quot;: &quot;gpt-4o&quot;,
    &quot;messages&quot;: [
        {&quot;role&quot;: &quot;system&quot;, &quot;content&quot;: &quot;You are an assistant.&quot;},
        {&quot;role&quot;: &quot;user&quot;, &quot;content&quot;: full_prompt}
    ],
    &quot;max_tokens&quot;: 1500,
    &quot;temperature&quot;: 0.7
}

# Отправляем запрос в OpenAI через прокси
response = requests.post(
    &quot;&lt;https://api.openai.com/v1/chat/completions&gt;&quot;,
    headers={
        &quot;Content-Type&quot;: &quot;application/json&quot;,
        &quot;Authorization&quot;: f&quot;Bearer {api_key}&quot;,
    },
    json=payload,
    proxies=proxies
)

# Проверяем доступность
if response.status_code == 200:
    response_json = response.json()
    response_text = response_json[&#x27;choices&#x27;][0][&#x27;message&#x27;][&#x27;content&#x27;].strip()

    # Write the response to the output file
    with open(output_file_path, &#x27;w&#x27;, encoding=&#x27;utf-8&#x27;) as output_file:
        output_file.write(response_text)

    print(f&quot;Ответ записан в файл {output_file_path}&quot;)
else:
    print(f&quot;Ошибка: {response.status_code}&quot;)
    print(response.text)

</pre>
  <h2 id="AuPB">4. Фронт- и бэкенд для контроля системы</h2>
  <p id="VuQl">У нас уже был в компании веб сервер, работающий на <strong>NGINX+PHP+MySQL</strong>, поэтому систему решили настраивать на нём.</p>
  <ol id="Iu7U">
    <li id="GVze"><strong>Первый этап</strong> - транскрибация, в таблице MySQL делается отметка о загрузке файла и статус транскрибации изменяется на “process”. После транскрибации звуковой файл перемещается в папку “done”, а текстовый файл в папку “txt”</li>
    <li id="nApr"><strong>Второй этап</strong> - система проверяет наличие сформированного текстового файла в папке “txt” и делает отметку в таблице о готовности транскрибации</li>
    <li id="VIhY"><strong>Третий этап</strong> - система смотрит задания с положительным статусом транскрибации и отправляет текстовые файлы с указанным нами промтом на анализ в ChatGPT. После чего получает ответный проанализированный текстовый файл и сохраняет его в папке “openai”, при этом делая в таблице отметку об отправке в ChatGPT. В случае ошибки система направляет уведомление в Телеграм.</li>
    <li id="wK0y"><strong>Четвертый этап</strong> - постобработка, например, выделение необходимого ответа из анализа ChatGPT.</li>
    <li id="gZwc">Вывод таблицы с данными. Выводим на веб странице таблицу с с необходимыми нам данными.</li>
  </ol>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/iPowTY-sUEo</guid><link>https://ttype.addsky.ru/iPowTY-sUEo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/iPowTY-sUEo?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Бэкап Микротика скриптом</title><pubDate>Tue, 28 May 2024 12:02:52 GMT</pubDate><category>Администрирование</category><description><![CDATA[Добавляем скрипт в раздел System → Scripts ( на примере бэкапа для микротика Mikrotik_MY)]]></description><content:encoded><![CDATA[
  <p id="aYzR">Добавляем скрипт в раздел <strong>System → Scripts</strong> ( на примере бэкапа для микротика Mikrotik_MY)</p>
  <p id="HPPn">Резервирование происходит по протоколу FTP, поэтому нужны — ip сервера ftp, логин (mikrotik_backup) и пароль для доступа.</p>
  <pre id="FSVM">#pull date

:local tmpdate [/system clock get date];
:local months (&quot;jan&quot;,&quot;feb&quot;,&quot;mar&quot;,&quot;apr&quot;,&quot;may&quot;,&quot;jun&quot;,&quot;jul&quot;,&quot;aug&quot;,&quot;sep&quot;,&quot;oct&quot;,&quot;nov&quot;,&quot;dec&quot;);
:local month [ :pick $tmpdate 0 3 ];
:local mm ([ :find $months $month -1 ] + 1);
:if ($mm &lt; 10) do={ :set mm (&quot;0&quot; . $mm); }
:local date ([:pick $tmpdate 4 6] .&quot;-&quot; . $mm .&quot;-&quot; . [:pick $tmpdate 7 11])

#FTP access

:local myname &quot;Mikrotik_MY&quot;
:local fname ($myname.&quot;_&quot;.$date);
:local bname ($myname.&quot;_&quot;.$date.&quot;.backup&quot;);
:local ename ($myname.&quot;_&quot;.$date.&quot;.rsc&quot;);
:local ftpuser &quot;mikrotik_backup&quot;;
:local ftppass &quot;Пароль_mikrotik_backup&quot;;
:local ftpaddr &quot;IP_сервера_FTP&quot;;

#create backup

/system backup save name=$fname password=;
:delay 10;
/export file=$fname
:delay 10;

#pull backup to FTP

/tool fetch address=$ftpaddr src-path=$bname user=$ftpuser password=$ftppass port=21 upload=yes mode=ftp dst-path=$bname
:delay 15;
/tool fetch address=$ftpaddr src-path=$ename user=$ftpuser password=$ftppass port=21 upload=yes mode=ftp dst-path=$ename
:delay 15;

#delete files on mikrotik

/file remove $bname;
/file remove $ename;</pre>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/Ika4UqueTRZ</guid><link>https://ttype.addsky.ru/Ika4UqueTRZ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/Ika4UqueTRZ?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Тестируем сетевой канал с iPerf3</title><pubDate>Tue, 28 May 2024 11:54:51 GMT</pubDate><media:content medium="image" url="https://img2.teletype.in/files/1e/34/1e34e75c-39ae-46fd-915f-35e9f6cb26ef.png"></media:content><category>Администрирование</category><description><![CDATA[<img src="https://internet-lab.ru/sites/internet-lab.ru/files/inline-images/10_4G.jpg"></img>Утилита iPerf3 позволяет измерить максимальную пропускную способность между двумя узлами сети. Может использовать различные параметры тайминга, протоколов, потоков и т.п. Это кроссплатформенная клиент-серверная программа. Бесплатна.]]></description><content:encoded><![CDATA[
  <p id="7Yij">Утилита iPerf3 позволяет измерить максимальную пропускную способность между двумя узлами сети. Может использовать различные параметры тайминга, протоколов, потоков и т.п. Это кроссплатформенная клиент-серверная программа. Бесплатна.</p>
  <p id="y67K">Умеет генерировать трафик различного типа для анализа пропускной способности сети. Поддерживается многопоточная работа через параметры у клиента. По умолчанию тест выполняется в направлении от клиента к серверу. Для двунаправленного тестирования со стороны клиента необходимо использовать ключ -R.</p>
  <p id="YJ6w">Скачать можно здесь:</p>
  <p id="MY5G"><a href="https://iperf.fr/iperf-download.php" target="_blank">https://iperf.fr/iperf-download.php</a></p>
  <pre id="PEXH" data-lang="shell">C:\Distr\iperf-3.1.3-win64\iperf-3.1.3-win64&gt;iperf3.exe /?
iperf3: parameter error - must either be a client (-c) or server (-s)

Usage: iperf [-s|-c host] [options]
       iperf [-h|--help] [-v|--version]

Server or Client:
  -p, --port      #         server port to listen on/connect to
  -f, --format    [kmgKMG]  format to report: Kbits, Mbits, KBytes, MBytes
  -i, --interval  #         seconds between periodic bandwidth reports
  -F, --file name           xmit/recv the specified file
  -B, --bind      &lt;host&gt;    bind to a specific interface
  -V, --verbose             more detailed output
  -J, --json                output in JSON format
  --logfile f               send output to a log file
  -d, --debug               emit debugging output
  -v, --version             show version information and quit
  -h, --help                show this message and quit
Server specific:
  -s, --server              run in server mode
  -D, --daemon              run the server as a daemon
  -I, --pidfile file        write PID file
  -1, --one-off             handle one client connection then exit
Client specific:
  -c, --client    &lt;host&gt;    run in client mode, connecting to &lt;host&gt;
  -u, --udp                 use UDP rather than TCP
  -b, --bandwidth #[KMG][/#] target bandwidth in bits/sec (0 for unlimited)
                            (default 1 Mbit/sec for UDP, unlimited for TCP)
                            (optional slash and packet count for burst mode)
  -t, --time      #         time in seconds to transmit for (default 10 secs)
  -n, --bytes     #[KMG]    number of bytes to transmit (instead of -t)
  -k, --blockcount #[KMG]   number of blocks (packets) to transmit (instead of -
t or -n)
  -l, --len       #[KMG]    length of buffer to read or write
                            (default 128 KB for TCP, 8 KB for UDP)
  --cport         &lt;port&gt;    bind to a specific client port (TCP and UDP, default
: ephemeral port)
  -P, --parallel  #         number of parallel client streams to run
  -R, --reverse             run in reverse mode (server sends, client receives)
  -w, --window    #[KMG]    set window size / socket buffer size
  -M, --set-mss   #         set TCP/SCTP maximum segment size (MTU - 40 bytes)
  -N, --no-delay            set TCP/SCTP no delay, disabling Nagle&#x27;s Algorithm
  -4, --version4            only use IPv4
  -6, --version6            only use IPv6
  -S, --tos N               set the IP &#x27;type of service&#x27;
  -Z, --zerocopy            use a &#x27;zero copy&#x27; method of sending data
  -O, --omit N              omit the first n seconds
  -T, --title str           prefix every output line with this string
  --get-server-output       get results from server
  --udp-counters-64bit      use 64-bit counters in UDP test packets

[KMG] indicates options that support a K/M/G suffix for kilo-, mega-, or giga-

iperf3 homepage at: http://software.es.net/iperf/
Report bugs to:     https://github.com/esnet/iperf</pre>
  <h3 id="BY4n">Пример использования</h3>
  <p id="rJ4C">На сервере запускаем:</p>
  <pre id="weXc" data-lang="shell">iperf3.exe -s</pre>
  <figure id="pvTV" class="m_original">
    <img src="https://internet-lab.ru/sites/internet-lab.ru/files/inline-images/10_4G.jpg" width="677" />
  </figure>
  <p id="d2Z8">На клиенте запускаем:</p>
  <pre id="MNgU" data-lang="shell">iperf3.exe -с 10.10.12.8 -P 5 -R</pre>
  <p id="lzrg">Где:</p>
  <ul id="JnnR">
    <li id="wyP1">10.10.12.8 - IP адрес сервера,</li>
    <li id="xQSt">-P 5 - пять потоков,</li>
    <li id="SysP">-R - двунаправленная передача.</li>
  </ul>
  <figure id="rhsl" class="m_original">
    <img src="https://internet-lab.ru/sites/internet-lab.ru/files/inline-images/10_5G_0.jpg" width="677" />
  </figure>
  <p id="GUSI">Результат:</p>
  <figure id="G6S7" class="m_original">
    <img src="https://internet-lab.ru/sites/internet-lab.ru/files/inline-images/10_6G.jpg" width="677" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://ttype.addsky.ru/1-Ba-qYNmIx</guid><link>https://ttype.addsky.ru/1-Ba-qYNmIx?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky</link><comments>https://ttype.addsky.ru/1-Ba-qYNmIx?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=addsky#comments</comments><dc:creator>addsky</dc:creator><title>Включение встроенной учетной записи администратора в системах Windows </title><pubDate>Tue, 28 May 2024 06:13:24 GMT</pubDate><category>Администрирование</category><description><![CDATA[<img src="https://img3.teletype.in/files/6a/f6/6af6b03c-60f4-482d-83d2-13eb2c16bde8.png"></img>Вам нужно открыть командную строку в режиме администратора, щелкнув правой кнопкой мыши и выбрав “Запуск от имени администратора” (или воспользуйтесь сочетанием клавиш Ctrl+Shift+Enter из строки поиска).]]></description><content:encoded><![CDATA[
  <p id="JNL3">Вам нужно открыть командную строку в режиме администратора, щелкнув правой кнопкой мыши и выбрав “Запуск от имени администратора” (или воспользуйтесь сочетанием клавиш Ctrl+Shift+Enter из строки поиска).</p>
  <p id="4Sn7">Обратите внимание, что это работает одинаково во всех версиях Windows.</p>
  <p id="VZOX">Просто найдите cmd, а затем щелкните правой кнопкой мыши на значке командной строки в меню “Пуск” или на начальном экране.</p>
  <figure id="uhcV" class="m_original">
    <img src="https://img3.teletype.in/files/6a/f6/6af6b03c-60f4-482d-83d2-13eb2c16bde8.png" width="426" />
  </figure>
  <figure id="xHgz" class="m_original">
    <img src="https://sun9-2.userapi.com/impg/gjpkbTAvNduUyyQXPzwLGQ1Q06HfjN0FOYbk1g/1c2ktoUdlHI.jpg?size=377x311&quality=96&sign=667e902f8ffc170d24f157aae1a051a6&type=album" width="1" />
  </figure>
  <p id="unwT">Если вы работаете в Windows 10, 11 или 8.1, вы можете щелкнуть правой кнопкой мыши на кнопке “Пуск” и выбрать таким образом открытие командной строки.</p>
  <p id="MKW7">Теперь введите следующую команду:</p>
  <blockquote id="81Tj"><code>net user administrator /active:yes</code></blockquote>
  <p id="DepZ">Вы должны увидеть сообщение об успешном завершении команды.</p>
  <p id="8mgN">Выйдите из системы, и теперь вы увидите учетную запись администратора в качестве выбора.</p>
  <p id="77lr">Вы заметите, что у этой учетной записи нет пароля, поэтому, если вы хотите оставить ее включенной, вам следует изменить пароль.</p>
  <h3 id="Отключение-встроенной-учетной-записи-администратора">Отключение встроенной учетной записи администратора</h3>
  <p id="lWv7">Убедитесь, что вы вошли в систему под учетной записью обычного пользователя, а затем откройте командную строку в режиме администратора, как указано выше.</p>
  <p id="M2Zm">Введите следующую команду:</p>
  <blockquote id="SDuS"><code>net user administrator /active:no</code></blockquote>

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