Fix Ubuntu install: skip Docker if present, wait for apt lock

This commit is contained in:
shop
2026-06-25 16:48:44 +03:00
parent 8a7f79a70c
commit 6322aee714
3 changed files with 99 additions and 40 deletions
+13 -3
View File
@@ -5,7 +5,12 @@ ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "${ROOT_DIR}"
if ! command -v docker &>/dev/null; then
echo "Docker не найден. Сначала: sudo ./scripts/install-ubuntu.sh"
echo "Docker не найден. Сначала: sudo bash scripts/install-ubuntu.sh"
exit 1
fi
if ! docker compose version &>/dev/null; then
echo "Docker Compose plugin не найден."
exit 1
fi
@@ -25,7 +30,12 @@ docker compose up --build -d
echo ""
echo "Сервисы запущены."
echo " Магазин: http://$(hostname -I | awk '{print $1}')"
echo " Админка: http://$(hostname -I | awk '{print $1}')/admin/login"
IP=$(hostname -I | awk '{print $1}')
echo " Магазин: http://${IP}"
echo " Админка: http://${IP}/admin/login"
if [[ -f .env ]]; then
echo " Логин: $(grep '^ADMIN_EMAIL=' .env | cut -d= -f2-)"
echo " Пароль: $(grep '^ADMIN_PASSWORD=' .env | cut -d= -f2-)"
fi
echo ""
echo "Логи: docker compose logs -f"
+78 -33
View File
@@ -4,7 +4,7 @@ set -euo pipefail
# Установка Docker и Docker Compose на Ubuntu 22.04 / 24.04
if [[ "${EUID}" -ne 0 ]]; then
echo "Запустите с sudo: sudo ./scripts/install-ubuntu.sh"
echo "Запустите с sudo: sudo bash scripts/install-ubuntu.sh"
exit 1
fi
@@ -13,41 +13,86 @@ if ! grep -qi ubuntu /etc/os-release 2>/dev/null; then
exit 1
fi
export DEBIAN_FRONTEND=noninteractive
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
}
apt-get update
apt-get install -y ca-certificates curl gnupg ufw
docker_ready() {
command -v docker &>/dev/null \
&& docker compose version &>/dev/null \
&& systemctl is-active --quiet docker 2>/dev/null
}
# Docker official repo
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
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
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
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl enable --now docker
# Firewall
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcp
ufw --force enable
SUDO_USER_NAME="${SUDO_USER:-$USER}"
if id "${SUDO_USER_NAME}" &>/dev/null; then
usermod -aG docker "${SUDO_USER_NAME}"
echo "Пользователь ${SUDO_USER_NAME} добавлен в группу docker."
echo "Перелогиньтесь или выполните: newgrp docker"
fi
configure_firewall
add_user_to_docker_group
echo ""
echo "Docker установлен: $(docker --version)"
echo "Compose: $(docker compose version)"
echo "Готово. Запустите магазин: bash scripts/deploy.sh"