|
#!/bin/bash |
|
|
|
|
|
|
|
|
|
set -e |
|
|
|
echo "π WordPress to Hugging Face Spaces Deployment Helper" |
|
echo "=================================================" |
|
|
|
|
|
RED='\033[0;31m' |
|
GREEN='\033[0;32m' |
|
YELLOW='\033[1;33m' |
|
BLUE='\033[0;34m' |
|
NC='\033[0m' |
|
|
|
|
|
print_status() { |
|
echo -e "${GREEN}[INFO]${NC} $1" |
|
} |
|
|
|
print_warning() { |
|
echo -e "${YELLOW}[WARNING]${NC} $1" |
|
} |
|
|
|
print_error() { |
|
echo -e "${RED}[ERROR]${NC} $1" |
|
} |
|
|
|
print_step() { |
|
echo -e "${BLUE}[STEP]${NC} $1" |
|
} |
|
|
|
|
|
check_files() { |
|
print_step "Checking required files..." |
|
|
|
local files=("Dockerfile.hf-spaces" "wp-config-hf.php" "db.php" "start-hf.sh" "README-HF-SPACES.md") |
|
local missing_files=() |
|
|
|
for file in "${files[@]}"; do |
|
if [ ! -f "$file" ]; then |
|
missing_files+=("$file") |
|
fi |
|
done |
|
|
|
if [ ${#missing_files[@]} -ne 0 ]; then |
|
print_error "Missing required files:" |
|
for file in "${missing_files[@]}"; do |
|
echo " - $file" |
|
done |
|
exit 1 |
|
fi |
|
|
|
print_status "All required files found β" |
|
} |
|
|
|
|
|
get_user_input() { |
|
print_step "Getting deployment information..." |
|
|
|
echo -n "Enter your Hugging Face username: " |
|
read -r HF_USERNAME |
|
|
|
echo -n "Enter your Space name: " |
|
read -r SPACE_NAME |
|
|
|
echo -n "Do you want to create a new directory for deployment? (y/n): " |
|
read -r CREATE_DIR |
|
|
|
if [ "$CREATE_DIR" = "y" ] || [ "$CREATE_DIR" = "Y" ]; then |
|
DEPLOY_DIR="./hf-spaces-deployment" |
|
echo "Deployment directory: $DEPLOY_DIR" |
|
else |
|
echo -n "Enter deployment directory path: " |
|
read -r DEPLOY_DIR |
|
fi |
|
} |
|
|
|
|
|
setup_deployment_dir() { |
|
print_step "Setting up deployment directory..." |
|
|
|
if [ -d "$DEPLOY_DIR" ]; then |
|
print_warning "Directory $DEPLOY_DIR already exists" |
|
echo -n "Do you want to overwrite it? (y/n): " |
|
read -r OVERWRITE |
|
|
|
if [ "$OVERWRITE" = "y" ] || [ "$OVERWRITE" = "Y" ]; then |
|
rm -rf "$DEPLOY_DIR" |
|
else |
|
print_error "Deployment cancelled" |
|
exit 1 |
|
fi |
|
fi |
|
|
|
mkdir -p "$DEPLOY_DIR" |
|
print_status "Created deployment directory: $DEPLOY_DIR" |
|
} |
|
|
|
|
|
copy_files() { |
|
print_step "Copying files to deployment directory..." |
|
|
|
|
|
cp "Dockerfile.hf-spaces" "$DEPLOY_DIR/Dockerfile" |
|
print_status "Copied Dockerfile.hf-spaces β Dockerfile" |
|
|
|
|
|
cp "wp-config-hf.php" "$DEPLOY_DIR/" |
|
cp "db.php" "$DEPLOY_DIR/" |
|
cp "start-hf.sh" "$DEPLOY_DIR/" |
|
cp "app.py" "$DEPLOY_DIR/" |
|
cp "README-HF-SPACES.md" "$DEPLOY_DIR/README.md" |
|
|
|
print_status "Copied all required files" |
|
} |
|
|
|
|
|
create_gitignore() { |
|
print_step "Creating .gitignore..." |
|
|
|
cat > "$DEPLOY_DIR/.gitignore" << 'EOF' |
|
|
|
wp-config.php |
|
wp-content/uploads/ |
|
wp-content/cache/ |
|
wp-content/database/ |
|
*.log |
|
|
|
|
|
.DS_Store |
|
Thumbs.db |
|
|
|
|
|
.vscode/ |
|
.idea/ |
|
*.swp |
|
*.swo |
|
|
|
|
|
*.tmp |
|
*.temp |
|
EOF |
|
|
|
print_status "Created .gitignore" |
|
} |
|
|
|
|
|
create_app_py() { |
|
print_step "Creating app.py for HF Spaces..." |
|
|
|
cat > "$DEPLOY_DIR/app.py" << 'EOF' |
|
|
|
""" |
|
Hugging Face Spaces compatibility file for WordPress |
|
This file is required by HF Spaces but the actual application runs in Docker |
|
""" |
|
|
|
import subprocess |
|
import time |
|
import sys |
|
|
|
def main(): |
|
print("π Starting WordPress on Hugging Face Spaces...") |
|
print("This is a Docker-based WordPress deployment.") |
|
print("The actual WordPress application is running in the Docker container.") |
|
|
|
|
|
try: |
|
while True: |
|
time.sleep(60) |
|
print("WordPress container is running...") |
|
except KeyboardInterrupt: |
|
print("Shutting down...") |
|
sys.exit(0) |
|
|
|
if __name__ == "__main__": |
|
main() |
|
EOF |
|
|
|
print_status "Created app.py" |
|
} |
|
|
|
|
|
init_git() { |
|
print_step "Initializing git repository..." |
|
|
|
cd "$DEPLOY_DIR" |
|
|
|
if [ ! -d ".git" ]; then |
|
git init |
|
print_status "Initialized git repository" |
|
else |
|
print_warning "Git repository already exists" |
|
fi |
|
|
|
|
|
if [ -n "$HF_USERNAME" ] && [ -n "$SPACE_NAME" ]; then |
|
HF_REMOTE="https://huggingface.co/spaces/$HF_USERNAME/$SPACE_NAME" |
|
|
|
if git remote get-url origin >/dev/null 2>&1; then |
|
print_warning "Remote 'origin' already exists" |
|
else |
|
git remote add origin "$HF_REMOTE" |
|
print_status "Added remote: $HF_REMOTE" |
|
fi |
|
fi |
|
|
|
cd - > /dev/null |
|
} |
|
|
|
|
|
create_instructions() { |
|
print_step "Creating deployment instructions..." |
|
|
|
cat > "$DEPLOY_DIR/DEPLOYMENT.md" << EOF |
|
# Deployment Instructions |
|
|
|
## Quick Deploy to Hugging Face Spaces |
|
|
|
### Method 1: Git Push (Recommended) |
|
|
|
1. Commit and push the files: |
|
\`\`\`bash |
|
cd $DEPLOY_DIR |
|
git add . |
|
git commit -m "Initial WordPress deployment" |
|
git push origin main |
|
\`\`\` |
|
|
|
### Method 2: Web Upload |
|
|
|
1. Go to your HF Space: https://huggingface.co/spaces/$HF_USERNAME/$SPACE_NAME |
|
2. Upload these files: |
|
- Dockerfile |
|
- wp-config-hf.php |
|
- db.php |
|
- start-hf.sh |
|
- README.md |
|
- app.py |
|
|
|
## After Deployment |
|
|
|
1. Wait for the build to complete (5-10 minutes) |
|
2. Access your WordPress site: |
|
- **Main site**: https://$HF_USERNAME-$SPACE_NAME.hf.space/ |
|
- **Admin panel**: https://$HF_USERNAME-$SPACE_NAME.hf.space/wp-admin/ |
|
- **Health check**: https://$HF_USERNAME-$SPACE_NAME.hf.space/health.html |
|
|
|
## Default Login |
|
|
|
- **Username**: demo |
|
- **Password**: demo123 |
|
|
|
β οΈ **Important**: Change the default password after first login! |
|
|
|
## Troubleshooting |
|
|
|
If the deployment fails: |
|
1. Check the build logs in your HF Space |
|
2. Ensure all files are uploaded correctly |
|
3. Verify the Dockerfile syntax |
|
4. Check that port 7860 is properly configured |
|
|
|
EOF |
|
|
|
print_status "Created deployment instructions" |
|
} |
|
|
|
|
|
main() { |
|
echo |
|
print_step "Starting deployment process..." |
|
|
|
check_files |
|
get_user_input |
|
setup_deployment_dir |
|
copy_files |
|
create_gitignore |
|
create_app_py |
|
init_git |
|
create_instructions |
|
|
|
echo |
|
print_status "π Deployment preparation completed!" |
|
echo |
|
echo -e "${GREEN}Next steps:${NC}" |
|
echo "1. cd $DEPLOY_DIR" |
|
echo "2. Review the files" |
|
echo "3. Follow instructions in DEPLOYMENT.md" |
|
echo |
|
echo -e "${BLUE}Your WordPress will be available at:${NC}" |
|
echo "https://$HF_USERNAME-$SPACE_NAME.hf.space/" |
|
echo |
|
print_warning "Remember to change the default password (demo/demo123) after deployment!" |
|
} |
|
|
|
|
|
main "$@" |