infra: use nitro for docker production (#21)

* infra: use nitro for docker production

* small fix

* fix: bufferutil error

* Remove ALLOWED_HOSTS
This commit is contained in:
Malachi
2026-01-30 08:36:15 -05:00
committed by GitHub
parent 8db30f1f12
commit bddf8b81a6
7 changed files with 1293 additions and 180 deletions
-3
View File
@@ -4,6 +4,3 @@
# Clawdbot gateway auth token
CLAWDBOT_API_TOKEN=
# Comma-separated list of allowed hosts for the dev server
# Example: ALLOWED_HOSTS=myhost.local,192.168.1.100,.mydomain.com
ALLOWED_HOSTS=
+5 -18
View File
@@ -1,6 +1,4 @@
# Build stage
FROM node:22-alpine AS builder
WORKDIR /app
COPY package*.json ./
@@ -9,26 +7,15 @@ RUN npm ci
COPY . .
RUN npm run build
# Runtime stage
FROM node:22-alpine AS runner
WORKDIR /app
# NOTE: TanStack Start server entry produced by `vite build` does not bind a port
# on its own in this repo, so we run the Vite dev server in Docker for now.
# This makes the published image functional while we figure out a proper prod server.
ENV NODE_ENV=production
ENV PORT=3000
ENV HOST=0.0.0.0
ENV NODE_ENV=development
COPY package*.json ./
RUN npm ci
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/src ./src
COPY --from=builder /app/public ./public
COPY --from=builder /app/vite.config.ts ./
COPY --from=builder /app/tsconfig.json ./
COPY --from=builder /app/.output ./.output
EXPOSE 3000
CMD ["npm", "run", "dev", "--", "--host", "0.0.0.0", "--port", "3000"]
CMD ["node", ".output/server/index.mjs"]
+3 -11
View File
@@ -28,10 +28,10 @@ docker run -d \
ghcr.io/luccast/crabwalk:latest
```
> Note: When running Crabwalk in Docker, the Moltbot gateway typically runs on the *host*.
> Note: When running Crabwalk in Docker, the Moltbot gateway typically runs on the _host_.
> Use `CLAWDBOT_URL=ws://host.docker.internal:18789` so the container can connect.
>If you're running Moltbot with `bind: loopback` and `tailscale serve` for secure tailnet-only access, you'll need to run the crabwalk container with host networking - replace `p:3000:3000` with `--network host`
>This allows the container to reach 127.0.0.1:18789 while maintaining the security benefits of loopback-only binding.
> If you're running Moltbot with `bind: loopback` and `tailscale serve` for secure tailnet-only access, you'll need to run the crabwalk container with host networking - replace `p:3000:3000` with `--network host`
> This allows the container to reach 127.0.0.1:18789 while maintaining the security benefits of loopback-only binding.
Or with docker-compose:
@@ -78,14 +78,6 @@ Or copy it directly:
export CLAWDBOT_API_TOKEN=$(python3 -c "import json,os; print(json.load(open(os.path.expanduser('~/.clawdbot/clawdbot.json')))['gateway']['auth']['token'])")
```
## Accessing from a remote host
If you are running this on a remote server and accessing it through a non-local browser, the default allowedHosts behaviour will prevent access to the web UI.
If running in docker, you can pass the environment variable `ALLOWED_HOSTS` with a comma-separated list of hosts you wish to allow access to the crabwalk UI.
If running from source, you can either pass `ALLOWED_HOSTS` as an env var at the command line, or use a .env file.
## Stack
TanStack Start, ReactFlow, Framer Motion, tRPC, TanStack DB
-1
View File
@@ -5,5 +5,4 @@ services:
- "3000:3000"
environment:
- CLAWDBOT_API_TOKEN=${CLAWDBOT_API_TOKEN}
- ALLOWED_HOSTS=${ALLOWED_HOSTS:-}
restart: unless-stopped
+1262 -123
View File
File diff suppressed because it is too large Load Diff
+7 -3
View File
@@ -6,10 +6,11 @@
"scripts": {
"dev": "vite dev --port 3000 --host",
"build": "vite build",
"start": "node dist/server/server.js"
"start": "node .output/server/index.mjs"
},
"dependencies": {
"@tanstack/db": "^0.5.0",
"@tanstack/history": "^1.132.0",
"@tanstack/react-db": "^0.1.0",
"@tanstack/react-query": "^5.0.0",
"@tanstack/react-router": "^1.132.0",
@@ -26,8 +27,7 @@
"superjson": "^2.2.0",
"vite-tsconfig-paths": "^5.1.4",
"ws": "^8.19.0",
"zod": "^3.24.0",
"@tanstack/history": "^1.132.0"
"zod": "^3.24.0"
},
"devDependencies": {
"@tailwindcss/vite": "^4.0.0",
@@ -36,8 +36,12 @@
"@types/react-dom": "^19.2.0",
"@types/ws": "^8.18.1",
"@vitejs/plugin-react": "^4.4.1",
"nitro": "npm:nitro-nightly@^3.0.1-20260128-211656-ae83c97e",
"tailwindcss": "^4.0.0",
"typescript": "^5.7.0",
"vite": "^7.0.0"
},
"optionalDependencies": {
"bufferutil": "^4.1.0"
}
}
+16 -21
View File
@@ -1,23 +1,18 @@
import { defineConfig } from 'vite'
import { tanstackStart } from '@tanstack/react-start/plugin/vite'
import viteReact from '@vitejs/plugin-react'
import viteTsConfigPaths from 'vite-tsconfig-paths'
import tailwindcss from '@tailwindcss/vite'
const allowedHosts = process.env.ALLOWED_HOSTS
? process.env.ALLOWED_HOSTS.split(',').map(host => host.trim()).filter(Boolean)
: undefined
import { defineConfig } from 'vite';
import { tanstackStart } from '@tanstack/react-start/plugin/vite';
import { nitro } from 'nitro/vite';
import viteReact from '@vitejs/plugin-react';
import viteTsConfigPaths from 'vite-tsconfig-paths';
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({
server: {
allowedHosts,
},
plugins: [
viteTsConfigPaths({
projects: ['./tsconfig.json'],
}),
tailwindcss(),
tanstackStart(),
viteReact(),
],
})
plugins: [
viteTsConfigPaths({
projects: ['./tsconfig.json'],
}),
tailwindcss(),
tanstackStart(),
nitro(),
viteReact(),
],
});