Files
EZ-Homelab/docker-compose/ez-assistant/ez-assistant-integration.sh

317 lines
8.0 KiB
Bash
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# EZ-Assistant Integration for EZ-Homelab
# This file contains functions to be integrated into ez-homelab.sh
# EZ-Assistant Installation Functions
# Add these functions to your ez-homelab.sh script
check_ez_assistant_requirements() {
echo "🔍 Checking EZ-Assistant requirements..."
# Check Docker
if ! command -v docker &> /dev/null; then
echo "❌ Docker is not installed. Please install Docker first."
return 1
fi
# Check if Docker is running
if ! docker info &> /dev/null; then
echo "❌ Docker daemon is not running. Please start Docker."
return 1
fi
# Check Git
if ! command -v git &> /dev/null; then
echo "❌ Git is not installed. Please install Git."
return 1
fi
# Check available disk space (need at least 2GB)
local available_space=$(df /tmp | tail -1 | awk '{print $4}')
if [ "$available_space" -lt 2097152 ]; then # 2GB in KB
echo "❌ Insufficient disk space. Need at least 2GB free."
return 1
fi
# Check internet connectivity
if ! ping -c 1 github.com &> /dev/null; then
echo "❌ No internet connection. Required for downloading Moltbot."
return 1
fi
echo "✅ System requirements met"
return 0
}
build_ez_assistant_image() {
local build_dir="/tmp/moltbot-build-$$"
local image_name="moltbot:local"
echo "🔨 Building EZ-Assistant Docker image..."
echo " This may take 5-10 minutes depending on your internet connection"
echo ""
# Create temporary build directory
mkdir -p "$build_dir"
cd "$build_dir"
# Clone Moltbot repository
echo "📥 Cloning Moltbot repository..."
if ! git clone https://github.com/moltbot/moltbot.git .; then
echo "❌ Failed to clone Moltbot repository"
cd /
rm -rf "$build_dir"
return 1
fi
# Create Dockerfile for the build
cat > Dockerfile << 'EOF'
FROM node:22-slim
# Install system dependencies
RUN apt-get update && apt-get install -y \
python3 \
make \
g++ \
git \
&& rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Copy package files
COPY package*.json ./
COPY pnpm-lock.yaml ./
# Install pnpm
RUN npm install -g pnpm
# Install dependencies
RUN pnpm install --frozen-lockfile
# Copy source code
COPY . .
# Build the application
RUN pnpm run build
# Expose ports
EXPOSE 3000 3001
# Set environment variables
ENV NODE_ENV=production
# Create non-root user
RUN useradd -m -u 1001 moltbot
USER moltbot
# Start the application
CMD ["pnpm", "start"]
EOF
# Build the Docker image
echo "🏗️ Building Docker image..."
if ! docker build -t "$image_name" .; then
echo "❌ Failed to build Docker image"
cd /
rm -rf "$build_dir"
return 1
fi
# Clean up
cd /
rm -rf "$build_dir"
echo "✅ Docker image built successfully: $image_name"
return 0
}
setup_ez_assistant_config() {
local stack_dir="/opt/stacks/ez-assistant"
echo "⚙️ Setting up EZ-Assistant configuration..."
# Create stack directory
mkdir -p "$stack_dir"
# Create .env file if it doesn't exist
if [[ ! -f "$stack_dir/.env" ]]; then
cat > "$stack_dir/.env" << 'EOF'
# EZ-Assistant Environment Configuration
# Add your API keys and bot tokens below
# AI Service API Keys (required for AI functionality)
# Get from: https://console.anthropic.com/
CLAUDE_API_KEY=your_claude_api_key_here
# Bot Tokens (optional - for Telegram/Discord integration)
# Telegram: Talk to @BotFather on Telegram to create a bot
TELEGRAM_BOT_TOKEN=your_telegram_bot_token_here
# Discord: Create at https://discord.com/developers/applications
DISCORD_BOT_TOKEN=your_discord_bot_token_here
# Gateway Configuration
CLAWDBOT_GATEWAY_TOKEN=your_secure_gateway_token_here
CLAWDBOT_CLI_TOKEN=your_secure_cli_token_here
# Web UI Configuration
CLAWDBOT_WEB_USERNAME=admin
CLAWDBOT_WEB_PASSWORD=change_this_password
EOF
echo "📝 Created $stack_dir/.env - Please edit with your API keys"
else
echo " .env file already exists"
fi
# Create moltbot config directory
mkdir -p "$stack_dir/moltbot/config"
# Create moltbot.json config
cat > "$stack_dir/moltbot/config/moltbot.json" << 'EOF'
{
"gateway": {
"port": 3001,
"token": "${CLAWDBOT_GATEWAY_TOKEN}",
"cors": {
"origin": "*"
}
},
"cli": {
"token": "${CLAWDBOT_CLI_TOKEN}",
"gatewayUrl": "http://moltbot-gateway:3001"
},
"web": {
"port": 3000,
"username": "${CLAWDBOT_WEB_USERNAME}",
"password": "${CLAWDBOT_WEB_PASSWORD}",
"gatewayUrl": "http://moltbot-gateway:3001"
},
"ai": {
"provider": "claude",
"apiKey": "${CLAUDE_API_KEY}"
},
"bots": {
"telegram": {
"enabled": true,
"token": "${TELEGRAM_BOT_TOKEN}"
},
"discord": {
"enabled": true,
"token": "${DISCORD_BOT_TOKEN}"
}
}
}
EOF
echo "✅ Configuration files created"
return 0
}
install_ez_assistant() {
local stack_dir="/opt/stacks/ez-assistant"
echo "🤖 Installing EZ-Assistant..."
echo " This will build Moltbot from source (5-10 minutes)"
echo ""
# Check requirements
if ! check_ez_assistant_requirements; then
echo "❌ Requirements not met. Skipping EZ-Assistant installation."
return 1
fi
# Build Docker image
if ! build_ez_assistant_image; then
echo "❌ Failed to build EZ-Assistant image."
return 1
fi
# Setup configuration
if ! setup_ez_assistant_config; then
echo "❌ Failed to setup EZ-Assistant configuration."
return 1
fi
# Create docker-compose.yml
cat > "$stack_dir/docker-compose.yml" << 'EOF'
version: '3.8'
services:
moltbot-gateway:
image: moltbot:local
container_name: moltbot-gateway
restart: unless-stopped
environment:
- CLAWDBOT_MODE=gateway
env_file:
- .env
volumes:
- ./moltbot/config:/app/config:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- ez-homelab
labels:
- "traefik.enable=true"
- "traefik.http.routers.assistant.rule=Host(`assistant.yourdomain.com`)"
- "traefik.http.routers.assistant.entrypoints=websecure"
- "traefik.http.routers.assistant.tls.certresolver=letsencrypt"
- "traefik.http.services.assistant.loadbalancer.server.port=3000"
- "traefik.http.middlewares.assistant-websocket.headers.customrequestheaders.X-Forwarded-Proto=https"
- "traefik.http.middlewares.assistant-websocket.headers.customrequestheaders.X-Real-IP=$remote"
- "traefik.http.middlewares.assistant-websocket.headers.customrequestheaders.X-Forwarded-Host=$host"
- "traefik.http.routers.assistant.middlewares=assistant-websocket"
moltbot-cli:
image: moltbot:local
container_name: moltbot-cli
restart: unless-stopped
environment:
- CLAWDBOT_MODE=cli
env_file:
- .env
volumes:
- ./moltbot/config:/app/config:ro
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- ez-homelab
depends_on:
- moltbot-gateway
networks:
ez-homelab:
external: true
EOF
# Start the services
echo "🚀 Starting EZ-Assistant services..."
cd "$stack_dir"
if ! docker-compose up -d; then
echo "❌ Failed to start EZ-Assistant services."
return 1
fi
# Wait for services to be healthy
echo "⏳ Waiting for services to start..."
sleep 10
# Check if services are running
if docker-compose ps | grep -q "Up"; then
echo "✅ EZ-Assistant services started successfully!"
else
echo "⚠️ Services may still be starting. Check status with: docker-compose ps"
fi
echo ""
echo "🔑 Important: Configure your AI service keys and bot tokens in:"
echo " $stack_dir/.env"
echo ""
echo "🤖 Your EZ-Assistant will be available at:"
echo " https://assistant.yourdomain.com (after Traefik setup)"
echo ""
echo "📚 For setup instructions, visit:"
echo " https://docs.ez-homelab.com/assistant"
return 0
}