Spaces:
Paused
Deploying MicroClimate-X to Hugging Face Spaces
ไธๆฌก้จ็ฝฒ๏ผๆฐธไน ๅ ฌ็ฝ URL๏ผๅฏผๅธ้ๆถๅฏ็๏ผไธ็จๆ็ฌ่ฎฐๆฌใ
One-time deploy โ permanent public URL your supervisor can open any time, no laptop required.
Why Hugging Face Spaces?
- Free persistent hosting for ML demos (CPU tier is enough for this project).
- Docker SDK โ reuses the existing
Dockerfile1:1, no platform-specific build hacks. - Server-side Git LFS โ the 217 MB
rf_model.pkluploads throughhuggingface-cliwithout needing localgit-lfsinstalled. - The HF Space URL (
https://huggingface.co/spaces/<user>/microclimate-x) is the canonical demo URL for ML thesis projects in 2026.
Architecture on HF Spaces
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ https://huggingface.co/spaces/<user>/microclimate-x โ
โ โ
โ Docker image (this repo's Dockerfile) โ
โ โโ FastAPI @ :8000 (declared via README.md `app_port`) โ
โ โโ /app/frontend/ โโ mounted at /app/ โ
โ โโ /app/models/ โโ rf_model.pkl baked in โ
โ โโ /tmp/cache.sqlite3 (ephemeral โ fine for demo) โ
โ โ
โ โ outbound HTTP โ
โ โโ api.open-meteo.com (weather, ERA5) โ
โ โโ api.opentopodata.org/srtm30m (DEM) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
The frontend talks to its own origin via relative /api/โฆ URLs, so no CORS
fiddling and no front-end edits are needed.
3-step deploy
Step 1 โ Create the Space (web UI, one minute)
- Go to https://huggingface.co/new-space
- Fill in:
- Owner: your HF account
- Space name:
microclimate-x - License: MIT
- Space SDK: Docker โ "Blank" template
- Hardware: CPU basic (free)
- Visibility: Public
- Click Create Space. You'll land on an empty repo page.
Step 2 โ Authenticate the CLI (one minute)
# Install once
pip install -U "huggingface_hub[cli]"
# Get a token at https://huggingface.co/settings/tokens
# - Type: Write
# - Scope: read + write to the new Space
huggingface-cli login
# (paste the token when prompted)
Step 3 โ Push (one command)
From the repo root:
./scripts/deploy_hf.sh <hf-username>/microclimate-x
# e.g.
./scripts/deploy_hf.sh KyoukoLi/microclimate-x
The script uploads:
backend/,frontend/,scripts/,models/,docs/Dockerfile,requirements.txt,README.md,LICENSE,pyproject.toml
and skips local-only junk (data/, figures/, tests/, .venv/, SQLite caches, โฆ).
HF then runs the same Dockerfile you use locally. Build takes โ 3โ5 min the first time
(the 217 MB model upload dominates) and < 1 min for subsequent deploys.
When the Space's status badge turns green ("Running"), the URL
https://huggingface.co/spaces/<user>/microclimate-x is live. Send that to your supervisor.
Updating the demo after code changes
git commit -am "fix: โฆ"
./scripts/deploy_hf.sh KyoukoLi/microclimate-x
The script diffs against the remote, so only changed files are re-uploaded. A code-only change (no model retrain) is a < 10 s push.
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
Build log: unable to open database file |
MICROCLIMATEX_DB points to a read-only path on HF |
Dockerfile already sets it to /tmp/cache.sqlite3. Make sure your Space doesn't override it under Settings โ Variables and secrets. |
Build log: port 7860 expected, got 8000 |
HF didn't parse the app_port frontmatter |
Confirm README.md starts with the YAML block including app_port: 8000. |
| App loads but every request โ 502 | Outbound calls to Open-Meteo / Open Topo Data hit HF's egress timeout | Increase httpx.AsyncClient(timeout=โฆ) in backend/main.py (currently 15 s). |
| ML predictor banner says "heuristic" | models/rf_model.pkl wasn't uploaded |
Re-run ./scripts/deploy_hf.sh; the script prompts before continuing without the model. |
| LFS quota exceeded | Free HF accounts get 5 GB LFS โ we use ~220 MB | Delete old commits' LFS objects under Files & versions โ Settings. |
Optional: GitHub Actions auto-sync
If you'd rather have git push origin main auto-deploy to HF, add this workflow:
# .github/workflows/sync-to-hf.yml
name: Sync to Hugging Face Space
on:
push:
branches: [main]
jobs:
sync:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with: { fetch-depth: 0 }
- uses: actions/setup-python@v5
with: { python-version: "3.12" }
- run: pip install -U "huggingface_hub[cli]"
- run: |
echo "${{ secrets.HF_TOKEN }}" | huggingface-cli login --token "$(cat -)"
./scripts/deploy_hf.sh KyoukoLi/microclimate-x
Add HF_TOKEN to the GitHub repo's secrets. Now every push to main
re-deploys the Space.