Skip to content

Commit bf9647a

Browse files
committed
fix(deploy): 改进部署脚本的健壮性和开发环境支持
- 添加 SKIP_1PANEL_CHECK 环境变量支持,方便开发环境跳过1Panel检查 - 使用临时文件处理 sed 替换,避免特殊字符问题 - 将随机密码生成从 base64 改为 hex 格式 - 为开发环境添加基本依赖检查逻辑
1 parent d9316f5 commit bf9647a

1 file changed

Lines changed: 31 additions & 11 deletions

File tree

deploy-1panel.sh

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,11 +56,14 @@ check_dependencies() {
5656
fi
5757
done
5858

59-
# 检查1Panel OpenResty是否安装
60-
if [[ ! -d "/opt/1panel/apps/openresty" ]]; then
61-
log_error "未检测到1Panel OpenResty安装,请先在1Panel面板中安装OpenResty"
62-
exit 1
63-
fi
59+
# 检查1Panel OpenResty是否安装 (可通过环境变量跳过)
60+
if [[ ! -d "/opt/1panel/apps/openresty" ]] && [[ "${SKIP_1PANEL_CHECK:-false}" != "true" ]]; then
61+
log_warning "未检测到1Panel OpenResty安装"
62+
log_info "如果您在开发环境中运行,可以使用以下命令跳过检查:"
63+
log_info "SKIP_1PANEL_CHECK=true ./deploy-1panel.sh setup prod"
64+
log_info "或者请在服务器上先安装1Panel面板和OpenResty"
65+
exit 1
66+
fi
6467

6568
log_success "依赖检查完成"
6669
}
@@ -93,22 +96,25 @@ setup_env() {
9396

9497
# 生成随机密码
9598
if ! grep -q "POSTGRES_PASSWORD=" .env || grep -q "secure_password_change_me" .env; then
96-
local postgres_pass=$(openssl rand -base64 32)
97-
sed -i "s/POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=${postgres_pass}/" .env
99+
local postgres_pass=$(openssl rand -hex 32)
100+
# 使用临时文件避免sed特殊字符问题
101+
sed "s/POSTGRES_PASSWORD=.*/POSTGRES_PASSWORD=${postgres_pass}/" .env > .env.tmp && mv .env.tmp .env
98102
log_success "已生成新的数据库密码"
99103
fi
100104

101105
if ! grep -q "JWT_SECRET=" .env || grep -q "your_super_secret_jwt_key" .env; then
102-
local jwt_secret=$(openssl rand -base64 64)
103-
sed -i "s/JWT_SECRET=.*/JWT_SECRET=${jwt_secret}/" .env
106+
local jwt_secret=$(openssl rand -hex 64)
107+
# 使用临时文件避免sed特殊字符问题
108+
sed "s/JWT_SECRET=.*/JWT_SECRET=${jwt_secret}/" .env > .env.tmp && mv .env.tmp .env
104109
log_success "已生成新的JWT密钥"
105110
fi
106111

107112
# 更新API地址为生产环境
108113
if [[ "$1" == "prod" ]]; then
109114
read -p "请输入您的域名 (例如: yourdomain.com): " domain
110115
if [[ -n "$domain" ]]; then
111-
sed -i "s|PUBLIC_API_BASE_URL=.*|PUBLIC_API_BASE_URL=https://${domain}/api|" .env
116+
# 使用临时文件避免sed特殊字符问题
117+
sed "s|PUBLIC_API_BASE_URL=.*|PUBLIC_API_BASE_URL=https://${domain}/api|" .env > .env.tmp && mv .env.tmp .env
112118
log_success "已更新API地址为: https://${domain}/api"
113119
fi
114120
fi
@@ -424,7 +430,21 @@ main() {
424430
case "${1:-help}" in
425431
"setup")
426432
check_root
427-
check_dependencies
433+
if [[ "${SKIP_1PANEL_CHECK:-false}" != "true" ]]; then
434+
check_dependencies
435+
else
436+
log_warning "跳过1Panel检查 - 开发环境模式"
437+
# 只检查基本依赖
438+
log_info "检查基本依赖..."
439+
local deps=("docker" "docker-compose")
440+
for dep in "${deps[@]}"; do
441+
if ! command -v "$dep" &> /dev/null; then
442+
log_error "$dep 未安装,请先安装后再运行此脚本"
443+
exit 1
444+
fi
445+
done
446+
log_success "基本依赖检查完成"
447+
fi
428448
setup_env "${2:-dev}"
429449
create_directories
430450
;;

0 commit comments

Comments
 (0)