LinuxCamp | DevOps
Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование. Админ (реклама): @XoDefender Чат: @linuxcamp_chat Менеджер: @Spiral_Yuri Биржа: https://telega.in/c/linuxcamp_tg РКН: https://clck.ru/3RWA3C
إظهار المزيد📈 نظرة تحليلية على قناة تيليجرام LinuxCamp | DevOps
تُعد قناة LinuxCamp | DevOps (@linuxcamp_tg) في القطاع اللغوي الروسية لاعباً نشطاً. يضم المجتمع حالياً 13 959 مشتركاً، محتلاً المرتبة 9 131 في فئة التكنولوجيات والتطبيقات والمرتبة 47 183 في منطقة روسيا.
📊 مؤشرات الجمهور والحراك
منذ تأسيسه في невідомо، حقق المشروع نمواً سريعاً وجمع 13 959 مشتركاً.
بحسب آخر البيانات بتاريخ 06 يوليو, 2026، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار -98، وفي آخر 24 ساعة بمقدار -3، مع بقاء الوصول العام مرتفعاً.
- حالة التحقق: غير موثّقة
- معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 27.85%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 10.66% من ردود الفعل نسبةً إلى إجمالي المشتركين.
- وصول المنشورات: يحصل كل منشور على متوسط 3 888 مشاهدة. وخلال اليوم الأول يجمع عادةً 1 489 مشاهدة.
- التفاعلات والاستجابة: يتفاعل الجمهور بانتظام؛ متوسط التفاعلات لكل منشور يبلغ 23.
- الاهتمامات الموضوعية: يركز المحتوى على مواضيع رئيسية مثل linuxcamp, ядро, linux, диск, docker.
📝 الوصف وسياسة المحتوى
يصف المؤلف القناة بأنها مساحة للتعبير عن الآراء الذاتية:
“Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование.
Админ (реклама): @XoDefender
Чат: @linuxcamp_chat
Менеджер: @Spiral_Yuri
Биржа: https://telega.in/c/linuxcamp_tg
РКН: https://clck.ru/3RWA3C”
بفضل وتيرة التحديث المرتفعة (أحدث البيانات بتاريخ 07 يوليو, 2026) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.
rgo "<паттерн>" [vim|nano|bat]Ты пишешь rgo, затем в задаёшь шаблон поиска, а через пробел — редактор, в котором хочешь открыть результат. Если второй аргумент опустить, по умолчанию откроется vim. Редактор можно заменить на nano, bat или почти любой другой: главное, чтобы он понимал, как открыть файл и перейти к нужной строке. Что происходит внутри: ripgrep (rg) мгновенно пробегает по всем файлам вашего проекта и выводит совпадения в формате "путь:строка:текст". fzf превращает этот однообразный вывод в интерактивный список, где можно перемещаться стрелками. Справа одновременно показывается фрагмент кода, а нужную строку подсвечивает bat. Когда нажимаешь Enter, выбранная строка распаршивается: скрипт узнаёт путь к файлу и номер строки. После этого файл открывается именно там, где нужно, в соответствии с тем редактором, который ты указал. Полный скрипт, который кладётся в конфиг шелла:
rgo () {
local editor=${2:-vim}
# ищем совпадения, показываем их в fzf с превью
local sel=$(
rg --line-number --no-heading --color=never "$1" \
| fzf \
--height 50% --border \
--delimiter ':' \
--preview 'bat --style=numbers --color=always --highlight-line {2} {1}' \
--preview-window 'right:60%' \
) || return
# вытаскиваем путь и номер строки
local file=${sel%%:*}
local rest=${sel#*:}
local line=${rest%%:*}
case "$editor" in
vim) vim +"$line" "$file" ;;
nano) nano +"$line" "$file" ;;
bat) bat --style=numbers --highlight-line "$line" "$file" ;;
*) "$editor" "$file" ;;
esac
}
export -f rgo
После того как вставишь этот блок в "~/.bashrc" или "~/.zshrc", перезапусти оболочку "exec $SHELL". Теперь rgo готова к работе.
Вывод:
В ситуациях, когда приходится много работать в терминале и редактировать файлы, такая команда заметно ускоряет работу. Одна короткая функция в конфиге превращает терминал в лёгкую и быструю среду разработки: поиск мгновенный, контекст сразу перед глазами, а файл открывается ровно на нужной строке.
Попробуй, поэкспериментируй с параметрами, и, если найдёшь новые трюки, обязательно расскажи о них!
LinuxCamp | #utils #bymaga
sudo apt install ripgrep
Молниеносный поиск слова во всём проекте:
rg TODOИщет во всех подпапках, игнорируя каталоги из .gitignore. Совпадения подсвечены, путь + номер строки показаны. Вывод только имени файла по регулярке:
rg -l '^import .*react' srcФлаг -l — показать только файлы, где найдено. Полезно, если нужно перебрать список в скрипте. Поиск и сразу количество совпадений:
rg -c "SELECT .* FROM" sql/-c выводит «файл: число», когда важно быстро понять, где больше всего вхождений. (Если надо искать без учёта регистра — добавь -i; нужно точное слово — -w.) Можете сравнить скорости поиска:
time grep -R "somePattern" .
time rg "somePattern"
Попробуйте поискать часто используемый паттерн и если до этого не пользовались rg, то очень приятно удивитесь)
Чтобы искать без учета .gitignore:
rg --no-ignore secret
Вывод:
rg — это «grep на турбинах»: ищет быстрее, выводит понятнее, уважает .gitignore. Поставь и попробуй rg error в своём большом репозитории — разница чувствуется сразу.
LinuxCamp | #utils
sudo apt install tldr
После установки один раз обнови кэш страниц:
tldr -uПримеры использования: Хочешь быстро вспомнить синтаксис tar?
tldr tarПример вывода команды - короткие, готовые к использованию шпоры с пояснениями. Создать архив, распаковать, посмотреть содержимое, использовать с gzip - всё по делу, без лишнего. Все работает офлайн - страницы лежат в кэше:
- [c]reate an archive and write it to a [f]ile: tar cf path/to/target.tar path/to/file1 path/to/file2 - E[x]tract a (compressed) archive [f]ile into the current directory: tar xvf path/to/source.tar.gz - Lis[t] the contents of a tar [f]ile: tar tvf path/to/source.tartldr - это именно шпаргалка: поставил, ввёл tldr <команда> и сразу видишь рабочие примеры без лишних километров текста. Утилита покрывает самые популярные команды, но для редких или новых CLI, каких-то редких кейсов естественно лучше все-таки использовать man или --help. LinuxCamp | #utils #microhelp
sudo apt install bat
В Debian/Ubuntu бинарник устанавливается как batcat. Чтобы использовать просто bat, можно добавить в "~/.bashrc" или "~/.zshrc":
alias bat="batcat"
Затем:
source ~/.bashrc
Обычный просмотр с цветами:
bat nginx.conf
Синтаксис подсвечен, строки пронумерованы, длинные файлы листаются как less.
Сравнить два файла:
bat --diff old.cfg new.cfg
Видишь изменения как в git diff, только без репозитория. Красивый вывод в Git:
git config --global core.pager "bat --paging=always --style=numbers"
Теперь git show и git diff автоматически открываются через bat с подсветкой. Если подсветка не нужна, добавь -p — plain.
Тонкая настройка (по желанию):
Создай конфиг и подправь тему/стиль:
bat --generate-config-file # путь покажет в выводеСписок доступных тем:
bat --list-themes | less
Вывод:
bat устанавливается за минуту, заменяет cat, добавляет цвета, номера строк и удобный просмотр diff. Просто, красиво и удобно.
LinuxCamp | #utils
apt install fzf
После установки — перезапусти терминал, чтобы подключились биндинги.
Быстрый поиск файлов
# ищем любой файл/папку рекурсивно от текущей точки fzfНачинаешь печатать — выдаётся автообновляемый список. Нажимаешь Enter → выбранный путь вставляется в командную строку (например, чтобы открыть vim $(fzf)). История команд без прокрутки:
Ctrl-Rfzf перехватывает стандартный Ctrl-R и показывает историю, которую можно фильтровать в реальном времени. Нашёл строку → Enter → команда подставилась, остаётся запустить. Минималистичная кастомизация:
export FZF_DEFAULT_OPTS="--height 40% --border --preview 'batcat --style=numbers --color=always {} | head -100'"
Что даёт:
--height 40% — окно fzf занимает 40% экрана
--border — рамка вокруг списка
--preview — предпросмотр файла справа, с подсветкой синтаксиса через bat
fzf — удобная штука, которая экономит время. Помогает быстро найти файл или команду прямо в терминале. Определенно стоит попробовать, возможно не захочется бросать 🙂
LinuxCamp | #utils
sudo apt install tmux
Запуск и «вечная» сессия:
tmux new -s work
Работай как обычно, можно запускать тяжелые команды, которые могут очень долго выполняться. Чтобы «сложить» терминал и вернуться к нему позже нажми "Ctrl-b" затем "d". Сессия остаётся жить на сервере в фоне. Можно смело закрыть вкладку SSH.
Повторное подключение:
Подключись снова хоть через неделю:
tmux attach -t work
Попадаешь в ту же сессию и видишь, чем закончилась сборка.
Совместная работа:
Оба пользователя SSH-атся на сервер, один запускает:
tmux new -s pair
Второй подключается тем же:
tmux attach -t pair
Теперь видно один и тот же терминал.
Вывод:
tmux - страховой полис от разрывов SSH и удобный рабочий стол внутри терминала: долгие сборки не падают, окна и сплиты сохраняются, а сессию можно делить с коллегами.
LinuxCamp | #utils
ssh -L 5432:localhost:5432 user@remote_host
Теперь на твоей локальной машине порт 5432 будет связан с портом 5432 на удалённой, и ты сможешь подключаться к базе данных, как будто она работает у тебя локально.
Пример 2: Реверсивный SSH — проброс внутрь NAT’а
Если у тебя домашний сервер, который находится за NAT и не имеет внешнего IP, можно настроить обратный (reverse) туннель через внешний VPS:
ssh -R 2222:localhost:22 user@your-vps.com
После этого с VPS-сервера ты сможешь подключиться обратно к домашнему серверу:
ssh -p 2222 user@localhost
Пример 3: Dynamic SOCKS proxy
Можно превратить SSH-сессию в полноценный SOCKS5-прокси-сервер, через который будут проходить запросы браузера, curl или других инструментов:
ssh -D 1080 user@remote_host
Указав в настройках прокси localhost:1080, ты получишь простой VPN без дополнительного ПО.
LinuxCamp | #utils
docker swarm init
После этого она становится менеджером. Если ты работаешь на одной машине — этого уже достаточно. Создай docker-compose.yml:
services:
api:
image: myapi
ports:
- "8000:8000"
deploy:
# запустит 3 экземпляра nginx
replicas: 3
restart_policy:
# перезапускает при сбоях
condition: on-failure
Swarm понимает почти тот же формат compose, но использует ключ "deploy:" для настройки. В обычном docker compose блок deploy игнорируется. Запусти сервис как "стек" (stack):
docker stack deploy -c docker-compose.yml mystack
Теперь Docker Swarm создаст сервис с именем mystack_web и запустит 3 реплики nginx.
А если нужно несколько машин?
На других серверах запусти:
docker swarm join --token <токен> <IP-менеджера>:2377Токен можно взять с главной машины через:
docker swarm join-token workerТеперь у тебя кластер с множеством нод, и Swarm будет распределять нагрузку автоматически. Вывод: Docker Swarm — это простой и мощный способ масштабирования контейнеров и управления кластерами. Он отлично подходит, когда нужно что-то чуть более надежное, чем просто docker-compose, но не хочется разбираться с Kubernetes. LinuxCamp | #devops #docker #bymaga
docker compose up --scale <сервис>=<кол-во>
Как это работает
Команда "--scale" запускает несколько контейнеров одного сервиса по конфигурации "docker-compose.yml":
docker compose up --scale api=3
Создаст 3 независимых контейнера api, которые используют один и тот же образ, переменные, порты и т.д.
Варианты использования
Пример docker-compose.yml:
version: "3.8"
services:
api:
image: myapp:latest
build: .
ports:
- "8000"
Важно: если nginx поднят в докере и в одной сети с апи, то порт не должен быть жёстко задан как "8000:8000", иначе только один контейнер сможет его занять. Используй:
ports:
- "8000"
А в nginx конфиге:
upstream backend {
server api:8000;
server api:8001;
server api:8002;
}
Обычно внутри Docker все контейнеры сервиса находятся под одним именем (например, api), и Docker DNS сам решает, кому из них отдать запрос (round-robin). Если же nginx вне докер сети, то в docker-compose.yml нужно прописать все порты:
ports:
- "8001:8000"
- "8002:8000"
- "8003:8000"
И затем настроить nginx конфиг так:
upstream backend {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Теперь Nginx равномерно распределяет входящие запросы между 3 контейнерами, которые слушают на разных портах.
Ограничения и подводные камни
1) Порты: нужно либо жестко прописывать порты для каждого инстанса, либо не прописывать порты жестко вообще при масштабировании;
2) Состояние контейнеров не сохраняется — это одинаковые инстансы, а не кластеры;
3) Не путай с кластеризацией — это просто локальное масштабирование;
Про полноценную кластеризацию через Docker Swarm будет в одном из следующих постов :)
LinuxCamp | #devops #docker
pip install locust
Пример теста:
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 3)
host = "http://localhost:8000" # Указан хост твоего апи
@task
def get_articles(self):
self.client.get("/api/articles")
@task
def post_form(self):
self.client.post("/api/submit", json={"name": "Locust"})
Запуск:
locust -f locustfile.py
Если ты назовёшь файл просто "locustfile.py" и запустишь команду в этой же директории, то можно вообще не указывать "-f", и Locust подхватит его автоматически.
Затем открой браузер: http://localhost:8089
Укажи количество юзеров и скорость (spawn rate) и начинай тест.
Что можно узнать:
- RPS — сколько запросов в секунду проходит
- Latency — время ответа
- Failures — ошибки, 5xx и timeouts
- Percentiles — насколько стабилен сервис под давлением
Зачем использовать Locust?
1) проверить, на сколько пользователей хватит твоей архитектуры;
2) увидеть, какой метод тормозит при росте нагрузки;
3) смоделировать реальные сценарии (авторизация, покупка, публикация);
4) подготовиться к маркетинговой акции, запуску продукта, или… DDOS атаке;
LinuxCamp | #bymagahttp://api:5000Docker сам разрешит имя api в IP-адрес другого контейнера в той же сети. Это особенно удобно при использовании docker-compose, где имена сервисов автоматически становятся доступными как DNS-имена. Создание сети: Создать сеть можно например командой:
docker network create mynetwork
Также можно указать сеть в одном docker-compose.yml:
services:
api:
image: my-api
networks:
- mynetwork
db:
image: postgres:17
networks:
- mynetwork
networks:
mynetwork:
В этом случае будет создана сеть и туда войдут контейнеры с апи и бд.
Подключение к уже существующей сети:
services:
frontend:
image: myfront
networks:
- mynetwork
networks:
mynetwork:
external: true
"external: true" говорит docker-compose, что сеть уже создана заранее (вручную или другим compose-файлом) и её не нужно пересоздавать.
Добавление и удаление вручную:
docker network connect mynetwork frontend
docker network disconnect mynetwork frontend
Контейнер продолжит работу, просто будет подключён или отключён от указанной сети.
Docker-сети позволяют организовать понятную, безопасную и изолированную инфраструктуру между сервисами. Даже при локальной разработке это помогает избавиться от хаоса с IP-адресами и ручными настройками.
LinuxCamp | #docker #devops #bymaga
متاح الآن! بحث تيليغرام 2025 — أهم رؤى العام 
