Spaces:
Runtime error
Runtime error
Now just OpenClaw gateway with the built-in dashboard.
Browse files- Dockerfile +8 -14
- README.md +15 -94
- start.sh +20 -34
Dockerfile
CHANGED
|
@@ -1,10 +1,9 @@
|
|
| 1 |
FROM node:22-slim
|
| 2 |
|
| 3 |
-
# Install system dependencies
|
| 4 |
RUN apt-get update && apt-get install -y \
|
| 5 |
curl \
|
| 6 |
git \
|
| 7 |
-
netcat-openbsd \
|
| 8 |
python3 \
|
| 9 |
build-essential \
|
| 10 |
&& rm -rf /var/lib/apt/lists/*
|
|
@@ -12,18 +11,8 @@ RUN apt-get update && apt-get install -y \
|
|
| 12 |
# Install OpenClaw globally
|
| 13 |
RUN npm install -g openclaw
|
| 14 |
|
| 15 |
-
# Create
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
# Copy package.json and install dependencies
|
| 19 |
-
COPY package.json /app/package.json
|
| 20 |
-
RUN npm install
|
| 21 |
-
|
| 22 |
-
# Copy application files
|
| 23 |
-
COPY public /app/public
|
| 24 |
-
COPY server.js /app/server.js
|
| 25 |
-
COPY start.sh /app/start.sh
|
| 26 |
-
RUN chmod +x /app/start.sh
|
| 27 |
|
| 28 |
# Expose port
|
| 29 |
EXPOSE 7860
|
|
@@ -33,5 +22,10 @@ ENV BASE_URL=""
|
|
| 33 |
ENV API_KEY=""
|
| 34 |
ENV MODEL_ID="Multiple-models"
|
| 35 |
ENV PROVIDER_NAME="custom"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
|
| 37 |
CMD ["/app/start.sh"]
|
|
|
|
| 1 |
FROM node:22-slim
|
| 2 |
|
| 3 |
+
# Install system dependencies
|
| 4 |
RUN apt-get update && apt-get install -y \
|
| 5 |
curl \
|
| 6 |
git \
|
|
|
|
| 7 |
python3 \
|
| 8 |
build-essential \
|
| 9 |
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
| 11 |
# Install OpenClaw globally
|
| 12 |
RUN npm install -g openclaw
|
| 13 |
|
| 14 |
+
# Create workspace
|
| 15 |
+
RUN mkdir -p /root/.openclaw/workspace
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
|
| 17 |
# Expose port
|
| 18 |
EXPOSE 7860
|
|
|
|
| 22 |
ENV API_KEY=""
|
| 23 |
ENV MODEL_ID="Multiple-models"
|
| 24 |
ENV PROVIDER_NAME="custom"
|
| 25 |
+
ENV GATEWAY_TOKEN="hf-space-token"
|
| 26 |
+
|
| 27 |
+
# Copy start script
|
| 28 |
+
COPY start.sh /app/start.sh
|
| 29 |
+
RUN chmod +x /app/start.sh
|
| 30 |
|
| 31 |
CMD ["/app/start.sh"]
|
README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
---
|
| 2 |
-
title: OpenClaw
|
| 3 |
emoji: ๐ฆ
|
| 4 |
colorFrom: blue
|
| 5 |
colorTo: purple
|
|
@@ -7,106 +7,27 @@ sdk: docker
|
|
| 7 |
pinned: false
|
| 8 |
---
|
| 9 |
|
| 10 |
-
# OpenClaw
|
| 11 |
|
| 12 |
-
|
| 13 |
|
| 14 |
-
##
|
| 15 |
|
| 16 |
-
|
|
|
|
|
|
|
| 17 |
|
| 18 |
-
|
| 19 |
|
| 20 |
-
|
|
|
|
| 21 |
|
| 22 |
-
|
| 23 |
-
2. Click "Create new Space"
|
| 24 |
-
3. Select:
|
| 25 |
-
- **Space name**: Your choice (e.g., `my-openclaw-chat`)
|
| 26 |
-
- **License**: Apache-2.0
|
| 27 |
-
- **Space SDK**: Docker
|
| 28 |
-
- **Space hardware**: CPU (free tier)
|
| 29 |
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
Upload these files to your Space:
|
| 33 |
-
- `Dockerfile`
|
| 34 |
-
- `start.sh`
|
| 35 |
-
- `web-server.js`
|
| 36 |
-
- `public/index.html`
|
| 37 |
-
- `README.md` (this file)
|
| 38 |
-
|
| 39 |
-
### 3. Set Secrets
|
| 40 |
-
|
| 41 |
-
In your Space settings, add these secrets:
|
| 42 |
-
|
| 43 |
-
| Secret Name | Value | Required |
|
| 44 |
-
|-------------|-------|----------|
|
| 45 |
-
| `BASE_URL` | Your API URL (e.g., `https://your-9router.hf.space/v1`) | **Yes** |
|
| 46 |
-
| `API_KEY` | Your API key | **Yes** |
|
| 47 |
-
| `MODEL_ID` | Model name (default: `Multiple-models`) | No |
|
| 48 |
-
| `PROVIDER_NAME` | Provider name (default: `custom`) | No |
|
| 49 |
-
|
| 50 |
-
**Example for 9router on Hugging Face Spaces:**
|
| 51 |
-
```
|
| 52 |
-
BASE_URL=https://your-9router-space.hf.space/v1
|
| 53 |
-
API_KEY=your-9router-api-key
|
| 54 |
-
MODEL_ID=Multiple-models
|
| 55 |
-
PROVIDER_NAME=9router
|
| 56 |
-
```
|
| 57 |
-
|
| 58 |
-
### 4. Access Your Chat
|
| 59 |
-
|
| 60 |
-
1. Wait for the Space to build and start (check logs)
|
| 61 |
-
2. Open your Space URL in a browser
|
| 62 |
-
3. Start chatting with your AI assistant!
|
| 63 |
-
|
| 64 |
-
### 5. Keep It Alive (Optional)
|
| 65 |
-
|
| 66 |
-
Sign up at [UptimeRobot](https://uptimerobot.com) and monitor your Space URL to prevent sleeping.
|
| 67 |
-
|
| 68 |
-
## Architecture
|
| 69 |
-
|
| 70 |
-
```
|
| 71 |
-
Browser โ HF Space (port 7860) โ Web Server
|
| 72 |
-
โ
|
| 73 |
-
WebSocket Proxy
|
| 74 |
-
โ
|
| 75 |
-
OpenClaw Gateway (port 18789)
|
| 76 |
-
โ
|
| 77 |
-
AI Model API
|
| 78 |
-
```
|
| 79 |
-
|
| 80 |
-
## Features
|
| 81 |
-
|
| 82 |
-
- โ
Clean web chat interface
|
| 83 |
-
- โ
Works on HF Spaces free tier
|
| 84 |
-
- โ
Real-time responses
|
| 85 |
-
- โ
Mobile-friendly design
|
| 86 |
-
|
| 87 |
-
## Troubleshooting
|
| 88 |
-
|
| 89 |
-
**"Connection error" in browser?**
|
| 90 |
-
- Check Space logs for errors
|
| 91 |
-
- Verify `BASE_URL` and `API_KEY` are set correctly
|
| 92 |
-
- Make sure your API server is accessible from HF Spaces
|
| 93 |
-
|
| 94 |
-
**Blank page?**
|
| 95 |
-
- Check browser console for JavaScript errors
|
| 96 |
-
- Verify all files were uploaded correctly
|
| 97 |
-
|
| 98 |
-
**No response from AI?**
|
| 99 |
-
- Check if API is reachable from HF Spaces
|
| 100 |
-
- Verify API key is correct
|
| 101 |
-
- Check Space logs for API errors
|
| 102 |
|
| 103 |
## Files
|
| 104 |
|
| 105 |
-
- `Dockerfile` - Container setup
|
| 106 |
-
- `start.sh` - Startup script
|
| 107 |
-
- `
|
| 108 |
-
- `public/index.html` - Web chat UI
|
| 109 |
-
|
| 110 |
-
## Credits
|
| 111 |
-
|
| 112 |
-
Powered by [OpenClaw](https://github.com/openclaw/openclaw)
|
|
|
|
| 1 |
---
|
| 2 |
+
title: OpenClaw Dashboard
|
| 3 |
emoji: ๐ฆ
|
| 4 |
colorFrom: blue
|
| 5 |
colorTo: purple
|
|
|
|
| 7 |
pinned: false
|
| 8 |
---
|
| 9 |
|
| 10 |
+
# OpenClaw Dashboard
|
| 11 |
|
| 12 |
+
Access your AI assistant through the OpenClaw dashboard.
|
| 13 |
|
| 14 |
+
## Setup
|
| 15 |
|
| 16 |
+
1. Set these secrets in your Space:
|
| 17 |
+
- `BASE_URL` - Your API URL (e.g., `https://your-9router.hf.space/v1`)
|
| 18 |
+
- `API_KEY` - Your API key
|
| 19 |
|
| 20 |
+
2. Open your Space URL
|
| 21 |
|
| 22 |
+
3. When prompted, enter the gateway token: `hf-space-token`
|
| 23 |
+
(Or set your own via `GATEWAY_TOKEN` secret)
|
| 24 |
|
| 25 |
+
## Usage
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 26 |
|
| 27 |
+
The dashboard provides a full chat interface with your AI assistant (Zero).
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 28 |
|
| 29 |
## Files
|
| 30 |
|
| 31 |
+
- `Dockerfile` - Container setup
|
| 32 |
+
- `start.sh` - Startup script
|
| 33 |
+
- `README.md` - This file
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
start.sh
CHANGED
|
@@ -17,7 +17,10 @@ BASE_URL=${BASE_URL:-"http://127.0.0.1:20128/v1"}
|
|
| 17 |
MODEL_ID=${MODEL_ID:-"Multiple-models"}
|
| 18 |
PROVIDER_NAME=${PROVIDER_NAME:-"custom"}
|
| 19 |
|
| 20 |
-
#
|
|
|
|
|
|
|
|
|
|
| 21 |
cat > /root/.openclaw/openclaw.json << EOF
|
| 22 |
{
|
| 23 |
"meta": {
|
|
@@ -54,10 +57,14 @@ cat > /root/.openclaw/openclaw.json << EOF
|
|
| 54 |
},
|
| 55 |
"session": { "dmScope": "per-channel-peer" },
|
| 56 |
"gateway": {
|
| 57 |
-
"port":
|
| 58 |
"mode": "local",
|
| 59 |
-
"bind": "
|
| 60 |
-
"auth": {
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
"tailscale": { "mode": "off" }
|
| 62 |
},
|
| 63 |
"skills": { "install": { "nodeManager": "npm" } },
|
|
@@ -65,36 +72,15 @@ cat > /root/.openclaw/openclaw.json << EOF
|
|
| 65 |
}
|
| 66 |
EOF
|
| 67 |
|
| 68 |
-
echo "โ
Config created
|
| 69 |
echo "๐ก API: ${BASE_URL}"
|
| 70 |
echo "๐ค Model: ${MODEL_ID}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
-
# Start OpenClaw gateway
|
| 73 |
-
|
| 74 |
-
openclaw gateway > /tmp/gateway.log 2>&1 &
|
| 75 |
-
GATEWAY_PID=$!
|
| 76 |
-
|
| 77 |
-
# Wait for gateway to be ready
|
| 78 |
-
echo "โณ Waiting for gateway to start..."
|
| 79 |
-
for i in {1..60}; do
|
| 80 |
-
if nc -z 127.0.0.1 18789 2>/dev/null; then
|
| 81 |
-
echo "โ
Gateway is ready!"
|
| 82 |
-
break
|
| 83 |
-
fi
|
| 84 |
-
if [ $i -eq 60 ]; then
|
| 85 |
-
echo "โ Gateway failed to start after 60 seconds"
|
| 86 |
-
echo "๐ Gateway logs:"
|
| 87 |
-
cat /tmp/gateway.log
|
| 88 |
-
exit 1
|
| 89 |
-
fi
|
| 90 |
-
sleep 1
|
| 91 |
-
done
|
| 92 |
-
|
| 93 |
-
# Show gateway status
|
| 94 |
-
echo "๐ Gateway startup logs:"
|
| 95 |
-
head -15 /tmp/gateway.log
|
| 96 |
-
|
| 97 |
-
# Start web proxy server
|
| 98 |
-
echo "๐ Starting Web Proxy..."
|
| 99 |
-
cd /app
|
| 100 |
-
exec node server.js
|
|
|
|
| 17 |
MODEL_ID=${MODEL_ID:-"Multiple-models"}
|
| 18 |
PROVIDER_NAME=${PROVIDER_NAME:-"custom"}
|
| 19 |
|
| 20 |
+
# Token for gateway auth
|
| 21 |
+
GATEWAY_TOKEN=${GATEWAY_TOKEN:-"hf-space-token"}
|
| 22 |
+
|
| 23 |
+
# Create OpenClaw config
|
| 24 |
cat > /root/.openclaw/openclaw.json << EOF
|
| 25 |
{
|
| 26 |
"meta": {
|
|
|
|
| 57 |
},
|
| 58 |
"session": { "dmScope": "per-channel-peer" },
|
| 59 |
"gateway": {
|
| 60 |
+
"port": 7860,
|
| 61 |
"mode": "local",
|
| 62 |
+
"bind": "lan",
|
| 63 |
+
"auth": {
|
| 64 |
+
"mode": "token",
|
| 65 |
+
"token": "${GATEWAY_TOKEN}"
|
| 66 |
+
},
|
| 67 |
+
"trustedProxies": ["0.0.0.0/0"],
|
| 68 |
"tailscale": { "mode": "off" }
|
| 69 |
},
|
| 70 |
"skills": { "install": { "nodeManager": "npm" } },
|
|
|
|
| 72 |
}
|
| 73 |
EOF
|
| 74 |
|
| 75 |
+
echo "โ
Config created"
|
| 76 |
echo "๐ก API: ${BASE_URL}"
|
| 77 |
echo "๐ค Model: ${MODEL_ID}"
|
| 78 |
+
echo "๐ Gateway Token: ${GATEWAY_TOKEN}"
|
| 79 |
+
echo ""
|
| 80 |
+
echo "๐ Starting OpenClaw Gateway..."
|
| 81 |
+
echo "๐ฑ Open your Space URL to access the dashboard"
|
| 82 |
+
echo "๐ Use token: ${GATEWAY_TOKEN}"
|
| 83 |
+
echo ""
|
| 84 |
|
| 85 |
+
# Start OpenClaw gateway directly
|
| 86 |
+
exec openclaw gateway
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|