134 lines
5.1 KiB
Bash
134 lines
5.1 KiB
Bash
#!/bin/bash
|
||
|
||
# VPS Auto-Setup Script v2.1
|
||
# Универсальный установщик для Ubuntu/Debian
|
||
|
||
# Цвета для вывода
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Функция для безопасного запуска от root
|
||
check_root() {
|
||
if [ "$(id -u)" -eq 0 ]; then
|
||
echo -e "${YELLOW}Предупреждение: Скрипт запущен от root.${NC}"
|
||
echo -e "${YELLOW}Рекомендуется запускать от обычного пользователя с sudo.${NC}"
|
||
read -p "Продолжить установку? [y/N] " -n 1 -r
|
||
echo
|
||
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
||
echo -e "${RED}Установка отменена.${NC}"
|
||
exit 1
|
||
fi
|
||
fi
|
||
}
|
||
|
||
# Функция для проверки установки пакета
|
||
check_install() {
|
||
if command -v $1 &> /dev/null; then
|
||
echo -e "${GREEN}$1 уже установлен.${NC}"
|
||
else
|
||
echo -e "Установка ${YELLOW}$1${NC}..."
|
||
apt-get install -y $1
|
||
if [ $? -eq 0 ]; then
|
||
echo -e "${GREEN}$1 успешно установлен.${NC}"
|
||
else
|
||
echo -e "${RED}Ошибка при установке $1.${NC}"
|
||
exit 1
|
||
fi
|
||
fi
|
||
}
|
||
|
||
# Определение дистрибутива
|
||
detect_distro() {
|
||
if [ -f /etc/os-release ]; then
|
||
. /etc/os-release
|
||
DISTRO=$ID
|
||
CODENAME=$VERSION_CODENAME
|
||
[ -z "$CODENAME" ] && CODENAME=$(echo "$VERSION" | cut -d '(' -f2 | cut -d ')' -f1)
|
||
else
|
||
echo -e "${RED}Не удалось определить дистрибутив!${NC}"
|
||
exit 1
|
||
fi
|
||
|
||
echo -e "\n${YELLOW}Обнаружен дистрибутив: ${DISTRO} (${CODENAME})${NC}\n"
|
||
}
|
||
|
||
# Установка Docker
|
||
install_docker() {
|
||
if ! command -v docker &> /dev/null; then
|
||
echo -e "Установка ${YELLOW}Docker${NC} для ${DISTRO}..."
|
||
|
||
# Установка зависимостей
|
||
apt-get install -y apt-transport-https ca-certificates curl gnupg
|
||
|
||
# Добавление GPG ключа Docker
|
||
install -m 0755 -d /etc/apt/keyrings
|
||
curl -fsSL https://download.docker.com/linux/${DISTRO}/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||
chmod a+r /etc/apt/keyrings/docker.gpg
|
||
|
||
# Добавление репозитория Docker
|
||
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/${DISTRO} ${CODENAME} stable" | \
|
||
tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||
|
||
apt-get update
|
||
|
||
# Попытка установки Docker CE
|
||
if apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin; then
|
||
echo -e "${GREEN}Docker успешно установлен.${NC}"
|
||
else
|
||
echo -e "${YELLOW}Ошибка при установке Docker CE. Пробуем установить docker.io...${NC}"
|
||
apt-get install -y docker.io docker-compose
|
||
fi
|
||
else
|
||
echo -e "${GREEN}Docker уже установлен.${NC}"
|
||
fi
|
||
}
|
||
|
||
# Основной процесс установки
|
||
main() {
|
||
# Проверка на root
|
||
check_root
|
||
|
||
# Определение дистрибутива
|
||
detect_distro
|
||
|
||
# Обновление пакетов
|
||
echo -e "\n${YELLOW}Обновление пакетов...${NC}"
|
||
apt-get update && apt-get upgrade -y
|
||
|
||
# Установка базовых утилит
|
||
echo -e "\n${YELLOW}Установка базовых утилит...${NC}"
|
||
check_install mc
|
||
check_install git
|
||
check_install net-tools
|
||
check_install curl
|
||
check_install wget
|
||
check_install tmux
|
||
|
||
# Установка Docker
|
||
install_docker
|
||
|
||
# Добавление пользователя в группу docker
|
||
if [ "$(id -u)" -ne 0 ] && ! groups $USER | grep -q '\bdocker\b'; then
|
||
echo -e "\n${YELLOW}Добавление пользователя $USER в группу docker...${NC}"
|
||
usermod -aG docker $USER
|
||
echo -e "${GREEN}Пользователь $USER добавлен в группу docker.${NC}"
|
||
echo -e "${YELLOW}Для применения изменений необходимо перезапустить сессию.${NC}"
|
||
fi
|
||
|
||
echo -e "\n${GREEN}Установка успешно завершена!${NC}"
|
||
echo -e "${YELLOW}Для применения всех изменений рекомендуется перезапустить сессию.${NC}"
|
||
}
|
||
|
||
# Запуск (с проверкой на прямой запуск)
|
||
if [ "$0" = "$BASH_SOURCE" ]; then
|
||
# Если скрипт запущен напрямую, а не через source
|
||
if [[ $EUID -eq 0 ]]; then
|
||
# Если root, запускаем напрямую
|
||
main
|
||
else
|
||
# Если не root, запускаем через sudo
|
||
sudo bash -c "$(declare -f main check_root check_install detect_distro install_docker); main"
|
||
fi
|
||
fi |