Files
shop-go/scripts/install-ubuntu.sh

99 lines
3.0 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
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"