ocngx / deploy-config.sh
tanbushi's picture
update
7f2e1a6
# OCNGX 部署配置文件
# 用于不同环境的部署配置
# ============================================================================
# 基础配置
# ============================================================================
# 应用基本信息
APP_NAME="ocngx"
APP_VERSION="1.0.0"
# 端口配置
NGINX_PORT=7860
OPENCODE_PORT=3000
# 认证配置
ADMIN_USERNAME=admin
ADMIN_PASSWORD=admin123
# ============================================================================
# 环境检测与配置
# ============================================================================
detect_deployment_environment() {
if [[ -n "${SPACE_ID:-}" ]]; then
echo "huggingface"
elif [[ -f /.dockerenv ]]; then
echo "docker"
else
echo "local"
fi
}
# 获取当前环境的 URL
get_base_url() {
local env=$(detect_deployment_environment)
case $env in
"huggingface")
echo "https://${SPACE_ID}.hf.space"
;;
"docker")
echo "http://localhost:${NGINX_PORT}"
;;
"local")
echo "http://localhost:${NGINX_PORT}"
;;
*)
echo "http://localhost:${NGINX_PORT}"
;;
esac
}
# ============================================================================
# HuggingFace Spaces 环境配置
# ============================================================================
generate_hf_space_config() {
cat > .space_config.yaml << EOF
title: OCNGX - OpenCode with Nginx
emoji: 🤖
colorFrom: green
colorTo: blue
sdk: docker
pinned: false
hardware: cpu-basic
secrets:
- ADMIN_USERNAME
- ADMIN_PASSWORD
- BACKUP_S3_BUCKET
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
EOF
}
# ============================================================================
# 环境变量生成
# ============================================================================
generate_env_file() {
local env=$(detect_deployment_environment)
local base_url=$(get_base_url)
cat > .env << EOF
# OCNGX 环境配置
# 生成时间: $(date)
# 环境: $env
# 基础配置
GATEWAY_HOST=127.0.0.1
GATEWAY_PORT=$OPENCODE_PORT
NGINX_PORT=$NGINX_PORT
# 认证配置
USERNAME=$ADMIN_USERNAME
PASSWORD=$ADMIN_PASSWORD
# URL 配置
OPENCODE_PUBLIC_URL=$base_url
PUBLIC_URL=$base_url
BASE_URL=$base_url
# 环境标识
DEPLOYMENT_ENV=$env
SPACE_ID=${SPACE_ID:-}
# 备份配置
BACKUP_DIR=/var/backups/ocngx
BACKUP_S3_BUCKET=${BACKUP_S3_BUCKET:-}
# 日志配置
LOG_LEVEL=${LOG_LEVEL:-info}
# HuggingFace 特定配置
EOF
if [[ "$env" == "huggingface" ]]; then
cat >> .env << EOF
# HuggingFace Spaces 特定配置
HF_SPACE_ID=${SPACE_ID}
HF_HOME=/data
TRANSFORMERS_CACHE=/data/.cache
EOF
fi
}
# ============================================================================
# Nginx 配置生成
# ============================================================================
generate_nginx_config() {
local env=$(detect_deployment_environment)
local base_url=$(get_base_url)
# 更新 default.conf 中的代理配置
if [[ -f nginx/conf.d/default.conf ]]; then
cp nginx/conf.d/default.conf nginx/conf.d/default.conf.bak
# 根据环境调整配置
sed -i "s|https://[^.]*\.hf\.space|$base_url|g" nginx/conf.d/default.conf
sed -i "s|listen 7860;|listen $NGINX_PORT;|g" nginx/conf.d/default.conf
fi
}
# ============================================================================
# 启动脚本生成
# ============================================================================
generate_startup_script() {
local env=$(detect_deployment_environment)
local base_url=$(get_base_url)
# 更新 docker-start.sh 中的 URL 配置
if [[ -f docker-start.sh ]]; then
cp docker-start.sh docker-start.sh.bak
sed -i "s|https://[^.]*\.hf\.space|$base_url|g" docker-start.sh
sed -i "s|export GATEWAY_PORT=3000|export GATEWAY_PORT=$OPENCODE_PORT|g" docker-start.sh
fi
}
# ============================================================================
# 备份配置
# ============================================================================
setup_backup_configuration() {
# 创建备份目录
mkdir -p backups
mkdir -p logs
# 设置备份脚本权限
chmod +x backup-scripts/*.sh
# 创建备份配置
cat > backup-config.json << EOF
{
"backup_schedule": "0 2 * * *",
"retention_days": 7,
"compression": "gzip",
"exclude_patterns": [
"*.tmp",
"*.log",
"cache/*",
"node_modules/*"
],
"include_configs": true,
"include_data": true,
"include_logs": false
}
EOF
}
# ============================================================================
# 主配置函数
# ============================================================================
configure_for_deployment() {
echo "🚀 配置 OCNGX 部署环境..."
local env=$(detect_deployment_environment)
echo "📍 检测到环境: $env"
echo "⚙️ 生成环境配置..."
generate_env_file
echo "🌐 生成 Nginx 配置..."
generate_nginx_config
echo "🔧 生成启动脚本..."
generate_startup_script
echo "💾 设置备份配置..."
setup_backup_configuration
if [[ "$env" == "huggingface" ]]; then
echo "🤗 生成 HuggingFace Space 配置..."
generate_hf_space_config
fi
echo "✅ 部署配置完成!"
}
# ============================================================================
# 验证配置
# ============================================================================
verify_configuration() {
echo "🔍 验证配置文件..."
local errors=0
# 检查必需文件
local required_files=(
"Dockerfile"
"docker-start.sh"
"opencode.json"
"nginx/conf.d/default.conf"
"backup-scripts/backup.sh"
"backup-scripts/restore.sh"
)
for file in "${required_files[@]}"; do
if [[ -f "$file" ]]; then
echo " ✅ $file"
else
echo " ❌ $file"
((errors++))
fi
done
# 检查环境变量
if [[ -f ".env" ]]; then
echo " ✅ .env 配置文件"
else
echo " ❌ .env 配置文件"
((errors++))
fi
# 检查目录结构
local required_dirs=("nginx" "backup-scripts" "cron-jobs")
for dir in "${required_dirs[@]}"; do
if [[ -d "$dir" ]]; then
echo " ✅ $dir/ 目录"
else
echo " ❌ $dir/ 目录"
((errors++))
fi
done
if [[ $errors -eq 0 ]]; then
echo "✅ 配置验证通过"
return 0
else
echo "❌ 配置验证失败,发现 $errors 个问题"
return 1
fi
}
# ============================================================================
# 导出函数(供其他脚本使用)
# ============================================================================
export -f detect_deployment_environment
export -f get_base_url
export -f generate_env_file
export -f generate_nginx_config
export -f generate_startup_script
export -f setup_backup_configuration
export -f configure_for_deployment
export -f verify_configuration