<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Nextcloud в НИЦ Эхо Сирин</title>
    <link>https://exosirin.ru/tags/nextcloud/</link>
    <description>Недавний контент > Nextcloud в НИЦ Эхо Сирин</description>
    <generator>Hugo</generator>
    <language>ru</language>
    <managingEditor>/tags/nextcloud (Линк)</managingEditor>
    <webMaster>/tags/nextcloud (Линк)</webMaster>
    <lastBuildDate>Mon, 02 Feb 2026 09:14:43 +0300</lastBuildDate>
    <atom:link href="https://exosirin.ru/tags/nextcloud/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Настройка TLS (turns:) в Eturnal для Nextcloud Talk</title>
      <link>https://exosirin.ru/opus/eturnal_nextcloud_talk/</link>
      <pubDate>Sun, 22 Dec 2024 00:00:00 +0000</pubDate>
      <author>/opt/hugo/blog/content/opus/eturnal_nextcloud_talk.md (Линк)</author>
      <guid>https://exosirin.ru/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://exosirin.ru/opus/nextcloud_x_litellm_x_ollama/</link>
      <pubDate>Fri, 19 Jul 2024 00:00:00 +0000</pubDate>
      <author>/opt/hugo/blog/content/opus/nextcloud_x_litellm_x_ollama.md (Линк)</author>
      <guid>https://exosirin.ru/opus/nextcloud_x_litellm_x_ollama/</guid>
      <description>&lt;p&gt;Опять же, как было в случае с &lt;a href=&#34;https://exosirin.ru/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://exosirin.ru/opus/codeberg_x_nextcloud/</link>
      <pubDate>Sun, 10 Dec 2023 00:00:00 +0000</pubDate>
      <author>/opt/hugo/blog/content/opus/codeberg_x_nextcloud.md (Линк)</author>
      <guid>https://exosirin.ru/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;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Пункт&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Что вводить&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Внутреннее имя&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Codeberg&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Название&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Codeberg&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;API Base URL&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&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;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Authorize url&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&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;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Token url&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&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;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Profile url&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&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;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Logout url&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Оставить пустым&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Client ID и Client secret&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;вставить из 1 пункта&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Scope&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;read:user&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Остальные после&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Не трогайте, если не уверены&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&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>
  </channel>
</rss>

