#!/bin/sh REG=git.sys.smsynergy.ru VERSION=v0.0.1 . ./.env echo $DOMAIN set -e echo "==========================================" echo " Установка системы Panorama Analytics" echo "==========================================" echo "" # Проверка наличия необходимых утилит if ! command -v docker >/dev/null 2>&1; then echo "Установка Docker..." apk add --no-cache docker docker-compose rc-update add docker boot service docker start sleep 2 fi # Запрос DOMAIN if [ -z "$DOMAIN" ]; then echo -n "Введите домен для запуска системы Panorama Analytics (например: example.com): " read DOMAIN if [ -z "$DOMAIN" ]; then echo "Ошибка: DOMAIN обязателен для продолжения" exit 1 fi else echo "DOMAIN: $DOMAIN" fi # Запрос токена (для доступа к git registry) if [ -z "$REG_USER" ]; then echo -n "Введите логинт для доступа к git registry: " read REG_USER if [ -z "$REG_USER" ]; then echo "Ошибка: логин обязателен для продолжения" exit 1 fi fi if [ -z "$REG_PASS" ]; then echo -n "Введите пароль для доступа к git registry: " read REG_PASS if [ -z "$REG_PASS" ]; then echo "Ошибка: пароль обязателен для продолжения" exit 1 fi fi echo "" echo "Настройка окружения..." # Создаем .env файл cat > .env </dev/null || printf "%s:%s" "${REG_USER}" "${REG_PASS}" | base64) for COMPOSE_URL in \ "https://${REG}/cc/deploy/raw/tag/${VERSION}/dev/docker-compose.yml" \ "https://${REG}/cc/deploy/src/tag/${VERSION}/dev/docker-compose.yml" \ "https://${REG}/cc/deploy/-/raw/${VERSION}/dev/docker-compose.yml" \ "https://${REG}/cc/deploy/-/blob/${VERSION}/dev/docker-compose.yml?format=raw"; do echo "Попытка скачать: ${COMPOSE_URL}" # Пробуем с базовой HTTP аутентификацией через заголовок (для BusyBox wget) echo "Попытка с Basic Auth..." if wget --header="Authorization: Basic ${AUTH_BASE64}" -O docker-compose.yml "${COMPOSE_URL}" 2>&1 | tee /tmp/wget_output.log; then if [ -f "docker-compose.yml" ] && [ -s "docker-compose.yml" ]; then # Проверяем, что это не HTML страница с ошибкой if head -1 docker-compose.yml | grep -q "services:"; then echo "docker-compose.yml успешно скачан с URL: ${COMPOSE_URL}" DOWNLOADED=1 break else echo "Предупреждение: скачанный файл не похож на docker-compose.yml" cat docker-compose.yml | head -5 rm -f docker-compose.yml fi fi else HTTP_CODE=$(grep -o "HTTP/[0-9.]* [0-9]*" /tmp/wget_output.log 2>/dev/null | tail -1 | awk '{print $2}' || echo "unknown") if [ "$HTTP_CODE" != "unknown" ]; then echo "HTTP код: ${HTTP_CODE}" fi if [ -f /tmp/wget_output.log ]; then echo "Вывод wget:" cat /tmp/wget_output.log | tail -3 fi fi # Пробуем с токеном в заголовке echo "Попытка с токеном в заголовке..." if wget --header="Authorization: token ${REG_PASS}" -O docker-compose.yml "${COMPOSE_URL}" 2>&1 | tee /tmp/wget_output.log; then if [ -f "docker-compose.yml" ] && [ -s "docker-compose.yml" ]; then if head -1 docker-compose.yml | grep -q "services:"; then echo "docker-compose.yml успешно скачан с токеном: ${COMPOSE_URL}" DOWNLOADED=1 break else rm -f docker-compose.yml fi fi fi # Пробуем с Bearer токеном echo "Попытка с Bearer токеном..." if wget --header="Authorization: Bearer ${REG_PASS}" -O docker-compose.yml "${COMPOSE_URL}" 2>&1 | tee /tmp/wget_output.log; then if [ -f "docker-compose.yml" ] && [ -s "docker-compose.yml" ]; then if head -1 docker-compose.yml | grep -q "services:"; then echo "docker-compose.yml успешно скачан с Bearer токеном: ${COMPOSE_URL}" DOWNLOADED=1 break else rm -f docker-compose.yml fi fi fi # Пробуем с URL содержащим credentials (для некоторых систем) COMPOSE_URL_WITH_AUTH="https://${REG_USER}:${REG_PASS}@${REG}/cc/deploy/raw/tag/${VERSION}/dev/docker-compose.yml" if [ "$COMPOSE_URL" = "https://${REG}/cc/deploy/raw/tag/${VERSION}/dev/docker-compose.yml" ]; then echo "Попытка с credentials в URL..." if wget -O docker-compose.yml "${COMPOSE_URL_WITH_AUTH}" 2>&1 | tee /tmp/wget_output.log; then if [ -f "docker-compose.yml" ] && [ -s "docker-compose.yml" ]; then if head -1 docker-compose.yml | grep -q "services:"; then echo "docker-compose.yml успешно скачан с credentials в URL" DOWNLOADED=1 break else rm -f docker-compose.yml fi fi fi fi echo "" done if [ $DOWNLOADED -eq 0 ]; then echo "" echo "==========================================" echo "ОШИБКА: не удалось скачать docker-compose.yml" echo "==========================================" echo "Проверьте:" echo "1. Правильность версии: ${VERSION}" echo "2. Доступность репозитория: ${REG}/cc/deploy" echo "3. Правильность логина и пароля" echo "4. Существование файла: dev/docker-compose.yml в указанной версии" echo "" echo "Попробуйте вручную:" AUTH_B64=$(printf "%s:%s" "${REG_USER}" "${REG_PASS}" | base64 -w 0 2>/dev/null || printf "%s:%s" "${REG_USER}" "${REG_PASS}" | base64) echo "wget --header=\"Authorization: Basic ${AUTH_B64}\" -O docker-compose.yml \"https://${REG}/cc/deploy/raw/tag/${VERSION}/dev/docker-compose.yml\"" echo "или:" echo "wget -O docker-compose.yml \"https://${REG_USER}:${REG_PASS}@${REG}/cc/deploy/raw/tag/${VERSION}/dev/docker-compose.yml\"" exit 1 fi # Проверка наличия docker-compose.yml if [ ! -f "docker-compose.yml" ]; then echo "Ошибка: docker-compose.yml не найден" exit 1 fi # Запуск docker-compose echo "" echo "Запуск контейнеров..." docker-compose up -d if [ $? -ne 0 ]; then echo "Ошибка: не удалось запустить контейнеры" exit 1 fi # Ожидание запуска сервисов echo "" echo "Ожидание запуска сервисов..." sleep 5 # Проверка статуса echo "" echo "Статус контейнеров:" docker-compose ps echo "" echo "==========================================" echo " Установка завершена!" echo "==========================================" echo "" echo "Зайдите на http://sah.${DOMAIN} для продолжения" echo ""