Linux: Ваш chroot на стероидах. Знакомство с distrobox
У вас на рабочей машине (или сервере) CentOS, но вам срочно нужен инструмент, который есть только в Ubuntu? Или нужно протестировать скрипт в Arch Linux?
Раньше вы бы ставили VirtualBox или мучились с chroot. Сегодня есть distrobox.
distrobox — это утилита, которая использует podman или docker для запуска любого дистрибутива Linux, но делает это с глубокой интеграцией в вашу основную систему.
Как это работает: Вы запускаете:
Bash
В чем магия:
* Ваш HOME проброшен внутрь.
* USB-устройства, графика (включая GUI-приложения!) — все работает.
* Вы можете установить zsh в ubuntu-box, и он появится в списке оболочек вашей основной системы.
* Вы можете запустить VS Code из ubuntu-box так, будто он установлен у вас.
Это одноразовые, чистые окружения, которые не загрязняют вашу основную ОС.
Взгляд архитектора: Это воспроизводимость и изоляция. Архитектор не держит на своей рабочей станции "зоопарк" из 1000 пакетов. Он держит distrobox и создает чистые, изолированные среды для каждой задачи, гарантируя, что его инструменты не конфликтуют.
#linux #distrobox #docker #podman #devops #sysadmin #гайд
У вас на рабочей машине (или сервере) CentOS, но вам срочно нужен инструмент, который есть только в Ubuntu? Или нужно протестировать скрипт в Arch Linux?
Раньше вы бы ставили VirtualBox или мучились с chroot. Сегодня есть distrobox.
distrobox — это утилита, которая использует podman или docker для запуска любого дистрибутива Linux, но делает это с глубокой интеграцией в вашу основную систему.
Как это работает: Вы запускаете:
Bash
# Создаем "коробку" с Ubuntu 22.04
distrobox create -n ubuntu-box -i ubuntu:22.04
# Входим в нее
distrobox enter ubuntu-box
В чем магия:
* Ваш HOME проброшен внутрь.
* USB-устройства, графика (включая GUI-приложения!) — все работает.
* Вы можете установить zsh в ubuntu-box, и он появится в списке оболочек вашей основной системы.
* Вы можете запустить VS Code из ubuntu-box так, будто он установлен у вас.
Это одноразовые, чистые окружения, которые не загрязняют вашу основную ОС.
Взгляд архитектора: Это воспроизводимость и изоляция. Архитектор не держит на своей рабочей станции "зоопарк" из 1000 пакетов. Он держит distrobox и создает чистые, изолированные среды для каждой задачи, гарантируя, что его инструменты не конфликтуют.
#linux #distrobox #docker #podman #devops #sysadmin #гайд
👍2🥰2
Linux: "Почему мой Docker-контейнер тормозит?" Вскрываем `cgroups`
Вы выделили Docker-контейнеру
Происходит CPU Throttling (троттлинг). Ваш контейнер хочет больше CPU, но
Как увидеть "троттлинг" своими глазами:
Найдите "слайс" вашего контейнера:
Bash
Bash
* nr_periods: Сколько раз процесс "приходил" за CPU.
* nr_throttled: Сколько раз ему было отказано (он был "задушен").
* throttled_time: Суммарное время, которое процесс провел в "задушенном" состоянии (в наносекундах).
Взгляд архитектора: Если nr_throttled (количество удушений) постоянно растет — вы нашли корень зла. Вы доказали, что проблема не в "тормозах", а в нехватке выделенных ресурсов. top вам этого никогда не покажет. Архитектор валидирует лимиты, а не гадает.
#linux #sre #docker #cgroups #performance #diagnostics #гайд #architect
Вы выделили Docker-контейнеру
2 CPU, а он "задыхается". Вы запускаете htop на хосте — а там 20% простоя. Что происходит?Происходит CPU Throttling (троттлинг). Ваш контейнер хочет больше CPU, но
cgroups (Control Groups) его "душат".cgroups — это технология ядра, которая изолирует и ограничивает ресурсы (CPU, RAM, I/O) для групп процессов. Это фундамент, на котором стоят systemd, Docker и Kubernetes.Как увидеть "троттлинг" своими глазами:
Найдите "слайс" вашего контейнера:
Bash
# Найти "слайс" Docker
systemd-cgls | grep 'docker-'
# /docker-a1b2c3d4e5f6.scope
Прочитайте статистику CPU (самое важное):
Bash
# Идем в "папку" cgroup этого контейнера
cd /sys/fs/cgroup/cpu/docker/a1b2c3d4e5f6...
# Читаем файл статистики
cat cpu.stat
* nr_periods: Сколько раз процесс "приходил" за CPU.
* nr_throttled: Сколько раз ему было отказано (он был "задушен").
* throttled_time: Суммарное время, которое процесс провел в "задушенном" состоянии (в наносекундах).
Взгляд архитектора: Если nr_throttled (количество удушений) постоянно растет — вы нашли корень зла. Вы доказали, что проблема не в "тормозах", а в нехватке выделенных ресурсов. top вам этого никогда не покажет. Архитектор валидирует лимиты, а не гадает.
#linux #sre #docker #cgroups #performance #diagnostics #гайд #architect
🚀 DevOps: Скрипт "CI/CD-раннер за 60 секунд" (Docker)
Боль: Ваш docker build в общем CI/CD GitLab/GitHub "висит" в очереди 20 минут. Вы не можете работать, потому что все "раннеры" заняты.
Реакция админа: "Пойду попью кофе, подожду".
Реакция архитектора: "Я запущу свой runner на своей Home Lab (или VDS) за 60 секунд".
Эти "однострочники" — это не просто docker run, это мгновенное масштабирование вашего CI/CD.
Скрипт для GitLab Runner:
Скрипт для GitHub Actions Runner: (Процесс похож, но требует docker-compose для авто-регистрации)
Взгляд архитектора: Это "Infrastructure on-demand" (Инфраструктура по требованию). Вы не ждете ресурсы, вы создаете их. Вы строите распределенную CI/CD-систему, используя Docker как "строительный блок".
#devops #docker #cicd #gitlab #github #automation #скрипты #гайд
Боль: Ваш docker build в общем CI/CD GitLab/GitHub "висит" в очереди 20 минут. Вы не можете работать, потому что все "раннеры" заняты.
Реакция админа: "Пойду попью кофе, подожду".
Реакция архитектора: "Я запущу свой runner на своей Home Lab (или VDS) за 60 секунд".
Эти "однострочники" — это не просто docker run, это мгновенное масштабирование вашего CI/CD.
Скрипт для GitLab Runner:
# 1. Получите ваш Registration Token из GitLab (Settings -> CI/CD -> Runners)
GITLAB_TOKEN="ВАШ_ТОКЕН"
# 2. Запускаем "вечный" раннер в Docker
docker run -d --name gitlab-runner --restart always \
-v /srv/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
# 3. Регистрируем раннер
docker exec -it gitlab-runner \
gitlab-runner register \
--non-interactive \
--url "https://gitlab.com/" \
--registration-token "$GITLAB_TOKEN" \
--executor "docker" \
--docker-image "docker:20.10" \
--description "My-Docker-Runner"
Скрипт для GitHub Actions Runner: (Процесс похож, но требует docker-compose для авто-регистрации)
Взгляд архитектора: Это "Infrastructure on-demand" (Инфраструктура по требованию). Вы не ждете ресурсы, вы создаете их. Вы строите распределенную CI/CD-систему, используя Docker как "строительный блок".
#devops #docker #cicd #gitlab #github #automation #скрипты #гайд
🔒 Проект на выходные: Vaultwarden — ваш личный Bitwarden
Боль: У вас 500 паролей (RDP, SSH, Web-морды, API-ключи). Они лежат в KeePass-файле в Dropbox, в Excel-файле на "шаре" или (о ужас) в .txt.
Решение: Развернуть свой менеджер паролей. Bitwarden — топ, но его "self-hosted" версия тяжеловата (требует MSSQL).
Vaultwarden — это альтернативная реализация Bitwarden-сервера, написанная на Rust. Она 100% совместима со всеми клиентами Bitwarden (Chrome, iOS, Android), но при этом:
Легковесная: Работает в Docker, ест < 100МБ RAM.
Простая: Не требует MS SQL. Использует SQLite "из коробки".
Запускаем в Docker за 60 секунд:
Откройте http://<ip>:8080 и создайте аккаунт. Теперь это ваш Bitwarden.
Взгляд архитектора: Это "суверенитет данных" (Data Sovereignty). Вы возвращаете полный контроль над вашими самыми критическими активами — паролями.
#security #docker #selfhosted #bitwarden #vaultwarden #weekendproject #гайд
Боль: У вас 500 паролей (RDP, SSH, Web-морды, API-ключи). Они лежат в KeePass-файле в Dropbox, в Excel-файле на "шаре" или (о ужас) в .txt.
Решение: Развернуть свой менеджер паролей. Bitwarden — топ, но его "self-hosted" версия тяжеловата (требует MSSQL).
Vaultwarden — это альтернативная реализация Bitwarden-сервера, написанная на Rust. Она 100% совместима со всеми клиентами Bitwarden (Chrome, iOS, Android), но при этом:
Легковесная: Работает в Docker, ест < 100МБ RAM.
Простая: Не требует MS SQL. Использует SQLite "из коробки".
Запускаем в Docker за 60 секунд:
# 1. Создаем volume для данных (чтобы не потерять!)
docker volume create vaultwarden-data
# 2. Запускаем контейнер
docker run -d --name vaultwarden \
-v vaultwarden-data:/data \
-p 8080:80 \
--restart unless-stopped \
vaultwarden/server:latest
Откройте http://<ip>:8080 и создайте аккаунт. Теперь это ваш Bitwarden.
Взгляд архитектора: Это "суверенитет данных" (Data Sovereignty). Вы возвращаете полный контроль над вашими самыми критическими активами — паролями.
#security #docker #selfhosted #bitwarden #vaultwarden #weekendproject #гайд
🖥 Security (Home Lab): Pi-hole — "Адблок" для всей вашей домашней сети
Боль: Ваш телефон, ноутбук, планшет, телевизор и даже умная колонка показывают рекламу. Это не только раздражает, но и несет реальные риски: фишинг, малварь, отслеживание. Один неудачный клик — и вся сеть под угрозой.
Решение: Блокировка рекламы и трекеров на уровне DNS для всех устройств в сети.
Pi-hole — это DNS-сервер, который работает как "черная дыра" для нежелательного трафика. Он перехватывает запросы к рекламным и вредоносным доменам и просто не отвечает на них.
Что вы получаете:
Блокировка рекламы везде: На всех устройствах, включая те, где нельзя поставить "адблок" (Smart TV, IoT).
Защита от малвари/фишинга: Большинство вредоносных сайтов используют одни и те же домены — Pi-hole их блокирует.
Контроль и Observability: Удобный веб-интерфейс показывает, какое устройство куда стучится, и что Pi-hole заблокировал.
Никаких VPN: Работает "из коробки" на роутере.
Запуск (в Docker за 5 минут):
После запуска: Перенастройте DNS-сервер на вашем роутере на IP-адрес вашего Pi-hole.
Взгляд архитектора: Вы не "блокируете рекламу". Вы перехватываете контроль над своим DNS-трафиком. Это первый шаг к построению "сегментированной" и "фильтрованной" домашней сети, как в Enterprise.
#security #homelab #pihole #dns #docker #гайд #musthave
Боль: Ваш телефон, ноутбук, планшет, телевизор и даже умная колонка показывают рекламу. Это не только раздражает, но и несет реальные риски: фишинг, малварь, отслеживание. Один неудачный клик — и вся сеть под угрозой.
Решение: Блокировка рекламы и трекеров на уровне DNS для всех устройств в сети.
Pi-hole — это DNS-сервер, который работает как "черная дыра" для нежелательного трафика. Он перехватывает запросы к рекламным и вредоносным доменам и просто не отвечает на них.
Что вы получаете:
Блокировка рекламы везде: На всех устройствах, включая те, где нельзя поставить "адблок" (Smart TV, IoT).
Защита от малвари/фишинга: Большинство вредоносных сайтов используют одни и те же домены — Pi-hole их блокирует.
Контроль и Observability: Удобный веб-интерфейс показывает, какое устройство куда стучится, и что Pi-hole заблокировал.
Никаких VPN: Работает "из коробки" на роутере.
Запуск (в Docker за 5 минут):
# Создаем папку для конфигурации
mkdir -p /opt/pihole
# Запускаем контейнер
docker run -d \
--name pihole \
-p 53:53/tcp -p 53:53/udp \
-p 80:80 \
-e PUID=1000 -e PGID=1000 \
-e TZ="Europe/Moscow" \
-v /opt/pihole:/etc/pihole \
--restart=unless-stopped \
pihole/pihole:latest
После запуска: Перенастройте DNS-сервер на вашем роутере на IP-адрес вашего Pi-hole.
Взгляд архитектора: Вы не "блокируете рекламу". Вы перехватываете контроль над своим DNS-трафиком. Это первый шаг к построению "сегментированной" и "фильтрованной" домашней сети, как в Enterprise.
#security #homelab #pihole #dns #docker #гайд #musthave
👍2
🗄️ Storage: Почему локальные диски умерли. Встречаем S3 (MinIO)
Боль: Ваше приложение (на PHP, Python, Go) позволяет пользователям загружать аватарки.
* Вариант 1: Сохранять в папку /var/www/uploads. (Проблема: Как масштабировать на 2 сервера? Нужен NFS или rsync — это медленно и сложно).
* Вариант 2: Сохранять в базу данных (BLOB). (Проблема: БД раздувается, бэкапы становятся огромными).
Решение: Object Storage (S3 API). Архитектор отделяет хранение (Storage) от вычислений (Compute).
MinIO — это самый популярный self-hosted S3-совместимый сервер.
Почему это круто:
1. Стандарт: S3 API поддерживают все (Veeam, Terraform, все языки программирования).
2. Масштабируемость: MinIO легко собирается в кластер.
3. Простота: Одно приложение для всех файлов.
Запуск (Docker):
Теперь ваше приложение просто шлет PUT запрос на http://minio:9000. И ему всё равно, на каком сервере оно запущено.
Взгляд архитектора: Использование локальной файловой системы для данных приложения — это антипаттерн в современном IT (12-Factor App). Переход на S3 API делает ваши приложения Cloud Native (готовыми к облаку) сразу.
#devops #storage #s3 #minio #docker #architect #гайд
Боль: Ваше приложение (на PHP, Python, Go) позволяет пользователям загружать аватарки.
* Вариант 1: Сохранять в папку /var/www/uploads. (Проблема: Как масштабировать на 2 сервера? Нужен NFS или rsync — это медленно и сложно).
* Вариант 2: Сохранять в базу данных (BLOB). (Проблема: БД раздувается, бэкапы становятся огромными).
Решение: Object Storage (S3 API). Архитектор отделяет хранение (Storage) от вычислений (Compute).
MinIO — это самый популярный self-hosted S3-совместимый сервер.
Почему это круто:
1. Стандарт: S3 API поддерживают все (Veeam, Terraform, все языки программирования).
2. Масштабируемость: MinIO легко собирается в кластер.
3. Простота: Одно приложение для всех файлов.
Запуск (Docker):
docker run -d \
-p 9000:9000 -p 9001:9001 \
--name minio \
-v /mnt/data:/data \
-e "MINIO_ROOT_USER=admin" \
-e "MINIO_ROOT_PASSWORD=SuperSecretPassword" \
minio/minio server /data --console-address ":9001"
Теперь ваше приложение просто шлет PUT запрос на http://minio:9000. И ему всё равно, на каком сервере оно запущено.
Взгляд архитектора: Использование локальной файловой системы для данных приложения — это антипаттерн в современном IT (12-Factor App). Переход на S3 API делает ваши приложения Cloud Native (готовыми к облаку) сразу.
#devops #storage #s3 #minio #docker #architect #гайд
❤2
🛡 Проект на выходные: Свой VPN за 2 минуты. wg-easy
Иметь свой VPN — это гигиена. Подключаться к домашнему серверу, безопасно сидеть через Wi-Fi в кафе или обходить ограничения.
WireGuard — это стандарт. Быстрый, легкий, современный. Но настраивать конфиги и ключи вручную — это долго.
wg-easy — это Docker-контейнер, который дает вам:
1. WireGuard сервер.
2. Веб-интерфейс для управления клиентами.
3. QR-коды для мгновенного подключения с телефона.
Готовый docker-compose.yml:
Запуск: docker-compose up -d. Использование: Зайдите на http://<ip>:51821, создайте клиента, отсканируйте QR-код телефоном. Вы в безопасности.
Взгляд архитектора: Это пример Self-Service подхода. Сложная технология (VPN) упакована в удобный продукт. Идеально для Home Lab или предоставления доступа небольшой команде разработчиков.
#linux #docker #vpn #wireguard #wgeasy #selfhosted #weekendproject #гайд
Иметь свой VPN — это гигиена. Подключаться к домашнему серверу, безопасно сидеть через Wi-Fi в кафе или обходить ограничения.
WireGuard — это стандарт. Быстрый, легкий, современный. Но настраивать конфиги и ключи вручную — это долго.
wg-easy — это Docker-контейнер, который дает вам:
1. WireGuard сервер.
2. Веб-интерфейс для управления клиентами.
3. QR-коды для мгновенного подключения с телефона.
Готовый docker-compose.yml:
version: "3.8"
services:
wg-easy:
environment:
# Замените на ваш внешний IP или домен!
- WG_HOST=my.domain.com
- PASSWORD=super_secret_password
- WG_PORT=51820
- WG_DEFAULT_Address=10.8.0.x
- WG_DEFAULT_DNS=1.1.1.1
image: ghcr.io/wg-easy/wg-easy
container_name: wg-easy
volumes:
- ./wg-easy-data:/etc/wireguard
ports:
- "51820:51820/udp" # Трафик VPN
- "51821:51821/tcp" # Веб-интерфейс
restart: unless-stopped
cap_add:
- NET_ADMIN
- SYS_MODULE
sysctls:
- net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1
Запуск: docker-compose up -d. Использование: Зайдите на http://<ip>:51821, создайте клиента, отсканируйте QR-код телефоном. Вы в безопасности.
Взгляд архитектора: Это пример Self-Service подхода. Сложная технология (VPN) упакована в удобный продукт. Идеально для Home Lab или предоставления доступа небольшой команде разработчиков.
#linux #docker #vpn #wireguard #wgeasy #selfhosted #weekendproject #гайд
❤5👎2
🧪 Зачем админу HomeLab?
На собеседованиях на позиции Senior/Lead часто спрашивают: «Что крутится у вас дома?». Почему? Потому что HomeLab — это полигон, где вы учитесь быстрее, чем на работе. На проде страшно ломать, дома — весело.
Starter Pack для админа 2025: Если у вас есть старый ноутбук или Raspberry Pi, вот что нужно поднять (в Docker, конечно):
Pi-hole / AdGuard Home: Режем рекламу на уровне DNS для всей квартиры. Семья скажет спасибо.
WireGuard / Headscale: Свой VPN. Безопасный доступ домой из любой точки мира.
Home Assistant: Умный дом без привязки к облакам вендоров.
Uptime Kuma: Красивый мониторинг внешних ресурсов.
Vaultwarden: Свой менеджер паролей (аналог Bitwarden).
Это не просто игрушки. Это опыт настройки сетей, контейнеризации, безопасности и Nginx Proxy Manager в безопасной среде.
#homelab #selfhosted #docker #learning #petproject
На собеседованиях на позиции Senior/Lead часто спрашивают: «Что крутится у вас дома?». Почему? Потому что HomeLab — это полигон, где вы учитесь быстрее, чем на работе. На проде страшно ломать, дома — весело.
Starter Pack для админа 2025: Если у вас есть старый ноутбук или Raspberry Pi, вот что нужно поднять (в Docker, конечно):
Pi-hole / AdGuard Home: Режем рекламу на уровне DNS для всей квартиры. Семья скажет спасибо.
WireGuard / Headscale: Свой VPN. Безопасный доступ домой из любой точки мира.
Home Assistant: Умный дом без привязки к облакам вендоров.
Uptime Kuma: Красивый мониторинг внешних ресурсов.
Vaultwarden: Свой менеджер паролей (аналог Bitwarden).
Это не просто игрушки. Это опыт настройки сетей, контейнеризации, безопасности и Nginx Proxy Manager в безопасной среде.
#homelab #selfhosted #docker #learning #petproject
❤3
🏗 Docker: Multistage Build — худеем в 10 раз
Типичная ошибка новичка: в Docker-образе лежат исходники, компиляторы (GCC, Go), кэши и сам бинарник. Образ весит 800 МБ. Архитектор использует Multistage Build.
Суть: в одном Dockerfile мы сначала собираем приложение, а потом копируем только результат в чистый, крошечный образ.
Пример (Go/C++/Rust):
Профит:
1. Размер: Было 800 МБ → Стало 20 МБ.
2. Безопасность: В проде нет компиляторов и исходного кода — хакеру сложнее развернуться.
3. Скорость: Быстрее пушится в Registry и скачивается на сервер.
Если ваши образы весят гигабайты — сегодня самое время их переписать.
#docker #devops #optimization #bestpractice #architecture
Типичная ошибка новичка: в Docker-образе лежат исходники, компиляторы (GCC, Go), кэши и сам бинарник. Образ весит 800 МБ. Архитектор использует Multistage Build.
Суть: в одном Dockerfile мы сначала собираем приложение, а потом копируем только результат в чистый, крошечный образ.
Пример (Go/C++/Rust):
# Этап 1: Сборка (Builder)
FROM golang:1.21 AS builder
WORKDIR /app
COPY . .
RUN go build -o myapp main.go
# Этап 2: Финал (Production)
# Берем Alpine (5 МБ) или Distroless
FROM alpine:latest
WORKDIR /root/
# Копируем ТОЛЬКО бинарник из первого этапа
COPY --from=builder /app/myapp .
CMD ["./myapp"]
Профит:
1. Размер: Было 800 МБ → Стало 20 МБ.
2. Безопасность: В проде нет компиляторов и исходного кода — хакеру сложнее развернуться.
3. Скорость: Быстрее пушится в Registry и скачивается на сервер.
Если ваши образы весят гигабайты — сегодня самое время их переписать.
#docker #devops #optimization #bestpractice #architecture
👍1
👀 Uptime Kuma: Мониторинг для людей
Zabbix слишком сложен для домашнего сервера или быстрого проекта? Prometheus требует Grafana? Попробуйте Uptime Kuma.
Это современный Self-Hosted инструмент мониторинга с красивым UI.
Что умеет:
✅ Пинговать хосты (HTTP/s, TCP, DNS, Ping).
✅ Проверять SSL-сертификаты (и орать, когда истекают).
✅ Красивые Status Pages (как у облачных провайдеров).
✅ Уведомления в Telegram, Discord, Slack.
Установка за 30 секунд (Docker):
Перейдите на http://localhost:3001 и наслаждайтесь.
Идеально, чтобы следить за своим сайтом, домашним роутером или VPN-сервером.
#homelab #monitoring #docker #opensource #tools
Zabbix слишком сложен для домашнего сервера или быстрого проекта? Prometheus требует Grafana? Попробуйте Uptime Kuma.
Это современный Self-Hosted инструмент мониторинга с красивым UI.
Что умеет:
✅ Пинговать хосты (HTTP/s, TCP, DNS, Ping).
✅ Проверять SSL-сертификаты (и орать, когда истекают).
✅ Красивые Status Pages (как у облачных провайдеров).
✅ Уведомления в Telegram, Discord, Slack.
Установка за 30 секунд (Docker):
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
Перейдите на http://localhost:3001 и наслаждайтесь.
Идеально, чтобы следить за своим сайтом, домашним роутером или VPN-сервером.
#homelab #monitoring #docker #opensource #tools
🔥3
🔑 Authentik: Единый вход для домашней лабы
У вас дома крутится Grafana, Portainer, Home Assistant и торренты. Везде свои логины/пароли. Это неудобно и небезопасно.
Настройте Authentik (или Keycloak, но Authentik легче).
Что это: Это ваш личный Identity Provider (IDP). Вы один раз входите в Authentik, и он пускает вас во все остальные сервисы (SSO).
Почему это круто:
Безопасность: Можно закрыть все сервисы за Authentik и прикрутить 2FA (Google Authenticator) даже туда, где его не было (например, к старому веб-интерфейсу роутера).
Удобство: Красивый дашборд со всеми вашими приложениями.
Поднимается в Docker за 5 минут. Почувствуйте себя Enterprise-архитектором у себя дома.
#security #homelab #sso #authentik #docker #selfhosted
У вас дома крутится Grafana, Portainer, Home Assistant и торренты. Везде свои логины/пароли. Это неудобно и небезопасно.
Настройте Authentik (или Keycloak, но Authentik легче).
Что это: Это ваш личный Identity Provider (IDP). Вы один раз входите в Authentik, и он пускает вас во все остальные сервисы (SSO).
Почему это круто:
Безопасность: Можно закрыть все сервисы за Authentik и прикрутить 2FA (Google Authenticator) даже туда, где его не было (например, к старому веб-интерфейсу роутера).
Удобство: Красивый дашборд со всеми вашими приложениями.
Поднимается в Docker за 5 минут. Почувствуйте себя Enterprise-архитектором у себя дома.
#security #homelab #sso #authentik #docker #selfhosted
🐻 Uptime Kuma: Твой личный Status Page
У тебя дома крутится Home Assistant, Plex, NAS и VPN. Как узнать, что VPN упал, пока ты в кафе? Zabbix для дома — это оверхед. Поставь Uptime Kuma.
Это невероятно красивый и простой инструмент для мониторинга, который выглядит как профессиональные статус-страницы (StatusPage.io).
Что умеет: ✅ Пинговать HTTP(s), TCP, Ping, DNS. ✅ Проверять срок действия SSL-сертификатов (напомнит заранее!). ✅ Слать уведомления в Telegram, Discord, Slack. ✅ Рисовать красивые графики аптайма ("сердечный ритм").
Запуск в Docker (одной командой):
Заходи на http://localhost:3001, настрой за 5 минут и чувствуй себя спокойным.
#homelab #monitoring #uptimekuma #docker #selfhosted #tools
У тебя дома крутится Home Assistant, Plex, NAS и VPN. Как узнать, что VPN упал, пока ты в кафе? Zabbix для дома — это оверхед. Поставь Uptime Kuma.
Это невероятно красивый и простой инструмент для мониторинга, который выглядит как профессиональные статус-страницы (StatusPage.io).
Что умеет: ✅ Пинговать HTTP(s), TCP, Ping, DNS. ✅ Проверять срок действия SSL-сертификатов (напомнит заранее!). ✅ Слать уведомления в Telegram, Discord, Slack. ✅ Рисовать красивые графики аптайма ("сердечный ритм").
Запуск в Docker (одной командой):
docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:1
Заходи на http://localhost:3001, настрой за 5 минут и чувствуй себя спокойным.
#homelab #monitoring #uptimekuma #docker #selfhosted #tools
🎛 Homepage: Сделай своему серверу красиво
У тебя крутится 20 контейнеров: Portainer, Grafana, Plex, Sonarr... Ты реально помнишь все эти порты? localhost:9000, :3000, :8123? Хватит держать закладки в браузере. Собери их в единый Command Center.
Встречайте Homepage — самый современный, быстрый и красивый дашборд на данный момент.
Почему он рвет конкурентов (Heimdall/Organizr): 💎 Визуал: Выглядит как UI из фантастических фильмов. Поддержка видео-фонов и прозрачности. ⚡ Скорость: Статика. Грузится мгновенно. 🐳 Интеграция: Он сам стучится в Docker API и показывает:
* Статус контейнеров (Running/Stopped).
* Нагрузку CPU/RAM в реальном времени прямо на иконке.
* Сколько торрентов качается в Transmission.
Конфиг — чистый YAML (как мы любим):
Это тот случай, когда админка приносит эстетическое удовольствие.
#homelab #dashboard #homepage #ui #selfhosted #docker #design
У тебя крутится 20 контейнеров: Portainer, Grafana, Plex, Sonarr... Ты реально помнишь все эти порты? localhost:9000, :3000, :8123? Хватит держать закладки в браузере. Собери их в единый Command Center.
Встречайте Homepage — самый современный, быстрый и красивый дашборд на данный момент.
Почему он рвет конкурентов (Heimdall/Organizr): 💎 Визуал: Выглядит как UI из фантастических фильмов. Поддержка видео-фонов и прозрачности. ⚡ Скорость: Статика. Грузится мгновенно. 🐳 Интеграция: Он сам стучится в Docker API и показывает:
* Статус контейнеров (Running/Stopped).
* Нагрузку CPU/RAM в реальном времени прямо на иконке.
* Сколько торрентов качается в Transmission.
Конфиг — чистый YAML (как мы любим):
- Docker:
- Portainer:
icon: portainer.png
href: http://localhost:9000
widget:
type: portainer
url: http://portainer:9000
key: <api-key>
Это тот случай, когда админка приносит эстетическое удовольствие.
#homelab #dashboard #homepage #ui #selfhosted #docker #design
👍2💯1
🚀 DevOps: Очистка старых Docker-образов по расписанию 🧹
Если твой сервер внезапно перестал отвечать, проверь место на диске. Часто причиной становятся гигабайты «висячих» (dangling) слоев и старых образов Docker, которые копятся после каждого деплоя. В 2026-м ручная чистка — это моветон.
Техническое решение:
Команда для тотальной, но безопасной чистки:
Фильтр until=168h удалит только те образы, которые старше недели, оставив свежие билды для быстрого отката (rollback).
#docker #devops #optimization #linux #cleanup #sysadmin #automation #admin_future
Если твой сервер внезапно перестал отвечать, проверь место на диске. Часто причиной становятся гигабайты «висячих» (dangling) слоев и старых образов Docker, которые копятся после каждого деплоя. В 2026-м ручная чистка — это моветон.
Техническое решение:
Используем встроенную систему очистки Docker с фильтрами, чтобы не снести лишнее.
Команда для тотальной, но безопасной чистки:
# Удалить все неиспользуемые контейнеры, сети и образы (dangling)
docker system prune -f
# Удалить вообще все образы, которые не используются ни одним запущенным контейнером
docker image prune -a --force --filter "until=168h"
Фильтр until=168h удалит только те образы, которые старше недели, оставив свежие билды для быстрого отката (rollback).
#docker #devops #optimization #linux #cleanup #sysadmin #automation #admin_future
🎓 Собеседование сисадмина. Выпуск #2: Контейнеры и сетевой хардкор
Привет, коллеги! Продолжаем серию постов для тех, кто хочет уверенно чувствовать себя на техническом интервью. Сегодня разберем три каверзных вопроса, которые обожают задавать на позиции Middle/Senior System Engineer.
❓ Вопрос 1: «В чем разница между CMD и ENTRYPOINT в Dockerfile?»
❌ Ответ новичка: «И то, и другое запускает команду при старте контейнера».
✅ Ответ инженера: * ENTRYPOINT — это основная команда, которая превращает контейнер в исполняемый файл. Её сложно переопределить при запуске (`docker run`).
❓ Вопрос 2: «Что такое Docker-слои и почему размер образа имеет значение?»
❌ Ответ новичка: «Слои — это шаги в Dockerfile. Чем меньше образ, тем быстрее он качается».
✅ Ответ инженера:
❓ Вопрос 3: «Клиент жалуется: "Сайт не открывается". Вы пингуете сервер — пинг идет. В чем может быть проблема?»
❌ Ответ новичка: «Наверное, упал веб-сервер, надо перезагрузить».
✅ Ответ инженера: Пинг (ICMP) подтверждает только то, что сетевой уровень (L3) и узел живы.
💡 Золотое правило собеса:Когда вас спрашивают про траблшутинг, всегда идите по модели OSI снизу вверх. От физики и линков до прикладного уровня. Это демонстрирует системный подход, а не хаотичное "тыканье" в конфиги.
Сохраняйте, запоминайте и не давайте застать себя врасплох!
#собеседование_AF #docker #devops #networking #osi #sysadmin #admin_future
Привет, коллеги! Продолжаем серию постов для тех, кто хочет уверенно чувствовать себя на техническом интервью. Сегодня разберем три каверзных вопроса, которые обожают задавать на позиции Middle/Senior System Engineer.
❓ Вопрос 1: «В чем разница между CMD и ENTRYPOINT в Dockerfile?»
❌ Ответ новичка: «И то, и другое запускает команду при старте контейнера».
✅ Ответ инженера: * ENTRYPOINT — это основная команда, которая превращает контейнер в исполняемый файл. Её сложно переопределить при запуске (`docker run`).
* CMD — это аргументы по умолчанию для ENTRYPOINT. Если вы укажете свои аргументы в конце `docker run`, они полностью заменят то, что написано в CMD.
* Pro-tip: На собеседовании скажите, что лучшая практика — использовать их вместе. Например: `ENTRYPOINT ["/usr/bin/nginx"]` и `CMD ["-g", "daemon off;"]`. Это позволяет гибко менять параметры запуска, не ломая логику образа.
❓ Вопрос 2: «Что такое Docker-слои и почему размер образа имеет значение?»
❌ Ответ новичка: «Слои — это шаги в Dockerfile. Чем меньше образ, тем быстрее он качается».
✅ Ответ инженера:
1. Каждая инструкция (`RUN`, `COPY`, `ADD`) создает новый слой, который кешируется и занимает место.
2. Copy-on-Write: Если файл меняется в верхнем слое, он копируется из нижнего, что раздувает образ.
3. Безопасность и скорость: Маленький образ (на базе Alpine или Distroless) уменьшает "поверхность атаки" (меньше лишних утилит — меньше дыр) и ускоряет деплой в CI/CD.
Совет: Упомяните Multi-stage builds. Это сразу покажет, что вы умеете собирать оптимизированные образы, оставляя весь "мусор" (компиляторы, исходники) во временных контейнерах.
❓ Вопрос 3: «Клиент жалуется: "Сайт не открывается". Вы пингуете сервер — пинг идет. В чем может быть проблема?»
❌ Ответ новичка: «Наверное, упал веб-сервер, надо перезагрузить».
✅ Ответ инженера: Пинг (ICMP) подтверждает только то, что сетевой уровень (L3) и узел живы.
1. Порты (L4): Проверяем, слушает ли веб-сервер нужный порт (80/443) через `telnet` или `nc -zv`.
2. MTU: Если маленькие пакеты (пинг) проходят, а большие (HTTP-трафик) — нет, проблема в MTU/MSS на пути следования. Пакеты просто дропаются без фрагментации.
3. Firewall: Возможно, ICMP разрешен, а TCP/443 закрыт на внешнем или внутреннем (iptables/nftables) фаерволе.
4. SSL/TLS: Проверяем, не истек ли сертификат. Браузер может блокировать соединение, хотя сервер работает.
💡 Золотое правило собеса:
Сохраняйте, запоминайте и не давайте застать себя врасплох!
#собеседование_AF #docker #devops #networking #osi #sysadmin #admin_future
👍3
🚀 DevOps: Podman 5.0 — запускаем контейнеры без Root и лишних демонов 🛡️
Если ты всё еще используешь Docker-демона, который крутится под рутом, у нас для тебя новости из 2026 года. Podman окончательно стал взрослым. Главная фишка пятой версии — полностью переписанный сетевой стек (pasta), который сделал Rootless-контейнеры (запуск от обычного юзера) такими же быстрыми, как и обычные.
Команды для старта:
Зачем это нужно: Это стандарт безопасности. В 2026 году запуск Docker под root в продакшене без веской причины считается дурным тоном.
#devops #containers #podman #docker #security #sysadmin #admin_future
Если ты всё еще используешь Docker-демона, который крутится под рутом, у нас для тебя новости из 2026 года. Podman окончательно стал взрослым. Главная фишка пятой версии — полностью переписанный сетевой стек (pasta), который сделал Rootless-контейнеры (запуск от обычного юзера) такими же быстрыми, как и обычные.
Техническая суть:
Podman не требует запущенного демона (daemonless) и позволяет запускать контейнеры в изолированных User Namespaces. Если хакер «сломает» контейнер, он окажется внутри системы с правами обычного бесправного пользователя.
Команды для старта:
# Запуск контейнера от обычного пользователя (без sudo!)
podman run -d --name my-app -p 8080:80 nginx
# Генерируем systemd-юнит, чтобы контейнер сам стартовал после ребута
podman generate systemd --name my-app --files --new
Зачем это нужно: Это стандарт безопасности. В 2026 году запуск Docker под root в продакшене без веской причины считается дурным тоном.
#devops #containers #podman #docker #security #sysadmin #admin_future
📦 Linux: Наводим порядок в Docker — удаляем «висячие» ресурсы
Коллеги, признавайтесь: как часто вы заходите на сервер и обнаруживаете, что Docker сожрал всё место образами годичной давности и остановленными контейнерами, которые «может еще пригодятся»? В 2026-м контейнеризация повсюду, и мусор в /var/lib/docker — это главная причина алертов по дискам.
Магическая команда для терминала:
Вывод: Чистый Docker — залог быстрого деплоя. Не превращайте свой сервер в кладбище контейнеров.
#linux #docker #devops #cleanup #sysadmin #admin_future
Коллеги, признавайтесь: как часто вы заходите на сервер и обнаруживаете, что Docker сожрал всё место образами годичной давности и остановленными контейнерами, которые «может еще пригодятся»? В 2026-м контейнеризация повсюду, и мусор в /var/lib/docker — это главная причина алертов по дискам.
Не нужно удалять всё по отдельности. Есть одна команда-швейцарский нож, которая вычистит всё лишнее, не сломав работающий прод.
Магическая команда для терминала:
# Удаляем неиспользуемые контейнеры, сети и "висячие" (dangling) образы
docker system prune -f
# А если нужно вычистить ВООБЩЕ всё неиспользуемое (включая старые тома)
docker system prune -a --volumes -f
Чтобы не плодить сущности. Каждый docker build оставляет после себя слои, а каждый docker stop — мертвое тело контейнера. Регулярный запуск этой команды (лучше в cron раз в неделю) экономит десятки гигабайт и избавляет от путаницы при просмотре списка образов.
Вывод: Чистый Docker — залог быстрого деплоя. Не превращайте свой сервер в кладбище контейнеров.
#linux #docker #devops #cleanup #sysadmin #admin_future
🐧 Linux: живёшь под root в контейнере — живёшь опасно. Исправляем за 10 минут
Коллеги, воскресный пост про вещь, которую игнорируют даже опытные администраторы. Зайди в любой Docker-окружение на среднестатистическом сервере и запусти:
Готов поспорить — большинство контейнеров покажут пустой User. Это означает root внутри. 79% Linux-атак в 2026 году используют легитимные системные инструменты — bash, cron, curl. Контейнер с root-процессом при любом побеге из namespace превращается в полноценный вектор атаки на хост.
Исправляется в три шага:
Зачем это нужно:
Контейнер не является изолированной средой по умолчанию. Безопасность зависит от корректной настройки. Запуск под root — это не дефолт ради удобства, это дефолт ради лени. После вчерашней CVE-2026-31431 «Copy Fail» — любой непривилегированный пользователь на хосте мог стать root. Если контейнер уже запускается как root — второй шаг атаки не нужен.
Итог: один Dockerfile и десять минут — и твои контейнеры перестают быть тривиальным вектором атаки. Запусти аудит сегодня.
#linux #docker #containers #security #hardening #sysadmin #admin_future
Коллеги, воскресный пост про вещь, которую игнорируют даже опытные администраторы. Зайди в любой Docker-окружение на среднестатистическом сервере и запусти:
docker inspect $(docker ps -q) --format '{{.Name}}: User={{.Config.User}}'
Готов поспорить — большинство контейнеров покажут пустой User. Это означает root внутри. 79% Linux-атак в 2026 году используют легитимные системные инструменты — bash, cron, curl. Контейнер с root-процессом при любом побеге из namespace превращается в полноценный вектор атаки на хост.
Исправляется в три шага:
# В Dockerfile: создаём непривилегированного пользователя
FROM ubuntu:24.04
RUN groupadd -r appgroup && \
useradd -r -g appgroup -s /sbin/nologin appuser
# Устанавливаем зависимости под root — пока ещё нужно
RUN apt-get update && apt-get install -y nginx && \
chown -R appuser:appgroup /var/log/nginx /var/cache/nginx
# Переключаемся на непривилегированного
USER appuser
CMD ["nginx", "-g", "daemon off;"]
# Для уже запущенных контейнеров — аудит прямо сейчас:
# Кто реально запускает процессы внутри:
docker exec <container> ps aux | head -5
# В docker-compose.yml — добавляем user для каждого сервиса:
# services:
# app:
# image: myapp:latest
# user: "1001:1001" # uid:gid непривилегированного пользователя
# Запрещаем privilege escalation на уровне демона Docker:
# В /etc/docker/daemon.json:
# {
# "userns-remap": "default",
# "no-new-privileges": true
# }
# Проверяем что флаг no-new-privileges работает:
docker run --security-opt no-new-privileges:true \
--user 1001 alpine whoami
Зачем это нужно:
Контейнер не является изолированной средой по умолчанию. Безопасность зависит от корректной настройки. Запуск под root — это не дефолт ради удобства, это дефолт ради лени. После вчерашней CVE-2026-31431 «Copy Fail» — любой непривилегированный пользователь на хосте мог стать root. Если контейнер уже запускается как root — второй шаг атаки не нужен.
Итог: один Dockerfile и десять минут — и твои контейнеры перестают быть тривиальным вектором атаки. Запусти аудит сегодня.
#linux #docker #containers #security #hardening #sysadmin #admin_future
🐳 Воскресный чек: Docker API на 2375 — теперь его ломает AI-агент из Telegram.
Коллеги, воскресенье — короткий пост, но проверку лучше сделать сегодня.
ФАКТЫ (отчёт ThreatDown, пересказ BleepingComputer):
Малварь Carbonato ищет Docker daemon с API без аутентификации на порту 2375.
Через API она запускает privileged-контейнер и получает доступ к хосту.
Дальше работает AI-агент на фреймворке Hermes (персона «GH0ST»). Команды он получает через Telegram, сам выполняет терминальные команды, читает вывод и решает, что делать дальше.
Крадёт облачные учётные данные, SSH-ключи, API-ключи (в том числе ключи AI-сервисов) и токены.
Закрепление: свой SSH-сервер с ключом оператора плюс cron, systemd timers, rc.local и OpenRC.
Активность прослеживается с октября 2024 по август 2026.
ИНТЕРПРЕТАЦИЯ (моя):
Уязвимости здесь нет. Вход — открытый API, который кто-то включил «на минутку». AI-агент не делает атаку умнее, он делает её дешевле: один оператор ведёт сотни хостов. Бьют не самую сильную защиту, а самую частую ошибку конфигурации.
ПРОВЕРКА:
# Слушает ли dockerd TCP
ss -ltnp | grep -E ':(2375|2376)\b'
grep -E '"hosts"|tcp://' /etc/docker/daemon.json 2>/dev/null
systemctl cat docker | grep -E -- '-H|--host'
# Privileged-контейнеры
docker ps -q | xargs -r docker inspect \
--format '{{.Name}} privileged={{.HostConfig.Privileged}} image={{.Config.Image}}'
# Следы закрепления
crontab -l; ls -la /etc/cron.d/
systemctl list-timers --all
cat /etc/rc.local 2>/dev/null
cat ~/.ssh/authorized_keys /root/.ssh/authorized_keys 2>/dev/null
ss -tnp | grep -i ssh
ЕСЛИ НУЖЕН УДАЛЁННЫЙ DOCKER:
• DOCKER_HOST=ssh://user@host — через SSH, без открытого порта
• или 2376 с TLS и проверкой клиентских сертификатов (tlsverify)
• 2375 без TLS — никогда, даже во «внутренней» сети
Если что-то нашлось: хост считаем скомпрометированным. Ротируем все ключи и токены, которые на нём были, — облачные, SSH, API. Сам хост пересобираем, а не чистим.
Итог: пять минут на ss -ltnp на каждом Docker-хосте. Сегодня эти пять минут дешевле любого инцидента.
#docker #linux #security #containers #sysadmin #admin_future
Коллеги, воскресенье — короткий пост, но проверку лучше сделать сегодня.
ФАКТЫ (отчёт ThreatDown, пересказ BleepingComputer):
Малварь Carbonato ищет Docker daemon с API без аутентификации на порту 2375.
Через API она запускает privileged-контейнер и получает доступ к хосту.
Дальше работает AI-агент на фреймворке Hermes (персона «GH0ST»). Команды он получает через Telegram, сам выполняет терминальные команды, читает вывод и решает, что делать дальше.
Крадёт облачные учётные данные, SSH-ключи, API-ключи (в том числе ключи AI-сервисов) и токены.
Закрепление: свой SSH-сервер с ключом оператора плюс cron, systemd timers, rc.local и OpenRC.
Активность прослеживается с октября 2024 по август 2026.
ИНТЕРПРЕТАЦИЯ (моя):
Уязвимости здесь нет. Вход — открытый API, который кто-то включил «на минутку». AI-агент не делает атаку умнее, он делает её дешевле: один оператор ведёт сотни хостов. Бьют не самую сильную защиту, а самую частую ошибку конфигурации.
ПРОВЕРКА:
# Слушает ли dockerd TCP
ss -ltnp | grep -E ':(2375|2376)\b'
grep -E '"hosts"|tcp://' /etc/docker/daemon.json 2>/dev/null
systemctl cat docker | grep -E -- '-H|--host'
# Privileged-контейнеры
docker ps -q | xargs -r docker inspect \
--format '{{.Name}} privileged={{.HostConfig.Privileged}} image={{.Config.Image}}'
# Следы закрепления
crontab -l; ls -la /etc/cron.d/
systemctl list-timers --all
cat /etc/rc.local 2>/dev/null
cat ~/.ssh/authorized_keys /root/.ssh/authorized_keys 2>/dev/null
ss -tnp | grep -i ssh
ЕСЛИ НУЖЕН УДАЛЁННЫЙ DOCKER:
• DOCKER_HOST=ssh://user@host — через SSH, без открытого порта
• или 2376 с TLS и проверкой клиентских сертификатов (tlsverify)
• 2375 без TLS — никогда, даже во «внутренней» сети
Если что-то нашлось: хост считаем скомпрометированным. Ротируем все ключи и токены, которые на нём были, — облачные, SSH, API. Сам хост пересобираем, а не чистим.
Итог: пять минут на ss -ltnp на каждом Docker-хосте. Сегодня эти пять минут дешевле любого инцидента.
#docker #linux #security #containers #sysadmin #admin_future
🎬 Plex2Shell: домашний медиасервер стал майнером через несколько часов после публикации эксплойта
Коллеги, интересное для тех, у кого дома или в лабе крутится Plex на NAS или в Docker.
📌 ФАКТЫ
Plex2Shell — цепочка из 4 CVE:
Механика: SSRF → доступ к внутренним функциям → запись файла в нужное место → загрузка неподписанного кодека → выполнение кода. Без логина
Уязвимы версии Plex Media Server до 1.43.3.10828, исправление — 1.43.3.10861. Plex выпустил обновление ещё 1 сентября
17 октября на ханипоте зафиксированы успешные атаки на Plex в Docker: майнер XMRig и прокси
Запросы атакующих шли на
🛠 ПРОВЕРКА
Bash
💡 В ЧЁМ СУТЬ
#selfhosted #plex #docker #nas #security #homelab #sysadmin #admin_future
Коллеги, интересное для тех, у кого дома или в лабе крутится Plex на NAS или в Docker.
📌 ФАКТЫ
Plex2Shell — цепочка из 4 CVE:
CVE-2026-96652, 96654, 96655, 96656Механика: SSRF → доступ к внутренним функциям → запись файла в нужное место → загрузка неподписанного кодека → выполнение кода. Без логина
Уязвимы версии Plex Media Server до 1.43.3.10828, исправление — 1.43.3.10861. Plex выпустил обновление ещё 1 сентября
17 октября на ханипоте зафиксированы успешные атаки на Plex в Docker: майнер XMRig и прокси
myawesomeproxyЗапросы атакующих шли на
/player/timeline/subscribe🛠 ПРОВЕРКА
Bash
# Версия Plex (ответ содержит version="...")
curl -s http://localhost:32400/identity
# Дерево процессов: у Plex не должно быть «docker», «x», xmrig, proxy
ps axjf | grep -A3 -i 'plex'
# Были ли запросы к уязвимому пути (если Plex за reverse proxy)
grep '/player/timeline/subscribe' /var/log/nginx/access.log*
💡 В ЧЁМ СУТЬ
Исправление вышло в сентябре, атаки начались в октябре — снова окно «патч есть, но не поставлен». Домашние сервисы, проброшенные наружу «для удобства», обновляют реже всего. Plex наружу — только через VPN или Tailscale, а Docker-образ — с регулярным
pull.
#selfhosted #plex #docker #nas #security #homelab #sysadmin #admin_future