#!/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 < "$CONFIG_FILE" </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 openclaw" echo "View logs: ds logs openclaw"