-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstart_proxy.sh
More file actions
executable file
·184 lines (157 loc) · 4.79 KB
/
start_proxy.sh
File metadata and controls
executable file
·184 lines (157 loc) · 4.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
#!/bin/bash
set -m # 启用作业控制
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
export RED GREEN YELLOW NC
# 代理默认运行时间(秒)
TIMEOUT=3600
export TIMEOUT
# 日志函数
log_info() {
echo -e "${GREEN}[INFO]${NC} $1"
}
log_warn() {
echo -e "${YELLOW}[WARN]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# 检查命令执行结果
check_result() {
if [ $? -ne 0 ]; then
log_error "$1"
exit 1
fi
}
# 显示帮助信息
show_help() {
echo "用法: $0 [选项]"
echo "选项:"
echo " -v, --vpn 部署 VPN 服务 (默认)"
echo " -n, --no-vpn 不部署 VPN 服务,只运行基础配置"
echo " -t, --timeout 代理运行时间(秒),默认3600秒"
echo " -h, --help 显示此帮助信息"
echo ""
echo "示例:"
echo " $0 # 部署带 VPN 的服务 (默认)"
echo " $0 --no-vpn # 部署不带 VPN 的服务"
echo " $0 -n # 部署不带 VPN 的服务"
echo " $0 --timeout 7200 # 部署服务,运行时间为7200秒"
echo " $0 -t 1800 # 部署服务,运行时间为1800秒"
}
# 解析命令行参数
deploy_vpn=true
export deploy_vpn
while [[ $# -gt 0 ]]; do
case $1 in
-n|--no-vpn)
deploy_vpn=false
shift
;;
-v|--vpn)
deploy_vpn=true
shift
;;
-t|--timeout)
if [[ -n "$2" && "$2" =~ ^[0-9]+$ ]]; then
TIMEOUT="$2"
export TIMEOUT
shift 2
else
log_error "错误: --timeout 参数需要一个数字值"
show_help
exit 1
fi
;;
-h|--help)
show_help
exit 0
;;
*)
log_error "未知参数: $1"
show_help
exit 1
;;
esac
done
# 检查依赖项
check_dependencies() {
log_info "检查依赖项..."
# 检查 Terraform
if ! command -v terraform &> /dev/null; then
log_error "未找到 Terraform,请先运行 ./install.sh 安装依赖"
exit 1
fi
# 检查 sshpass
if ! command -v sshpass &> /dev/null; then
log_error "未找到 sshpass,请先运行 ./install.sh 安装依赖"
exit 1
fi
log_info "所有依赖项检查通过"
}
# 检查阿里云凭证
check_aliyun_credentials() {
log_info "检查阿里云凭证..."
if [[ -z "$ALICLOUD_ACCESS_KEY" || -z "$ALICLOUD_SECRET_KEY" ]]; then
log_error "未设置阿里云凭证,请设置以下环境变量:"
echo "export ALICLOUD_ACCESS_KEY=\"your-access-key-id\""
echo "export ALICLOUD_SECRET_KEY=\"your-secret-access-key\""
exit 1
fi
log_info "阿里云凭证已设置"
}
# 初始化 Terraform
init_terraform() {
log_info "初始化 Terraform..."
terraform init
check_result "Terraform 初始化失败"
log_info "Terraform 初始化成功"
}
# 应用 Terraform 配置
apply_terraform() {
log_info "应用 Terraform 配置..."
if [ "$deploy_vpn" = true ]; then
log_info "部署带 VPN 的服务..."
terraform apply -auto-approve -var="deploy_vpn=true" -var="timeout=${TIMEOUT}" -parallelism=20
else
log_info "部署不带 VPN 的服务..."
terraform apply -auto-approve -var="deploy_vpn=false" -var="timeout=${TIMEOUT}" -parallelism=20
fi
}
# 主程序
main() {
if [ "$deploy_vpn" = true ]; then
log_info "开始启动代理服务 (包含 VPN)..."
else
log_info "开始启动代理服务 (不包含 VPN)..."
fi
# 获取当前目录
CurDir=$(dirname "$0")
cd "$CurDir" || { log_error "无法切换到目录: $CurDir"; exit 1; }
# 检查依赖项
check_dependencies
# 检查阿里云凭证
check_aliyun_credentials
# 初始化 Terraform
init_terraform
log_warn "============================================================"
log_warn "使用完毕后,请运行 ./destroy_proxy.sh 销毁资源以避免产生不必要的费用"
log_warn "代理默认运行${TIMEOUT}秒 ,超时会自动销毁,以避免产生不必要的费用"
log_warn "============================================================"
log_warn ""
sleep 5
# 应用 Terraform 配置
log_info "开始拉起代理..."
timeout ${TIMEOUT} bash -c "$(declare -f apply_terraform log_info); apply_terraform"
# 防止忘记关闭代理产生不必要的费用
log_info "稍等一下..."
sleep 10
log_warn "============================================================"
log_warn "代理已经运行${TIMEOUT}, 开始销毁代理..."
bash ./destroy_proxy.sh
}
# 执行主程序
main "$@"