🛠
Проекты, инструменты, подходы и практики для инженеров, админов и энтузиастов.
🧩 Темы
🧰 Подборки сервисов и утилит
⚙️ Proxmox, Docker, Linux
🤖 AI для кодинга и DevOps
💼 Реальные продукты от идеи до пилота
📚 Навигация
#linux
#linuxthursday
#terminal
#api
#tools
#opensource
#selfhosted
#ai
#n8n
#vibecoding
#db
#vpn
#backup
#security
#docker
#proxmox
#шпаргалка
#полезное
#проекты
#продукт
🚀
🌏 Сайт |💙 ВК | 💬 TG | 📲 МАКС
DeSoft.ru — авторский взгляд на технологии, разработку и автоматизацию.Проекты, инструменты, подходы и практики для инженеров, админов и энтузиастов.
🧩 Темы
🧰 Подборки сервисов и утилит
⚙️ Proxmox, Docker, Linux
🤖 AI для кодинга и DevOps
📚 Навигация
#linux
#linuxthursday
#terminal
#api
#tools
#opensource
#selfhosted
#ai
#n8n
#vibecoding
#db
#vpn
#backup
#security
#docker
#proxmox
#шпаргалка
#полезное
#проекты
#продукт
🚀
DeSoft.ru — технологии, которые реально работают.🌏 Сайт |
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1👏1
Для работы в терминале уже долгое время использую мультиплексор
📌 Установка (Debian / Ubuntu)
Установка на другие системы - tmux-wiki-installing
📌 Шпаргалка по основным командам и горячим клавишам
🔹Функциональность
🔹Список доступных плагинов - tmux-plugins-list
#linux #terminal #tmux #шпаргалка
Tmux. Ставлю его практически на всех серверах, с которыми приходится сталкиваться. Основная причина - это конечно продолжение работы сессий даже при отключении / разрыве ssh соединения - переподключились, вернулись в сессию, а все запущенные процессы как работали, так и работают. Сам инструмент во многом удобнее аналогов (например, Screen) и оброс обширной функциональностью за время своего существования.📌 Установка (Debian / Ubuntu)
sudo apt install tmux
Установка на другие системы - tmux-wiki-installing
📌 Шпаргалка по основным командам и горячим клавишам
# создание новой сессии с именем по умолчанию (порядковый номер)
tmux
# создание новой сессии с именем mysession
tmux new -s mysession
# подключиться к последней созданной сессии
tmux attach
# подключиться к сессии mysession
tmux attach -t mysession
# отключиться от сессии
tmux detach
# список сессий
tmux ls
# завершить сессию mysession
tmux kill-session -t mysession
# завершить все сессии
tmux kill-server
# посмотреть полный список команд
tmux list-commands
# префикс
Ctrl + b | префикс, с которого начинаются все команды
# сессии
Ctrl + b d | отключиться от сессии
Ctrl + b s | выбрать сессию
# окна
Ctrl + b c | создать новое окно
Ctrl + b w | посмотреть список окон
Ctrl + b n | переключиться на след окно
Ctrl + b p | переключиться на пред окно
Ctrl + b 0..9 | переключиться на окно по номеру
Ctrl + b x | закрыть окно (требуется подтверждение)
# панели
Ctrl + b " | разделить окно на две панели горизонтально
Ctrl + b % | разделить окно на две панели вертикально
Ctrl + b Arrow key | переключиться между панелями
Ctrl + b + Arrow key | изменить размеры панели
🔹Функциональность
Tmux расширяется с помощью плагинов. Для установки плагинов можно (и рекомендуется) использовать Tmux Plugin Manager.🔹Список доступных плагинов - tmux-plugins-list
#linux #terminal #tmux #шпаргалка
👍3
На одном из проектов для согласования работы нескольких сервисов необходимо было обмениваться сообщениями, подписанными алгоритмом ГОСТ 34.10-2012.
☑️ Формирование сообщений и их подпись производим на сервере на базе Debian 11.
☑️ Для подписи сообщений используем openssl с поддержкой алгоритмов ГОСТ.
➡️ Установка
➡️ Настройка
Ищем установленную ранее библиотеку поддержки ГОСТ
Идем в конфигурационный файл openssl (
➡️ Проверка
Проверяем поддержку установленных алгоритмов
Проверяем подключенный движок gost
Подписываем документ с использованием закрытого ключа
#linux #openssl #gost
☑️ Формирование сообщений и их подпись производим на сервере на базе Debian 11.
☑️ Для подписи сообщений используем openssl с поддержкой алгоритмов ГОСТ.
➡️ Установка
# ставим / обновляем криптографическую библиотеку
sudo apt install openssl
# добавляем поддержку алгоритмов шифрования ГОСТ
sudo apt install libengine-gost-openssl1.1
➡️ Настройка
Ищем установленную ранее библиотеку поддержки ГОСТ
# find / -name gost.so
/usr/lib/x86_64-linux-gnu/engines-1.1/gost.so
Идем в конфигурационный файл openssl (
/etc/ssl/openssl.cnf)# в начале файла находим и меняем конфигурацию,
# которую будет использовать openssl
openssl_conf = openssl_def
# в конец файла добавляем следующие секции
# (в dynamic_path указываем путь до найденной ранее библиотеки gost.so)
[openssl_def]
engines = engine_section
[engine_section]
gost = gost_section
[gost_section]
engine_id = gost
dynamic_path = /usr/lib/x86_64-linux-gnu/engines-1.1/gost.so
default_algorithms = ALL
CRYPT_PARAMS = id-Gost28147-89-CryptoPro-A-ParamSet
➡️ Проверка
Проверяем поддержку установленных алгоритмов
# openssl ciphers | tr ':' '\n' | grep GOST
GOST2012-GOST8912-GOST8912
GOST2001-GOST89-GOST89
Проверяем подключенный движок gost
# openssl engine gost -c -t
(gost) Reference implementation of GOST engine
[gost89, gost89-cnt, gost89-cnt-12, gost89-cbc, grasshopper-ecb, grasshopper-cbc, grasshopper-cfb, grasshopper-ofb, grasshopper-ctr, md_gost94, gost-mac, md_gost12_256, md_gost12_512, gost-mac-12, gost2001, gost-mac, gost2012_256, gost2012_512, gost-mac-12]
[ available ]
Подписываем документ с использованием закрытого ключа
key.pemopenssl dgst -sign key.pem -engine gost test.txt | base64 | tr -d "\n"
#linux #openssl #gost
👍2
В прошлом году для домашнего использования обзавелся
🔷 Для медиасервера поставил
⚠️ Утром следующего дня открываю веб-интерфейс
⁉️ Казалось бы, далее следуют долгие изыскания на тему несанкционированного доступа к
‼️ Помониторив форумы,
◽️https://github.com/qbittorrent/qBittorrent/issues/16529
◽️https://github.com/transmission/transmission/issues/2653
◽️https://community.synology.com/enu/forum/1/post/151239
◽️https://forum.qbittorrent.org/viewtopic.php?t=9643
🔷 Однозначного ответа, как эксплуатируется данная уязвимость на тот момент не нашел, но ряд мер в настройках
✅ Чистим запуски внешних программ
✅ Меняем пароль доступа
✅ Меняем порт веб-интерфейса
✅ Отключаем пропуск аутентификации для localhost и списка разрешенных сетей
✅ Отключаем использование проброса портов через маршрутизатор
#nas #tos #qbittorrent
NAS от TerraMaster, модель F4-423 на 4 диска. Задачи для него типовые - медиасервер, файлообменник, бэкапы, с чем заявленные характеристики справляются без каких-либо проблем. Смотрел разные обзоры, тесты, эксперименты с установкой операционных систем, отличных от родной ToS (например, XPEnology), но без высокой нагрузки, без специфических задач нужды особой в таких манипуляциях не испытал за время использования. Не буду долго расписывать особенности самого устройства, операционной системы и прочее, т.к. суть поста не в этом.🔷 Для медиасервера поставил
Plex и qBittorrent клиента из магазина приложений. Выполнил базовые настройки, проверил, что все функционирует и, как полагается, отложил дальнейшее изучение сего устройства на следующий день.⚠️ Утром следующего дня открываю веб-интерфейс
qBittorrent и обнаруживаю, что там отработали несколько торрентов с неизвестными мне иероглифами в названиях, и благополучно раздаются. Полез в настройки клиента - мои вчерашние установки сброшены, а также прописан скрипт, автоматически запускаемый по окончании загрузки торрента. Первая мысль - кто-то уже успел побывать в приложении за прошедшую ночь.⁉️ Казалось бы, далее следуют долгие изыскания на тему несанкционированного доступа к
NAS или к приложению, однако, далеко ходить не пришлось. В логах qBittorrent зарегистрировались десятки успешных входов с внешних адресов без какой-либо попытки перебора пароля. Пароль от WebUI qBittorrent я пустым не оставлял, и по умолчанию тоже не оставлял, да и NAS крутится только в локальной сети.‼️ Помониторив форумы,
issues в github репе qBittorrent, нашел занятную информацию о некой дыре в безопасности, которая затронула не только qBittorrent, но и другие популярные клиенты, например, Transmission.◽️https://github.com/qbittorrent/qBittorrent/issues/16529
◽️https://github.com/transmission/transmission/issues/2653
◽️https://community.synology.com/enu/forum/1/post/151239
◽️https://forum.qbittorrent.org/viewtopic.php?t=9643
🔷 Однозначного ответа, как эксплуатируется данная уязвимость на тот момент не нашел, но ряд мер в настройках
WebUI помог закрыть любые попытки доступа извне.✅ Чистим запуски внешних программ
✅ Меняем пароль доступа
✅ Меняем порт веб-интерфейса
✅ Отключаем пропуск аутентификации для localhost и списка разрешенных сетей
✅ Отключаем использование проброса портов через маршрутизатор
#nas #tos #qbittorrent
👍2
Существует множество виртуальных досок для рисования схем, макетов, прототипов и т.д. Одна из них -
✅ Устанавливаем расширение для VS Code
✅ Создаем файл с расширением
📌 Важной особенностью является наличие публичной библиотеки визуальных элементов для
📌 Стоит отметить простоту и скорость, с которой можно тут же, среди рабочего пространства, добавить нарисованную от руки схему в виде изображения или привязать ее к документу с описанием в
#vscode #tools #opensource
Excalidraw с открытым исходным кодом. Сам по себе инструмент не обладает какими-то особыми конкурентными преимуществами по сравнению с аналогами, однако, для тех, кто работает в VS Code, есть одноименное расширение, предоставляющее возможность быстрого и удобного рисования прямо в редакторе.✅ Устанавливаем расширение для VS Code
✅ Создаем файл с расширением
.excalidraw (.excalidraw.json, .excalidraw.svg, .excalidraw.png) и сразу попадаем в рабочую область для рисования.📌 Важной особенностью является наличие публичной библиотеки визуальных элементов для
Excalidraw, которые импортируются в локальную базу ресурсов, и становятся доступными для вставки в область рисования.📌 Стоит отметить простоту и скорость, с которой можно тут же, среди рабочего пространства, добавить нарисованную от руки схему в виде изображения или привязать ее к документу с описанием в
markdown разметке (например, так  ). Редактируем схему, в md все также моментально подхватывается.#vscode #tools #opensource
Visualstudio
Excalidraw - Visual Studio Marketplace
Extension for Visual Studio Code - Draw schemas in VS Code using Excalidraw
👍3
Для объединения распределенных устройств в одну виртуальную сеть, будь то организация рабочего пространства связыванием нескольких удаленных машин или целых подразделений компании, или обычный доступ к домашним ресурсам извне как к локальным, существует небезызвестное решение с открытым исходным кодом - ZeroTier.
🔹 В основе построения подобной сети лежит центральный сервер - сетевой контроллер, к которому подключаются связываемые узлы с помощью специального сервиса -
🔹 Кратко опишу общий подход, детальную же инструкцию по установке и настройке можно посмотреть, например, здесь.
Контроллер
▶️ Разработчик
▶️ Разворачиваем контроллер на своем сервере самостоятельно согласно документации и поднимаем веб-интерфейс.
▶️ Приобретаем недорогой
Подключение
✅ В веб интерфейсе контроллера создаем новую частную сеть и настраиваем диапазон адресов. Получаем идентификатор сети.
✅ На пользовательские машины устанавливаем сервис
✅ Возвращаемся в веб-интерфейс контроллера, подтверждаем подключенные узлы и назначаем им
✅ Проверяем успешность установленного соединения между устройствами.
❗️Узким местом с точки зрения безопасности здесь конечно является контроллер, выступающий в роли центра сертификации организуемых виртуальных сетей. Именно поэтому стоит уделить особое внимание месту размещения, а также защите сервера сетевого контроллера от компрометации.
#vpn #zerotier
🔹 В основе построения подобной сети лежит центральный сервер - сетевой контроллер, к которому подключаются связываемые узлы с помощью специального сервиса -
ZeroTier One. Отметим здесь поддержку множества платформ и устройств для подключаемых клиентов.🔹 Кратко опишу общий подход, детальную же инструкцию по установке и настройке можно посмотреть, например, здесь.
Контроллер
▶️ Разработчик
ZeroTier предоставляет ограниченный бесплатный доступ к своему сетевому контроллеру (для экспериментов подойдет, но не более, все-таки сервис то зарубежный).▶️ Разворачиваем контроллер на своем сервере самостоятельно согласно документации и поднимаем веб-интерфейс.
▶️ Приобретаем недорогой
VPS с преднастроенным образом ZeroTier, в состав которого входит и контроллер и веб-интерфейс к нему (нашел такой только у RuVDS, может еще у кого появился за последнее время).Подключение
✅ В веб интерфейсе контроллера создаем новую частную сеть и настраиваем диапазон адресов. Получаем идентификатор сети.
✅ На пользовательские машины устанавливаем сервис
ZeroTier One и присоединяемся к сети по полученному ранее идентификатору.✅ Возвращаемся в веб-интерфейс контроллера, подтверждаем подключенные узлы и назначаем им
ip адреса в нашей виртуальной сети.✅ Проверяем успешность установленного соединения между устройствами.
❗️Узким местом с точки зрения безопасности здесь конечно является контроллер, выступающий в роли центра сертификации организуемых виртуальных сетей. Именно поэтому стоит уделить особое внимание месту размещения, а также защите сервера сетевого контроллера от компрометации.
#vpn #zerotier
ZeroTier
Home
Connect everything, from cloud to IoT, with the next-generation global network solution. Simple, resilient, and secure networking in minutes.
👍2
В продолжение темы про Tmux рассмотрим несколько полезных плагинов.
📌 Для начала установим менеджер плагинов
▫️ В конфигурационный файл
Отметим, что в списке плагинов помимо самого менеджера присутствует плагин tmux-sensible - ряд базовых улучшений на основе опыта работы с
▫️ Подхватим изменения
📌 Плагин для сохранения / восстановления сессий
Как известно, настроенное окружение в
▫️ Добавляем плагин в
▫️ Сохраняем изменения. Для установки и включения плагина выполняем команду
❗️ Как применять
▫️ Подключаемся или создаем новую сессию
▫️ Настраиваем панели, окна, запускаем все требуемые приложения и так далее.
▫️ Комбинацией клавиш
▫️ Уничтожаем сессию или перезагружаемся
▫️ Открываем
▫️ Восстанавливаем сессию комбинацией клавиш
‼️ Интересный момент. В одном из окон при сохранении сессии у меня был открыт
Добавляем в
Таким образом, при восстановлении сессии через
#linux #terminal #tmux
📌 Для начала установим менеджер плагинов
Tmux Plugin Managergit clone https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm
▫️ В конфигурационный файл
tmux (~/.tmux.conf) добавим# список плагинов
set -g @plugin 'tmux-plugins/tpm'
set -g @plugin 'tmux-plugins/tmux-sensible'
# инициализация Tmux Plugin Manager (оставляем внизу конфигурационного файла)
run '~/.tmux/plugins/tpm/tpm'
Отметим, что в списке плагинов помимо самого менеджера присутствует плагин tmux-sensible - ряд базовых улучшений на основе опыта работы с
tmux - можно использовать на свое усмотрение.▫️ Подхватим изменения
tmux source ~/.tmux.conf
📌 Плагин для сохранения / восстановления сессий
Tmux ResurrectКак известно, настроенное окружение в
Tmux слетает после перезагрузки сервера. Заходишь, заново все перенастраиваешь и так до следующей перезагрузки. Для решения этой проблемы существует плагин Tmux Resurrect, благодаря которому можно сохранить все настроенное окружение Tmux сессий и восстановить в одно сочетаний клавиш.▫️ Добавляем плагин в
~/tmux.confset -g @plugin 'tmux-plugins/tmux-resurrect'
▫️ Сохраняем изменения. Для установки и включения плагина выполняем команду
Ctrl+b I - tmux plugin manager установит плагин и обновит окружение tmux автоматически. Плагин готов к применению.❗️ Как применять
▫️ Подключаемся или создаем новую сессию
tmux new -s session1
▫️ Настраиваем панели, окна, запускаем все требуемые приложения и так далее.
▫️ Комбинацией клавиш
Ctrl + b Ctrl + s сохраняем сессию (в status bar tmux выпадет уведомление об успешном сохранении сессии)▫️ Уничтожаем сессию или перезагружаемся
tmux kill-session -t session1
▫️ Открываем
tmux заново▫️ Восстанавливаем сессию комбинацией клавиш
Ctrl + b Ctrl + r‼️ Интересный момент. В одном из окон при сохранении сессии у меня был открыт
midnight commander. После восстановления окно с ним оказалось пустым, процесс не восстановился, хотя все остальные окна и процессы успешно вернулись в прежнее состояние. Для таких случаев существует возможность задать отдельную конфигурацию для конкретного процесса.Добавляем в
~/tmux.conf следующее правилоset -g @resurrect-processes 'mc'
Таким образом, при восстановлении сессии через
tmux-resurrect mc будет перезапущен (правда вкладки в mc не восстановятся, но уже что-то)#linux #terminal #tmux
Telegram
DeSoft.ru
Для работы в терминале уже долгое время использую мультиплексор Tmux. Ставлю его практически на всех серверах, с которыми приходится сталкиваться. Основная причина - это конечно продолжение работы сессий даже при отключении / разрыве ssh соединения - переподключились…
👍4
Собрал в одну шпаргалку информацию по работе с дисками в
🔹 Информация о подключенных дисках, разделах, точках монтирования
🔹 Создание раздела на диске
В интерактивном режиме выполняем команды
🔹 Форматирование раздела
🔹 Монтирование раздела
🔹 Изменение размера раздела
🔹 Изменение размера раздела LVM
#linux #drive #partitions #volumes #шпаргалка
Linux на примере Ubuntu / Debian. Заметка будет пополняется, так что ссылку на нее на сайте прикладываю.🔹 Информация о подключенных дисках, разделах, точках монтирования
lsblk -f
fdisk -l
parted -l
🔹 Создание раздела на диске
/dev/sdbsudo fdisk /dev/sdb
В интерактивном режиме выполняем команды
fdisk# новый раздел
Command (m for help): n
# тип раздела
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p
# номер раздела
Partition number (1-4, default 1): 1
# начало раздела
First sector (2048-31457279, default 2048):
# конец раздела
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-31457279, default 31457279):
Created a new partition 1 of type 'Linux' and of size 15 GiB.
# применение изменений
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
🔹 Форматирование раздела
# ext4
sudo mkfs -t ext4 /dev/sdb1
# fat32
sudo mkfs -t vfat /dev/sdb1
# ntfs
sudo mkfs -t ntfs /dev/sdb1
🔹 Монтирование раздела
# создаем точку монтирования
sudo mkdir /mnt/newdisk
# монтируем
sudo mount -t auto /dev/sdb1 /mnt/newdisk
# выдаем права на доступ для пользователей
sudo chown -R :users /mnt/newdisk
sudo chmod -R g+rw /mnt/newdisk
🔹 Изменение размера раздела
# редактор разметки и разделов дисков
parted /dev/sdb
# смотрим таблицу разделов
# изменяем размер раздела 1
resizepart 1
# занимаем всю доступную область памяти
End? [120.1GB]? 100%
🔹 Изменение размера раздела LVM
# проверяем доступное место в группе томов
vgdisplay
# список логических разделов
lvdisplay
# расширяем логический раздел, занимая всю доступную область памяти в группе
lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
# расширяем фс на расширенную ранее область логического раздела
resize2fs /dev/mapper/ubuntu–vg-ubuntu–lv
#linux #drive #partitions #volumes #шпаргалка
DeSoft.ru
Управление дисками в Linux на примере Ubuntu / Debian
Шпаргалка по работе с дисками, разделами, файловыми системами в Linux. [Пополняется]
👍2
Расскажу про open-source инструмент для управления проектами Planka, который позиционируется как бесплатная альтернатива
Система имеет простой и легкий интерфейс, неперегруженный различными фичами, что можно отнести как к плюсам из-за скорости работы, так и к минусам из-за местами скудной функциональности.
✅ Проект активно развивается и за последний год обзавелся рядом существенных улучшений, которые приблизили его к более зрелым альтернативам. Приведу некоторые из них:
▫️ Уведомления в
▫️ Поддержка
▫️ Также развитие получил проект по API;
▫️ На начальной стадии, но все-таки ведется работа над мобильным приложением;
▫️ Локализация на русский язык в недавних версиях стала значительно приятнее в сравнении с тем, что было еще пол года назад.
❌ Из минусов отмечу:
▫️ Отсутствие шаблонов и повторяющихся задач. Много рутины по выполнению однотипных процессов во время манипуляций с проектами, досками и карточками.
▫️ Не поддерживается какая-либо аналитика (отчеты, диаграммы, сводные данные по трекингу времени и т.д.).
❇️ Демонстрационная версия доступна здесь.
❇️ Если хотите самостоятельно настроить и запустить
❇️ В репозиторий на gitverse выложил пример размещения сервиса за reverse-proxy
В целом,
#management #opensource #selfhosted
Trello.Система имеет простой и легкий интерфейс, неперегруженный различными фичами, что можно отнести как к плюсам из-за скорости работы, так и к минусам из-за местами скудной функциональности.
✅ Проект активно развивается и за последний год обзавелся рядом существенных улучшений, которые приблизили его к более зрелым альтернативам. Приведу некоторые из них:
▫️ Уведомления в
Telegram и Slack;▫️ Поддержка
OpenID Connect;▫️ Также развитие получил проект по API;
▫️ На начальной стадии, но все-таки ведется работа над мобильным приложением;
▫️ Локализация на русский язык в недавних версиях стала значительно приятнее в сравнении с тем, что было еще пол года назад.
❌ Из минусов отмечу:
▫️ Отсутствие шаблонов и повторяющихся задач. Много рутины по выполнению однотипных процессов во время манипуляций с проектами, досками и карточками.
▫️ Не поддерживается какая-либо аналитика (отчеты, диаграммы, сводные данные по трекингу времени и т.д.).
❇️ Демонстрационная версия доступна здесь.
❇️ Если хотите самостоятельно настроить и запустить
Planka на своем сервере, проще всего это сделать с помощью docker. Инструкция из официальной документации.❇️ В репозиторий на gitverse выложил пример размещения сервиса за reverse-proxy
Traefik, благодаря чему можно сразу привязать свой домен, получить сертификат и ходить через https.В целом,
Planka, даже не смотря на ограничения функциональности, подкупает своей простотой и отлично подойдет для небольших команд с базовыми потребностями в управлении задачами.#management #opensource #selfhosted
👍2
Для автоматизации задач сбора информации из каналов, групп, чатов в
Для удобства исходники выложены в репозиторий на gitverse.
📌 Задача
Выгрузить все изображения (документы, аудиофайловы) из открытого Telegram-канала в автоматическом режиме.
📌 Рабочая станция
Виртуальная машина с Debian 12 на борту.
📌 Подготовка
🔹 Для начала получим параметры для доступа к
* Идем в кабинет и авторизовываемся.
* На странице API development tools создаем новое приложение и забираем
🔹 Устанавливаем необходимые для работы пакеты
🔹 Скачиваем демонстрационный проект с
🔹 Создаем виртуальное окружение и подгружаем зависимости
🔹 В скрипте
📌 Использование
🔹 При первом запуске для получения доступа к
В корне создастся файл с расширением
🔹 В качестве примера добавлена обработка трех видов контента - документы, фото и музыка, что соответствует значениям
🔹 Запускаем
#telegram #python #telethon
Telegram, помимо официального API, существуют различного рода и направленности, как платные так и бесплатные, инструменты и библиотеки. В данном цикле заметок рассмотрим примеры работы с популярной Python библиотекой Telethon в контексте извлечения полезных данных из публичных просторов мессенджера.Для удобства исходники выложены в репозиторий на gitverse.
📌 Задача
Выгрузить все изображения (документы, аудиофайловы) из открытого Telegram-канала в автоматическом режиме.
📌 Рабочая станция
Виртуальная машина с Debian 12 на борту.
📌 Подготовка
🔹 Для начала получим параметры для доступа к
API Telegram* Идем в кабинет и авторизовываемся.
* На странице API development tools создаем новое приложение и забираем
App api_id и App api_hash.🔹 Устанавливаем необходимые для работы пакеты
sudo apt install git python3 python3-pip python3-vevn -y
🔹 Скачиваем демонстрационный проект с
gitversegit clone https://gitverse.ru/desoft/telethoner.git
🔹 Создаем виртуальное окружение и подгружаем зависимости
cd telethoner
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
🔹 В скрипте
downloader.py прописываем полученные ранее App api_id и App api_hash в константы API_ID и API_HASH соответственно.📌 Использование
🔹 При первом запуске для получения доступа к
API Telegram необходимо будет войти под своей учетной записью в интерактивном режиме (вводим номер телефона, получаем и заполняем код).Please enter your phone (or bot token): +7...............
Please enter the code you received: 00000
Signed in successfully as <USER>;
В корне создастся файл с расширением
.session, который будет использоваться для автоматической аутентификации при последующих запусках.🔹 В качестве примера добавлена обработка трех видов контента - документы, фото и музыка, что соответствует значениям
document, photo, music параметра content_type.🔹 Запускаем
# скачиваем 10 прикрепленных изображений к последним постам в Telegram-канале Хабра
python3 downloader.py --channel_url=https://t.me/habr_com --content_type=photo --path_data_folder=myfolder --limit=10
#telegram #python #telethon
👍2