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
|
#!/bin/bash
|
||||||
# 初始化Linux服务器脚本
|
# 1. tailscale
|
||||||
# 功能:1. 时钟同步配置 2. Yum加速配置 3. 系统基础优化
|
|
||||||
|
|
||||||
# 检查是否为root用户
|
# 检查是否为root用户
|
||||||
if [ $(id -u) != "0" ]; then
|
if [ $(id -u) != "0" ]; then
|
||||||
Loading…
Reference in New Issue