Files
HAOVP/scripts/init-debian12.sh
T

267 lines
6.8 KiB
Bash

#!/bin/bash
# ============================================================
# Debian 12 系统初始化脚本
# 用途: 在 Debian 12 上安装 Docker、Java 17、Maven 等依赖
# 使用: chmod +x init-debian12.sh && sudo ./init-debian12.sh
# ============================================================
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn() { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }
log_step() { echo -e "${BLUE}[STEP]${NC} $1"; }
# 检查是否为 root 用户
if [ "$EUID" -ne 0 ]; then
log_error "请使用 root 用户或 sudo 执行此脚本"
exit 1
fi
# 检查系统版本
if [ ! -f /etc/os-release ]; then
log_error "无法检测系统版本"
exit 1
fi
. /etc/os-release
log_info "检测到系统: $PRETTY_NAME"
if [ "$ID" != "debian" ]; then
log_warn "此脚本专为 Debian 设计,当前系统: $ID"
read -p "是否继续? (y/n): " confirm
if [ "$confirm" != "y" ]; then
exit 0
fi
fi
log_step "=========================================="
log_step "开始初始化 Debian 12 系统"
log_step "=========================================="
# 1. 更新系统
log_step "[1/8] 更新系统软件包..."
apt-get update
apt-get upgrade -y
apt-get dist-upgrade -y
# 2. 安装基础工具
log_step "[2/8] 安装基础工具..."
apt-get install -y \
curl \
wget \
git \
vim \
net-tools \
iputils-ping \
telnet \
netcat-openbsd \
lsof \
htop \
tree \
unzip \
gnupg \
apt-transport-https \
ca-certificates \
software-properties-common
# 3. 安装 Java 17
log_step "[3/8] 安装 OpenJDK 17..."
apt-get install -y openjdk-17-jdk openjdk-17-jre
# 验证 Java 安装
java -version
log_info "Java 安装完成: $(java -version 2>&1 | head -n 1)"
# 设置 JAVA_HOME
if ! grep -q "JAVA_HOME" /etc/profile; then
echo 'export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64' >> /etc/profile
echo 'export PATH=$JAVA_HOME/bin:$PATH' >> /etc/profile
log_info "已设置 JAVA_HOME 环境变量"
fi
# 4. 安装 Maven
log_step "[4/8] 安装 Maven..."
apt-get install -y maven
# 验证 Maven 安装
mvn -version
log_info "Maven 安装完成"
# 配置 Maven 镜像 (阿里云)
MAVEN_SETTINGS="/usr/share/maven/conf/settings.xml"
if [ -f "$MAVEN_SETTINGS" ]; then
if ! grep -q "aliyun" "$MAVEN_SETTINGS"; then
log_info "配置 Maven 阿里云镜像..."
sed -i '/<mirrors>/a \
<mirror>\
<id>aliyun</id>\
<mirrorOf>central</mirrorOf>\
<name>Aliyun Maven Mirror</name>\
<url>https://maven.aliyun.com/repository/public</url>\
</mirror>' "$MAVEN_SETTINGS"
fi
fi
# 5. 安装 Docker
log_step "[5/8] 安装 Docker..."
# 添加 Docker 官方 GPG 密钥
install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/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/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
tee /etc/apt/sources.list.d/docker.list > /dev/null
# 安装 Docker
apt-get update
apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# 启动并设置开机自启
systemctl start docker
systemctl enable docker
# 验证 Docker 安装
docker --version
docker compose version
log_info "Docker 安装完成"
# 将当前非 root 用户添加到 docker 组
if [ -n "$SUDO_USER" ]; then
usermod -aG docker "$SUDO_USER"
log_info "已将用户 $SUDO_USER 添加到 docker 组"
fi
# 6. 配置 Docker 镜像加速 (国内镜像)
log_step "[6/8] 配置 Docker 镜像加速..."
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"registry-mirrors": [
"https://docker.1ms.run",
"https://docker.xuanyuan.me"
],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
},
"storage-driver": "overlay2",
"live-restore": true
}
EOF
systemctl daemon-reload
systemctl restart docker
log_info "Docker 镜像加速配置完成"
# 7. 配置系统参数
log_step "[7/8] 优化系统参数..."
# 内核参数优化
cat > /etc/sysctl.d/99-ha-ovp.conf << 'EOF'
# 网络优化
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 65535
net.ipv4.tcp_max_syn_backlog = 65535
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 1024 65535
# 内存优化
vm.swappiness = 10
vm.overcommit_memory = 1
vm.max_map_count = 262144
# 文件描述符
fs.file-max = 655350
fs.nr_open = 655350
# 对于 Redis
net.core.somaxconn = 65535
vm.overcommit_memory = 1
EOF
sysctl -p /etc/sysctl.d/99-ha-ovp.conf
log_info "系统参数优化完成"
# 文件描述符限制
cat > /etc/security/limits.d/99-ha-ovp.conf << 'EOF'
* soft nofile 655350
* hard nofile 655350
* soft nproc 655350
* hard nproc 655350
root soft nofile 655350
root hard nofile 655350
root soft nproc 655350
root hard nproc 655350
EOF
log_info "文件描述符限制配置完成"
# 8. 配置防火墙
log_step "[8/8] 配置防火墙..."
apt-get install -y ufw
# 设置默认策略
ufw default deny incoming
ufw default allow outgoing
# 允许 SSH
ufw allow 22/tcp
# 允许项目端口
# 基础设施端口
ufw allow 3306/tcp comment 'MySQL'
ufw allow 6379/tcp comment 'Redis'
ufw allow 26379/tcp comment 'Redis Sentinel'
ufw allow 8848:8849/tcp comment 'Nacos'
ufw allow 9876/tcp comment 'RocketMQ NameServer'
ufw allow 10909:10912/tcp comment 'RocketMQ Broker'
ufw allow 9000:9001/tcp comment 'MinIO'
ufw allow 8880/tcp comment 'Sentinel Dashboard'
# 微服务端口
ufw allow 9000:9006/tcp comment 'Microservices'
# Nginx
ufw allow 80/tcp comment 'HTTP'
ufw allow 443/tcp comment 'HTTPS'
# 启用防火墙 (谨慎操作,确保 SSH 已开放)
# ufw enable
log_warn "防火墙已配置但未启用,请手动执行 'ufw enable' 启用"
log_step "=========================================="
log_step "系统初始化完成!"
log_step "=========================================="
# 显示安装信息
echo ""
log_info "安装版本信息:"
echo " - Java: $(java -version 2>&1 | head -n 1)"
echo " - Maven: $(mvn -version 2>&1 | head -n 1)"
echo " - Docker: $(docker --version)"
echo " - Docker Compose: $(docker compose version)"
echo ""
log_info "请执行以下命令使环境变量生效:"
echo " source /etc/profile"
echo ""
log_info "防火墙配置已完成,请根据需要执行:"
echo " ufw enable # 启用防火墙"
echo " ufw status # 查看状态"
echo ""
log_info "下一步: 请克隆项目并执行部署脚本"