feat: 重构基础设施配置与安全凭证管理
Some checks failed
Infrastructure CI/CD / Validate Infrastructure (push) Failing after 9s
Infrastructure CI/CD / Plan Infrastructure (push) Has been skipped
Infrastructure CI/CD / Apply Infrastructure (push) Has been skipped
Simple Test / test (push) Successful in 1s

- 新增多个云服务商配置文件(OCI、阿里云)
- 重构Vault、Consul、Nomad等服务的部署配置
- 新增备份与恢复完美状态的脚本
- 更新安全凭证管理文档
- 优化Traefik动态配置
- 删除过时的脚本和配置文件

重构后的配置支持多区域部署,优化了服务发现和负载均衡机制,并完善了安全凭证的备份与恢复流程。
This commit is contained in:
2025-10-13 03:08:22 +00:00
parent 41bff0cd02
commit 4381428b5d
48 changed files with 3628 additions and 498 deletions

View File

@@ -0,0 +1,12 @@
{
"current": "default",
"profiles": [
{
"name": "default",
"mode": "AK",
"access_key_id": "LTAI5tBRm7PbNFdaGZpUaLUJ",
"access_key_secret": "cYRaxAoE9I3MILlHRgUbowfxQzhj1D",
"region_id": "cn-hangzhou"
}
]
}

View File

@@ -0,0 +1,61 @@
# 阿里云 (Aliyun) 凭据配置
## AccessKey 信息
- **AccessKey ID**: `LTAI5tBRm7PbNFdaGZpUaLUJ`
- **AccessKey Secret**: `cYRaxAoE9I3MILlHRgUbowfxQzhj1D`
- **账户ID**: `1368151659883237`
- **测试状态**: ✅ 已验证可用
## 配置方法
### 1. 环境变量方式
```bash
export ALICLOUD_ACCESS_KEY="LTAI5tBRm7PbNFdaGZpUaLUJ"
export ALICLOUD_SECRET_KEY="cYRaxAoE9I3MILlHRgUbowfxQzhj1D"
export ALICLOUD_REGION="cn-hangzhou"
```
### 2. Terraform Provider 配置
```hcl
provider "alicloud" {
access_key = "LTAI5tBRm7PbNFdaGZpUaLUJ"
secret_key = "cYRaxAoE9I3MILlHRgUbowfxQzhj1D"
region = "cn-hangzhou"
}
```
### 3. 配置文件方式
创建 `~/.aliyun/config.json`:
```json
{
"current": "default",
"profiles": [
{
"name": "default",
"mode": "AK",
"access_key_id": "LTAI5tBRm7PbNFdaGZpUaLUJ",
"access_key_secret": "cYRaxAoE9I3MILlHRgUbowfxQzhj1D",
"region_id": "cn-hangzhou"
}
]
}
```
## 安全注意事项
- 此文件包含敏感信息,请勿提交到版本控制系统
- 建议定期轮换 AccessKey
- 在生产环境中使用环境变量或密钥管理系统
- 限制 AccessKey 的权限范围
## 测试命令
```bash
# 测试 Terraform Provider
terraform plan
# 测试阿里云 CLI (如果已安装)
aliyun ecs DescribeRegions
```
---
*创建时间: $(date)*
*最后更新: $(date)*

View File

@@ -0,0 +1,114 @@
# 阿里云网络配置分析报告
## 检查结果总结
### ✅ 网络配置状态正常
经过详细检查,**北京区域和杭州区域的 VPC 和交换机绑定都是正常的**,没有发现配置问题。
## 详细配置对比
### 北京区域 (cn-beijing)
```
VPC 配置:
- VPC ID: vpc-2ze1d10frat58rkmugz2d
- VPC 名称: bj_ipam
- CIDR: 10.0.0.0/16
- 状态: Available
- 是否默认: false
- 路由器ID: vrt-2zel1socf0h5rdbyaz62u
交换机配置:
- 交换机ID: vsw-2zert539m12zh3ipi5dlg
- 交换机名称: bj_k
- VPC ID: vpc-2ze1d10frat58rkmugz2d ✅ (正确绑定)
- CIDR: 10.0.0.0/24
- 可用区: cn-beijing-k
- 状态: Available
```
### 杭州区域 (cn-hangzhou)
```
VPC 配置:
- VPC ID: vpc-bp1spuegboppd8652reyc
- VPC 名称: all
- CIDR: 192.168.0.0/16
- 状态: Available
- 是否默认: false
- 路由器ID: vrt-bp1531resnedu5ew92wl1
交换机配置:
- 交换机ID: vsw-bp16s42fh0kwnp2vfii8c
- 交换机名称: hz_k
- VPC ID: vpc-bp1spuegboppd8652reyc ✅ (正确绑定)
- CIDR: 192.168.0.0/24
- 可用区: cn-hangzhou-k
- 状态: Available
```
## 关键发现
### 1. 网络绑定状态
-**北京区域**: VPC 和交换机正确绑定
-**杭州区域**: VPC 和交换机正确绑定
-**状态检查**: 所有资源状态都是 "Available"
### 2. 配置一致性
- 两个区域的网络配置结构完全一致
- VPC 和交换机的绑定关系都正确
- 没有发现任何配置异常
## 可能的 Supabase 部署问题原因
### 1. 服务可用性问题
- **Supabase 服务**: 可能在北京区域的服务可用性有限
- **新服务限制**: 新推出的服务可能有区域限制或配额限制
### 2. 权限问题
- **RAM 权限**: 检查 AccessKey 是否有足够的权限创建 Supabase 相关资源
- **服务权限**: 可能需要额外的服务权限才能使用 Supabase
### 3. 资源配额问题
- **VPC 配额**: 检查 VPC 内的资源配额是否足够
- **网络配额**: 检查网络相关资源的配额限制
### 4. 服务依赖问题
- **依赖服务**: Supabase 可能需要特定的依赖服务
- **网络策略**: 可能需要特定的网络策略或安全组配置
## 建议排查步骤
### 1. 检查服务可用性
```bash
# 检查 Supabase 在北京区域的可用性
aliyun rds DescribeAvailableZones --RegionId cn-beijing
```
### 2. 检查权限配置
```bash
# 检查当前用户的权限
aliyun ram GetUser --UserName your-username
```
### 3. 检查资源配额
```bash
# 检查 VPC 相关配额
aliyun ecs DescribeAccountAttributes
```
### 4. 创建测试资源
尝试创建一个简单的 ECS 实例来验证网络配置是否真的可用。
## 结论
**网络配置本身没有问题**VPC 和交换机的绑定关系正确。Supabase 部署问题可能是由于:
1. 服务可用性限制
2. 权限配置不足
3. 资源配额限制
4. 服务特定的网络要求
建议按照上述排查步骤进一步检查具体原因。
---
*分析时间: $(date)*
*检查区域: 北京 (cn-beijing) vs 杭州 (cn-hangzhou)*

View File

@@ -1,273 +0,0 @@
#!/bin/bash
# 批量部署安全配置文件脚本
# 使用方法: ./deploy-security-configs.sh [节点名] [配置类型]
set -e
# 配置变量
SECURITY_DIR="/root/mgmt/security"
SECRETS_DIR="$SECURITY_DIR/secrets"
LOGS_DIR="$SECURITY_DIR/logs"
BACKUP_DIR="$SECURITY_DIR/backups"
TEMP_DIR="/tmp/security-deploy"
# 节点列表
NODES=("ch4" "ash3c" "warden" "ash1d" "ash2e" "ch2" "ch3" "de" "onecloud1" "semaphore" "influxdb" "hcp1" "browser" "brother")
# 配置类型
CONFIG_TYPES=("nomad" "consul" "vault" "traefik")
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
# 日志函数
log() {
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $1"
}
error() {
echo -e "${RED}[ERROR]${NC} $1" >&2
}
success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
# 创建必要目录
create_dirs() {
mkdir -p "$LOGS_DIR" "$BACKUP_DIR" "$TEMP_DIR"
}
# 检查节点是否存在
check_node() {
local node=$1
ping -c 1 "$node.tailnet-68f9.ts.net" >/dev/null 2>&1
}
# 备份现有配置
backup_config() {
local node=$1
local config_type=$2
local config_path=$3
local backup_file="$BACKUP_DIR/${node}-${config_type}-$(date +%Y%m%d_%H%M%S).backup"
log "备份 $node$config_type 配置到 $backup_file"
if sshpass -p '3131' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ben@"$node.tailnet-68f9.ts.net" "test -f $config_path"; then
sshpass -p '3131' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ben@"$node.tailnet-68f9.ts.net" "cat $config_path" > "$backup_file"
success "备份完成: $backup_file"
else
warning "配置文件不存在: $config_path"
fi
}
# 部署配置文件
deploy_config() {
local node=$1
local config_type=$2
local config_file=$3
log "部署 $config_file$node"
# 确定目标路径
local target_path
case $config_type in
"nomad")
target_path="/etc/nomad.d/nomad.hcl"
;;
"consul")
target_path="/etc/consul.d/consul.hcl"
;;
"vault")
target_path="/etc/vault.d/vault.hcl"
;;
"traefik")
target_path="/etc/traefik/traefik.yml"
;;
*)
error "未知配置类型: $config_type"
return 1
;;
esac
# 备份现有配置
backup_config "$node" "$config_type" "$target_path"
# 上传配置文件
log "上传配置文件到 $node:$target_path"
sshpass -p '3131' scp -o StrictHostKeyChecking=no -o ConnectTimeout=10 "$config_file" ben@"$node.tailnet-68f9.ts.net":/tmp/new-config
# 替换配置文件
log "替换配置文件"
sshpass -p '3131' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ben@"$node.tailnet-68f9.ts.net" "
echo '3131' | sudo -S cp /tmp/new-config $target_path
echo '3131' | sudo -S chown root:root $target_path
echo '3131' | sudo -S chmod 644 $target_path
rm -f /tmp/new-config
"
success "配置文件部署完成: $node:$target_path"
}
# 重启服务
restart_service() {
local node=$1
local config_type=$2
log "重启 $node$config_type 服务"
local service_name
case $config_type in
"nomad")
service_name="nomad"
;;
"consul")
service_name="consul"
;;
"vault")
service_name="vault"
;;
"traefik")
service_name="traefik"
;;
*)
error "未知服务类型: $config_type"
return 1
;;
esac
sshpass -p '3131' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ben@"$node.tailnet-68f9.ts.net" "
echo '3131' | sudo -S systemctl restart $service_name
sleep 3
echo '3131' | sudo -S systemctl status $service_name --no-pager
"
success "服务重启完成: $node:$service_name"
}
# 验证部署
verify_deployment() {
local node=$1
local config_type=$2
log "验证 $node$config_type 部署"
case $config_type in
"nomad")
sshpass -p '3131' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ben@"$node.tailnet-68f9.ts.net" "
echo '3131' | sudo -S systemctl is-active nomad
"
;;
"consul")
sshpass -p '3131' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 ben@"$node.tailnet-68f9.ts.net" "
echo '3131' | sudo -S systemctl is-active consul
"
;;
*)
warning "跳过验证: $config_type"
;;
esac
}
# 主函数
main() {
local target_node=${1:-"all"}
local target_type=${2:-"all"}
log "开始批量部署安全配置文件"
log "目标节点: $target_node"
log "配置类型: $target_type"
create_dirs
# 处理节点列表
local nodes_to_process=()
if [ "$target_node" = "all" ]; then
nodes_to_process=("${NODES[@]}")
else
nodes_to_process=("$target_node")
fi
# 处理配置类型
local types_to_process=()
if [ "$target_type" = "all" ]; then
types_to_process=("${CONFIG_TYPES[@]}")
else
types_to_process=("$target_type")
fi
# 遍历节点和配置类型
for node in "${nodes_to_process[@]}"; do
if ! check_node "$node"; then
warning "节点 $node 不可达,跳过"
continue
fi
log "处理节点: $node"
for config_type in "${types_to_process[@]}"; do
local config_file="$SECRETS_DIR/${node}-${config_type}.hcl"
if [ ! -f "$config_file" ]; then
config_file="$SECRETS_DIR/${node}-${config_type}.yml"
fi
if [ ! -f "$config_file" ]; then
config_file="$SECRETS_DIR/${node}-${config_type}.json"
fi
if [ -f "$config_file" ]; then
log "找到配置文件: $config_file"
deploy_config "$node" "$config_type" "$config_file"
restart_service "$node" "$config_type"
verify_deployment "$node" "$config_type"
else
warning "未找到配置文件: $node-$config_type"
fi
done
done
# 清理临时文件
rm -rf "$TEMP_DIR"
success "批量部署完成!"
log "日志文件: $LOGS_DIR"
log "备份文件: $BACKUP_DIR"
}
# 显示帮助信息
show_help() {
echo "使用方法: $0 [节点名] [配置类型]"
echo ""
echo "参数:"
echo " 节点名 - 目标节点名称 (默认: all)"
echo " 配置类型 - 配置类型 (默认: all)"
echo ""
echo "示例:"
echo " $0 # 部署所有节点的所有配置"
echo " $0 ch4 # 部署 ch4 节点的所有配置"
echo " $0 all nomad # 部署所有节点的 nomad 配置"
echo " $0 ch4 consul # 部署 ch4 节点的 consul 配置"
echo ""
echo "支持的节点: ${NODES[*]}"
echo "支持的配置类型: ${CONFIG_TYPES[*]}"
}
# 检查参数
if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
show_help
exit 0
fi
# 运行主函数
main "$@"

View File

@@ -0,0 +1,51 @@
# 阿里云北京区域 Supabase 连接信息
## 基本信息
- **项目ID**: `sbp-1a6cxmdudvldi3yi`
- **项目名称**: `wtf`
- **区域**: 华北2(北京) - cn-beijing
- **状态**: ✅ 运行中
## 连接信息
- **主机地址**: `sbp-1a6cxmdudvldi3yi.supabase.opentrust.net`
- **IP地址**: `8.160.232.108` (公网) / `10.0.0.95` (内网)
- **端口**: `5432`
- **数据库**: `postgres`
- **用户名**: `postgres`
- **密码**: `Ben19Do79`
## 连接命令
```bash
# 方法1: 使用环境变量
export PGPASSWORD="Ben19Do79"
psql -h sbp-1a6cxmdudvldi3yi.supabase.opentrust.net -p 5432 -U postgres -d postgres
# 方法2: 直接指定密码
PGPASSWORD="Ben19Do79" psql -h sbp-1a6cxmdudvldi3yi.supabase.opentrust.net -p 5432 -U postgres -d postgres
```
## 数据库信息
- **PostgreSQL 版本**: 15.8
- **编码**: UTF8
- **可用数据库**: postgres, template0, template1
- **特殊用户**: supabase_admin, dashboard_user
## 网络测试结果
- **Ping 延迟**: 平均 5.4ms
- **丢包率**: 0%
- **连接状态**: ✅ 完全正常
## 创建时间
- **创建日期**: 2025-10-12
- **创建区域**: 北京可用区I (cn-beijing-i)
- **VPC**: vpc-2ze1d10frat58rkmugz2d (bj_ipam)
- **交换机**: vsw-2zeesdjaeflerzspoax2r
## 安全注意事项
- 此文件包含敏感信息,请勿提交到版本控制系统
- 建议定期轮换密码
- 在生产环境中使用环境变量或密钥管理系统
---
*创建时间: 2025-10-12*
*测试状态: ✅ 连接正常*

View File

@@ -6,34 +6,51 @@
```bash
# 查看所有Oracle Cloud配置
consul kv get -recurse config/oracle-cloud/
consul kv get -recurse config/oracle-cloud-kr-chuncheon/
# 获取具体配置
# 获取美国节点配置
consul kv get config/oracle-cloud/user
consul kv get config/oracle-cloud/fingerprint
consul kv get config/oracle-cloud/tenancy
consul kv get config/oracle-cloud/region
consul kv get config/oracle-cloud/key_file
# 获取韩国节点配置
consul kv get config/oracle-cloud-kr-chuncheon/user
consul kv get config/oracle-cloud-kr-chuncheon/fingerprint
consul kv get config/oracle-cloud-kr-chuncheon/tenancy
consul kv get config/oracle-cloud-kr-chuncheon/region
consul kv get config/oracle-cloud-kr-chuncheon/key_file
```
### 存储在Vault中 (更安全)
```bash
# 查看Oracle Cloud配置
# 查看美国节点配置
vault kv get secret/oracle-cloud
# 查看私钥
vault kv get secret/oracle-cloud/private-key
# 查看韩国节点配置
vault kv get secret/oracle-cloud-kr-chuncheon
vault kv get secret/oracle-cloud-kr-chuncheon/private-key
```
## 📝 配置内容
### 基本信息
### 美国节点 (us-ashburn-1)
- **User OCID**: `ocid1.user.oc1..aaaaaaaappc7zxue4dlrsjljg4fwl6wcc5smetreuvpqn72heiyvjeeqanqq`
- **Fingerprint**: `73:80:50:35:b6:1d:e3:fc:68:f8:e3:e8:0b:df:79:e3`
- **Tenancy OCID**: `ocid1.tenancy.oc1..aaaaaaaayyhuf6swf2ho4s5acdpee6zssst6j7nkiri4kyfdusxzn3e7p32q`
- **Region**: `us-ashburn-1`
### 韩国节点 (ap-chuncheon-1)
- **User OCID**: `ocid1.user.oc1..aaaaaaaaqoa2my3fwh3jbayachyylqyneiveydrjliu2qz65ijlc57ehplha`
- **Fingerprint**: `b1:6e:4e:5a:b6:1c:34:bf:b1:73:76:f6:9f:27:6d:99`
- **Tenancy OCID**: `ocid1.tenancy.oc1..aaaaaaaawfv2wd54ly75ppfjgdgap7rtd3vhtziz25dwx23xo4rbkxnxlapq`
- **Region**: `ap-chuncheon-1`
### 私钥
- **存储位置**: Vault `secret/oracle-cloud/private-key`
- **美国节点**: Vault `secret/oracle-cloud/private-key`
- **韩国节点**: Vault `secret/oracle-cloud-kr-chuncheon/private-key`
- **格式**: PEM格式私钥
- **用途**: Oracle Cloud API认证
@@ -67,5 +84,6 @@ curl -H "X-Vault-Token: $VAULT_TOKEN" \
## 🏷️ 标签
- 云提供商: Oracle Cloud Infrastructure
- 区域: us-ashburn-1
- 区域: us-ashburn-1, ap-chuncheon-1
- 存储方式: Consul KV + Vault
- 节点数量: 2个区域

View File

@@ -1,46 +0,0 @@
# Vault Keys and Tokens
## 🔑 Unseal Keys (5个)
```
Unseal Key 1: AzvGBl4DKDVMlA4eaKCziB2vGsaRFR5lTel3MIO3H6Ym
Unseal Key 2: 9gi5x7pctTp84NZNQJNDK+XXwBze41UR4J8m9HMyV33c
Unseal Key 3: kKmNVr3UQ7v2TosOOQJmvvUs8r68wm+N4k7SoerZ5Xqp
Unseal Key 4: dopmiAQGjMvcPWtj4/89oMa0vt7YMHPiktspmLNfoR/R
Unseal Key 5: 9cf34x2neGESGAq8pSpmbiXUPbh2PXWn3J0OIDKy3Svl
```
## 🎫 Root Token
```
hvs.nLqetAjsC2xTXmY4WQyFmPWg
```
## 📝 使用说明
### 解封Vault (需要3个keys)
```bash
export VAULT_ADDR="https://vault.git-4ta.live"
vault operator unseal <key1>
vault operator unseal <key2>
vault operator unseal <key3>
```
### 登录Vault
```bash
vault login hvs.nLqetAjsC2xTXmY4WQyFmPWg
```
### 访问Vault UI
```
https://vault.git-4ta.live/ui/
```
## 📅 创建时间
2025-10-12 09:22 UTC
## 🏷️ 标签
- Vault版本: 1.20.4
- 存储类型: Consul
- HA模式: 启用
- 集群名称: vault-cluster