LinuxCamp | DevOps
Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование. Админ (реклама): @XoDefender Чат: @linuxcamp_chat Менеджер: @Spiral_Yuri Биржа: https://telega.in/c/linuxcamp_tg РКН: https://clck.ru/3RWA3C
Mostrar más📈 Análisis del canal de Telegram LinuxCamp | DevOps
El canal LinuxCamp | DevOps (@linuxcamp_tg) en el segmento lingüístico de Ruso es un actor destacado. Actualmente la comunidad reúne a 13 959 suscriptores, ocupando la posición 9 131 en la categoría Tecnologías y Aplicaciones y el puesto 47 183 en la región Rusia.
📊 Métricas de audiencia y dinámica
Desde su creación el невідомо, el proyecto ha mostrado un crecimiento acelerado, reuniendo a 13 959 suscriptores.
Según los últimos datos del 06 julio, 2026, el canal mantiene una actividad estable. En los últimos 30 días la variación de miembros fue de -98, y en las últimas 24 horas de -3, conservando un alto alcance.
- Estado de verificación: No verificado
- Tasa de interacción (ER): El promedio de interacción de la audiencia es 27.85%. Durante las primeras 24 horas tras publicar, el contenido suele obtener 10.66% de reacciones respecto al total de suscriptores.
- Alcance de las publicaciones: Cada publicación recibe en promedio 3 888 visualizaciones. En el primer día suele acumular 1 489 visualizaciones.
- Reacciones e interacción: La audiencia responde de forma activa: el promedio de reacciones por publicación es 23.
- Intereses temáticos: El contenido se centra en temas clave como linuxcamp, ядро, linux, диск, docker.
📝 Descripción y política de contenido
El autor describe el recurso como un espacio para expresar opiniones subjetivas:
“Обо мне: C/C++/Linux эксперт. Говорим про разработку, Linux, DevOps, сети и администрирование.
Админ (реклама): @XoDefender
Чат: @linuxcamp_chat
Менеджер: @Spiral_Yuri
Биржа: https://telega.in/c/linuxcamp_tg
РКН: https://clck.ru/3RWA3C”
Gracias a la alta frecuencia de actualizaciones (últimos datos recibidos el 07 julio, 2026), el canal mantiene la vigencia y un amplio alcance. La analítica demuestra que la audiencia interactúa activamente con el contenido, lo que lo convierte en un punto de referencia dentro de la categoría Tecnologías y Aplicaciones.
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
¡Ya disponible! Investigación de Telegram 2025 — los principales insights del año 
