LINUX.ORG.RU

Избранные сообщения mord0d

leaf 1.21.0

 , mermaid, , ,

Группа Open Source

9-го мая состоялся выпуск 1.21.0 кроссплатформенной консольной утилиты leaf, предназначенной для просмотра файлов в формате Markdown.

Основные возможности:

  • подсветка синтаксиса;
  • поддержка математических формул LaTeX;
  • поддержка диаграмм Mermaid;
  • TUI c возможностью полного переопределения оформления;
  • полнотекстовый поиск текста в TUI;
  • 4 встроенные темы оформления с возможностью использования пользовательских тем;
  • интеграция с редактором;
  • слежение за изменениями редактируемого файла.

( читать дальше... )

>>> Подробности на GitHub (github.com)

dataman
()

Написал статью про архитектуру GPT

 , ,

Цель этой статьи — познакомить читателя с архитектурой Generative Pretrained Transformer, лежащей в основе современных языковых моделей.

Многие статьи, посвященные этой теме, страдают тем, что либо уходят в сплошную математику, но при этом недостаточно связно описывают общий вид архитектуры, либо описывают архитектуру слишком поверхностно и образно, что опять же не даёт возможности понять конструкцию как целое.

В этой статье я постараюсь дать достаточно подробное описание, что собой представляет «пайплайн» трансформера: как данные со входа проходят по этапам модели и приходят на выход. Я опишу упрощенную схему decoder-only трансформера, пропуская или сокращая те части, которые не принципиальны для понимания общего вида.

Перемещено hobbit из development

wandrien
()

~/.ssh/config подключение к одному хосту из разных мест.

 

Дано:

  • Ноутбук, с которым я бываю на работе и «где-то ещё»;
  • Рабочий сервер, «белого» IP нет;
  • ssh-туннель через мой домашний компьютер.

Требуется:

Настроить config, чтобы подключаться к одному хосту в зависимости от расположения. Не исключаю, что это невозможно. Но вдруг. :^)

Чуть подробнее с примерами:

Host work
	HostName my.home.net
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	Port 20000
	IdentitiesOnly yes

Host work_local
	HostName 192.168.1.200
	User user
	PubkeyAuthentication yes
	IdentityFile ~/.ssh/work
	IdentitiesOnly yes

Если я на работе, я подключаюсь так:

$ ssh work_local

Если я «где-то ещё»:

$ ssh work

Хочется, чтобы я мог в обоих случаях делать:

$ ssh work

Но если я на работе, то подключение по локальной сети (ssh user@192.168.1.200), а если «где-то ещё», то подключение через домашний компьютер (ssh -p20000 user@my.home.net).

Jullyfish
()

Создание эргономичных расположений клавиш на Linux-системах

 , , , ,

В этой статье мы рассмотрим:

  • почему вообще может потребоваться ремаппинг;
  • как ремаппят другие;
  • как раскладка реализована у меня;
  • как сделать собственную раскладку’.

Кроме обычного ремаппинга, мы также коснёмся темы создания слоёв, их индикации, а также рассмотрим создание аккордов (chords). Всё это на уровне системы.

( читать дальше... )

rhubear
()

Spec-kit - свободный тулкит для разработки, ориентированной на спеки (Spec Driven Development)

 

Те, кому интересен «вайб кодинг», можете про него забыть, потому что вот как на самом деле нужно использовать нейронки для разработки софта: spec-kit. Смысл spec driven development (SDD) в том, что проект начинается с проектирования спек файла. Это кардинально отличается от вайб кодинга, в котором на вход нейронки подаётся произвольный текст, а на выходе получается лапша, в которой чёрт ногу сломит, и она иногда правильно работает, но это не точно. В SDD на вход подаётся команда, аргументами которой может быть произвольный текст, а на выходе получается структурированный документ (спек) в терминах (non)functional requirements, acceptance criteria, edge cases и т.д. Из этого документа потом генерируется машинный код.

Я когда экспериментировал с кодинг асссистентами, то независимо пришёл к похожему процессу, а тут обнаружил, что команда спецов из гитхаба выпустила целый тулкит для SDD разработки. Особенность spec-kit в том, что спек верхнего уровня, так называемый «источник истины», полностью абстрактен от технической имплементации, составляется интерактивно взаимодействуя с нейронкой. Далее составляется план конкретной имплементации с выбором платформы, языков, фреймворков, моделей данных, хостингов и т.д. Всё с помощью команд нейронке. Далее нейронка разбивает план на фазы и задачи, определяет зависимости между ними и какие задачи могут выполняться параллельно (в моём случае, простой проект, 8 фаз и более 100 задач). Далее идёт имплементация каждой задачи.

Интерактивное взаимодействие с нейронкой необходимо только на стадии составления абстрактного спека верхнего уровня, далее всё можно доверить ии. Но я предпочитаю делать всё по шагам, на каждом шаге пристально изучаю результат, запрашиваю пояснения/исправления, делаю коммит, только затем перехожу к следующему шагу. Весь процесс под полным контролем. На выходе получается хорошо разбитый на модули код с каментами, доками и без технических багов. Нейрока проверяет код статическим аналайзером, линтит, прогоняет тесты (которые сама пишет), вносит необходимые правки где надо, имеет доступ к актуальным версиям доков через MCP сервер. Где нужно, я вмешиваюсь в процесс. И конечно, полностью контролирую.

Результат я выставлять на всеобщее обозрение пока не буду, т.к. это никому не нужная свистоперделка на расте, которая нужна только мне и только для эксперимента. Spec-kit использую вместе с kilocode плагином для vscode и kimi k2.5 (сейчас бесплатна), но его можно использовать с разными кодинг ассистентами и моделями, в том числе и свободными/локальными. Когда досконально разберусь, как эта вся кухня работает, запилю настоящий проект.

Пока что результаты превосходят личные ожидания. Сам процесс взаимодействия с нейронкой гораздо увлекательней, чем бесконечный онанизмцикл правки-компиляния-отладки. Не берусь утверждать, что технология полностью готова для продакшн, но кмк прогресс будет глубже идти в направлении SDD и это станет таки стандартом индустрии, под визги луддитов что у них всёпропало.

Тем, у кого нет острой аллергии на ИИ, настоятельно рекомендую попробовать запилить проект с помощью spec-kit или аналогов (openspec). Здесь делитесь впечатлениями.

P.S. Уточнение: всё описанное выше, хоть и сводит необходимость ручного ковыряния в машинном коде к минимуму, но не отменяет необходимости знания используемых технологий.

Перемещено hobbit из talks

yvv1
()

GCLI 2.10.0

 , , , ,

Группа Разработка

31 декабря, после почти трёх месяцев разработки, состоялся выпуск 2.10.0 консольной утилиты GCLI, предназначенной для взаимодействия с API нескольких популярных сервисов хостинга Git-проектов, и позволяет создавать, просматривать и взаимодействовать с проблемами, запросами на слияние, метками и комментариями к ним, проверять состояние CI и конвейеров, и многое другое.

И, в отличие от GitHub CLI, GCLI поддерживает не только API GitHub, но и API GitLab, Gitea, Forgejo и Bugzilla.

( читать дальше... )

>>> Подробности на GitHub (github.com)

dataman
()

Homescript — новый открытый движок для умного дома

 , homescript, , smarthome,

Группа Open Source

Вышла первая версия Homescript — движка для автоматизации умного дома на Lua

Проект ориентирован на простоту и гибкость: интеграция через MQTT, поддержка Zigbee (Zigbee2MQTT), Frigate и других устройств.

Ключевые возможности:

  • Автоматическое обнаружение устройств.
  • Наглядность. Основа всего — каталог со скриптами, создаваемый при поиске устройств.
  • Скрипты на Lua — легко даже для новичков.
  • Событийная логика: реакция на изменения в реальном времени.
  • Минимальное потребление ресурсов — работает на Raspberry Pi. И не просто работает, а потребляет очень скромную долю памяти и ресурсов CPU.

Homescript — открытая альтернатива сложным системам вроде Home Assistant, без привязки к облакам.

>>> Исходный код

>>> Homescript (homescript.dev)

kid
()

Правильная настройка well-known для matrix-synapse

 , ,

Настраиваю well-known для example.com, размещая сам matrix-synapse на subdomain.example.com. Суть проблемы: не могу написать кому-то на другом сервере, как и мне с другого сервера не могут написать и даже найти мой аккаунт. В свой аккаунт на сервере я могу войти. Порты федерации не закрыты.

Прилагаю конфиги:

example.com:

server {
    listen 80;
        listen [::]:80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name example.com;
   # root /var/www/matrix/html;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

    location /.well-known/matrix/server {
        add_header Access-Control-Allow-Origin *;
        default_type application/json;
       # try_files /var/www/matrix/html/.well-known/matrix/server =404;
        return 200 '{"m.server": "subdomain.example.com:8448"}';
    }

    location /.well-known/matrix/client {
        add_header Access-Control-Allow-Origin *;
        default_type application/json;
       # try_files /var/www/matrix/html/.well-known/matrix/client =404;
        return 200 '{"m.homeserver": {"base_url": "https://subdomain.example.com"}}';
    }
}

subdomain.example.com

server {
    listen 80;
        listen [::]:80;
    server_name subdomain.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    listen [::]:443 ssl;
    http2 on;
    server_name subdomain.example.com;

    ssl_certificate /etc/letsencrypt/live/subdomain.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/subdomain.example.com/privkey.pem;

    location ~ ^(/|/_matrix|/_synapse/client) {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $host;
        client_max_body_size 100M;
        proxy_http_version 1.1;
    }
}

server {
    listen 8448 ssl default_server;
    listen [::]:8448 ssl default_server;
    http2 on;
    server_name subdomain.example.com;

    ssl_certificate /etc/letsencrypt/live/subdomain.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/subdomain.example.com/privkey.pem;
    location / {
        proxy_pass http://localhost:8008;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

При запросе: curl -I https://example.com/.well-known/matrix/server:

HTTP/2 200
server: nginx
date: Wed, 10 Dec 2025 15:37:21 GMT
content-type: application/json
content-length: 39
access-control-allow-origin: *

Подскажите пожалуйста, что я делаю не правильно? Указывал и файлами в каталоге, но они при curl выдавали content-type: text/html а не json. Файлы без расширений, само собой были. Не то что бы это сильно страшно, я могу использовать и subdomain.example.com, но все же если возможность есть, то почему нет. По SRV записям, насколько я понял, их не все понимают и лучше указывать файлами well-known

Riniko
()

Linux и eSIM

 ,

Понадобилось тут завести модем с eSIM в онтопике. Использовал модем Qualcomm® Snapdragon™ X16 LTE Modem на планшете Microsoft Surface Go 2 на Debian GNU/Linux 13 (trixie).

( читать дальше... )

Перемещено hobbit из desktop

ann_lortemp2
()

Wine не запускает файлы

 , , ,

Есть bash-скрипт для создания префиксов и запуска игр. Раньше работал, сейчас выдаёт:

Application could not be started, or no application associated with the specifie
d file.
ShellExecuteEx failed: File not found.

Запуск:

'/path/game.sh' wine '/path/file.exe'

Одно время была такая же проблема, при создании префикса заменил winetricks sandbox на isolate_home, пофиксилось. Сейчас и isolate_home убрал.

Код скрипта:

#!/usr/bin/bash

export script="$(readlink -f "${BASH_SOURCE[0]}")"
export scriptdir="$(dirname "$script")"
cd "${scriptdir}"
source game.config

export WINE="${WINEPATH}/wine"
export WINEPREFIX="${scriptdir}/prefix"
export WINEDLLOVERRIDES="mscoree,mshtml=;winemenubuilder.exe=" 

if [[ "$1" == "prefix" ]]; then
	"${WINEPATH}/wineboot"
	~/Apps/wine/winetricks dxvk
	if [[ ! -d docs ]]; then
		if [[ -d "prefix/drive_c/users/al/" && ! -h "prefix/drive_c/users/al" ]]; then
		    mv prefix/drive_c/users/al/ docs
		fi
	    if [[ -d "prefix/drive_c/users/steamuser/" && ! -h "prefix/drive_c/users/steamuser" ]]; then
		    mv prefix/drive_c/users/steamuser/ docs
		fi
		ln -s ../../../docs prefix/drive_c/users/al
		ln -s ../../../docs prefix/drive_c/users/steamuser
	fi
	if [[ ! -d game ]]; then
	    mkdir game
		ln -s ../../game prefix/drive_c/game
	fi
elif [[ "$1" == "wt" ]]; then
	~/Apps/wine/winetricks "${@:2}"
elif [[ "$2" ]]; then
	"${WINEPATH}/wine" "${1}" "$2"
elif [[ "$1" ]]; then
	"${WINEPATH}/wine" "${1}"
else
	export WINEESYNC=1
	export WINEFSYNC=1
	export WINE_LARGE_ADDRESS_AWARE=1
	export XDG_CACHE_HOME="${scriptdir}"/cache
	export DXVK_LOG_PATH="${XDG_CACHE_HOME}"/dxvk
	export DXVK_STATE_CACHE_PATH="${XDG_CACHE_HOME}"/dxvk
	export DXVK_CONFIG_FILE="${scriptdir}"/dxvk.conf
	export DXVK_LOG_LEVEL=none
	export DXVK_HUD=fps
	export VKD3D_DEBUG=none
	export VKD3D_SHADER_DEBUG=none
	export WINE_FULLSCREEN_FSR=0

	openbox --replace &
	cd "${scriptdir}/${GAMEPATH}"
	"${WINEPATH}/wine" "${scriptdir}/${GAMEPATH}/${GAMEEXE}"
	"${WINEPATH}/wineserver" -w
	xrandr --output "DP-1" --mode "1920x1080" &>/dev/null
	xgamma -gamma 1.0 &>/dev/null
	xfwm4 --replace &
fi
sho_mi_kok
()

Настраиваем Asterisk на собственном VPS для голосовых/видео вызовов и текстовых сообщений

 , ,

Ниже — руководство + полный установочный скрипт для Debian 12, собирающий Asterisk 22.5.1 из исходников, включающий TLS + SRTP, 3 абонента (1001–1003), блокировку анонимов, короткие сообщения (SIP MESSAGE) для Linphone, и видеозвонки по H.264.

Скрипт автоматически учитывает NAT: если задать локальную сеть — пропишет external_* и local_net; если не задавать — считает, что сервер не за NAT.

( читать дальше... )

unclestephen
()

ssh jump сервер, ограничить хосты для пользователя

 ,

Задача простая: организовать для вендера канал до оборудования внутри сети, ssh -J вполне годится но есть 2 момента:
1. Ограничить вход на сам jump сервер через ssh (решил установкой оболочки /bin/false)
2. Ограничить число хостов на которые может «прагать» оперделенный пользователь (и чтобы других пользователей не затронуло)
Такое реально реализовать средствами ssh?

Kolins
()

Автономность в отпуске. Велосипед. KDE Neon.

 ,

Просто от всех подальше максимально. Но без электричества скучно и нужно.

delidov_george
()

Тихо и незаметно вышел tird v0.20.0 - инструмент для шифрования файлов и сокрытия зашифрованных данных

 , steganography, tird,

tird - инструмент для шифрования файлов, сфокусированный на минимизации метаданных и сокрытии зашифрованных данных. Предназначен для использования на современных персональных компьютерах. Написан на Python. Код открыт под 0BSD.

Для шифрования используется ChaCha20-IETF.

Для key stretching и выведения ключей используется Argon2id с 1 GiB памяти и с 4 проходами.

Для аутентификации используется keyed BLAKE2b-512.

Входными ключевыми материалами могут быть:

  • Пароли;
  • Ключевые файлы (в тоом числе блочные устройства и целые директории).

Зашифрованные данные имеют формат PURB (padded uniform random blob) - неотличимы от случайных, имеют рандомизировавнный размер.

Минимизация метаданных:

  • PURB формат - невозможно доказать наличие зашифрованных данных без ключей, неизвестны параметры и структура файла, скрыт настоящий размер полезной нагрузки.
  • Путь к выходному файлу не зависит от пути к входному, не имеет стандартного расширения, определяется пользователем.
  • Интерфейс в виде диалога с юзером, основанный на подсказках. CLI параметры не протекают в shell history.
  • Опционально: данные можно встроить в другой файл и устройство, сделав их недетектируемыми, а их наличие недоказуемым.

Построение скрытой ФС, управляемой пользователем:

Зашифрованные данные можно записывать в контейнеры, указав начальную позицию (отступ в байтах от начала контейнера). В качестве контейнеров могут выступать специально сгенерированные файлы, съемные устройства (пустые или полупустые диски), разделы с LUKS. Дело в том, что загловок FAT32/exFAT ФС расположен в начале раздела, а контент записываемых файлов пишется от начала в конец последовательно. Таким образом, на свежеотформатированной ФС можно сделать отступ от начала и записывать наши данные, запомним их расположение для последующего извлечения.

Далее: смотрите домашнюю страницу https://github.com/hakavlad/tird

Вопросы приветствуются.

hakavlad
()

SAS - задвоились диски.

 , , ,

Добрый день!

Господа, куда копать?

Есть мат. плата supermicro X11, в ней LSI контроллер и встроенный может какой в мат плату.

Сборщики поставили три SAS SSD и в системе оно задвоилось…

# lsblk |grep 3.5T
sdc                              8:32   0   3.5T  0 disk 
sdd                              8:48   0   3.5T  0 disk 
sde                              8:64   0   3.5T  0 disk 
sdf                              8:80   0   3.5T  0 disk 
sdg                              8:96   0   3.5T  0 disk 
sdh                              8:112  0   3.5T  0 disk
multipath -ll

Полагаю, что к одному диску может как то два пути положилось? Но контроллер по идее один и вывод пуст.

DALDON
()

Выделить access логи от одного ip в отдельный файл в nginx

 , ,

Есть nginx.x86_64 1:1.14.1-9.0.1.module+el8.0.0+5347+9282027e Основной конфиг по умолчанию. Для веб сервера заведен отдельный файл с конфигом в /etc/nginx/conf.d/ со следующим содержимым:

upstream websrv{ 
    ip_hash;
    server 127.0.0.1:8002;
}
server {.
    listen 80; server_name wserv.domain;
    # Перенаправление на HTTPS
    location / { return 301 https://$server_name$request_uri;
    }
}
server {
    listen 443 ssl; server_name wserv.domain;
    # Путь к сертификату и ключу
    ssl_certificate /etc/nginx/ssl/wserv.crt;
    ssl_certificate_key /etc/nginx/ssl/wserv.key;

    access_log /var/log/nginx/access.log main;
    error_log /var/log/nginx/error.log main;
...
}

С одного IP адреса идет большое количество запросов и хотелось бы access_log с него выделить в отдельный файл. В этом случае основной файл access_log был бы существенно меньше и было бы намного проще его анализировать.

В интернете находил варианты с geo и map, но при одном варианте лог файлы вообще не создаются, в других паралельно записываются в два файла все логи. Прошу подсказать как решить такую задачу.

Прмеры которые пробовал(ip адреса здесь только для примера): В файле /etc/nginx/nginx.conf в блок http

map $remote_addr $log_file {
    default "main";      # Для всех остальных IP
    10.10.10.17 "group1";  # 10.10.10.17 → access_group1.log
    10.10.10.18 "group1";  # 10.10.10.18 → access_group1.log
    10.10.10.19 "group2";  # 10.10.10.19 → access_group2.log
}

В файле /etc/nginx/conf.d/wsrv.conf в блок server

# Лог для остальных IP
access_log /var/log/nginx/access.log combined if=$log_file=main;

# Лог для 10.10.10.17 и 10.10.10.18
access_log /var/log/nginx/access_group1.log combined if=$log_file=group1;

# Лог для 10.10.10.19
access_log /var/log/nginx/access_group2.log combined if=$log_file=group2;
Sinclair
()

miniaudio 0.11.22

 , , miniaudio,

miniaudio 0.11.22
Группа Разработка

24 февраля, после более года разработки, состоялся выпуск 0.11.22 кроссплатформенной библиотеки захвата и воспроизведения звука miniaudio, написанной на языке C и распространяемой, как общественное достояние. miniaudio работает на всех основных настольных и мобильных платформах без сторонних зависимостей.

( читать дальше... )

>>> Список изменений на GitHub (github.com)

dataman
()

XDG Base Directory Specification, даже когда софт не хочет.

 

Довольно давно меня подзадолбала мусорка в домашней директории, постепенно получилось заставить почти весь софт гадить в строго определенное место, а именно в .config, .cache и .local

Для особо одаренных (Skype, Dropbox) пришлось слегка поизвращаться, если для Skype достаточно было изменить параметр запуска на

skype --dbpath=$HOME/.local/share/skype
, то для Dropbox уже пришлось городить костыль в виде

HOME=$HOME/.local/share/dropbox /usr/bin/dropbox start -i 2>&1

Остальной софт относительно разумен, где через alias, где через export, удалось обяснить, куда складировать свое добро. Ниже листинг .bashrc и .profile, авось кому пригодится.

( Листинг )

gwinn
()

Уведомление о подключении по sftp/scp

 , , ,

Господа, всем доброго настроения.
Не пойму как решить задачу. Гугление, к сожалению, не поспособствовало, за сим прошу помощи у коллективного сознательного.

Имеется скрипт-уведомлялка, который говорит Telegram-боту отправить сообщение определённому абоненту при авторизации на сервере по SSH.
Лежит скрипт по пути /etc/profile.d/script.sh, выглядит следующим образом:

#!/bin/bash
BOT_TOKEN=token
CHAT_ID=id
USER_IP=$(echo $SSH_CLIENT | awk '{ print $1}')
BOT_MESSAGE="🔐 $(hostname): $(whoami) is authorized from $USER_IP"
curl -X POST -d "text=$BOT_MESSAGE" 'https://api.telegram.org/bot'$BOT_TOKEN'/sendMessage?chat_id='$CHAT_ID'' &>/dev/null

Проблема заключается в том, что работает он только при подключении по, непосредственно, интерактивному SSH. Если подключиться через условный WinSCP - уведомления не будет, как и если просто скопировать файл на сервер через scp.

Интуиция подсказывает, что заковыка связана с понятиями «интерактивности/неинтерактивности» устанавливаемой сессии, и, соответственно, в местоположении скрипта, но вот знаний, чтобы понять, как описанную проблему исправить – не хватает.

Подскажите, пожалуйста, что именно нужно сделать, чтобы получать желаемое уведомление при любого типа подключении на условный «22 порт», вне зависимости от того, было ли это SSH или SFTP?

takamushi
()

обработка запросов с одного IP, даже если один в ожидание ответа

 , , , ,

Не могу сделать балансировку если запрос приходить в одного IP-адреса. Проблема такая: заходить первый запрос, но отработка этого запроса занимает 30 секунд, из-за API. nginx не должен закрыть этот запрос, он должен ждать пока сервер не ответить. в это время заходить еще по очереди 10 запросов с того же IP-адреса, но их обработка не занимает больше 0,5 секунды. но из-за того что там один запрос все еще обрабатывается, остальные 10 запросов ждет этого.

Я подняла nginx с двумя серверами. Хочу сделать так, если первый сервер все еще обрабатывает запрос, остальные запросы были всегда направлены на второй. Когда первый сервер закончить обработку и вернет ответ, этот сервер станет доступным и можно будет туда отправлять запросы. Вроде сделала, когда с двух IP-адрес приходить запросы, тогда вроде все срабатывает. Но когда с одного IP-адреса приходить, тогда застывает, пока не обработает запрос с задержкой. Прошу помочь!

Это конфиг с nginx:

events {
    worker_connections 1024;
}
http {    
    client_max_body_size 100M;
    client_body_buffer_size 100M;
    # limit_conn_zone $binary_remote_addr zone=halyk_bank_identification:10m;

    include       mime.types;
    default_type  application/octet-stream;

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for" '
		              ' $request_length $upstream_addr $upstream_response_time';

    access_log /etc/nginx/access.log main;
    error_log /etc/nginx/error.log debug;

    upstream identification {
        least_conn;
        
        server identification_actions-1:5017 max_fails=1 fail_timeout=10s;
        server identification_actions-2:5017 max_fails=1 fail_timeout=10s;
    }

    server {
        listen 80;
        server_name localhost;

        access_log /etc/nginx/access.log main;

        location /webhook {

            proxy_connect_timeout 3s;
            proxy_read_timeout 10s;

            proxy_pass http://identification;
            
            proxy_set_header Content-Type application/json;

            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Content-Length $content_length;
            proxy_set_header X-Server-Name $host;

            proxy_pass_request_body on;
            access_log /etc/nginx/webhook_access.log main;
        }

        location / {
            return 404;
        }
    }
}

Zhako2506
()