Files
GoClaw/install.sh
2026-03-20 16:39:29 -04:00

141 lines
5.6 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
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.
#!/usr/bin/env bash
# GoClaw Control Center — однострочная установка
# Использование: curl -fsSL https://git.softuniq.eu/UniqAI/GoClaw/raw/branch/main/install.sh | bash
set -euo pipefail
REPO_URL="https://git.softuniq.eu/UniqAI/GoClaw.git"
INSTALL_DIR="${GOCLAW_DIR:-$HOME/goclaw}"
COMPOSE_FILE="docker/docker-stack.yml"
# Цвета
RED='\033[0;31m'
GREEN='\033[0;32m'
CYAN='\033[0;36m'
YELLOW='\033[1;33m'
NC='\033[0m'
banner() {
echo -e "${CYAN}"
echo " ██████╗ ██████╗ ██████╗██╗ █████╗ ██╗ ██╗"
echo " ██╔════╝ ██╔═══██╗██╔════╝██║ ██╔══██╗██║ ██║"
echo " ██║ ███╗██║ ██║██║ ██║ ███████║██║ █╗ ██║"
echo " ██║ ██║██║ ██║██║ ██║ ██╔══██║██║███╗██║"
echo " ╚██████╔╝╚██████╔╝╚██████╗███████╗██║ ██║╚███╔███╔╝"
echo " ╚═════╝ ╚═════╝ ╚═════╝╚══════╝╚═╝ ╚═╝ ╚══╝╚══╝ "
echo -e "${NC}"
echo -e "${CYAN} GoClaw Control Center — AI Agent Orchestration Platform${NC}"
echo -e "${CYAN} https://git.softuniq.eu/UniqAI/GoClaw${NC}"
echo ""
}
info() { echo -e "${CYAN}[INFO]${NC} $*"; }
success() { echo -e "${GREEN}[OK]${NC} $*"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*"; }
error() { echo -e "${RED}[ERROR]${NC} $*"; exit 1; }
check_deps() {
info "Проверка зависимостей..."
for cmd in git docker; do
if ! command -v "$cmd" &>/dev/null; then
error "Не найден '$cmd'. Установите его и повторите."
fi
done
# Проверяем docker compose (v2) или docker-compose (v1)
if docker compose version &>/dev/null 2>&1; then
COMPOSE_CMD="docker compose"
elif command -v docker-compose &>/dev/null; then
COMPOSE_CMD="docker-compose"
else
error "Не найден 'docker compose' или 'docker-compose'. Установите Docker Compose."
fi
success "Все зависимости найдены (compose: $COMPOSE_CMD)"
}
clone_or_update() {
if [ -d "$INSTALL_DIR/.git" ]; then
info "Обновление существующей установки в $INSTALL_DIR..."
git -C "$INSTALL_DIR" pull --ff-only
success "Репозиторий обновлён"
else
info "Клонирование репозитория в $INSTALL_DIR..."
git clone "$REPO_URL" "$INSTALL_DIR"
success "Репозиторий клонирован"
fi
}
setup_env() {
local env_file="$INSTALL_DIR/.env"
if [ ! -f "$env_file" ]; then
info "Создание .env из шаблона..."
cp "$INSTALL_DIR/.env.example" "$env_file"
# Генерация случайного JWT_SECRET
local jwt_secret
jwt_secret=$(openssl rand -hex 32 2>/dev/null || cat /dev/urandom | tr -dc 'a-zA-Z0-9' | head -c 64)
sed -i "s|JWT_SECRET=.*|JWT_SECRET=${jwt_secret}|" "$env_file"
warn "Файл .env создан. Укажите OLLAMA_API_KEY:"
warn " nano $env_file"
echo ""
read -rp " Введите OLLAMA_API_KEY (или Enter для пропуска): " api_key
if [ -n "$api_key" ]; then
sed -i "s|OLLAMA_API_KEY=.*|OLLAMA_API_KEY=${api_key}|" "$env_file"
success "OLLAMA_API_KEY сохранён"
else
warn "OLLAMA_API_KEY не задан — чат и список моделей будут недоступны"
fi
else
success ".env уже существует, пропускаем"
fi
}
start_services() {
info "Запуск GoClaw Control Center..."
cd "$INSTALL_DIR"
# Проверяем наличие docker-compose.yml (для простого запуска без Swarm)
if [ -f "docker-compose.yml" ]; then
$COMPOSE_CMD up -d
elif [ -f "$COMPOSE_FILE" ]; then
# Swarm mode
if ! docker info 2>/dev/null | grep -q "Swarm: active"; then
info "Инициализация Docker Swarm..."
docker swarm init --advertise-addr "$(hostname -I | awk '{print $1}')" 2>/dev/null || true
fi
docker stack deploy -c "$COMPOSE_FILE" goclaw
else
error "Не найден docker-compose.yml или $COMPOSE_FILE"
fi
}
print_success() {
echo ""
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo -e "${GREEN} GoClaw Control Center успешно запущен!${NC}"
echo -e "${GREEN}━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━${NC}"
echo ""
local ip
ip=$(hostname -I 2>/dev/null | awk '{print $1}' || echo "localhost")
echo -e " ${CYAN}Web UI:${NC} http://${ip}:3000"
echo -e " ${CYAN}Gateway API:${NC} http://${ip}:18789"
echo -e " ${CYAN}Конфиг:${NC} $INSTALL_DIR/.env"
echo ""
echo -e " Управление:"
echo -e " ${YELLOW}Остановить:${NC} cd $INSTALL_DIR && docker compose down"
echo -e " ${YELLOW}Логи:${NC} cd $INSTALL_DIR && docker compose logs -f"
echo -e " ${YELLOW}Обновить:${NC} cd $INSTALL_DIR && git pull && docker compose up -d --build"
echo ""
}
main() {
banner
check_deps
clone_or_update
setup_env
start_services
print_success
}
main "$@"