From 961e41d36182c8134b5f7bda77831e192b0e7407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B0=D0=BA=D1=81=D0=B8=D0=BC=D0=BA=D0=B0?= Date: Thu, 26 Feb 2026 22:32:14 +0300 Subject: [PATCH] Oleg Agent v1.0: Dockerfile, entrypoint, docker-compose, install.sh --- projects/dttb/oleg-agent/Dockerfile | 37 +++++++++++++++ projects/dttb/oleg-agent/docker-compose.yml | 26 +++++++++++ projects/dttb/oleg-agent/entrypoint.sh | 41 ++++++++++++++++ projects/dttb/oleg-agent/install.sh | 52 +++++++++++++++++++++ 4 files changed, 156 insertions(+) create mode 100644 projects/dttb/oleg-agent/Dockerfile create mode 100644 projects/dttb/oleg-agent/docker-compose.yml create mode 100644 projects/dttb/oleg-agent/entrypoint.sh create mode 100755 projects/dttb/oleg-agent/install.sh diff --git a/projects/dttb/oleg-agent/Dockerfile b/projects/dttb/oleg-agent/Dockerfile new file mode 100644 index 0000000..321a946 --- /dev/null +++ b/projects/dttb/oleg-agent/Dockerfile @@ -0,0 +1,37 @@ +FROM debian:bookworm-slim + +LABEL maintainer="Oleg Batlaev " +LABEL description="Oleg Agent — портативный DevOps-агент" + +# Базовые инструменты +RUN apt-get update && apt-get install -y --no-install-recommends \ + curl wget git ssh nano htop \ + nmap net-tools dnsutils iputils-ping \ + python3 python3-pip python3-venv \ + jq yq ca-certificates gnupg \ + openssh-client rsync \ + && rm -rf /var/lib/apt/lists/* + +# Docker CLI (для управления удалёнными Docker) +RUN install -m 0755 -d /etc/apt/keyrings && \ + curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc && \ + chmod a+r /etc/apt/keyrings/docker.asc && \ + echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian bookworm stable" > /etc/apt/sources.list.d/docker.list && \ + apt-get update && apt-get install -y --no-install-recommends docker-ce-cli && \ + rm -rf /var/lib/apt/lists/* + +# Ansible +RUN python3 -m venv /opt/ansible && \ + /opt/ansible/bin/pip install ansible paramiko && \ + ln -s /opt/ansible/bin/ansible /usr/local/bin/ansible && \ + ln -s /opt/ansible/bin/ansible-playbook /usr/local/bin/ansible-playbook + +# Рабочая директория +WORKDIR /workspace + +# Скрипт инициализации +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] +CMD ["bash"] diff --git a/projects/dttb/oleg-agent/docker-compose.yml b/projects/dttb/oleg-agent/docker-compose.yml new file mode 100644 index 0000000..db997b7 --- /dev/null +++ b/projects/dttb/oleg-agent/docker-compose.yml @@ -0,0 +1,26 @@ +services: + agent: + build: . + image: oleg-agent:latest + container_name: oleg-agent + hostname: oleg-agent + restart: unless-stopped + stdin_open: true + tty: true + environment: + - GITEA_URL=http://git.dttb.ru + - GITEA_USER=oleg + - GITEA_PASS=OL260380eg + - PROXMOX_URL=https://10.0.0.250:8006 + - NEXTCLOUD_URL=https://dttb.ru + volumes: + - agent-data:/workspace + - ./secrets:/secrets:ro + # Если NetBird в host mode: + # network_mode: host + extra_hosts: + - "git.dttb.ru:10.0.0.189" + - "dttb.ru:10.0.0.230" + +volumes: + agent-data: diff --git a/projects/dttb/oleg-agent/entrypoint.sh b/projects/dttb/oleg-agent/entrypoint.sh new file mode 100644 index 0000000..affc3a6 --- /dev/null +++ b/projects/dttb/oleg-agent/entrypoint.sh @@ -0,0 +1,41 @@ +#!/bin/bash +set -e + +echo "🤖 Oleg Agent запускается..." + +# Настройка git +git config --global user.name "Oleg Agent" +git config --global user.email "oleg@dttb.ru" + +# Клонируем knowledge-base если есть доступ к Gitea +KB_DIR="/workspace/knowledge-base" +if [ -n "$GITEA_URL" ] && [ ! -d "$KB_DIR" ]; then + echo "📚 Клонирую knowledge-base..." + git clone "${GITEA_URL}/oleg/knowledge-base.git" "$KB_DIR" 2>/dev/null && \ + echo "✅ Knowledge-base подключена" || \ + echo "⚠️ Не удалось клонировать (проверь VPN)" +elif [ -d "$KB_DIR" ]; then + echo "📚 Обновляю knowledge-base..." + cd "$KB_DIR" && git pull --quiet 2>/dev/null +fi + +# SSH ключи +if [ -d "/secrets/ssh" ]; then + mkdir -p ~/.ssh + cp /secrets/ssh/* ~/.ssh/ 2>/dev/null + chmod 700 ~/.ssh + chmod 600 ~/.ssh/* 2>/dev/null + echo "🔑 SSH ключи загружены" +fi + +# Показать статус +echo "" +echo "════════════════════════════════════════" +echo " 🤖 Oleg Agent v1.0" +echo " 📍 $(hostname) / $(hostname -I | awk '{print $1}')" +echo " 📚 KB: $([ -d "$KB_DIR" ] && echo '✅' || echo '❌')" +echo " 🔗 Gitea: ${GITEA_URL:-не задан}" +echo "════════════════════════════════════════" +echo "" + +exec "$@" diff --git a/projects/dttb/oleg-agent/install.sh b/projects/dttb/oleg-agent/install.sh new file mode 100755 index 0000000..79d0929 --- /dev/null +++ b/projects/dttb/oleg-agent/install.sh @@ -0,0 +1,52 @@ +#!/bin/bash +# Oleg Agent — установка на Linux +# curl -sSL https://raw.githubusercontent.com/... | bash + +set -e + +echo "🤖 Установка Oleg Agent..." + +# Проверка Docker +if ! command -v docker &> /dev/null; then + echo "❌ Docker не найден. Установите Docker и повторите." + echo " curl -fsSL https://get.docker.com | bash" + exit 1 +fi + +# Проверка NetBird +if command -v netbird &> /dev/null; then + NB_STATUS=$(netbird status 2>/dev/null | grep -c "Connected" || true) + if [ "$NB_STATUS" -gt 0 ]; then + echo "✅ NetBird подключён" + else + echo "⚠️ NetBird установлен, но не подключён. Выполните: sudo netbird up" + fi +else + echo "⚠️ NetBird не найден. Рекомендуется установить:" + echo " curl -fsSL https://pkgs.netbird.io/install.sh | bash" + echo " sudo netbird up" +fi + +# Создаём директорию +AGENT_DIR="$HOME/oleg-agent" +mkdir -p "$AGENT_DIR/secrets/ssh" + +# Скачиваем файлы (или клонируем из Gitea) +echo "📥 Загрузка агента..." +if command -v git &> /dev/null; then + git clone http://git.dttb.ru/oleg/knowledge-base.git /tmp/kb-tmp 2>/dev/null && \ + cp -r /tmp/kb-tmp/projects/dttb/oleg-agent/* "$AGENT_DIR/" && \ + rm -rf /tmp/kb-tmp && \ + echo "✅ Файлы загружены из Gitea" +fi + +cd "$AGENT_DIR" + +# Запуск +echo "🚀 Запуск агента..." +docker compose up -d --build + +echo "" +echo "✅ Oleg Agent установлен!" +echo " Подключиться: docker exec -it oleg-agent bash" +echo " Логи: docker logs oleg-agent"