Oleg Agent v1.0: Dockerfile, entrypoint, docker-compose, install.sh
This commit is contained in:
37
projects/dttb/oleg-agent/Dockerfile
Normal file
37
projects/dttb/oleg-agent/Dockerfile
Normal file
@@ -0,0 +1,37 @@
|
||||
FROM debian:bookworm-slim
|
||||
|
||||
LABEL maintainer="Oleg Batlaev <oleg@dttb.ru>"
|
||||
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"]
|
||||
26
projects/dttb/oleg-agent/docker-compose.yml
Normal file
26
projects/dttb/oleg-agent/docker-compose.yml
Normal file
@@ -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:
|
||||
41
projects/dttb/oleg-agent/entrypoint.sh
Normal file
41
projects/dttb/oleg-agent/entrypoint.sh
Normal file
@@ -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 "$@"
|
||||
52
projects/dttb/oleg-agent/install.sh
Executable file
52
projects/dttb/oleg-agent/install.sh
Executable file
@@ -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"
|
||||
Reference in New Issue
Block a user