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 953 مشترک است و جایگاه 9 144 را در دسته فناوری و برنامهها و رتبه 47 276 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 13 953 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 07 ژوئیه, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر -101 و در ۲۴ ساعت گذشته برابر -4 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 28.39% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 10.67% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 3 963 بازدید دریافت میکند. در اولین روز معمولاً 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”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 08 ژوئیه, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
- .dockerignore - Dockerfile - compose.yaml - README.Docker.mdУстанавливаем Docker Desktop на устройство если не установлен. Если не имели раньше дела с
mkdir my-fastapi-project
cd my-fastapi-project
Создаем и активируем виртуальное окружение чтобы изолировать зависимости проекта и с помощью команды pip freeze автоматически сформировать requirements.txt, не заполняя его вручную:
python3 -m venv venv
source venv/bin/activate
Cкачиваем необходимые для создания API зависимости с помощью пакетного менеджера pip и сохраняем их в requirements.txt:
pip install fastapi uvicorn
pip freeze > requirements.txt
Создадим в каталоге проекта файл "main.py" с простым API:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def root():
return {"Hello": "Docker Init"}
Теперь наконец можем запустить магию:
docker init
Нас встречает приветственное сообщение, которое просит нас выбрать язык проекта (python), его версию (3.12.7), порт на котором будет слушать приложение (8000). Далее нужно вписать команду для запуска. Он увидел что я работаю с fastapi и предлагает:
uvicorn 'main:app' --host=0.0.0.0 --port=8000
И тут видим, что автоматически были созданы перечисленные в начале файлы! Далее можем абсолютно спокойно поднять контейнер командой:
docker compose up --build
Дожидаемся пока сбилдится наше приложение и проверяем все ли ок. Переходим в браузер и видим заветное:
http://127.0.0.1:8000
{"Hello":"Docker Init"}
LinuxCamp | #devops #docker #bymaga #win
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "127.0.0.1", "--port", "8000"]
Его и разберем построчно:
1) FROM - команда, которая создает базовый образ. В нашем случае это python:3.11-slim. Но что это и откуда берется? - из Docker Hub!
То есть мы буквально скачиваем зависимость с официального репозитория образов. В хабе имеются образы на многие технологии, языки, базы данных и фреймворки, так что найти нужную базу под проект не будет проблемой.
python:3.11-slim — это официальный образ Python версии 3.11 в минималистичной вариации "slim";
2) WORKDIR - создает рабочую директорию проекта, в которой все команды будут выполняться. Также как и большинство инструкций, создает новый слой;
3) COPY - копирует файлы с хоста в контейнер. Можно заметить, что данная команда выполняется дважды в файле.
Сначала копируется только файл requirements.txt для того, чтобы разделить установку зависимостей и основной код. Это делается ради кэширования слоёв: файл зависимостей меняется редко, и при пересборке будет использоваться уже готовый слой;
4) RUN - выполняет команду внутри контейнера на этапе сборки и создаёт новый слой. В данном случае ставит зависимости из requirements.txt;
5) Ещё один "COPY . ." — теперь закидываем остальной код проекта в контейнер.
6) Последняя инструкция CMD - не создает новый слой, там указаны команды которые выполняются при запуске контейнера. В нашем Dockerfile выполняются команды запуска fastapi-приложения:
— "uvicorn" - сервер, который запускает fastapi-приложение
— "main:app" - main — это имя файла python, а app — это объект fastapi внутри этого файла.
— "--host", "127.0.0.1" - указывает, что сервер будет слушать на локальном интерфейсе.
— "--port", "8000" - указывает порт, на котором работает приложение.
LinuxCamp | #devops #docker #bymaga
$ find ~/Downloads -type f -mtime +35
Следующий шаг – непосредственно чистка:
$ find ~/Downloads -type f -mtime +35 -delete
Вам необязательно действовать напрямую и стирать сразу же все файлы. Их можно отсортировать дополнительно по еще одному признаку, например, по названию или расширению. Для этого есть опция "-name":
$ find ~/Downloads -name "*.zip" -type f -mtime +35 -delete
Также, чтобы сгоряча не удалить нужный и недавно используемый файл, можно для каждого элемента вывода выполнить "ls -l" и посмотреть дату последнего изменения ресурса:
$ find ~/Downloads -type f -mtime +5 -exec ls -l {} \;
... Feb 17 17:30 ./file
LinuxCamp | #microhelp #utils
$ tail -f /var/log/syslog
Если нужно отображать больше последних строк, чем по дефолту, дописывайте флаг "-n". Когда дополнительно нужно прогнать вывод через фильтр, grep в помощь:
$ tail -n 100 -f /var/log/nginx/access.log
$ tail -f /var/log/nginx/error.log | grep "timeout"
Я помню, как сам мучился с дебагом, когда не был в курсе про этот чудо-флаг) Дело в том, что не все приложения выдают лог в консоль. Если вы работаете с демоном, то у него нет управляющего терминала и все идет в журналы. Как раз тут и было бы весьма удобно использовать "tail -f".
LinuxCamp | #microhelp #utils
$ echo $XDG_SESSION_TYPE
wayland
Кроме того, можно узнать тип текущей сессии с помощью loginctl. Для этого нужно сначала вывести список активных сессий через list-sessions:
$ loginctl list-sessions
SESSION UID USER SEAT TTY
3 1000 parallels seat0 tty2
c1 127 gdm seat0 tty1
2 sessions listed.
Потом выводим тип конкретной сессии через опцию show-session:
$ loginctl show-session 3 -p Type
Type=wayland
Или можно сделать всё одной командой, получив идентификатор сессии из переменной окружения XDG_SESSION_ID (если определена):
$ loginctl show-session "$XDG_SESSION_ID" -p Type
LinuxCamp | #microhelp #sessions
$ systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled;>
Active: active (running) since ...
Давайте рассмотрим полный вывод:
Loaded - означает что файл юнита загружен успешно и здесь же выводится путь к этому файлу.
Тут возможны и другие значения, например, masked если юнит скрыт или not-found если он не найден. Также здесь находится информация добавлен ли юнит в автозагрузку (enabled/disabled);
Active - текущее состояние и подсостояние юнита, если он запущен, выводится active(running), если он не был запущен, то inactive(dead) если что-то пошло не так, failed и т.д.
Docs - название man страницы с документацией для службы.
Process - запускаемые процессы, их состояние и код выхода.
Main PID - идентификатор основного процесса службы.
Tasks - количество процессов, запущенных в рамках этой службы.
Memory - потребление памяти службой.
CPU - использование процессора службой.
Для того чтобы посмотреть все доступные значения состояний для полей Loaded и Active выполните:
$ systemctl --state help
Списочек получите некороткий) За доп. инфой направлю вас в man.
После всех полей статуса выводится журнал службы - последние 10 строк вывода основного процесса.
Если хотите получить больше строк, используйте опцию "--lines" с нужным количеством:
$ systemctl status --lines=50 avahi-daemon
LinuxCamp | #systemd
$ sudo apt install python3 python3-pip -y
$ sudo apt install docker.io -y
После установки создаем рабочую папку:
$ mkdir fastapi_backend && cd fastapi_backend
Активируем виртуальное окружение, чтобы изолировать зависимости проекта и с помощью команды pip freeze автоматически сформировать requirements.txt, не заполняя его вручную:
$ python3 -m venv venv
$ source venv/bin/activate
Cкачиваем необходимые для создания API зависимости с помощью пакетного менеджера pip и сохраняем их в requirements.txt:
$ pip install fastapi uvicorn
$ pip freeze > requirements.txt
2. Создадим в каталоге проекта файл "main.py" с простым API:
$ touch main.py
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"Hello": "LinuxCamp"}
3. Ну и наконец добавим в локальный каталог сам Dockerfile - это инструкция по созданию docker контейнера. Cейчас приведу общий пример, в следующих постах подробнее разберем его структуру:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["uvicorn", "main:app", "--host", "127.0.0.1", "--port", "8000"]
4. На этом все! Мы уже можем собрать свой Docker-образ и запустить его, после чего приложение будет доступно по адресу ниже:
$ sudo docker build -t myapp .
$ sudo docker run -d -p 8000:8000 myapp
$ curl -L http://127.0.0.1:8000
$ {"Hello":"LinuxCamp"}
http://127.0.0.1:8000Также можно посмотреть наличие нашего docker контейнера в списке запущенных контейнеров с помощью команды docker ps:
$ docker ps CONTAINER ID IMAGE COMMAND 640d6f4d1acb fastapi_backend "uvicorn main:app --…"LinuxCamp | #devops #docker #bymaga
$ systemctl status docker
docker.service - Docker Application Container Engine
Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
Теперь узнаем имя пакета, с которым служба поставляется. Если мы работаем с deb сборками, используем флаг "-S":
$ dpkg -S /lib/systemd/system/docker.service
docker.io: /lib/systemd/system/docker.service
После того, как имя пакета известно, удаляем его:
$ sudo apt remove docker.io
Если вы не хотите удалять пакет, например, потому что он системный и это может что-то сломать, можно замаскировать службу.
Замаскированные службы нельзя запустить вручную и они не активируются на старте системы (даже если добавлены в автозагрузку). Для маскировки используется команда mask:
$ sudo systemctl mask docker
Created symlink /etc/systemd/system/docker.service → /dev/null
Прикольно, конечно, реализована маскировка - в системном каталоге для сервисов создается симлинка на устройство "/dev/null" (говорили о нем тут).
Если посмотрим на состояние службы, увидим, что она замаскирована:
$ sudo systemctl status docker
docker.service
Loaded: masked (Reason: Unit docker.service is masked.)
Для того, чтобы убрать маскировку используем команду unmask. Ссылка удалится и не будет мешать старту сервиса:
$ sudo systemctl unmask docker
Removed /etc/systemd/system/docker.service.
LinuxCamp | #systemd
$ grep -r "root" /etc/
/etc/mdadm/mdadm.conf:MAILADDR root
...
Если хотим подсветить вхождения цветом, используем опцию "--color=always":
$ grep --color=always -r "root" /etc/
Опции "-C, -B, -A" вообще имбовые, использую их целую неделю) Вы можете включить отображение не только текущей строки, в которой было найдено вхождение, но и n строк до/после:
1) -C: выводит n строк до и после вхождения;
$ grep -C2 -r --color=always "Hello3" ./
./hello-Hello1
./hello-Hello2
./hello:Hello3
./hello-Hello4
./hello-Hello5
2) -B: выводит n строк перед вхождением;
$ grep -B2 -r --color=always "Hello3" ./
./hello-Hello1
./hello-Hello2
./hello:Hello3
3) -A: выводит n строк после вхождения;
$ grep -A2 -r --color=always "Hello3" ./
./hello:Hello3
./hello-Hello4
./hello-Hello5
Если наш шаблон поиска походит на регулярное выражения, нужно использовать флаг "-F". Таким образом мы говорим команде искать ровно то, что мы запросили - без скрытых подтекстов.
Без флага мы получим строки, в которых присутствует хотя бы 1 символ из набора (H, e, l, o). С флагом получим строки с буквальным совпадением:
$ grep "[Hello]" hello
Help me please
Helloup
[Hello]
$ grep -F "[Hello]" hello
[Hello]
LinuxCamp | #utils