opendoor-base-install/setup_vps.sh
2025-05-13 10:58:05 +00:00

134 lines
5.1 KiB
Bash
Raw 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.

#!/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