1+ #! /bin/bash
2+ cd " $( dirname " $0 " ) "
3+
4+ ENV_FILE=" .env"
5+
6+ # 如果文件不存在,创建一个空的
7+ if [ ! -f " $ENV_FILE " ]; then
8+ touch " $ENV_FILE "
9+ fi
10+
11+ # 辅助函数:获取 .env 中的值
12+ get_env_value () {
13+ # 使用 grep 查找 key,然后用 cut/sed 提取值,去除引号
14+ # 匹配 key='value' 或 key=value
15+ grep " ^$1 =" " $ENV_FILE " | sed -E " s/^$1 =['" ]? (.* )[' "]?$/\1/" | tail -n 1
16+ }
17+
18+ # 辅助函数:更新或追加 .env 中的值
19+ set_env_value() {
20+ local key="$1"
21+ local val="$2"
22+
23+ if grep -q "^$key=" "$ENV_FILE"; then
24+ # 如果存在,使用 sed 替换 (针对 Linux 和 Mac 的 sed 兼容性,这里使用临时文件)
25+ # 匹配 key=' ...' 或 key=... 并替换
26+ sed -i.bak "s|^$key=.*|$key=' $val ' |" "$ENV_FILE" && rm "$ENV_FILE.bak"
27+ else
28+ # 如果不存在,追加到文件末尾
29+ # 确保文件末尾有换行
30+ [ -n "$(tail -c1 "$ENV_FILE")" ] && echo "" >> "$ENV_FILE"
31+ echo "$key=' $val ' " >> "$ENV_FILE"
32+ fi
33+ }
34+
35+ echo "========================================"
36+ echo "Track-HTTP 智能补全部署配置"
37+ echo "========================================"
38+
39+ # 1. 处理 IP
40+ CURRENT_IP=$(get_env_value "SERVER_IP_PUBLIC")
41+ # 去除可能的回车符
42+ CURRENT_IP=$(echo "$CURRENT_IP" | tr -d ' \r ' )
43+
44+ if [ -z "$CURRENT_IP" ]; then
45+ read -p "请输入服务器公网IP (Enter Public IP): " SERVER_IP_PUBLIC
46+ if [ -z "$SERVER_IP_PUBLIC" ]; then
47+ echo "错误: IP地址不能为空."
48+ exit 1
49+ fi
50+ set_env_value "SERVER_IP_PUBLIC" "$SERVER_IP_PUBLIC"
51+
52+ # 检查 HOSTNAME 是否设置,如果没有也设置为 IP
53+ CURRENT_HOST=$(get_env_value "SERVER_HOSTNAME")
54+ if [ -z "$CURRENT_HOST" ]; then
55+ set_env_value "SERVER_HOSTNAME" "$SERVER_IP_PUBLIC"
56+ fi
57+
58+ echo "已设置 IP: $SERVER_IP_PUBLIC"
59+ else
60+ echo "使用现有 IP: $CURRENT_IP"
61+ fi
62+
63+ # 2. 处理密码
64+ generate_password() {
65+ if command -v openssl &> /dev/null; then
66+ openssl rand -base64 15 | tr -dc ' a-zA-Z0-9' | head -c 12
67+ else
68+ tr -dc A-Za-z0-9 </dev/urandom | head -c 12
69+ fi
70+ }
71+
72+ PASSWORDS=(
73+ "MYSQL_PASSWORD"
74+ "REDIS_PASSWORD"
75+ "MONGODB_PASSWORD"
76+ "RABBITMQ_PASSWORD"
77+ "MINIO_PASSWORD"
78+ "MAIL_PASSWORD"
79+ )
80+
81+ echo "正在检查密码配置..."
82+
83+ for key in "${PASSWORDS[@]}"; do
84+ current_val=$(get_env_value "$key")
85+ current_val=$(echo "$current_val" | tr -d ' \r ' )
86+
87+ if [ -z "$current_val" ]; then
88+ new_pass=$(generate_password)
89+ set_env_value "$key" "$new_pass"
90+ echo " [已补全] $key"
91+ else
92+ echo " [已存在] $key (保持不变)"
93+ fi
94+ done
95+
96+ echo "----------------------------------------"
97+ echo "配置检查完成!(.env updated)"
98+ echo "现在你可以运行: docker compose up -d"
0 commit comments