Add openclaw dropshell template for personal AI assistant
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 14s
All checks were successful
Test and Publish Templates / test-and-publish (push) Successful in 14s
This commit is contained in:
143
openclaw/install.sh
Executable file
143
openclaw/install.sh
Executable file
@@ -0,0 +1,143 @@
|
||||
#!/bin/bash
|
||||
source "${AGENT_PATH}/common.sh"
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
_check_required_env_vars "CONTAINER_NAME" "IMAGE_REGISTRY" "IMAGE_REPO" "IMAGE_TAG" "DATA_PATH" "GATEWAY_PORT"
|
||||
|
||||
# Require at least one LLM provider
|
||||
if [ -z "$ANTHROPIC_API_KEY" ] && [ -z "$OPENROUTER_API_KEY" ]; then
|
||||
_die "At least one LLM API key must be set (ANTHROPIC_API_KEY or OPENROUTER_API_KEY) in config/service.env"
|
||||
fi
|
||||
|
||||
_check_docker_installed || _die "Docker test failed, aborting installation..."
|
||||
|
||||
# Create data directories
|
||||
mkdir -p "${DATA_PATH}/config"
|
||||
mkdir -p "${DATA_PATH}/workspace"
|
||||
|
||||
# Set ownership to node user (uid 1000) used by the OpenClaw container
|
||||
chown -R 1000:1000 "${DATA_PATH}"
|
||||
|
||||
# Generate gateway token if one doesn't already exist
|
||||
TOKEN_FILE="${DATA_PATH}/gateway.token"
|
||||
if [ -f "$TOKEN_FILE" ]; then
|
||||
GATEWAY_TOKEN=$(cat "$TOKEN_FILE")
|
||||
else
|
||||
GATEWAY_TOKEN=$(openssl rand -hex 32)
|
||||
echo -n "$GATEWAY_TOKEN" > "$TOKEN_FILE"
|
||||
chown 1000:1000 "$TOKEN_FILE"
|
||||
fi
|
||||
|
||||
# Generate openclaw.json configuration
|
||||
CONFIG_FILE="${DATA_PATH}/config/openclaw.json"
|
||||
|
||||
# Build model configuration
|
||||
MODEL_PRIMARY="${DEFAULT_MODEL:-anthropic/claude-sonnet-4-5}"
|
||||
MODEL_FALLBACK="${FALLBACK_MODEL:-openrouter/anthropic/claude-sonnet-4-5}"
|
||||
|
||||
# Build channels section
|
||||
TELEGRAM_CONFIG=""
|
||||
if [ -n "$TELEGRAM_BOT_TOKEN" ]; then
|
||||
TELEGRAM_CONFIG=$(cat <<TGEOF
|
||||
"telegram": {
|
||||
"enabled": true,
|
||||
"token": "${TELEGRAM_BOT_TOKEN}",
|
||||
"dmPolicy": "${DM_POLICY:-pairing}"
|
||||
}
|
||||
TGEOF
|
||||
)
|
||||
fi
|
||||
|
||||
# Build env section for API keys
|
||||
ENV_ENTRIES=""
|
||||
if [ -n "$ANTHROPIC_API_KEY" ]; then
|
||||
ENV_ENTRIES="\"ANTHROPIC_API_KEY\": \"${ANTHROPIC_API_KEY}\""
|
||||
fi
|
||||
if [ -n "$OPENROUTER_API_KEY" ]; then
|
||||
[ -n "$ENV_ENTRIES" ] && ENV_ENTRIES="${ENV_ENTRIES},"
|
||||
ENV_ENTRIES="${ENV_ENTRIES}
|
||||
\"OPENROUTER_API_KEY\": \"${OPENROUTER_API_KEY}\""
|
||||
fi
|
||||
|
||||
# Build fallbacks array
|
||||
FALLBACKS_JSON=""
|
||||
if [ -n "$OPENROUTER_API_KEY" ] && [ -n "$ANTHROPIC_API_KEY" ]; then
|
||||
FALLBACKS_JSON="\"fallbacks\": [\"${MODEL_FALLBACK}\"],"
|
||||
fi
|
||||
|
||||
cat > "$CONFIG_FILE" <<CFGEOF
|
||||
{
|
||||
"env": {
|
||||
${ENV_ENTRIES}
|
||||
},
|
||||
"agents": {
|
||||
"defaults": {
|
||||
"model": {
|
||||
"primary": "${MODEL_PRIMARY}",
|
||||
${FALLBACKS_JSON}
|
||||
"params": {}
|
||||
}
|
||||
}
|
||||
},
|
||||
"channels": {
|
||||
${TELEGRAM_CONFIG}
|
||||
},
|
||||
"gateway": {
|
||||
"token": "${GATEWAY_TOKEN}",
|
||||
"bind": "lan",
|
||||
"auth": {
|
||||
"mode": "password"
|
||||
}
|
||||
}
|
||||
}
|
||||
CFGEOF
|
||||
|
||||
chown 1000:1000 "$CONFIG_FILE"
|
||||
|
||||
# Export variables for docker compose
|
||||
export CONTAINER_NAME DATA_PATH GATEWAY_PORT
|
||||
export IMAGE_REGISTRY IMAGE_REPO IMAGE_TAG
|
||||
export ANTHROPIC_API_KEY OPENROUTER_API_KEY
|
||||
|
||||
cd "$SCRIPT_DIR" || _die "Failed to change to script directory"
|
||||
|
||||
# Pull images
|
||||
docker compose -p "${CONTAINER_NAME}" pull || _die "Failed to pull images"
|
||||
|
||||
# Stop existing containers
|
||||
docker compose -p "${CONTAINER_NAME}" down 2>/dev/null || true
|
||||
|
||||
# Start containers
|
||||
docker compose -p "${CONTAINER_NAME}" up -d || _die "Failed to start containers"
|
||||
|
||||
echo ""
|
||||
echo "=========================================="
|
||||
echo "OpenClaw installation complete!"
|
||||
echo "=========================================="
|
||||
echo ""
|
||||
echo "Gateway Token (save this!):"
|
||||
echo " ${GATEWAY_TOKEN}"
|
||||
echo ""
|
||||
echo "Web Dashboard:"
|
||||
echo " http://localhost:${GATEWAY_PORT}"
|
||||
echo " Paste the gateway token above into Settings to authenticate."
|
||||
echo ""
|
||||
if [ -n "$TELEGRAM_BOT_TOKEN" ]; then
|
||||
echo "Telegram: Enabled - send a message to your bot to start!"
|
||||
fi
|
||||
if [ -n "$GMAIL_ADDRESS" ] && [ -n "$GMAIL_APP_PASSWORD" ]; then
|
||||
echo ""
|
||||
echo "Gmail: To enable email, install the IMAP skill after the gateway is running:"
|
||||
echo " docker exec ${CONTAINER_NAME} openclaw skills install imap-smtp-email"
|
||||
echo " Then configure it in the Control UI (http://localhost:${GATEWAY_PORT})"
|
||||
echo " IMAP: imap.gmail.com:993 (TLS) | SMTP: smtp.gmail.com:587 (STARTTLS)"
|
||||
echo " Username: ${GMAIL_ADDRESS}"
|
||||
echo " Password: (your app password from service.env)"
|
||||
fi
|
||||
echo ""
|
||||
echo "WebChat: Always available at http://localhost:${GATEWAY_PORT}"
|
||||
echo ""
|
||||
echo "To add WhatsApp (interactive, requires QR code):"
|
||||
echo " docker exec -it ${CONTAINER_NAME} openclaw channels login"
|
||||
echo ""
|
||||
echo "Check status: ds status <server> openclaw"
|
||||
echo "View logs: ds logs <server> openclaw"
|
||||
Reference in New Issue
Block a user