#!/usr/bin/env bash set -euo pipefail ################################# # КОНФИГУРАЦИЯ И ПЕРЕМЕННЫЕ ################################# PROJECT_DIR="/opt/3dp-manager" DOCKER_USER="denpiligrim" DOCKER_TAG="main" IMAGE_SERVER="ghcr.io/${DOCKER_USER}/3dp-manager-server:${DOCKER_TAG}" IMAGE_CLIENT="ghcr.io/${DOCKER_USER}/3dp-manager-client:${DOCKER_TAG}" # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' log() { echo -e "${GREEN}[INFO]${NC} $1"; } warn() { echo -e "${YELLOW}[WARN]${NC} $1"; } error() { echo -e "${RED}[ERROR]${NC} $1"; exit 1; } ################################# # ASCII-баннер ################################# echo "===================================================" echo " ____ ____ _ ___ _ " echo " / __ \___ ____ / __ \(_) (_)___ ______(_)___ ___ " echo " / / / / _ \/ __ \/ /_/ / / / / __ \/ ___/ / __ \`__ \ " echo " / /_/ / __/ / / / ____/ / / / /_/ / / / / / / / / /" echo "/_____/\___/_/ /_/_/ /_/_/_/\__, /_/ /_/_/ /_/ /_/ " echo " /____/ " echo "" echo " 3DP-MANAGER FOR 3X-UI " echo "===================================================" echo "" ################################# # ПРОВЕРКИ И УСТАНОВКА ЗАВИСИМОСТЕЙ ################################# if [[ $EUID -ne 0 ]]; then error "Этот скрипт должен быть запущен от имени root" fi . /etc/os-release if [[ "$ID" != "ubuntu" && "$ID" != "debian" ]]; then die "Этот скрипт поддерживает только Ubuntu или Debian: $ID" fi if [ $(free -m | grep Mem: | awk '{print $2}') -lt 2000 ]; then if [ $(free -m | grep Swap: | awk '{print $2}') -eq 0 ]; then log "Мало RAM и нет Swap. Создаем swap-файл 2GB..." fallocate -l 2G /swapfile || dd if=/dev/zero of=/swapfile bs=1M count=2048 chmod 600 /swapfile mkswap /swapfile swapon /swapfile echo '/swapfile none swap sw 0 0' >> /etc/fstab log "Swap создан." fi fi log "Проверка зависимостей..." if ! command -v curl &> /dev/null; then apt-get update && apt-get install -y curl; fi if ! command -v jq &> /dev/null; then apt-get install -y jq; fi if ! command -v openssl &> /dev/null; then apt-get install -y openssl; fi if ! command -v tar &> /dev/null; then apt-get install -y tar; fi if ! command -v hostname &> /dev/null; then apt-get install -y net-tools || apt-get install -y hostname; fi # Установка Docker log "Проверка Docker" if command -v docker >/dev/null 2>&1; then log "Docker уже установлен" else log "Docker не найден, будет установлен из официального репозитория" # Add Docker's official GPG key: apt update apt install ca-certificates curl install -m 0755 -d /etc/apt/keyrings if [[ "$ID" == "ubuntu" ]]; then curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc || die "Ошибка добавления ключа Docker" else curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc || die "Ошибка добавления ключа Docker" fi chmod a+r /etc/apt/keyrings/docker.asc # Add the repository to Apt sources: CODENAME=${UBUNTU_CODENAME:-$VERSION_CODENAME} tee /etc/apt/sources.list.d/docker.sources < server/.env < client/nginx-client.conf < docker-compose.yml < client/nginx-client.conf < docker-compose.yml <