| |
| FROM node:22-bookworm-slim |
|
|
| |
| RUN apt-get update && apt-get install -y \ |
| git curl procps zstd python3 make g++ jq \ |
| && curl -fsSL https://ollama.com/install.sh | sh \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| RUN mkdir -p /home/node/.ollama && chown -R node:node /home/node/.ollama |
| RUN mkdir -p /home/node/.npm-global && chown -R node:node /home/node/.npm-global |
| RUN mkdir -p /home/node/.openclaw/workspace && chown -R node:node /home/node/.openclaw |
|
|
| |
| USER node |
| ENV HOME=/home/node |
| ENV PATH=/home/node/.npm-global/bin:$PATH |
| WORKDIR $HOME |
|
|
| |
| RUN npm config set prefix '~/.npm-global' |
| RUN npm install -g openclaw@latest |
|
|
| |
| EXPOSE 7860 |
|
|
| |
| RUN echo ' |
| echo "Writing default OpenClaw configuration..."\n\ |
| cat <<EOF > /home/node/.openclaw/openclaw.json\n\ |
| {\n\ |
| "gateway": {\n\ |
| "mode": "local",\n\ |
| "bind": "lan",\n\ |
| "trustedProxies": ["10.0.0.0/8", "127.0.0.1"],\n\ |
| "auth": {\n\ |
| "token": "pelm-my-super-secret-password-123"\n\ |
| },\n\ |
| "controlUi": {\n\ |
| "allowInsecureAuth": true,\n\ |
| "dangerouslyDisableDeviceAuth": true\n\ |
| }\n\ |
| },\n\ |
| "models": {\n\ |
| "mode": "merge",\n\ |
| "providers": {\n\ |
| "ollama": {\n\ |
| "baseUrl": "http://127.0.0.1:11434/v1",\n\ |
| "apiKey": "ollama-local",\n\ |
| "api": "openai-responses",\n\ |
| "models": [\n\ |
| {\n\ |
| "id": "qwen3:8b",\n\ |
| "name": "Qwen 3 (8B)",\n\ |
| "reasoning": false,\n\ |
| "input": ["text"],\n\ |
| "cost": { "input": 0, "output": 0, "cacheRead": 0, "cacheWrite": 0 },\n\ |
| "contextWindow": 40000,\n\ |
| "maxTokens": 8192\n\ |
| }\n\ |
| ]\n\ |
| }\n\ |
| }\n\ |
| },\n\ |
| "agents": {\n\ |
| "defaults": {\n\ |
| "model": {\n\ |
| "primary": "ollama/qwen3:8b"\n\ |
| },\n\ |
| "models": {\n\ |
| "ollama/qwen3:8b": {\n\ |
| "streaming": false\n\ |
| }\n\ |
| }\n\ |
| }\n\ |
| }\n\ |
| }\n\ |
| EOF\n\ |
| \n\ |
| echo "Starting Ollama server..."\n\ |
| ollama serve &\n\ |
| \n\ |
| echo "Waiting for Ollama server to be active..."\n\ |
| while ! ollama list > /dev/null 2>&1; do\n\ |
| sleep 1\n\ |
| done\n\ |
| \n\ |
| echo "Ollama is up! Pulling Qwen 3 8B..."\n\ |
| ollama pull qwen3:8b\n\ |
| \n\ |
| echo "Model ready! Starting OpenClaw..."\n\ |
| openclaw gateway --port 7860 --allow-unconfigured\n\ |
| ' > start.sh && chmod +x start.sh |
|
|
| |
| CMD ["./start.sh"] |