# 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