Compare commits
	
		
			No commits in common. "master" and "main" have entirely different histories.
		
	
	
		|  | @ -0,0 +1,293 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # ============================================== | ||||
| # Java应用管理脚本 v2.0 | ||||
| # 功能:启动/停止/重启/状态检查/日志查看/升级/备份 | ||||
| # ============================================== | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 配置区(请根据实际情况修改) | ||||
| # -------------------------- | ||||
| APP_NAME="snailjob-server"           # 应用名称 | ||||
| APP_DIR="../lib"                     # 应用目录(支持绝对路径) | ||||
| JAR_NAME="ruoyi-snailjob-server.jar" # JAR文件名 | ||||
| JAVA_OPTS="-Xms256m -Xmx512m -XX:+UseG1GC -Dfile.encoding=UTF-8" # JVM参数 | ||||
| LOG_FILE="${APP_DIR}/app.log"        # 日志文件路径 | ||||
| PID_FILE="${APP_DIR}/app.pid"        # PID文件路径 | ||||
| MAX_LOG_SIZE=10                      # 日志轮转大小(MB) | ||||
| BACKUP_DIR="${APP_DIR}/backup"       # 备份目录 | ||||
| WAIT_STOP_TIMEOUT=30                 # 停止等待超时(秒) | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 初始化检查 | ||||
| # -------------------------- | ||||
| init_check() { | ||||
|     # 检查Java环境 | ||||
|     if ! command -v java &> /dev/null; then | ||||
|         echo "[ERROR] Java未安装!请先安装JDK" | ||||
|         exit 1 | ||||
|     fi | ||||
| 
 | ||||
|     # 检查目录是否存在 | ||||
|     if [ ! -d "$APP_DIR" ]; then | ||||
|         echo "[ERROR] 应用目录不存在: $APP_DIR" | ||||
|         exit 1 | ||||
|     fi | ||||
| 
 | ||||
|     # 检查JAR文件是否存在 | ||||
|     if [ ! -f "${APP_DIR}/${JAR_NAME}" ]; then | ||||
|         echo "[ERROR] JAR文件不存在: ${APP_DIR}/${JAR_NAME}" | ||||
|         exit 1 | ||||
|     fi | ||||
| 
 | ||||
|     # 创建备份目录 | ||||
|     mkdir -p "$BACKUP_DIR" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 日志轮转 | ||||
| # -------------------------- | ||||
| rotate_log() { | ||||
|     if [ -f "$LOG_FILE" ]; then | ||||
|         log_size=$(du -m "$LOG_FILE" | cut -f1) | ||||
|         if [ "$log_size" -gt "$MAX_LOG_SIZE" ]; then | ||||
|             echo "正在轮转日志文件..." | ||||
|             timestamp=$(date +%Y%m%d%H%M%S) | ||||
|             mv "$LOG_FILE" "${LOG_FILE}.$timestamp" | ||||
|             gzip "${LOG_FILE}.$timestamp" -f | ||||
|             mv "${LOG_FILE}.$timestamp.gz" "$BACKUP_DIR/" | ||||
|             touch "$LOG_FILE" | ||||
|         fi | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 获取应用状态 | ||||
| # -------------------------- | ||||
| status() { | ||||
|     if [ -f "$PID_FILE" ]; then | ||||
|         pid=$(cat "$PID_FILE") | ||||
|         if ps -p "$pid" > /dev/null; then | ||||
|             echo "[INFO] $APP_NAME 正在运行 (PID: $pid)" | ||||
|             return 0 | ||||
|         else | ||||
|             echo "[WARN] PID文件存在但进程未运行,可能存在异常退出" | ||||
|             return 1 | ||||
|         fi | ||||
|     else | ||||
|         echo "[INFO] $APP_NAME 未运行" | ||||
|         return 3 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 启动应用 | ||||
| # -------------------------- | ||||
| start() { | ||||
|     init_check | ||||
|     status >/dev/null 2>&1 | ||||
|     local running=$? | ||||
| 
 | ||||
|     if [ $running -eq 0 ]; then | ||||
|         echo "[WARN] $APP_NAME 已经在运行中 (PID: $(cat "$PID_FILE"))" | ||||
|         return 1 | ||||
|     fi | ||||
| 
 | ||||
|     # 清理无效PID文件 | ||||
|     if [ $running -eq 1 ]; then | ||||
|         rm -f "$PID_FILE" | ||||
|     fi | ||||
| 
 | ||||
|     rotate_log | ||||
| 
 | ||||
|     echo "正在启动 $APP_NAME..." | ||||
|     cd "$APP_DIR" || exit 1 | ||||
| 
 | ||||
|     # 使用exec启动以便获取正确的PID | ||||
|     nohup java $JAVA_OPTS -jar "$JAR_NAME" >> "$LOG_FILE" 2>&1 & | ||||
|     local pid=$! | ||||
| 
 | ||||
|     echo $pid > "$PID_FILE" | ||||
|     echo "[SUCCESS] $APP_NAME 已启动 (PID: $pid)" | ||||
|     echo "日志文件: $LOG_FILE" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 停止应用 | ||||
| # -------------------------- | ||||
| stop() { | ||||
|     status >/dev/null 2>&1 | ||||
|     local running=$? | ||||
| 
 | ||||
|     if [ $running -ne 0 ]; then | ||||
|         echo "[WARN] $APP_NAME 未运行" | ||||
|         return 1 | ||||
|     fi | ||||
| 
 | ||||
|     local pid=$(cat "$PID_FILE") | ||||
|     echo "正在停止 $APP_NAME (PID: $pid)..." | ||||
| 
 | ||||
|     # 先尝试优雅关闭 | ||||
|     kill $pid | ||||
| 
 | ||||
|     # 等待进程退出 | ||||
|     local count=0 | ||||
|     while [ $count -lt $WAIT_STOP_TIMEOUT ]; do | ||||
|         if ! ps -p $pid > /dev/null; then | ||||
|             break | ||||
|         fi | ||||
|         sleep 1 | ||||
|         ((count++)) | ||||
|     done | ||||
| 
 | ||||
|     # 强制终止 | ||||
|     if ps -p $pid > /dev/null; then | ||||
|         echo "[WARN] 优雅关闭失败,尝试强制终止..." | ||||
|         kill -9 $pid | ||||
|         sleep 1 | ||||
|     fi | ||||
| 
 | ||||
|     rm -f "$PID_FILE" | ||||
|     echo "[SUCCESS] $APP_NAME 已停止" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 重启应用 | ||||
| # -------------------------- | ||||
| restart() { | ||||
|     stop | ||||
|     sleep 2 | ||||
|     start | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 查看日志 | ||||
| # -------------------------- | ||||
| tail_log() { | ||||
|     if [ ! -f "$LOG_FILE" ]; then | ||||
|         echo "[ERROR] 日志文件不存在: $LOG_FILE" | ||||
|         return 1 | ||||
|     fi | ||||
| 
 | ||||
|     echo "正在显示日志: $LOG_FILE (Ctrl+C 退出)" | ||||
|     echo "--------------------------------------------------" | ||||
|     tail -f "$LOG_FILE" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 备份应用 | ||||
| # -------------------------- | ||||
| backup() { | ||||
|     local timestamp=$(date +%Y%m%d%H%M%S) | ||||
|     local backup_file="${BACKUP_DIR}/${JAR_NAME%.*}_${timestamp}.jar" | ||||
| 
 | ||||
|     echo "正在备份应用到: $backup_file" | ||||
|     cp "${APP_DIR}/${JAR_NAME}" "$backup_file" | ||||
| 
 | ||||
|     if [ $? -eq 0 ]; then | ||||
|         echo "[SUCCESS] 备份完成" | ||||
|         return 0 | ||||
|     else | ||||
|         echo "[ERROR] 备份失败" | ||||
|         return 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 升级应用 | ||||
| # -------------------------- | ||||
| upgrade() { | ||||
|     local new_jar="$JAR_NAME" | ||||
|     local lib_dir="$APP_DIR" | ||||
|     local backup_dir="${BACKUP_DIR}/lib" | ||||
| 
 | ||||
|     # 检查新的JAR文件是否存在 | ||||
|     if [ ! -f "$new_jar" ]; then | ||||
|         echo "[ERROR] 新的JAR文件不存在: $new_jar" | ||||
|         return 1 | ||||
|     fi | ||||
| 
 | ||||
|     # 检查lib目录是否存在 | ||||
|     if [ ! -d "$lib_dir" ]; then | ||||
|         echo "[ERROR] lib目录不存在: $lib_dir" | ||||
|         return 1 | ||||
|     fi | ||||
| 
 | ||||
|     # 检查backup目录是否存在,不存在则创建 | ||||
|     mkdir -p "$backup_dir" | ||||
| 
 | ||||
|     # 获取lib目录下原有的JAR文件名 | ||||
|     local old_jar=$(ls "$lib_dir" | grep -E "^${JAR_NAME%.jar}-[0-9]{14}\.jar$") | ||||
|     if [ -z "$old_jar" ]; then | ||||
|         old_jar="$JAR_NAME" | ||||
|     fi | ||||
| 
 | ||||
|     # 备份原有的JAR文件 | ||||
|     local timestamp=$(date +%Y%m%d%H%M%S) | ||||
|     local backup_file="${backup_dir}/${old_jar%.jar}_${timestamp}.jar" | ||||
|     cp "${lib_dir}/${old_jar}" "$backup_file" | ||||
|     if [ $? -eq 0 ]; then | ||||
|         echo "[SUCCESS] 备份原有JAR文件到: $backup_file" | ||||
|     else | ||||
|         echo "[ERROR] 备份原有JAR文件失败" | ||||
|         return 1 | ||||
|     fi | ||||
| 
 | ||||
|     # 复制新的JAR文件到lib目录 | ||||
|     cp "$new_jar" "$lib_dir/" | ||||
|     if [ $? -eq 0 ]; then | ||||
|         echo "[SUCCESS] 升级JAR文件到: $lib_dir/$new_jar" | ||||
|     else | ||||
|         echo "[ERROR] 升级JAR文件失败" | ||||
|         return 1 | ||||
|     fi | ||||
| 
 | ||||
|     # 删除旧的JAR文件(可选,如果保留旧版本则不需要删除) | ||||
|     # rm -f "${lib_dir}/${old_jar}" | ||||
|     # if [ $? -eq 0 ]; then | ||||
|     #     echo "[SUCCESS] 删除旧的JAR文件: ${lib_dir}/${old_jar}" | ||||
|     # else | ||||
|     #     echo "[ERROR] 删除旧的JAR文件失败" | ||||
|     #     return 1 | ||||
|     # fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 主程序 | ||||
| # -------------------------- | ||||
| case "$1" in | ||||
|     start) | ||||
|         start | ||||
|         ;; | ||||
|     stop) | ||||
|         stop | ||||
|         ;; | ||||
|     restart) | ||||
|         restart | ||||
|         ;; | ||||
|     status) | ||||
|         status | ||||
|         ;; | ||||
|     log) | ||||
|         tail_log | ||||
|         ;; | ||||
|     backup) | ||||
|         backup | ||||
|         ;; | ||||
|     upgrade) | ||||
|         upgrade | ||||
|         ;; | ||||
|     *) | ||||
|         echo "用法: $0 {start|stop|restart|status|log|backup|upgrade}" | ||||
|         echo "  start   启动应用" | ||||
|         echo "  stop    停止应用" | ||||
|         echo "  restart 重启应用" | ||||
|         echo "  status  查看状态" | ||||
|         echo "  log     查看实时日志" | ||||
|         echo "  backup  备份应用" | ||||
|         echo "  upgrade 升级应用" | ||||
|         exit 1 | ||||
|         ;; | ||||
| esac | ||||
| 
 | ||||
| exit 0 | ||||
|  | @ -0,0 +1,162 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # ============================================== | ||||
| # Docker 安装脚本 (适用于 AlmaLinux/Rocky Linux 9) | ||||
| # 功能:自动安装 Docker 并配置国内镜像加速 | ||||
| # ============================================== | ||||
| 
 | ||||
| # 启用严格模式 | ||||
| set -euo pipefail | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 颜色定义 | ||||
| # -------------------------- | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| YELLOW='\033[0;33m' | ||||
| NC='\033[0m' # No Color | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 日志函数 | ||||
| # -------------------------- | ||||
| log_info() { | ||||
|     echo -e "${GREEN}[INFO]${NC} $1" | ||||
| } | ||||
| 
 | ||||
| log_warn() { | ||||
|     echo -e "${YELLOW}[WARN]${NC} $1" | ||||
| } | ||||
| 
 | ||||
| log_error() { | ||||
|     echo -e "${RED}[ERROR]${NC} $1" >&2 | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 检查 root 权限 | ||||
| # -------------------------- | ||||
| check_root() { | ||||
|     if [ "$(id -u)" -ne 0 ]; then | ||||
|         log_error "请使用 root 用户或通过 sudo 运行此脚本" | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 安装必要的工具 | ||||
| # -------------------------- | ||||
| install_tools() { | ||||
|     log_info "正在安装必要的工具..." | ||||
|     dnf install -y curl wget tar gzip | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 添加 Docker 官方仓库 | ||||
| # -------------------------- | ||||
| add_docker_repo() { | ||||
|     log_info "正在添加 Docker 官方仓库..." | ||||
| 
 | ||||
|     # 安装 yum-utils 工具 | ||||
|     dnf install -y yum-utils | ||||
| 
 | ||||
|     # 添加 Docker 官方仓库 | ||||
|     yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo | ||||
| 
 | ||||
|     log_info "Docker 官方仓库已添加" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 配置国内镜像源(可选) | ||||
| # -------------------------- | ||||
| setup_mirror() { | ||||
|     log_info "正在配置国内镜像源..." | ||||
| 
 | ||||
|     # 替换为阿里云镜像 | ||||
|     sed -i 's|https://download.docker.com|https://mirrors.aliyun.com/docker-ce|g' /etc/yum.repos.d/docker-ce.repo | ||||
| 
 | ||||
|     log_info "已配置阿里云镜像源" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 安装 Docker | ||||
| # -------------------------- | ||||
| install_docker() { | ||||
|     log_info "正在安装 Docker..." | ||||
| 
 | ||||
|     # 安装 Docker CE 和相关工具 | ||||
|     dnf install -y docker-ce docker-ce-cli containerd.io | ||||
| 
 | ||||
|     log_info "Docker 已安装完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 配置 Docker 镜像加速 | ||||
| # -------------------------- | ||||
| configure_mirror_acceleration() { | ||||
|     log_info "正在配置 Docker 镜像加速..." | ||||
| 
 | ||||
|     # 创建或修改 Docker 配置文件 | ||||
|     mkdir -p /etc/docker | ||||
|     cat > /etc/docker/daemon.json <<'EOF' | ||||
| { | ||||
|     "registry-mirrors": [ | ||||
|         "https://hub-mirror.c.163.com", | ||||
|         "https://mirror.baidubce.com", | ||||
|         "https://docker.m.daocloud.io" | ||||
|     ] | ||||
| } | ||||
| EOF | ||||
| 
 | ||||
|     log_info "Docker 镜像加速已配置完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 启动并启用 Docker 服务 | ||||
| # -------------------------- | ||||
| start_docker() { | ||||
|     log_info "正在启动 Docker 服务..." | ||||
| 
 | ||||
|     # 启动 Docker 服务 | ||||
|     systemctl start docker | ||||
| 
 | ||||
|     # 设置开机自启 | ||||
|     systemctl enable docker | ||||
| 
 | ||||
|     log_info "Docker 服务已启动并设置为开机自启" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 测试 Docker 安装 | ||||
| # -------------------------- | ||||
| test_docker() { | ||||
|     log_info "正在测试 Docker 安装..." | ||||
| 
 | ||||
|     # 测试 Docker 版本 | ||||
|     docker --version | ||||
| 
 | ||||
|     # 测试运行 hello-world 容器 | ||||
|     docker run --rm hello-world | ||||
| 
 | ||||
|     log_info "Docker 测试完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 主函数 | ||||
| # -------------------------- | ||||
| main() { | ||||
|     check_root | ||||
|     install_tools | ||||
|     add_docker_repo | ||||
|     setup_mirror | ||||
|     install_docker | ||||
|     configure_mirror_acceleration | ||||
|     start_docker | ||||
|     test_docker | ||||
| 
 | ||||
|     log_info "Docker 已成功安装并配置!" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 执行主函数 | ||||
| # -------------------------- | ||||
| main | ||||
| exit 0 | ||||
|  | @ -0,0 +1,53 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # 检查是否以 root 用户运行 | ||||
| if [[ $EUID -ne 0 ]]; then | ||||
|   echo "请以 root 用户或使用 sudo 运行此脚本。" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| 
 | ||||
| # 检查系统架构 | ||||
| ARCH=$(uname -m) | ||||
| case $ARCH in | ||||
|   x86_64) | ||||
|     DOCKER_COMPOSE_ARCH="x86_64" | ||||
|     ;; | ||||
|   aarch64) | ||||
|     DOCKER_COMPOSE_ARCH="aarch64" | ||||
|     ;; | ||||
|   armv7l) | ||||
|     DOCKER_COMPOSE_ARCH="armv7" | ||||
|     ;; | ||||
|   *) | ||||
|     echo "不支持的系统架构: $ARCH" | ||||
|     exit 1 | ||||
|     ;; | ||||
| esac | ||||
| 
 | ||||
| # 定义安装路径和版本 | ||||
| INSTALL_PATH="/usr/local/bin/docker-compose" | ||||
| LATEST_VERSION=$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep "tag_name" | cut -d '"' -f 4) | ||||
| 
 | ||||
| echo "正在安装 docker-compose 版本: $LATEST_VERSION" | ||||
| 
 | ||||
| # 下载 docker-compose | ||||
| DOWNLOAD_URL="https://gh-proxy.com/https://github.com/docker/compose/releases/download/$LATEST_VERSION/docker-compose-Linux-$DOCKER_COMPOSE_ARCH" | ||||
| curl -L "$DOWNLOAD_URL" -o "$INSTALL_PATH" | ||||
| 
 | ||||
| # 检查下载是否成功 | ||||
| if [[ $? -ne 0 ]]; then | ||||
|   echo "下载 docker-compose 失败,请检查网络连接。" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| # 设置可执行权限 | ||||
| chmod +x "$INSTALL_PATH" | ||||
| 
 | ||||
| # 验证安装 | ||||
| if docker-compose --version; then | ||||
|   echo "docker-compose 安装成功!" | ||||
| else | ||||
|   echo "docker-compose 安装失败,请检查安装路径和权限。" | ||||
|   exit 1 | ||||
| fi | ||||
|  | @ -0,0 +1,120 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # ------------------------------ | ||||
| # 配置区(根据实际修改) | ||||
| # ------------------------------ | ||||
| DRONE_HOST="http://100.78.212.75:4010"          # Drone 访问域名 | ||||
| GITEA_SERVER="http://100.78.212.75:3000"    # Gitea 地址 | ||||
| GITEA_CLIENT_ID="1a1da8e3-7425-4e98-92a2-6c2b7d0819d1"     # Gitea OAuth2 Client ID | ||||
| GITEA_CLIENT_SECRET="gto_axhtqnuj36gvss5dbfx2vem2hcbhxho4jprqrlatjyk2i2ylgeoq"    # Gitea OAuth2 Client Secret | ||||
| POSTGRES_CONN="postgres://postgres:hsc1825713423@100.78.212.75:5432/drone?sslmode=disable"  # 数据库连接 | ||||
| REDIS_ADDR="100.78.212.75:6379"                # Redis 地址 | ||||
| REDIS_PASSWORD="hsc1825713423"             # Redis 密码 | ||||
| INSTALL_DIR="/opt/drone"                   # 安装目录 | ||||
| 
 | ||||
| # 国内镜像代理地址(可根据需要更换) | ||||
| DOCKER_PROXY="docker.m.daocloud.io" | ||||
| 
 | ||||
| # ------------------------------ | ||||
| # 自动生成密钥 | ||||
| # ------------------------------ | ||||
| DRONE_RPC_SECRET=$(openssl rand -hex 16) | ||||
| 
 | ||||
| # ------------------------------ | ||||
| # 清理之前的安装 | ||||
| # ------------------------------ | ||||
| echo "🧹 清理之前的 Drone 安装..." | ||||
| docker-compose down &> /dev/null || true | ||||
| docker rm -f drone-server &> /dev/null || true | ||||
| rm -rf "$INSTALL_DIR" | ||||
| mkdir -p "$INSTALL_DIR" | ||||
| echo "✅ 已清理之前的安装。" | ||||
| 
 | ||||
| # ------------------------------ | ||||
| # 创建 docker-compose.yml 文件 | ||||
| # ------------------------------ | ||||
| echo "📝 创建 docker-compose.yml 文件..." | ||||
| cat > "$INSTALL_DIR/docker-compose.yml" <<EOF | ||||
| version: '3' | ||||
| 
 | ||||
| services: | ||||
|   drone-server: | ||||
|     image: ${DOCKER_PROXY}/drone/drone:2 | ||||
|     container_name: drone-server | ||||
|     environment: | ||||
|       - DRONE_GITEA_SERVER=$GITEA_SERVER | ||||
|       - DRONE_GITEA_CLIENT_ID=$GITEA_CLIENT_ID | ||||
|       - DRONE_GITEA_CLIENT_SECRET=$GITEA_CLIENT_SECRET | ||||
|       - DRONE_RPC_SECRET=$DRONE_RPC_SECRET | ||||
|       - DRONE_SERVER_HOST=$DRONE_HOST | ||||
|       - DRONE_SERVER_PROTO=http | ||||
|       - DRONE_DATABASE_DRIVER=postgres | ||||
|       - DRONE_DATABASE_DATASOURCE=$POSTGRES_CONN | ||||
|       - DRONE_REDIS_ADDR=$REDIS_ADDR | ||||
|       - DRONE_REDIS_PASSWORD=$REDIS_PASSWORD | ||||
|     volumes: | ||||
|       - drone-data:/var/lib/drone/ | ||||
|     ports: | ||||
|       - "4010:80" | ||||
|     restart: always | ||||
| 
 | ||||
| volumes: | ||||
|   drone-data: | ||||
| EOF | ||||
| 
 | ||||
| echo "✅ 已创建 docker-compose.yml 文件。" | ||||
| 
 | ||||
| # ------------------------------ | ||||
| # 配置 Docker 使用国内镜像加速 | ||||
| # ------------------------------ | ||||
| echo "🔧 配置 Docker 使用国内镜像加速..." | ||||
| if ! grep -q "registry-mirrors" /etc/docker/daemon.json 2>/dev/null; then | ||||
|   cat > /etc/docker/daemon.json <<EOF | ||||
| { | ||||
|   "registry-mirrors": [ | ||||
|     "https://hub-mirror.c.163.com", | ||||
|     "https://mirror.baidubce.com", | ||||
|     "https://docker.m.daocloud.io" | ||||
|   ] | ||||
| } | ||||
| EOF | ||||
|   systemctl daemon-reload | ||||
|   systemctl restart docker | ||||
|   echo "✅ 已配置 Docker 使用国内镜像加速。" | ||||
| else | ||||
|   echo "⚠️ Docker 已配置镜像加速,跳过此步骤。" | ||||
| fi | ||||
| 
 | ||||
| # ------------------------------ | ||||
| # 启动服务 | ||||
| # ------------------------------ | ||||
| echo "🚀 启动 Drone Server 服务..." | ||||
| cd "$INSTALL_DIR" | ||||
| docker-compose up -d | ||||
| if [ $? -ne 0 ]; then | ||||
|   echo "❌ 启动 Drone Server 服务失败,请检查日志!" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| # ------------------------------ | ||||
| # 验证安装 | ||||
| # ------------------------------ | ||||
| echo "🔍 检查服务状态..." | ||||
| sleep 10 | ||||
| if docker ps | grep -q drone-server; then | ||||
|   echo "✅ Drone Server 服务已成功启动!" | ||||
| else | ||||
|   echo "❌ Drone Server 服务启动失败,请检查以下日志:" | ||||
|   echo "   docker logs drone-server" | ||||
|   exit 1 | ||||
| fi | ||||
| 
 | ||||
| # ------------------------------ | ||||
| # 输出信息 | ||||
| # ------------------------------ | ||||
| echo "✅ 安装完成!" | ||||
| echo "📌 Drone 控制台: $DRONE_HOST" | ||||
| echo "📌 RPC 密钥: $DRONE_RPC_SECRET (请妥善保存)" | ||||
| echo "📌 管理命令:" | ||||
| echo "   docker-compose ps" | ||||
| echo "   docker logs drone-server" | ||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							|  | @ -0,0 +1,203 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # ============================================== | ||||
| # Go 语言安装脚本 for CentOS | ||||
| # 版本:1.3 | ||||
| # 作者:您的名字 | ||||
| # ============================================== | ||||
| 
 | ||||
| # 启用严格模式 | ||||
| set -euo pipefail | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 配置区(可根据需要修改) | ||||
| # -------------------------- | ||||
| GO_VERSION="1.22.0"          # 默认安装版本 | ||||
| INSTALL_DIR="/usr/local"     # 安装目录 | ||||
| GOPATH="$HOME/go"            # GOPATH 设置 | ||||
| PROFILE_FILE="/etc/profile.d/go.sh"  # 环境变量文件 | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 颜色定义 | ||||
| # -------------------------- | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| YELLOW='\033[0;33m' | ||||
| NC='\033[0m' # No Color | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 日志函数 | ||||
| # -------------------------- | ||||
| log_info() { | ||||
|     echo -e "${GREEN}[INFO]${NC} $1" | ||||
| } | ||||
| 
 | ||||
| log_warn() { | ||||
|     echo -e "${YELLOW}[WARN]${NC} $1" | ||||
| } | ||||
| 
 | ||||
| log_error() { | ||||
|     echo -e "${RED}[ERROR]${NC} $1" >&2 | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 检查root权限 | ||||
| # -------------------------- | ||||
| check_root() { | ||||
|     if [ "$(id -u)" -ne 0 ]; then | ||||
|         log_error "请使用root用户或通过sudo运行此脚本" | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 安装依赖 | ||||
| # -------------------------- | ||||
| install_deps() { | ||||
|     log_info "正在安装必要依赖..." | ||||
|     yum install -y curl tar gzip wget git make gcc | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 获取最新Go版本 | ||||
| # -------------------------- | ||||
| get_latest_version() { | ||||
|     log_info "正在获取最新Go版本..." | ||||
|     local latest | ||||
|     latest=$(curl -s https://go.dev/VERSION?m=text | head -1) | ||||
|     if [[ "$latest" =~ ^go[0-9]+\.[0-9]+\.[0-9]+$ ]]; then | ||||
|         GO_VERSION="${latest#go}" | ||||
|         log_info "检测到最新版本: ${GO_VERSION}" | ||||
|     else | ||||
|         log_warn "无法获取最新版本,使用默认版本: ${GO_VERSION}" | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 下载Go安装包 | ||||
| # -------------------------- | ||||
| download_go() { | ||||
|     local url="https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" | ||||
|     local tmp_file="/tmp/go${GO_VERSION}.tar.gz" | ||||
| 
 | ||||
|     if [ -f "$tmp_file" ]; then | ||||
|         log_info "发现本地缓存安装包,跳过下载" | ||||
|         return | ||||
|     fi | ||||
| 
 | ||||
|     log_info "正在下载Go ${GO_VERSION}..." | ||||
|     if ! curl -fSL --progress-bar -o "$tmp_file" "$url"; then | ||||
|         log_error "下载失败,请检查网络连接或版本是否存在" | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 安装Go | ||||
| # -------------------------- | ||||
| install_go() { | ||||
|     local tmp_file="/tmp/go${GO_VERSION}.tar.gz" | ||||
| 
 | ||||
|     log_info "正在安装Go到 ${INSTALL_DIR}..." | ||||
|     tar -C "$INSTALL_DIR" -xzf "$tmp_file" | ||||
|     rm -f "$tmp_file" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 配置环境变量 | ||||
| # -------------------------- | ||||
| setup_env() { | ||||
|     log_info "正在配置环境变量..." | ||||
| 
 | ||||
|     # 创建环境变量文件 | ||||
|     cat > "$PROFILE_FILE" <<EOF | ||||
| export GOROOT=${INSTALL_DIR}/go | ||||
| export GOPATH=${GOPATH} | ||||
| export PATH=\$GOROOT/bin:\$GOPATH/bin:\$PATH | ||||
| EOF | ||||
| 
 | ||||
|     # 立即生效 | ||||
|     source "$PROFILE_FILE" | ||||
| 
 | ||||
|     # 创建GOPATH目录 | ||||
|     mkdir -p "${GOPATH}/"{src,bin,pkg} | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 验证安装 | ||||
| # -------------------------- | ||||
| verify_install() { | ||||
|     log_info "验证安装..." | ||||
|     if ! command -v go &> /dev/null; then | ||||
|         log_error "Go安装失败,请检查错误" | ||||
|         exit 1 | ||||
|     fi | ||||
| 
 | ||||
|     echo -e "\n${GREEN}Go安装成功!${NC}" | ||||
|     echo "=============================" | ||||
|     go version | ||||
|     echo "GOROOT: $(go env GOROOT)" | ||||
|     echo "GOPATH: $(go env GOPATH)" | ||||
|     echo "=============================" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 卸载Go | ||||
| # -------------------------- | ||||
| uninstall_go() { | ||||
|     log_info "正在卸载Go..." | ||||
|     rm -rf "${INSTALL_DIR}/go" | ||||
|     rm -f "$PROFILE_FILE" | ||||
|     log_info "Go已卸载" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 清理缓存 | ||||
| # -------------------------- | ||||
| clean_cache() { | ||||
|     log_info "正在清理缓存..." | ||||
|     rm -f "/tmp/go${GO_VERSION}.tar.gz" | ||||
|     log_info "缓存已清理" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 主函数 | ||||
| # -------------------------- | ||||
| main() { | ||||
|     case "$1" in | ||||
|         install) | ||||
|             check_root | ||||
|             install_deps | ||||
| 
 | ||||
|             # 如果想安装最新版本,取消下面注释 | ||||
|             # get_latest_version | ||||
| 
 | ||||
|             download_go | ||||
|             install_go | ||||
|             setup_env | ||||
|             verify_install | ||||
| 
 | ||||
|             log_info "安装完成!请重新登录或运行 'source ${PROFILE_FILE}' 使环境变量生效" | ||||
|             ;; | ||||
|         uninstall) | ||||
|             check_root | ||||
|             uninstall_go | ||||
|             ;; | ||||
|         clean) | ||||
|             clean_cache | ||||
|             ;; | ||||
|         *) | ||||
|             echo "用法: $0 {install|uninstall|clean}" | ||||
|             echo "  install   安装Go" | ||||
|             echo "  uninstall 卸载Go" | ||||
|             echo "  clean     清理缓存" | ||||
|             exit 1 | ||||
|             ;; | ||||
|     esac | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 执行主函数 | ||||
| # -------------------------- | ||||
| main "$@" | ||||
| exit 0 | ||||
|  | @ -0,0 +1,73 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # JDK 17 安装脚本 for CentOS | ||||
| # 作者:awt | ||||
| # 日期:mx | ||||
| 
 | ||||
| # 检查是否以root用户运行 | ||||
| if [ "$(id -u)" -ne 0 ]; then | ||||
|     echo "请使用root用户或通过sudo运行此脚本" | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| # 安装必要依赖 | ||||
| echo "正在安装必要依赖..." | ||||
| yum install -y wget tar gzip | ||||
| 
 | ||||
| # 设置JDK版本 | ||||
| JDK_VERSION="17.0.10" | ||||
| JDK_BUILD="7" | ||||
| JDK_ARCHIVE="jdk-${JDK_VERSION}_linux-x64_bin.tar.gz" | ||||
| JDK_URL="https://download.oracle.com/java/${JDK_VERSION%%.*}/archive/jdk-${JDK_VERSION}_linux-x64_bin.tar.gz" | ||||
| 
 | ||||
| # 安装目录 | ||||
| INSTALL_DIR="/usr/lib/jvm" | ||||
| JAVA_HOME_DIR="jdk-${JDK_VERSION}" | ||||
| 
 | ||||
| # 创建安装目录 | ||||
| mkdir -p ${INSTALL_DIR} | ||||
| cd ${INSTALL_DIR} | ||||
| 
 | ||||
| # 下载JDK (使用--no-check-certificate和--no-cookies配合Oracle的复杂下载逻辑) | ||||
| echo "正在下载JDK ${JDK_VERSION}..." | ||||
| wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" ${JDK_URL} -O ${JDK_ARCHIVE} | ||||
| 
 | ||||
| if [ $? -ne 0 ]; then | ||||
|     echo "JDK下载失败,请检查网络连接或URL有效性" | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| # 解压安装 | ||||
| echo "正在安装JDK..." | ||||
| tar -xzf ${JDK_ARCHIVE} | ||||
| rm -f ${JDK_ARCHIVE} | ||||
| 
 | ||||
| # 设置环境变量 | ||||
| echo "配置环境变量..." | ||||
| cat > /etc/profile.d/java.sh <<EOF | ||||
| export JAVA_HOME=${INSTALL_DIR}/${JAVA_HOME_DIR} | ||||
| export PATH=\$JAVA_HOME/bin:\$PATH | ||||
| EOF | ||||
| 
 | ||||
| # 加载环境变量 | ||||
| source /etc/profile.d/java.sh | ||||
| 
 | ||||
| # 更新alternatives系统 | ||||
| echo "设置系统默认Java..." | ||||
| if [ -d "${INSTALL_DIR}/${JAVA_HOME_DIR}/bin" ]; then | ||||
|     update-alternatives --install "/usr/bin/java" "java" "${INSTALL_DIR}/${JAVA_HOME_DIR}/bin/java" 1000 | ||||
|     update-alternatives --install "/usr/bin/javac" "javac" "${INSTALL_DIR}/${JAVA_HOME_DIR}/bin/javac" 1000 | ||||
|     update-alternatives --set java "${INSTALL_DIR}/${JAVA_HOME_DIR}/bin/java" | ||||
|     update-alternatives --set javac "${INSTALL_DIR}/${JAVA_HOME_DIR}/bin/javac" | ||||
| else | ||||
|     echo "Java二进制文件未找到,安装可能失败" | ||||
|     exit 1 | ||||
| fi | ||||
| 
 | ||||
| # 验证安装 | ||||
| echo "验证Java版本..." | ||||
| java -version | ||||
| javac -version | ||||
| 
 | ||||
| echo "JDK ${JDK_VERSION} 安装完成!" | ||||
| echo "JAVA_HOME 设置为: ${INSTALL_DIR}/${JAVA_HOME_DIR}" | ||||
|  | @ -0,0 +1,161 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # ============================================== | ||||
| # Maven 安装脚本(使用国内镜像) | ||||
| # 功能:自动安装 Maven 并配置阿里云镜像源 | ||||
| # ============================================== | ||||
| 
 | ||||
| # 启用严格模式 | ||||
| set -euo pipefail | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 颜色定义 | ||||
| # -------------------------- | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| YELLOW='\033[0;33m' | ||||
| NC='\033[0m' # No Color | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 日志函数 | ||||
| # -------------------------- | ||||
| log_info() { | ||||
|     echo -e "${GREEN}[INFO]${NC} $1" | ||||
| } | ||||
| 
 | ||||
| log_warn() { | ||||
|     echo -e "${YELLOW}[WARN]${NC} $1" | ||||
| } | ||||
| 
 | ||||
| log_error() { | ||||
|     echo -e "${RED}[ERROR]${NC} $1" >&2 | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 检查 root 权限 | ||||
| # -------------------------- | ||||
| check_root() { | ||||
|     if [ "$(id -u)" -ne 0 ]; then | ||||
|         log_error "请使用 root 用户或通过 sudo 运行此脚本" | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 安装 Java(Maven 依赖 Java) | ||||
| # -------------------------- | ||||
| install_java() { | ||||
|     log_info "正在检查 Java 是否已安装..." | ||||
| 
 | ||||
|     if ! command -v java &> /dev/null; then | ||||
|         log_warn "未检测到 Java,正在安装 OpenJDK 17..." | ||||
|         dnf install -y java-17-openjdk-devel | ||||
|     else | ||||
|         log_info "Java 已安装,版本信息如下:" | ||||
|         java -version | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 下载并安装 Maven(使用国内镜像) | ||||
| # -------------------------- | ||||
| install_maven() { | ||||
|     log_info "正在下载并安装 Maven(使用国内镜像)..." | ||||
| 
 | ||||
|     # 定义 Maven 版本和安装路径 | ||||
|     MAVEN_VERSION="3.8.8" | ||||
|     INSTALL_DIR="/opt/maven" | ||||
| 
 | ||||
|     # 使用阿里云镜像地址 | ||||
|     MAVEN_URL="https://mirrors.aliyun.com/apache/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz" | ||||
| 
 | ||||
|     # 创建安装目录 | ||||
|     mkdir -p "$INSTALL_DIR" | ||||
| 
 | ||||
|     # 下载 Maven | ||||
|     log_info "正在从阿里云镜像下载 Maven ${MAVEN_VERSION}..." | ||||
|     curl -L -o "/tmp/apache-maven-${MAVEN_VERSION}-bin.tar.gz" "$MAVEN_URL" | ||||
| 
 | ||||
|     # 解压到安装目录 | ||||
|     tar -xzf "/tmp/apache-maven-${MAVEN_VERSION}-bin.tar.gz" -C "$INSTALL_DIR" --strip-components=1 | ||||
| 
 | ||||
|     # 清理临时文件 | ||||
|     rm -f "/tmp/apache-maven-${MAVEN_VERSION}-bin.tar.gz" | ||||
| 
 | ||||
|     log_info "Maven 已成功安装到 ${INSTALL_DIR}" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 配置环境变量 | ||||
| # -------------------------- | ||||
| configure_env() { | ||||
|     log_info "正在配置 Maven 环境变量..." | ||||
| 
 | ||||
|     # 添加 Maven 到 PATH | ||||
|     echo 'export M2_HOME=/opt/maven' > /etc/profile.d/maven.sh | ||||
|     echo 'export PATH=$M2_HOME/bin:$PATH' >> /etc/profile.d/maven.sh | ||||
| 
 | ||||
|     # 使配置立即生效 | ||||
|     source /etc/profile.d/maven.sh | ||||
| 
 | ||||
|     log_info "Maven 环境变量已配置完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 配置阿里云镜像源 | ||||
| # -------------------------- | ||||
| configure_aliyun_mirror() { | ||||
|     log_info "正在配置阿里云 Maven 镜像源..." | ||||
| 
 | ||||
|     # 创建 Maven 配置目录 | ||||
|     mkdir -p /root/.m2 | ||||
| 
 | ||||
|     # 配置 settings.xml 文件 | ||||
|     cat > /root/.m2/settings.xml <<'EOF' | ||||
| <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" | ||||
|           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||||
|           xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> | ||||
|     <mirrors> | ||||
|         <mirror> | ||||
|             <id>aliyun</id> | ||||
|             <name>Aliyun Maven</name> | ||||
|             <url>https://maven.aliyun.com/repository/public</url> | ||||
|             <mirrorOf>*</mirrorOf> | ||||
|         </mirror> | ||||
|     </mirrors> | ||||
| </settings> | ||||
| EOF | ||||
| 
 | ||||
|     log_info "阿里云 Maven 镜像源已配置完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 测试 Maven 安装 | ||||
| # -------------------------- | ||||
| test_maven() { | ||||
|     log_info "正在测试 Maven 安装..." | ||||
| 
 | ||||
|     mvn -v | ||||
| 
 | ||||
|     log_info "Maven 安装测试完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 主函数 | ||||
| # -------------------------- | ||||
| main() { | ||||
|     check_root | ||||
|     install_java | ||||
|     install_maven | ||||
|     configure_env | ||||
|     configure_aliyun_mirror | ||||
|     test_maven | ||||
| 
 | ||||
|     log_info "Maven 已成功安装并配置!" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 执行主函数 | ||||
| # -------------------------- | ||||
| main | ||||
| exit 0 | ||||
|  | @ -0,0 +1,162 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # ============================================== | ||||
| # Node.js 安装脚本 | ||||
| # 功能:自动安装 Node.js 并配置阿里云镜像源 | ||||
| # 适用系统:CentOS/RHEL、Ubuntu/Debian 等主流 Linux 发行版 | ||||
| # ============================================== | ||||
| 
 | ||||
| # 启用严格模式 | ||||
| set -euo pipefail | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 颜色定义 | ||||
| # -------------------------- | ||||
| RED='\033[0;31m' | ||||
| GREEN='\033[0;32m' | ||||
| YELLOW='\033[0;33m' | ||||
| NC='\033[0m' # No Color | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 日志函数 | ||||
| # -------------------------- | ||||
| log_info() { | ||||
|     echo -e "${GREEN}[INFO]${NC} $1" | ||||
| } | ||||
| 
 | ||||
| log_warn() { | ||||
|     echo -e "${YELLOW}[WARN]${NC} $1" | ||||
| } | ||||
| 
 | ||||
| log_error() { | ||||
|     echo -e "${RED}[ERROR]${NC} $1" >&2 | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 检查 root 权限 | ||||
| # -------------------------- | ||||
| check_root() { | ||||
|     if [ "$(id -u)" -ne 0 ]; then | ||||
|         log_error "请使用 root 用户或通过 sudo 运行此脚本" | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 检测系统类型 | ||||
| # -------------------------- | ||||
| detect_os() { | ||||
|     if [ -f /etc/os-release ]; then | ||||
|         . /etc/os-release | ||||
|         OS_NAME="${ID:-unknown}" | ||||
|         OS_VERSION="${VERSION_ID:-unknown}" | ||||
|     else | ||||
|         log_error "无法检测操作系统类型,请手动安装 Node.js" | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 安装依赖工具 | ||||
| # -------------------------- | ||||
| install_dependencies() { | ||||
|     log_info "正在安装必要的依赖工具..." | ||||
| 
 | ||||
|     if [[ "$OS_NAME" == "centos" || "$OS_NAME" == "rhel" || "$OS_NAME" == "rocky" || "$OS_NAME" == "almalinux" ]]; then | ||||
|         dnf install -y curl wget | ||||
|     elif [[ "$OS_NAME" == "ubuntu" || "$OS_NAME" == "debian" ]]; then | ||||
|         apt update | ||||
|         apt install -y curl wget | ||||
|     else | ||||
|         log_error "不支持的操作系统: ${OS_NAME}" | ||||
|         exit 1 | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 安装 Node.js | ||||
| # -------------------------- | ||||
| install_nodejs() { | ||||
|     log_info "正在安装 Node.js..." | ||||
| 
 | ||||
|     # 添加 NodeSource 仓库 | ||||
|     if [[ "$OS_NAME" == "centos" || "$OS_NAME" == "rhel" || "$OS_NAME" == "rocky" || "$OS_NAME" == "almalinux" ]]; then | ||||
|         curl -sL https://rpm.nodesource.com/setup_18.x | bash - | ||||
|         dnf install -y nodejs | ||||
|     elif [[ "$OS_NAME" == "ubuntu" || "$OS_NAME" == "debian" ]]; then | ||||
|         curl -sL https://deb.nodesource.com/setup_18.x | bash - | ||||
|         apt install -y nodejs | ||||
|     else | ||||
|         log_error "不支持的操作系统: ${OS_NAME}" | ||||
|         exit 1 | ||||
|     fi | ||||
| 
 | ||||
|     log_info "Node.js 安装完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 配置 npm 阿里云镜像源 | ||||
| # -------------------------- | ||||
| configure_npm_mirror() { | ||||
|     log_info "正在配置 npm 阿里云镜像源..." | ||||
| 
 | ||||
|     npm config set registry https://registry.npmmirror.com | ||||
| 
 | ||||
|     log_info "npm 阿里云镜像源已配置完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 安装并配置 Yarn(可选) | ||||
| # -------------------------- | ||||
| install_and_configure_yarn() { | ||||
|     log_info "正在安装并配置 Yarn..." | ||||
| 
 | ||||
|     # 安装 Yarn | ||||
|     if [[ "$OS_NAME" == "centos" || "$OS_NAME" == "rhel" || "$OS_NAME" == "rocky" || "$OS_NAME" == "almalinux" ]]; then | ||||
|         npm install -g yarn | ||||
|     elif [[ "$OS_NAME" == "ubuntu" || "$OS_NAME" == "debian" ]]; then | ||||
|         npm install -g yarn | ||||
|     fi | ||||
| 
 | ||||
|     # 配置 Yarn 阿里云镜像源 | ||||
|     yarn config set registry https://registry.npmmirror.com | ||||
| 
 | ||||
|     log_info "Yarn 安装并配置完成" | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 测试 Node.js 和 npm 安装 | ||||
| # -------------------------- | ||||
| test_installation() { | ||||
|     log_info "正在测试 Node.js 和 npm 安装..." | ||||
| 
 | ||||
|     NODE_VERSION=$(node --version) | ||||
|     NPM_VERSION=$(npm --version) | ||||
| 
 | ||||
|     log_info "Node.js 安装成功,版本为: ${NODE_VERSION}" | ||||
|     log_info "npm 安装成功,版本为: ${NPM_VERSION}" | ||||
| 
 | ||||
|     if command -v yarn &> /dev/null; then | ||||
|         YARN_VERSION=$(yarn --version) | ||||
|         log_info "Yarn 安装成功,版本为: ${YARN_VERSION}" | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 主函数 | ||||
| # -------------------------- | ||||
| main() { | ||||
|     check_root | ||||
|     detect_os | ||||
|     install_dependencies | ||||
|     install_nodejs | ||||
|     configure_npm_mirror | ||||
|     install_and_configure_yarn | ||||
|     test_installation | ||||
| } | ||||
| 
 | ||||
| # -------------------------- | ||||
| # 执行主函数 | ||||
| # -------------------------- | ||||
| main | ||||
| exit 0 | ||||
|  | @ -0,0 +1,78 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # 日志级别定义 | ||||
| LOG_LEVEL_DEBUG=10 | ||||
| LOG_LEVEL_INFO=20 | ||||
| LOG_LEVEL_WARNING=30 | ||||
| LOG_LEVEL_ERROR=40 | ||||
| 
 | ||||
| # 当前日志级别 | ||||
| CURRENT_LOG_LEVEL=$LOG_LEVEL_INFO | ||||
| 
 | ||||
| # 颜色定义 | ||||
| COLOR_RESET="\033[0m" | ||||
| COLOR_DEBUG="\033[0;36m" | ||||
| COLOR_INFO="\033[0;32m" | ||||
| COLOR_WARNING="\033[0;33m" | ||||
| COLOR_ERROR="\033[0;31m" | ||||
| 
 | ||||
| # 日志函数 | ||||
| log() { | ||||
|     local level=$1 | ||||
|     shift | ||||
|     local message="$*" | ||||
|     local timestamp=$(date +"%Y-%m-%d %H:%M:%S") | ||||
|     local color=$COLOR_RESET | ||||
| 
 | ||||
|     if [ "$level" -ge "$CURRENT_LOG_LEVEL" ]; then | ||||
|         case $level in | ||||
|             $LOG_LEVEL_DEBUG) | ||||
|                 color=$COLOR_DEBUG | ||||
|                 ;; | ||||
|             $LOG_LEVEL_INFO) | ||||
|                 color=$COLOR_INFO | ||||
|                 ;; | ||||
|             $LOG_LEVEL_WARNING) | ||||
|                 color=$COLOR_WARNING | ||||
|                 ;; | ||||
|             $LOG_LEVEL_ERROR) | ||||
|                 color=$COLOR_ERROR | ||||
|                 ;; | ||||
|         esac | ||||
|         echo -e "${color}[$timestamp] [${level}] $message${COLOR_RESET}" | ||||
|     fi | ||||
| } | ||||
| 
 | ||||
| # 帮助函数 | ||||
| show_help() { | ||||
|     echo "Usage: $0 [options]" | ||||
|     echo "Options:" | ||||
|     echo "  -h, --help    Show this help message and exit" | ||||
|     echo "  -v, --verbose Set log level to debug" | ||||
| } | ||||
| 
 | ||||
| # 解析命令行参数 | ||||
| while [[ "$#" -gt 0 ]]; do | ||||
|     case $1 in | ||||
|         -h|--help) | ||||
|             show_help | ||||
|             exit 0 | ||||
|             ;; | ||||
|         -v|--verbose) | ||||
|             CURRENT_LOG_LEVEL=$LOG_LEVEL_DEBUG | ||||
|             shift | ||||
|             ;; | ||||
|         *) | ||||
|             echo "Unknown parameter passed: $1" | ||||
|             show_help | ||||
|             exit 1 | ||||
|             ;; | ||||
|     esac | ||||
|     shift | ||||
| done | ||||
| 
 | ||||
| # 示例日志记录 | ||||
| log $LOG_LEVEL_INFO "Script started" | ||||
| log $LOG_LEVEL_DEBUG "This is a debug message" | ||||
| log $LOG_LEVEL_WARNING "This is a warning message" | ||||
| log $LOG_LEVEL_ERROR "This is an error message" | ||||
|  | @ -0,0 +1,10 @@ | |||
| #!/bin/bash | ||||
| 
 | ||||
| # 1. 拉取frp.tar.gz | ||||
| # todo 后续开发 | ||||
| 
 | ||||
| # 检查是否为root用户 | ||||
| if [ $(id -u) != "0" ]; then | ||||
|     echo "错误:请使用root用户执行此脚本" | ||||
|     exit 1 | ||||
| fi | ||||
|  | @ -1,6 +1,5 @@ | |||
| #!/bin/bash | ||||
| # 初始化Linux服务器脚本 | ||||
| # 功能:1. 时钟同步配置 2. Yum加速配置 3. 系统基础优化 | ||||
| # 1. tailscale | ||||
| 
 | ||||
| # 检查是否为root用户 | ||||
| if [ $(id -u) != "0" ]; then | ||||
		Loading…
	
		Reference in New Issue