| | |
| | 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"] |