refactor: use Docker registry image instead of local builds
- docker-compose now pulls letsbesolutions/sysadmin-agent:latest - setup.sh pulls image instead of cloning repo and building - Removed dev-only volume mounts - Updated resource limits for production This enables proper CI/CD: push to repo → Gitea builds image → tenant servers pull latest image. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
f935f7057a
commit
230d861f24
|
|
@ -398,38 +398,8 @@ else
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "$tool_name" == "sysadmin" ]]; then
|
if [[ "$tool_name" == "sysadmin" ]]; then
|
||||||
echo "Cloning/updating sysadmin repository..."
|
echo " Pulling latest sysadmin agent image..."
|
||||||
SYSADMIN_DIR="/opt/letsbe/stacks/sysadmin"
|
docker-compose -f "$compose_file" pull
|
||||||
SYSADMIN_REPO="https://code.letsbe.solutions/letsbe/letsbe-sysadmin.git"
|
|
||||||
|
|
||||||
# Save our docker-compose.yml before clone
|
|
||||||
if [[ -f "${SYSADMIN_DIR}/docker-compose.yml" ]]; then
|
|
||||||
cp "${SYSADMIN_DIR}/docker-compose.yml" /tmp/sysadmin-compose.yml
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Clone or pull the repo
|
|
||||||
if [[ -d "${SYSADMIN_DIR}/.git" ]]; then
|
|
||||||
echo " Pulling latest changes..."
|
|
||||||
cd "${SYSADMIN_DIR}" && git pull origin main || git pull origin master
|
|
||||||
else
|
|
||||||
echo " Cloning repository..."
|
|
||||||
# Clone into temp, then move contents
|
|
||||||
rm -rf /tmp/letsbe-sysadmin
|
|
||||||
git clone "${SYSADMIN_REPO}" /tmp/letsbe-sysadmin
|
|
||||||
# Move repo contents to sysadmin dir (preserving our docker-compose)
|
|
||||||
cp -r /tmp/letsbe-sysadmin/* "${SYSADMIN_DIR}/" 2>/dev/null || true
|
|
||||||
cp -r /tmp/letsbe-sysadmin/.* "${SYSADMIN_DIR}/" 2>/dev/null || true
|
|
||||||
rm -rf /tmp/letsbe-sysadmin
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Restore our docker-compose.yml (with template variables)
|
|
||||||
if [[ -f /tmp/sysadmin-compose.yml ]]; then
|
|
||||||
cp /tmp/sysadmin-compose.yml "${SYSADMIN_DIR}/docker-compose.yml"
|
|
||||||
rm /tmp/sysadmin-compose.yml
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo " Building sysadmin image..."
|
|
||||||
docker-compose -f "$compose_file" build
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Starting $tool_name..."
|
echo "Starting $tool_name..."
|
||||||
|
|
@ -501,39 +471,16 @@ SYSADMIN_COMPOSE="/opt/letsbe/stacks/sysadmin/docker-compose.yml"
|
||||||
if [[ -f "$SYSADMIN_COMPOSE" ]]; then
|
if [[ -f "$SYSADMIN_COMPOSE" ]]; then
|
||||||
# Check if sysadmin is already running
|
# Check if sysadmin is already running
|
||||||
if docker ps --format '{{.Names}}' | grep -q "agent$"; then
|
if docker ps --format '{{.Names}}' | grep -q "agent$"; then
|
||||||
echo "Sysadmin agent already running, updating..."
|
echo " Sysadmin agent already running, updating..."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
SYSADMIN_DIR="/opt/letsbe/stacks/sysadmin"
|
echo " Pulling latest sysadmin agent image..."
|
||||||
SYSADMIN_REPO="https://code.letsbe.solutions/letsbe/letsbe-sysadmin.git"
|
docker-compose -f "$SYSADMIN_COMPOSE" pull
|
||||||
|
|
||||||
# Save our docker-compose.yml before clone
|
|
||||||
cp "${SYSADMIN_DIR}/docker-compose.yml" /tmp/sysadmin-compose.yml
|
|
||||||
|
|
||||||
# Clone or pull the repo
|
|
||||||
if [[ -d "${SYSADMIN_DIR}/.git" ]]; then
|
|
||||||
echo " Pulling latest sysadmin changes..."
|
|
||||||
cd "${SYSADMIN_DIR}" && git pull origin main || git pull origin master || true
|
|
||||||
else
|
|
||||||
echo " Cloning sysadmin repository..."
|
|
||||||
rm -rf /tmp/letsbe-sysadmin
|
|
||||||
git clone "${SYSADMIN_REPO}" /tmp/letsbe-sysadmin
|
|
||||||
cp -r /tmp/letsbe-sysadmin/* "${SYSADMIN_DIR}/" 2>/dev/null || true
|
|
||||||
cp -r /tmp/letsbe-sysadmin/.* "${SYSADMIN_DIR}/" 2>/dev/null || true
|
|
||||||
rm -rf /tmp/letsbe-sysadmin
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Restore our docker-compose.yml (with template variables replaced)
|
|
||||||
cp /tmp/sysadmin-compose.yml "${SYSADMIN_DIR}/docker-compose.yml"
|
|
||||||
rm /tmp/sysadmin-compose.yml
|
|
||||||
|
|
||||||
echo " Building sysadmin image..."
|
|
||||||
docker-compose -f "$SYSADMIN_COMPOSE" build
|
|
||||||
|
|
||||||
echo " Starting sysadmin agent..."
|
echo " Starting sysadmin agent..."
|
||||||
docker-compose -f "$SYSADMIN_COMPOSE" up -d
|
docker-compose -f "$SYSADMIN_COMPOSE" up -d
|
||||||
|
|
||||||
echo "Sysadmin agent deployed successfully."
|
echo " Sysadmin agent deployed successfully."
|
||||||
else
|
else
|
||||||
echo "Warning: Sysadmin docker-compose.yml not found at $SYSADMIN_COMPOSE"
|
echo "Warning: Sysadmin docker-compose.yml not found at $SYSADMIN_COMPOSE"
|
||||||
fi
|
fi
|
||||||
|
|
|
||||||
|
|
@ -2,9 +2,7 @@ version: "3.8"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
agent:
|
agent:
|
||||||
build:
|
image: letsbesolutions/sysadmin-agent:latest
|
||||||
context: .
|
|
||||||
dockerfile: Dockerfile
|
|
||||||
container_name: {{ customer }}-agent
|
container_name: {{ customer }}-agent
|
||||||
|
|
||||||
environment:
|
environment:
|
||||||
|
|
@ -17,17 +15,13 @@ services:
|
||||||
# credentials are persisted to ~/.letsbe-agent/credentials.json
|
# credentials are persisted to ~/.letsbe-agent/credentials.json
|
||||||
- REGISTRATION_TOKEN={{ sysadmin_registration_token }}
|
- REGISTRATION_TOKEN={{ sysadmin_registration_token }}
|
||||||
|
|
||||||
# Legacy auth (deprecated - for backward compatibility only)
|
|
||||||
# Uncomment if using older orchestrator version:
|
|
||||||
# - AGENT_TOKEN={{ sysadmin_agent_token }}
|
|
||||||
|
|
||||||
# Timing (seconds)
|
# Timing (seconds)
|
||||||
- HEARTBEAT_INTERVAL=${HEARTBEAT_INTERVAL:-30}
|
- HEARTBEAT_INTERVAL=${HEARTBEAT_INTERVAL:-30}
|
||||||
- POLL_INTERVAL=${POLL_INTERVAL:-5}
|
- POLL_INTERVAL=${POLL_INTERVAL:-5}
|
||||||
|
|
||||||
# Logging
|
# Logging
|
||||||
- LOG_LEVEL=${LOG_LEVEL:-DEBUG}
|
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
||||||
- LOG_JSON=${LOG_JSON:-false}
|
- LOG_JSON=${LOG_JSON:-true}
|
||||||
|
|
||||||
# Resilience
|
# Resilience
|
||||||
- MAX_CONCURRENT_TASKS=${MAX_CONCURRENT_TASKS:-3}
|
- MAX_CONCURRENT_TASKS=${MAX_CONCURRENT_TASKS:-3}
|
||||||
|
|
@ -42,12 +36,9 @@ services:
|
||||||
- SHELL_TIMEOUT=${SHELL_TIMEOUT:-60}
|
- SHELL_TIMEOUT=${SHELL_TIMEOUT:-60}
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
# Docker socket for docker executor
|
# Docker socket for container management
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
|
|
||||||
# Hot reload in development
|
|
||||||
- ./app:/app/app:ro
|
|
||||||
|
|
||||||
# Host directory mounts for real infrastructure access
|
# Host directory mounts for real infrastructure access
|
||||||
- /opt/letsbe/env:/opt/letsbe/env
|
- /opt/letsbe/env:/opt/letsbe/env
|
||||||
- /opt/letsbe/stacks:/opt/letsbe/stacks
|
- /opt/letsbe/stacks:/opt/letsbe/stacks
|
||||||
|
|
@ -56,8 +47,8 @@ services:
|
||||||
# Credential persistence (survives restarts without re-registration)
|
# Credential persistence (survives restarts without re-registration)
|
||||||
- agent_home:/home/agent/.letsbe-agent
|
- agent_home:/home/agent/.letsbe-agent
|
||||||
|
|
||||||
# Run as root for Docker socket access in dev
|
# Run as root for Docker socket access
|
||||||
# In production, use Docker group membership instead
|
# TODO: Use Docker group membership instead for better security
|
||||||
user: root
|
user: root
|
||||||
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
|
|
@ -66,11 +57,11 @@ services:
|
||||||
deploy:
|
deploy:
|
||||||
resources:
|
resources:
|
||||||
limits:
|
limits:
|
||||||
cpus: '0.5'
|
cpus: '1.0'
|
||||||
memory: 256M
|
memory: 512M
|
||||||
reservations:
|
reservations:
|
||||||
cpus: '0.1'
|
cpus: '0.1'
|
||||||
memory: 64M
|
memory: 128M
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
agent_home:
|
agent_home:
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue