Files
macos-tools/gitlab/reset-gitlab-password.sh
gaoandClaude 2c616faba0 feat: 完成 GitLab macOS 优化部署和 CI/CD 配置
## 主要改进
- 升级 GitLab CE 到 16.11.7 (最新稳定版)
- 优化性能配置 (Puma worker, Sidekiq 并发控制)
- 禁用不必要服务节省资源 (Prometheus/Grafana)
- 配置国内 APT 镜像源加速更新
- 添加时区设置 Asia/Shanghai

## 新增功能
- 一键部署脚本 (init-gitlab-optimized.sh)
- 智能 Runner 注册 (register-runner-optimized.sh)
- 综合维护工具 (maintenance-gitlab.sh)
- SMTP 邮件配置向导 (setup-smtp.sh)
- 密码重置工具 (reset-gitlab-password.sh)
- 快速诊断脚本 (diagnose-gitlab.sh)

## CI/CD 配置
- 注册 Docker Runner (容器化构建)
- 注册 Shell Runner (本地脚本执行)
- 创建 CI/CD 模板文件
- Runner 配置优化和清理

## 文档完善
- 技术文档 (CLAUDE.md)
- 优化部署指南 (OPTIMIZATION_GUIDE.md)
- 使用说明和故障排除指南

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2025-11-04 11:49:57 +08:00

170 lines
4.8 KiB
Bash
Executable File

#!/bin/bash
# GitLab 密码重置脚本
# 解决 initial_root_password 文件丢失的问题
set -e
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${GREEN}🔑 GitLab 密码重置工具${NC}"
echo "========================"
# 检查 GitLab 容器
echo -e "${YELLOW}检查 GitLab 容器状态...${NC}"
CONTAINER_ID=$(docker ps -q --filter "name=gitlab-ce" | head -1)
if [[ -z "$CONTAINER_ID" ]]; then
echo -e "${RED}错误: GitLab 容器未运行${NC}"
echo "请先启动 GitLab: docker-compose up -d"
exit 1
fi
echo -e "${GREEN}✅ GitLab 容器正在运行: ${CONTAINER_ID:0:12}${NC}"
# 检查服务可用性
echo -e "${YELLOW}检查 GitLab 服务状态...${NC}"
if ! curl -f http://localhost:8891/users/sign_in >/dev/null 2>&1; then
echo -e "${RED}错误: GitLab 服务不可访问${NC}"
echo "请等待 GitLab 完全启动后再试"
exit 1
fi
echo -e "${GREEN}✅ GitLab 服务可访问${NC}"
# 选择重置方式
echo ""
echo -e "${BLUE}请选择密码重置方式:${NC}"
echo "1) 自动生成安全密码"
echo "2) 手动输入密码"
echo "3) 重置为默认密码 (admin123456)"
echo ""
read -p "请选择 (1-3): " choice
case $choice in
1)
# 自动生成安全密码
NEW_PASSWORD="GL$(date +%s%N | tail -c 7)!"
echo -e "${YELLOW}生成的新密码: ${NEW_PASSWORD}${NC}"
;;
2)
# 手动输入密码
while true; do
read -s -p "请输入新密码 (至少8位): " NEW_PASSWORD
echo ""
if [[ ${#NEW_PASSWORD} -lt 8 ]]; then
echo -e "${RED}密码太短,请至少输入8位字符${NC}"
continue
fi
read -s -p "请确认密码: " CONFIRM_PASSWORD
echo ""
if [[ "$NEW_PASSWORD" != "$CONFIRM_PASSWORD" ]]; then
echo -e "${RED}两次输入的密码不一致${NC}"
continue
fi
break
done
;;
3)
# 默认密码
NEW_PASSWORD="admin123456"
echo -e "${YELLOW}将使用默认密码: admin123456${NC}"
;;
*)
echo -e "${RED}无效选择${NC}"
exit 1
;;
esac
# 执行密码重置
echo -e "${YELLOW}重置 root 用户密码...${NC}"
# 尝试重置密码
RESET_RESULT=$(docker exec "$CONTAINER_ID" /opt/gitlab/bin/gitlab-rails runner "
user = User.find_by_username('root')
if user
user.password = '$NEW_PASSWORD'
user.password_confirmation = '$NEW_PASSWORD'
begin
user.save!
puts 'SUCCESS'
puts \"用户名: root\"
puts \"密码: $NEW_PASSWORD\"
rescue => e
puts 'ERROR'
puts e.message
end
else
puts 'NO_USER'
end
" 2>&1)
# 检查结果
if echo "$RESET_RESULT" | grep -q "SUCCESS"; then
echo -e "${GREEN}✅ 密码重置成功!${NC}"
echo ""
echo -e "${BLUE}登录信息:${NC}"
echo "=================================="
echo "📱 访问地址: http://192.168.1.83:8891"
echo "👤 用户名: root"
echo "🔒 密码: ${NEW_PASSWORD}"
echo "=================================="
echo ""
echo -e "${YELLOW}建议:${NC}"
echo "1. 登录后立即修改密码"
echo "2. 启用两步验证"
echo "3. 配置邮件通知"
elif echo "$RESET_RESULT" | grep -q "ERROR"; then
echo -e "${RED}❌ 密码重置失败${NC}"
ERROR_MSG=$(echo "$RESET_RESULT" | grep -A 5 "ERROR" | tail -n +2)
echo "错误信息: $ERROR_MSG"
echo ""
echo -e "${YELLOW}常见问题:${NC}"
echo "- 密码过于简单,请使用更复杂的密码"
echo "- 密码包含常用组合,建议添加数字和特殊字符"
echo "- 可以选择选项1使用自动生成的安全密码"
elif echo "$RESET_RESULT" | grep -q "NO_USER"; then
echo -e "${RED}❌ 未找到 root 用户${NC}"
echo "这可能表示 GitLab 数据库存在问题"
else
echo -e "${RED}❌ 未知错误${NC}"
echo "输出结果: $RESET_RESULT"
fi
# 提供额外的故障排除信息
echo ""
echo -e "${BLUE}🔧 故障排除:${NC}"
echo "如果仍然无法登录,请尝试:"
echo "1. 检查 GitLab 服务状态: docker exec $CONTAINER_ID gitlab-ctl status"
echo "2. 查看服务日志: docker logs $CONTAINER_ID"
echo "3. 重启 GitLab 服务: docker-compose restart"
echo "4. 等待服务完全启动后再试"
# 创建密码记录文件
if echo "$RESET_RESULT" | grep -q "SUCCESS"; then
RECORD_FILE="./gitlab-password-$(date +%Y%m%d).txt"
cat > "$RECORD_FILE" << EOF
GitLab 登录信息记录
==================
记录时间: $(date)
容器ID: ${CONTAINER_ID}
访问地址: http://192.168.1.83:8891
用户名: root
密码: ${NEW_PASSWORD}
⚠️ 请妥善保管此文件,使用后建议删除
EOF
echo -e "${GREEN}📝 密码已保存到: ${RECORD_FILE}${NC}"
fi