<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Статьи в Sadium</title>
    <link>https://sadium.cyou/opus/</link>
    <description>Недавний контент > Статьи в Sadium</description>
    <generator>Hugo</generator>
    <language>ru</language>
    <managingEditor>/opt/hugo/sadium/content/opus/_index.md (Линк)</managingEditor>
    <webMaster>/opt/hugo/sadium/content/opus/_index.md (Линк)</webMaster>
    <atom:link href="https://sadium.cyou/opus/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Настройка ACME для получения сертификатов в Angie (&#43;Maddy)</title>
      <link>https://sadium.cyou/opus/angie_acme/</link>
      <pubDate>Sat, 26 Apr 2025 00:00:00 +0000</pubDate>
      <author>/opt/hugo/sadium/content/opus/angie_acme.md (Линк)</author>
      <guid>https://sadium.cyou/opus/angie_acme/</guid>
      <description>&lt;h1 id=&#34;angie&#34;&gt;Angie&lt;/h1&gt;&#xA;&lt;p&gt;Этот мануал написан на основе &lt;a href=&#34;https://predvoditelev.ru/notes/angie-lets-encrypt&#34; target=&#34;_blank&#34; &gt;другого мануала&lt;/a&gt;. &lt;br&gt;&#xA;Только я Docker&amp;rsquo;ом не пользуюсь, только bare-metal, только хардкор.&lt;/p&gt;&#xA;&lt;p&gt;Для тех кто в танке - &lt;a href=&#34;https://angie.software&#34; target=&#34;_blank&#34; &gt;Angie&lt;/a&gt; это форк &lt;a href=&#34;https://nginx.org/ru&#34; target=&#34;_blank&#34; &gt;nginx&lt;/a&gt;. Историю появления ищите сами.&lt;/p&gt;&#xA;&lt;p&gt;Што ш, начнём.&lt;/p&gt;&#xA;&lt;p&gt;Для начала, в конфиге Angie в конце блока &lt;code&gt;http&lt;/code&gt; добавляем следующие строчки:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;acme_client&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letsencrypt&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//acme-v02.api.letsencrypt.org/directory;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;resolver&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;192.168&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;50.185&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Где &lt;code&gt;192.168.50.185&lt;/code&gt; это мой DNS сервер. Вы ставьте свой, например Quad9, &lt;code&gt;9.9.9.9&lt;/code&gt;. &lt;br&gt;&#xA;То есть, по итогу у нас должно получиться вот так:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;здесь&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;будут&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;другие&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;параметры&lt;/span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;acme_client&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;letsencrypt&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;https&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//acme-v02.api.letsencrypt.org/directory;  &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;resolver&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;192.168&lt;/span&gt;.&lt;span style=&#34;color:#ae81ff&#34;&gt;50.185&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Вместо того, чтобы каждый раз в новых конфигах не прописывать необходимые строки для получения сертификата, я сделал мини-конфиг, который я добавляю одной строчкой.&lt;/p&gt;&#xA;&lt;p&gt;Сам конфиг должен располагаться в &lt;code&gt;/etc/angie/includes&lt;/code&gt;, я его назвал &lt;code&gt;ssl.conf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;listen &lt;span style=&#34;color:#ae81ff&#34;&gt;443&lt;/span&gt; ssl;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;acme letsencrypt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssl_certificate $acme_cert_letsencrypt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ssl_certificate_key $acme_cert_key_letsencrypt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Помимо этого я сделал ещё один мини-конфиг, чтобы Angie принудительно HTTP запросы переводил в HTTPS, назвал &lt;code&gt;301.conf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;301&lt;/span&gt; https://$host$request_uri;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;И эти мини-конфиги я добавляю в конфиг сайта строчкой&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;include includes/ssl.conf &lt;span style=&#34;color:#75715e&#34;&gt;# ну или другое имя после includes/&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Среднестатистический конфиг Angie для сайта будет выглядеть приблизительно так: &lt;br&gt;&#xA;(как пример взял конфиг от &lt;a href=&#34;https://sadium.cyou/services/#fluffychat&#34;&gt;Fluffychat&lt;/a&gt;)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-js&#34; data-lang=&#34;js&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ffchat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sadium&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cyou&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;301.&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}      &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;server_name&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;ffchat&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;sadium&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;cyou&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//localhost:9199;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$host&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Real&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$remote_addr&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;For&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Proto&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$scheme&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;admin&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//localhost:9198/;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$host&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Real&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$remote_addr&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;For&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Proto&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$scheme&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;invite&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;http&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;:&lt;/span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//localhost:5055/;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Host&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$host&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Real&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;IP&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$remote_addr&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;For&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$proxy_add_x_forwarded_for&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;proxy_set_header&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;X&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Forwarded&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;-&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;Proto&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;$scheme&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;main_errors&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;include&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;includes&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&lt;/span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;ssl&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;conf&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Проверяем, что всё ок командой&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;angie -t&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;angie: the configuration file /etc/angie/angie.conf syntax is ok&#xA;angie: configuration file /etc/angie/angie.conf test is successful&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;А если не ок, то чиним, пока не избавимся от ошибок 🙃&lt;/p&gt;&#xA;&lt;p&gt;Перезагружайте страничку с некоторым интервалом, сначала будет ругаться, но через полминуты где-то сертификат таки получит.&lt;/p&gt;&#xA;&lt;p&gt;Сертификаты будут лежать по пути &lt;strong&gt;&lt;code&gt;/var/lib/angie/acme/letsencrypt&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;maddy&#34;&gt;Maddy&lt;/h1&gt;&#xA;&lt;p&gt;Поскольку у меня есть почтовый сервер на базе &lt;a href=&#34;https://maddy.email/tutorials/setting-up&#34; target=&#34;_blank&#34; &gt;Maddy&lt;/a&gt;, в его конфиге нужно заменить строчку&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls file /etc/letsencrypt/live/&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;primary_domain&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;/fullchain.pem /etc/letsencrypt/live/&lt;span style=&#34;color:#66d9ef&#34;&gt;$(&lt;/span&gt;primary_domain&lt;span style=&#34;color:#66d9ef&#34;&gt;)&lt;/span&gt;/privkey.pem&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;на&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;tls file /var/lib/angie/acme/letsencrypt/certificate.pem /var/lib/angie/acme/letsencrypt/private.key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и дать Maddy доступ к сертификатам&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo setfacl -R -m u:maddy:rX /var/lib/angie/acme/letsencrypt/certificate.pem&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo setfacl -R -m u:maddy:rX /var/lib/angie/acme/letsencrypt/private.key&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и всё должно заработать.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Настройка TLS (turns:) в Eturnal для Nextcloud Talk</title>
      <link>https://sadium.cyou/opus/eturnal_nextcloud_talk/</link>
      <pubDate>Sun, 22 Dec 2024 00:00:00 +0000</pubDate>
      <author>/opt/hugo/sadium/content/opus/eturnal_nextcloud_talk.md (Линк)</author>
      <guid>https://sadium.cyou/opus/eturnal_nextcloud_talk/</guid>
      <description>&lt;p&gt;*&lt;em&gt;Мануал подразумевает, что у вас уже есть сервер с &lt;code&gt;apt-based&lt;/code&gt; системой с установленным и настроенным Nextcloud&lt;/em&gt;&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;Поскольку у меня сервер на &lt;code&gt;Debian 13&lt;/code&gt;, соответственно мануал будет для систем с &lt;strong&gt;&lt;code&gt;apt&lt;/code&gt;&lt;/strong&gt;.&#xA;Чтобы установить пакет &lt;code&gt;eturnal&lt;/code&gt;, необходимо прописать следующие команды:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install extrepo&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo extrepo enable eturnal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt update&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo apt install eturnal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(Взято с &lt;a href=&#34;https://github.com/processone/eturnal&#34; target=&#34;_blank&#34; &gt;Github&lt;/a&gt;-репозитория eturnal)&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;После установки необходимо редактировать файл конфигурации &lt;br&gt;&#xA;(Вместо &lt;strong&gt;&lt;code&gt;micro&lt;/code&gt;&lt;/strong&gt; подставьте ваш любимый терминальный текстовый редактор)&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo micro /etc/eturnal.yml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Сам файл конфигурации:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# eturnal STUN/TURN server configuration file.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# This file is written in YAML. The YAML format is indentation-sensitive, please&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# MAKE SURE YOU INDENT CORRECTLY.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;#&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# See: https://eturnal.net/doc/#Global_Configuration&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;eturnal:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## Shared secret for deriving temporary TURN credentials (default: $RANDOM):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  secret: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ваш-секрет&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## The server&amp;#39;s public IPv4 address (default: autodetected):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  relay_ipv4_addr: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ваш_белый_(или_статичный)_IP&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## The server&amp;#39;s public IPv6 address (optional):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#relay_ipv6_addr: &amp;#34;2001:db8::4&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  listen:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ip: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;::&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      port: &lt;span style=&#34;color:#ae81ff&#34;&gt;3478&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# port: 80&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      transport: udp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      ip: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;::&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      port: &lt;span style=&#34;color:#ae81ff&#34;&gt;3478&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# port: 80&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      transport: tcp&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    -&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     ip: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;::&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     port: &lt;span style=&#34;color:#ae81ff&#34;&gt;5349&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     &lt;span style=&#34;color:#75715e&#34;&gt;# port: 443&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;     transport: tls&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## TLS certificate/key files (must be readable by &amp;#39;eturnal&amp;#39; user!):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  tls_crt_file: ваш_путь_до_fullchain.pem&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  tls_key_file: ваш_путь_до_privkey.pem&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## UDP relay port range (usually, several ports per A/V call are required):&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  relay_min_port: &lt;span style=&#34;color:#ae81ff&#34;&gt;49152&lt;/span&gt;     &lt;span style=&#34;color:#75715e&#34;&gt;# This is the default.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  relay_max_port: &lt;span style=&#34;color:#ae81ff&#34;&gt;65535&lt;/span&gt;     &lt;span style=&#34;color:#75715e&#34;&gt;# This is the default.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## Reject TURN relaying to the following addresses/networks:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  blacklist_peers:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    - recommended           &lt;span style=&#34;color:#75715e&#34;&gt;# Expands to various addresses/networks recommended&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                            &lt;span style=&#34;color:#75715e&#34;&gt;# to be blocked. This is the default.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## If &amp;#39;true&amp;#39;, close established calls on expiry of temporary TURN credentials:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  strict_expiry: false      &lt;span style=&#34;color:#75715e&#34;&gt;# This is the default.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## Logging configuration:&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  log_level: info           &lt;span style=&#34;color:#75715e&#34;&gt;# critical | error | warning | notice | info | debug&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  log_rotate_size: &lt;span style=&#34;color:#ae81ff&#34;&gt;10485760&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# 10 MiB (default: unlimited, i.e., no rotation).&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  log_rotate_count: &lt;span style=&#34;color:#ae81ff&#34;&gt;10&lt;/span&gt;      &lt;span style=&#34;color:#75715e&#34;&gt;# Keep 10 rotated log files.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;#log_dir: stdout          # Enable for logging to the terminal/journal.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;## See: https://eturnal.net/doc/#Module_Configuration&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  modules:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    mod_log_stun: &lt;span style=&#34;color:#f92672&#34;&gt;{}&lt;/span&gt;        &lt;span style=&#34;color:#75715e&#34;&gt;# Log STUN queries (in addition to TURN sessions).&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#mod_stats_influx: {}   # Log STUN/TURN events into InfluxDB.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#mod_stats_prometheus:  # Expose STUN/TURN and VM metrics to Prometheus.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#  ip: any              # This is the default: Listen on all interfaces.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#  port: 8081           # This is the default.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#  tls: false           # This is the default.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;#  vm_metrics: true     # This is the default.&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;1.&lt;/code&gt; На месте &lt;code&gt;secret: &amp;quot;ваш-секрет&amp;quot;&lt;/code&gt; замените значение &lt;strong&gt;&lt;code&gt;ваш-секрет&lt;/code&gt;&lt;/strong&gt; на вывод с команды&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;openssl rand -hex &lt;span style=&#34;color:#ae81ff&#34;&gt;32&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;и сохраните это значение, ибо потом нам оно понадобится.&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;2.&lt;/code&gt; На месте &lt;code&gt;relay_ipv4_addr: &amp;quot;ваш_белый_(или_статичный)_IP&amp;quot;&lt;/code&gt; вставите свой IP &lt;br&gt;&#xA;&lt;code&gt;3.&lt;/code&gt; На месте &lt;code&gt;tls_crt_file: ваш_путь_до_fullchain.pem&lt;/code&gt; и &lt;code&gt;tls_key_file: ваш_путь_до_privkey.pem&lt;/code&gt; вставьте пути для соответствующих сертификатов&lt;/p&gt;&#xA;&lt;p&gt;Также необходимо ввести следующую команду&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo setfacl -R -m u:eturnal:rX /etc/letsencrypt/&lt;span style=&#34;color:#f92672&#34;&gt;{&lt;/span&gt;live,archive&lt;span style=&#34;color:#f92672&#34;&gt;}&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;для того, чтобы пользователю &lt;code&gt;eturnal&lt;/code&gt; были доступны сертификаты.&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;p&gt;После проведённых модификаций конфигурационного файла, необходимо перезапустить сервис &lt;code&gt;eturnal&lt;/code&gt;:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl restart eturnal&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;После чего в браузере идём в &lt;code&gt;настройки сервера Nextcloud&lt;/code&gt; (/settings/admin/talk) -&amp;gt; &lt;code&gt;Конференции&lt;/code&gt; -&amp;gt; пункт &lt;code&gt;TURN-серверы&lt;/code&gt; &lt;br&gt;&#xA;Нажимаем &lt;code&gt;+ Добавить сервер TURN&lt;/code&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;В первом выпадающем списке ставим &lt;code&gt;Только turns:&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;В &lt;code&gt;URL сервера TURN&lt;/code&gt; ваш домен, к которому был привязан белый (статичный) IP&lt;/li&gt;&#xA;&lt;li&gt;В &lt;code&gt;Секретный ключ TURN-сервера&lt;/code&gt; вставляем секрет, который я просил сохранить ранее в пункте 1 выше&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;После вводим пароль (если попросят), затем нажимаем на значок линии сердцебиения (слева от значка корзинки), и, если всё настроено правильно, получаем зелёную галочку и радуемся жизни.&lt;/p&gt;&#xA;&lt;p&gt;Возможно, вам нужно будет открыть порты 3478 и 5349, но это уже сами разберётесь как сделать.&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>[Не актуально] Nextcloud Assistant ← LiteLLM ← Ollama</title>
      <link>https://sadium.cyou/opus/nextcloud_x_litellm_x_ollama/</link>
      <pubDate>Fri, 19 Jul 2024 00:00:00 +0000</pubDate>
      <author>/opt/hugo/sadium/content/opus/nextcloud_x_litellm_x_ollama.md (Линк)</author>
      <guid>https://sadium.cyou/opus/nextcloud_x_litellm_x_ollama/</guid>
      <description>&lt;p&gt;Опять же, как было в случае с &lt;a href=&#34;https://sadium.cyou/posts/ricoh_config&#34;&gt;принтером&lt;/a&gt;, у меня Arch-based дистрибутив, поэтому буду расписывать по нему.&lt;/p&gt;&#xA;&lt;h2 id=&#34;install&#34;&gt;Установка&lt;/h2&gt;&#xA;&lt;p&gt;Начнём с установки &lt;strong&gt;&lt;a href=&#34;https://github.com/ollama/ollama&#34; target=&#34;_blank&#34; &gt;Ollama&lt;/a&gt;&lt;/strong&gt;. У меня карточка от красных, поэтому я ставлю версию &lt;strong&gt;rocm&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yay -S ollama-rocm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;или если нет &lt;strong&gt;yay&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pacman -S ollama-rocm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;systemd_service&#34;&gt;Сервис systemd&lt;/h3&gt;&#xA;&lt;p&gt;Как в моём случае, почему-то оно не подхватывало мою &lt;strong&gt;RX 6700 XT&lt;/strong&gt; (но &lt;a href=&#34;https://github.com/ollama/ollama/issues/3547&#34; target=&#34;_blank&#34; &gt;тут&lt;/a&gt; нашлось решение), поэтому мне пришлось редактировать &lt;strong&gt;сервис systemd&lt;/strong&gt; следующим образом:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo systemctl edit --full ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Unit&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;Ollama Service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Wants&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;network-online.target&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;After&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;network.target network-online.target&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Service&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecStart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/usr/bin/ollama serve&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WorkingDirectory&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/var/lib/ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Environment&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HOME=/var/lib/ollama&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Environment&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;HSA_OVERRIDE_GFX_VERSION=10.3.0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Добавлено, чтобы увидело карточку&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Environment&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;OLLAMA_HOST=0.0.0.0&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#75715e&#34;&gt;# Возможность локально подключатся извне&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;User&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Group&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Restart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;on-failure&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RestartSec&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;3&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Type&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;simple&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;PrivateTmp&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ProtectSystem&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;full&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ProtectHome&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;yes&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Install&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WantedBy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;multi-user.target&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;gguf_import&#34;&gt;Импорт модели GGUF&lt;/h2&gt;&#xA;&lt;p&gt;Обн. от &lt;code&gt;05.08.24&lt;/code&gt; - добавлена инструкция импорта моделей &lt;code&gt;.gguf&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Далее устанавливаем желаемую модель, в моём случае это &lt;strong&gt;&lt;code&gt;llama3&lt;/code&gt;&lt;/strong&gt; и модель, которую можно импортировать из файла &lt;code&gt;.gguf&lt;/code&gt;, я буду использовать &lt;strong&gt;&lt;code&gt;saiga-llama3&lt;/code&gt;[&lt;a href=&#34;https://huggingface.co/IlyaGusev/saiga_llama3_8b_gguf&#34; target=&#34;_blank&#34; &gt;🔗&lt;/a&gt;]&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ollama pull llama3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Для того, чтобы импортировать модель, нам необходимо:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Загрузить модель 🙃&lt;/li&gt;&#xA;&lt;li&gt;Создать файл, который можно скормить &lt;strong&gt;ollama&lt;/strong&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo FROM папка_с_моделью/файл_модели.gguf &amp;gt;&amp;gt; файл_название_модели&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;В моём случае можно сразу название модели, потому что работаю сразу из папки с моделью&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;echo FROM saiga_llama3.gguf &amp;gt;&amp;gt; saiga-llama3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Осталось импортировать&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ollama -f файл_название_модели название_модели&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ollama -f saiga-llama3 saiga-llama3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;litellm&#34;&gt;LiteLLM&lt;/h2&gt;&#xA;&lt;p&gt;Далее идём ставить &lt;strong&gt;&lt;a href=&#34;https://github.com/BerriAI/litellm&#34; target=&#34;_blank&#34; &gt;LiteLLM&lt;/a&gt;&lt;/strong&gt;. Это прослойка между Ollama и &lt;a href=&#34;https://github.com/nextcloud/integration_openai&#34; target=&#34;_blank&#34; &gt;Nextcloud LocalAI&lt;/a&gt;, которая использует запросы в формате OpenAI API.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;pipx install &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;litellm[proxy]&amp;#39;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Нам нужна именно &lt;strong&gt;&lt;code&gt;litellm[proxy]&lt;/code&gt;&lt;/strong&gt;, а не просто &lt;strong&gt;&lt;code&gt;litellm&lt;/code&gt;&lt;/strong&gt;!&lt;/p&gt;&#xA;&lt;p&gt;Теперь нужно собственно, запустить модели, с которыми впоследствии мы будем общаться через &lt;a href=&#34;https://github.com/nextcloud/assistant&#34; target=&#34;_blank&#34; &gt;Nextcloud Assistant&lt;/a&gt;. &lt;br&gt;&#xA;Однако, перед тем, как мы перейдём к запуску наших моделей, нам нужно создать файлик &lt;strong&gt;&lt;code&gt;config.yaml&lt;/code&gt;&lt;/strong&gt;, который мы впоследствии &amp;ldquo;скормим&amp;rdquo; &lt;strong&gt;LiteLLM&lt;/strong&gt; со следующим содержимым:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;model_list:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - model_name: llama3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    litellm_params:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      model: ollama/llama3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - model_name: saiga-llama3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    litellm_params:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      model: ollama/saiga-llama3&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# ну и далее по списку, если надо    &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  - model_name: название_модели&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    litellm_params:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      model: ollama/название_модели&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;litellm_systemd&#34;&gt;Сервис systemd&lt;/h3&gt;&#xA;&lt;p&gt;Затем я сделал &lt;strong&gt;systemd&lt;/strong&gt; сервис, чтобы не запускать это дело ручками, он должен располагаться в&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;/home/ваш_пользователь/.config/systemd/user/litellm.service&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Unit&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Description&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;LiteLLM &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; Ollama&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Service&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ExecStart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;/home/ваш_пользователь/.local/bin/litellm --config путь_до/config.yaml&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Restart&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;on-failure&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;RestartSec&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;5s&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;[&lt;/span&gt;Install&lt;span style=&#34;color:#f92672&#34;&gt;]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;WantedBy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;default.target&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Далее&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl --user daemon-reload&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;systemctl --user enable --now litellm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;nextcloud-assistant&#34;&gt;Nextcloud Assistant&lt;/h2&gt;&#xA;&lt;p&gt;Теперь идём в настройки сервера &lt;strong&gt;Искусственный интеллект&lt;/strong&gt; [/settings/admin/ai], предварительно установив &lt;strong&gt;Nextcloud Assistant&lt;/strong&gt; и &lt;strong&gt;OpenAI and LocalAI integration&lt;/strong&gt;, листаем ниже до &lt;strong&gt;&lt;code&gt;OpenAI и локальная интеграция&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;Service URL&lt;/code&gt;&lt;/strong&gt; - ip_пк:4000 &lt;br&gt;&#xA;&lt;strong&gt;&lt;code&gt;Service Name (optional)&lt;/code&gt;&lt;/strong&gt; - LiteLLM (или другое, какое хотите)&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;API key&lt;/code&gt;&lt;/strong&gt; - не нужен &lt;br&gt;&#xA;&lt;strong&gt;&lt;code&gt;Default completion model to use&lt;/code&gt;&lt;/strong&gt; - выбираем &lt;strong&gt;ollama/ваша_модель&lt;/strong&gt; (openai) &lt;br&gt;&#xA;&lt;strong&gt;&lt;code&gt;Max new tokens per request&lt;/code&gt;&lt;/strong&gt; - ставите сколько считаете нужным&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;&lt;code&gt;Select enabled features&lt;/code&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Отключил потому что модель такое не умеет:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Image generation provider&lt;/li&gt;&#xA;&lt;li&gt;Speech-to-text&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Статья написана без использования ИИ. Хотя, наверное, это и так видно 🙃&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Вход в Nextcloud через Codeberg</title>
      <link>https://sadium.cyou/opus/codeberg_x_nextcloud/</link>
      <pubDate>Sun, 10 Dec 2023 00:00:00 +0000</pubDate>
      <author>/opt/hugo/sadium/content/opus/codeberg_x_nextcloud.md (Линк)</author>
      <guid>https://sadium.cyou/opus/codeberg_x_nextcloud/</guid>
      <description>&lt;p&gt;Я не смог найти никакой информации об этом через поисковые системы, поэтому решил написать об этом здесь. &lt;br&gt;&#xA;Пригодилось - &lt;a href=&#34;https://forgejo.codeberg.page/docs/latest/user/oauth2-provider/&#34; target=&#34;_blank&#34; &gt;https://forgejo.codeberg.page/docs/latest/user/oauth2-provider/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;1.&lt;/code&gt; &lt;a href=&#34;https://codeberg.org/user/settings/applications&#34; target=&#34;_blank&#34; &gt;Создаём приложение в Codeberg&lt;/a&gt; и копируем куда-нибудь Client ID и Client secret. &lt;br&gt;&#xA;&lt;code&gt;2.&lt;/code&gt; Идём в параметры сервера Nextcloud, пункт &lt;code&gt;Social Login&lt;/code&gt;, и создаём Custom Oauth2 на &lt;code&gt;+&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;table&gt;&#xA;  &lt;thead&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;th&gt;Пункт&lt;/th&gt;&#xA;          &lt;th&gt;Что вводить&lt;/th&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/thead&gt;&#xA;  &lt;tbody&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Внутреннее имя&lt;/td&gt;&#xA;          &lt;td&gt;Codeberg&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Название&lt;/td&gt;&#xA;          &lt;td&gt;Codeberg&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;API Base URL&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://codeberg.org&#34; target=&#34;_blank&#34; &gt;https://codeberg.org&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Authorize url&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://codeberg.org/login/oauth/authorize&#34; target=&#34;_blank&#34; &gt;https://codeberg.org/login/oauth/authorize&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Token url&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://codeberg.org/login/oauth/access_token&#34; target=&#34;_blank&#34; &gt;https://codeberg.org/login/oauth/access_token&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Profile url&lt;/td&gt;&#xA;          &lt;td&gt;&lt;a href=&#34;https://codeberg.org/login/oauth/userinfo&#34; target=&#34;_blank&#34; &gt;https://codeberg.org/login/oauth/userinfo&lt;/a&gt;&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Logout url&lt;/td&gt;&#xA;          &lt;td&gt;Оставить пустым&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Client ID и Client secret&lt;/td&gt;&#xA;          &lt;td&gt;вставить из 1 пункта&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Scope&lt;/td&gt;&#xA;          &lt;td&gt;read:user&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;      &lt;tr&gt;&#xA;          &lt;td&gt;Остальные после&lt;/td&gt;&#xA;          &lt;td&gt;Не трогайте, если не уверены&lt;/td&gt;&#xA;      &lt;/tr&gt;&#xA;  &lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;&lt;code&gt;3.&lt;/code&gt; Ставим галку напротив пункта &lt;code&gt;Позволять пользователям подключать социальные логины к своим аккаунтам&lt;/code&gt; и нажимаем &lt;code&gt;Сохранить&lt;/code&gt; внизу страницы. &lt;br&gt;&#xA;&lt;code&gt;4.&lt;/code&gt; Идём в режим Инкогнито вашего браузера, затем на страничку входа в ваше облако и копируем путь провайдера Codeberg - правая кнопка мыши, копируем ссылку, сохраняем куда-нибудь. &lt;br&gt;&#xA;Должно выглядеть примерно так - &lt;code&gt;https://cloud.example.org(/index.php)/apps/sociallogin/custom_oauth2/Codeberg&lt;/code&gt; &lt;br&gt;&#xA;&lt;code&gt;5.&lt;/code&gt; Возвращаемся к ранее созданному &lt;a href=&#34;https://codeberg.org/user/settings/applications&#34; target=&#34;_blank&#34; &gt;приложению Codeberg&lt;/a&gt;, Нажимаем &lt;code&gt;Изменить&lt;/code&gt; и вставляем ссылку из прошлого пункта в поле &lt;code&gt;URI для перенаправления&lt;/code&gt;, нажимаем &lt;code&gt;Сохранить&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Теперь попробуйте связать ваш аккаунт Codeberg и Nextcloud из пункта &lt;code&gt;Social Login&lt;/code&gt; в настройках пользователя Nextcloud, должно работать. В теории, это также применимо к &lt;code&gt;Gitea&lt;/code&gt;, потому что &lt;a href=&#34;https://forgejo.org&#34; target=&#34;_blank&#34; &gt;Forgejo&lt;/a&gt; это форк &lt;a href=&#34;https://gitea.com&#34; target=&#34;_blank&#34; &gt;Gitea&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Давеча сделал по этому поводу Issue на Github: &lt;a href=&#34;https://github.com/zorn-v/nextcloud-social-login/issues/440&#34; target=&#34;_blank&#34; &gt;https://github.com/zorn-v/nextcloud-social-login/issues/440&lt;/a&gt;&lt;/p&gt;&#xA;</description>
    </item>
    <item>
      <title>Не берите дешёвые M2 накопители</title>
      <link>https://sadium.cyou/opus/rpi-rip-m2/</link>
      <pubDate>Sat, 07 Oct 2023 00:00:00 +0000</pubDate>
      <author>/opt/hugo/sadium/content/opus/rpi-rip-m2.md (Линк)</author>
      <guid>https://sadium.cyou/opus/rpi-rip-m2/</guid>
      <description>&lt;p&gt;Да, знаю, сам дурак, не сделал бэкапы. Хотя, с другой стороны, самое важное не пострадало - файлы в Nextcloud.&#xA;Они-то, как раз-таки, лежали на отдельном рейде.&#xA;И не только они, этот сайт, например, тоже.&#xA;Так или иначе, я не собирался делать из Малинки серьёзный сервер.&#xA;Мощи у неё не те, хотя тянула она NC неплохо, однако, когда дело доходило до мобильного клиента, это был тихий ад.&lt;/p&gt;&#xA;&lt;p&gt;Да, для тех кто не в курсе - у меня сдох SATA M2 SSD у Raspberry Pi 4B 8GB, который был системным для малинки (с базами данных, бинарниками и всем прочим).&lt;/p&gt;&#xA;&lt;p&gt;Ну, поскольку смысла было покупать новый диск для Малинки я не видел, я просто решил собрать сервер на своём старом компутерном железе, а именно на проце Intel Pentium G4560 aka Гиперпень, и материнка Asus H110M-R. Ну и какая-то там планка оперативки на 8ГБ частотой 2133МГц. Диск тоже, по факту, был со старого компа, просто на момент работы сервера на Малинке он у меня был чисто под виртуалки всякие. Это SSD SanDisk на 120Гб.&lt;/p&gt;&#xA;&lt;p&gt;В ближайшее время я планирую проапгрейдить сервер новым процом, в неближайшее - диском, и хочу докинуть ещё плашку оперативы на 8ГБ, дабы был двухканал. Процессор этот будет Intel Core i5 7600. Брал его &lt;a href=&#34;https://aliexpress.ru/item/1005003651636041.html&#34; target=&#34;_blank&#34; &gt;тут&lt;/a&gt;. Хотел взять Xeon-E3 1245 v5, однако без плясок с бубнами и программатора, мне бы его не получилось завести на этой материнке, менять которую мне вообще ни разу не хочется, да и с бубном плясать тоже неохота. После хотелось бы взять SSD Samsung EVO, скорее всего &lt;a href=&#34;https://www.dns-shop.ru/product/184d257ee33aed20/500-gb-25-sata-nakopitel-samsung-870-evo-mz-77e500bkr&#34; target=&#34;_blank&#34; &gt;этот&lt;/a&gt;. Ну а плашку оперативы возьму &lt;a href=&#34;https://www.citilink.ru/product/modul-pamyati-kingmax-ddr4-8gb-2133-dimm-ret-400808&#34; target=&#34;_blank&#34; &gt;эту&lt;/a&gt;. В идеале бы ещё ИБПшник взять, но я не знаю, какой&amp;hellip;&lt;/p&gt;&#xA;&lt;p&gt;Посмотреть текущую сборку можно &lt;a href=&#34;https://sadium.cyou/services/#%d1%81%d0%b5%d1%80%d0%b2%d0%b5%d1%80&#34;&gt;тут&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Обн. от &lt;code&gt;12.01.23&lt;/code&gt; &lt;br&gt;&#xA;Сделал бекапы через Crontab&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo crontab -e&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Обн. от &lt;code&gt;05.08.24&lt;/code&gt; - добавлен angie и больше файлов&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@monthly tar -czf /mnt/2TB/server_backup/nginx_angie.tar.gz /etc/nginx /etc/angie &lt;span style=&#34;color:#75715e&#34;&gt;# ngnix + angie&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@weekly tar -czf /mnt/2TB/server_backup/opt.tar.gz /opt &lt;span style=&#34;color:#75715e&#34;&gt;# сервисы&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;@weekly tar -czf /mnt/2TB/server_backup/etc.tar.gz /etc/matrix-synapse /etc/php /etc/fail2ban /etc/turnserver.conf &lt;span style=&#34;color:#75715e&#34;&gt;# обвязка&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Мучения с принтером</title>
      <link>https://sadium.cyou/opus/ricoh_config/</link>
      <pubDate>Sat, 09 Sep 2023 00:00:00 +0000</pubDate>
      <author>/opt/hugo/sadium/content/opus/ricoh_config.md (Линк)</author>
      <guid>https://sadium.cyou/opus/ricoh_config/</guid>
      <description>&lt;p&gt;Я всё думал, как завести свой принтер под Linux. &lt;br&gt;&#xA;И однажды наткнулся на &lt;a href=&#34;https://aur.archlinux.org/packages/ricoh-sp100-git&#34; target=&#34;_blank&#34; &gt;пакет&lt;/a&gt; в AUR, который, правда, оказался нерабочим, поскольку source репозиторий был удалён.&lt;/p&gt;&#xA;&lt;p&gt;Но недавно в очередных поисках я наткнулся на &lt;a href=&#34;https://forum.ubuntu.ru/index.php?PHPSESSID=b541bb569cce4b86e0a21bf1f69ca5ec&amp;amp;topic=203120.msg2481757#msg2481757&#34; target=&#34;_blank&#34; &gt;раздел на форуме Ubuntu&lt;/a&gt;. &lt;br&gt;&#xA;Там добрый человек поделился репозиторием - &lt;a href=&#34;https://git.kernel.org/pub/scm/linux/kernel/git/jejb/ricoh-sp100.git/&#34; target=&#34;_blank&#34; &gt;туть&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;Однако я поступил по другому, не так, как написал человек на форуме. &lt;br&gt;&#xA;Последовательность&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;git clone https://git.kernel.org/pub/scm/linux/kernel/git/jejb/ricoh-sp100.git&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;cd ricoh-sp100&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo cp pstoricohddst-gdi /usr/lib/cups/filter&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo cp *.ppd /usr/share/cups/model&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если есть yay:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;yay -S jbigkit inotify-tools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Если нет:&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;sudo pacman -S jbigkit inotify-tools&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Как-то так. Теперь идём и настраиваем наш принтер в своём рабочем окружении и радуемся жизни.&lt;/p&gt;&#xA;</description>
    </item>
  </channel>
</rss>

