| | |
| | |
| |
|
| | |
| | |
| | |
| |
|
| | |
| | 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 |
| | } |
| |
|
| | |
| | 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 |
| | } |
| |
|
| | |
| | |
| | |
| |
|
| | 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 |
| | } |
| |
|
| | |
| | |
| | |
| |
|
| | generate_nginx_config() { |
| | local env=$(detect_deployment_environment) |
| | local base_url=$(get_base_url) |
| | |
| | |
| | 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) |
| | |
| | |
| | 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 |