#!/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 '//a \ \ aliyun\ central\ Aliyun Maven Mirror\ https://maven.aliyun.com/repository/public\ ' "$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 "下一步: 请克隆项目并执行部署脚本"