whatsapp-backend-test / deploy_guide.md
RyZ
New feature
9a41034

Deploying Go Backend to Hugging Face Spaces

This guide outlines the steps to deploy your Go application (whatsapp-backend) to Hugging Face Spaces using Docker.

Prerequisites

Step 1: Create a New Space

  1. Log in to your Hugging Face account.
  2. Click on your profile picture in the top right and select New Space.
  3. Owner: Select your username or organization.
  4. Space Name: Enter a name for your space (e.g., whatsapp-backend).
  5. License: Choose a license (e.g., MIT) or leave it empty correctly.
  6. SDK: Select Docker.
  7. Blank: Choose "Blank" to start with an empty repository.
  8. Click Create Space.

Step 2: Prepare Your Code (Already Done by Agent)

Your Dockerfile has been configured to:

  • Use port 7860 (required by Hugging Face Spaces).
  • Bind to address 0.0.0.0.

Ensure your Dockerfile contains:

ENV HOST_ADDRESS=0.0.0.0
ENV HOST_PORT=7860
EXPOSE 7860

Step 3: Deployment Methods

You can deploy using one of two methods:

Method A: Upload via Web Interface (Easiest)

  1. In your newly created Space, go to the Files tab.
  2. Click Add file -> Upload files.
  3. Drag and drop all your project files (including .dockerignore if you have one, Dockerfile, go.mod, go.sum, main.go, and all source directories like config, controllers, etc.) into the upload area.
    • Note: Do not upload .git folder.
  4. Commit the changes with a message like "Initial commit for deployment".
  5. Hugging Face will automatically start building your Docker image. You can see the progress in the App tab.

Method B: Push via Git (Recommended for updates)

  1. In your Space, click on the Clone repository button (or just copy the HTTPS URL).
  2. Open your terminal in your project directory.
  3. Initialize git if you haven't (or use your existing git setup):
    git remote add space https://huggingface.co/spaces/YOUR_USERNAME/SPACE_NAME
    
  4. Push your code:
    git push space main
    
    (Note: You might need to use a Hugging Face Access Token as your password if prompted).

Method C: Automated Sync (GitHub Actions) - RECOMMENDED

This method automatically pushes your code to the Hugging Face Space whenever you push to the test branch of your GitHub repository.

  1. Generate a Hugging Face Token:

  2. Add Secret to GitHub:

    • Go to your GitHub repository.
    • Navigate to Settings > Secrets and variables > Actions.
    • Click New repository secret.
    • Name: HF_TOKEN
    • Value: Paste your Hugging Face token.
    • Click Add secret.
  3. Update Workflow File:

    • Open .github/workflows/sync-to-hub.yml in your project.
    • Find the git push command at the bottom.
    • Replace YOUR_USERNAME and SPACE_NAME with your actual Hugging Face username and Space name.
    • Example: git push https://ryu:Start@huggingface.co/spaces/ryu/whatsapp-backend test:main -f
  4. Trigger Deployment:

    • Simply push any change to your test branch:
      git checkout test
      git add .
      git commit -m "New feature"
      git push origin test
      
    • The GitHub Action will run and sync your code to the Spaces.

Step 4: Configure Secrets (Environment Variables)

Your application uses environment variables (like Database credentials). You must set these in Hugging Face settings, not in the Dockerfile (for security).

  1. Go to your Space's Settings tab.

  2. Scroll down to Variables and secrets.

  3. Click New secret for sensitive data (like passwords) or New variable for public config.

  4. Add the following based on your env_config.go and .env needs:

    • DB_HOST
    • DB_PORT
    • DB_USER
    • DB_PASSWORD
    • DB_NAME
    • SALT (Optional, defaults to "Def4u|7")
    • TZ (Optional, e.g., "Asia/Jakarta")

    Note: HOST_ADDRESS and HOST_PORT are already set in the Dockerfile, so you don't need to add them here unless you want to override them.

Step 5: Verify Deployment

  1. Go to the App tab.
  2. Wait for the status to change from Building to Running.
  3. If successful, you will see your application output or a blank screen (since it's a backend API).
  4. You can verify it's running by checking the Logs tab for server startup messages.