99 lines
3.0 KiB
Bash
99 lines
3.0 KiB
Bash
#!/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"
|