#!/usr/bin/env bash set -euo pipefail # Установка Docker и Docker Compose на Ubuntu 22.04 / 24.04 if [[ "${EUID}" -ne 0 ]]; then echo "Запустите с sudo: sudo bash scripts/install-ubuntu.sh" exit 1 fi if ! grep -qi ubuntu /etc/os-release 2>/dev/null; then echo "Скрипт предназначен для Ubuntu." exit 1 fi wait_for_apt() { local max=600 waited=0 while fuser /var/lib/dpkg/lock-frontend >/dev/null 2>&1 \ || fuser /var/lib/apt/lists/lock >/dev/null 2>&1; do if [[ "${waited}" -eq 0 ]]; then echo "Ожидание фонового обновления Ubuntu (unattended-upgrades)..." echo "Это нормально, подождите 1–5 минут." fi sleep 5 waited=$((waited + 5)) if [[ "${waited}" -ge "${max}" ]]; then echo "Таймаут 10 мин. Повторите позже: sudo bash scripts/install-ubuntu.sh" exit 1 fi done if [[ "${waited}" -gt 0 ]]; then echo "Обновление завершено, продолжаем установку." fi } docker_ready() { command -v docker &>/dev/null \ && docker compose version &>/dev/null \ && systemctl is-active --quiet docker 2>/dev/null } configure_firewall() { if command -v ufw &>/dev/null; then ufw allow OpenSSH >/dev/null 2>&1 || true ufw allow 80/tcp >/dev/null 2>&1 || true ufw allow 443/tcp >/dev/null 2>&1 || true ufw --force enable >/dev/null 2>&1 || true echo "Firewall (ufw): порты 22, 80, 443 открыты." fi } add_user_to_docker_group() { local user_name="${SUDO_USER:-}" if [[ -z "${user_name}" || "${user_name}" == "root" ]]; then return fi if id "${user_name}" &>/dev/null; then usermod -aG docker "${user_name}" echo "Пользователь ${user_name} добавлен в группу docker." echo "Перелогиньтесь или выполните: newgrp docker" fi } if docker_ready; then echo "Docker уже установлен: $(docker --version)" echo "Compose: $(docker compose version)" else export DEBIAN_FRONTEND=noninteractive wait_for_apt apt-get update apt-get install -y ca-certificates curl gnupg ufw install -m 0755 -d /etc/apt/keyrings if [[ ! -f /etc/apt/keyrings/docker.gpg ]]; then curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg chmod a+r /etc/apt/keyrings/docker.gpg fi echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "${VERSION_CODENAME}") stable" \ > /etc/apt/sources.list.d/docker.list wait_for_apt apt-get update apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin systemctl enable --now docker echo "Docker установлен: $(docker --version)" echo "Compose: $(docker compose version)" fi configure_firewall add_user_to_docker_group echo "" echo "Готово. Запустите магазин: bash scripts/deploy.sh"