## 主要改进 - 升级 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 <noreply@anthropic.com>
170 lines
4.8 KiB
Bash
Executable File
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 |