Personal AI assistant with multi-channel messaging gateway. WhatsApp, Telegram, Slack, Discord, and 25+ channels.
# OpenClaw — Personal AI Assistant Stack
#
# OpenClaw is a multi-channel AI assistant gateway by the OpenClaw project.
# Repo: https://github.com/openclaw/openclaw
#
# The openclaw container runs the Gateway service which provides:
# - Control UI on port 18789
# - Multi-channel messaging (WhatsApp, Telegram, Slack, Discord, 25+ channels)
# - Agent tools, skills, cron jobs, webhooks
#
# State is relocated to /opt/data via OPENCLAW_CONFIG_DIR to handle
# OpenShift arbitrary UIDs (the official image uses uid 1000 with 700 perms).
#
# First boot: run `openclaw setup` in the terminal to configure
# your API key and model provider.
schemaVersion: 2.3.0
metadata:
name: openclaw
displayName: OpenClaw AI Assistant
description: Personal AI assistant with multi-channel messaging gateway. WhatsApp, Telegram, Slack, Discord, and 25+ channels.
icon: https://raw.githubusercontent.com/openclaw/openclaw/main/ui/public/favicon.svg
tags:
- AI
- Assistant
- Gateway
- OpenClaw
projectType: AI
language: TypeScript
version: 1.0.0
attributes:
controller.devfile.io/storage-type: per-workspace
components:
- name: tools
container:
image: quay.io/devfile/universal-developer-image:ubi9-latest
memoryLimit: 1Gi
memoryRequest: 256Mi
mountSources: true
# OpenClaw Gateway container.
# Runs the gateway service with Control UI on port 18789.
# State is relocated from /home/node/.openclaw (uid 1000, 700 perms)
# to /opt/data on a writable PVC for OpenShift arbitrary-UID compat.
- name: openclaw
container:
image: docker.io/openclaw/openclaw:2026.7.1
mountSources: false
memoryRequest: 2Gi
memoryLimit: 3Gi
env:
- name: HOME
value: /opt/data/home
- name: OPENCLAW_CONFIG_DIR
value: /opt/data/config
- name: OPENCLAW_WORKSPACE_DIR
value: /opt/data/config/workspace
- name: OPENCLAW_GATEWAY_BIND
value: lan
- name: OPENCLAW_SKIP_ONBOARDING
value: "1"
command: ["/bin/bash", "-c"]
args:
- |
if ! whoami &>/dev/null; then
echo "openclaw:x:$(id -u):0:OpenClaw:${HOME}:/bin/bash" >> /etc/passwd
fi
mkdir -p "${HOME}" "${OPENCLAW_CONFIG_DIR}" "${OPENCLAW_WORKSPACE_DIR}"
TOKEN_FILE="${OPENCLAW_CONFIG_DIR}/.gateway-token"
if [ ! -f "${TOKEN_FILE}" ]; then
TOKEN=$(head -c 48 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | head -c 48)
echo "${TOKEN}" > "${TOKEN_FILE}"
chmod 600 "${TOKEN_FILE}"
echo "============================================"
echo " Gateway token: ${TOKEN}"
echo " Run 'show-token' command to see it again."
echo "============================================"
fi
export OPENCLAW_GATEWAY_TOKEN=$(cat "${TOKEN_FILE}")
openclaw config set gateway.mode local 2>/dev/null || true
openclaw config set gateway.controlUi.allowedOrigins '["*"]' 2>/dev/null || true
openclaw config set gateway.trustedProxies '["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"]' 2>/dev/null || true
exec tini -s -- node /app/openclaw.mjs gateway
endpoints:
- name: control-ui
targetPort: 18789
exposure: public
protocol: https
attributes:
cookiesAuthEnabled: true
discoverable: false
urlRewriteSupported: false
volumeMounts:
- name: openclaw-data
path: /opt/data
- name: openclaw-data
volume:
size: 10Gi
commands:
- id: setup
exec:
label: "Configure OpenClaw (onboarding wizard)"
component: openclaw
commandLine: openclaw onboard
workingDir: /opt/data/config
- id: status
exec:
label: "Check gateway health"
component: openclaw
commandLine: |
echo "--- Health ---"
curl -fsS http://127.0.0.1:18789/healthz && echo " OK" || echo " FAIL"
echo "--- Readiness ---"
curl -fsS http://127.0.0.1:18789/readyz && echo " OK" || echo " FAIL"
workingDir: /opt/data/config
- id: show-token
exec:
label: "Display gateway access token"
component: openclaw
commandLine: cat "${OPENCLAW_CONFIG_DIR}/.gateway-token"
workingDir: /opt/data/config
- id: doctor
exec:
label: "Run diagnostics"
component: openclaw
commandLine: openclaw doctor
workingDir: /opt/data/config
- id: restart-gateway
exec:
label: "Restart gateway process"
component: openclaw
commandLine: openclaw gateway stop 2>/dev/null; openclaw gateway
workingDir: /opt/data/config
# OpenClaw — Personal AI Assistant Stack
#
# OpenClaw is a multi-channel AI assistant gateway by the OpenClaw project.
# Repo: https://github.com/openclaw/openclaw
#
# The openclaw container runs the Gateway service which provides:
# - Control UI on port 18789
# - Multi-channel messaging (WhatsApp, Telegram, Slack, Discord, 25+ channels)
# - Agent tools, skills, cron jobs, webhooks
#
# State is relocated to /opt/data via OPENCLAW_CONFIG_DIR to handle
# OpenShift arbitrary UIDs (the official image uses uid 1000 with 700 perms).
#
# First boot: run `openclaw setup` in the terminal to configure
# your API key and model provider.
schemaVersion: 2.3.0
metadata:
name: openclaw
displayName: OpenClaw AI Assistant
description: Personal AI assistant with multi-channel messaging gateway. WhatsApp, Telegram, Slack, Discord, and 25+ channels.
icon: https://raw.githubusercontent.com/openclaw/openclaw/main/ui/public/favicon.svg
tags:
- AI
- Assistant
- Gateway
- OpenClaw
projectType: AI
language: TypeScript
version: 1.0.0
attributes:
controller.devfile.io/storage-type: per-workspace
components:
- name: tools
container:
image: quay.io/devfile/universal-developer-image:ubi9-latest
memoryLimit: 1Gi
memoryRequest: 256Mi
mountSources: true
# OpenClaw Gateway container.
# Runs the gateway service with Control UI on port 18789.
# State is relocated from /home/node/.openclaw (uid 1000, 700 perms)
# to /opt/data on a writable PVC for OpenShift arbitrary-UID compat.
- name: openclaw
container:
image: docker.io/openclaw/openclaw:2026.7.1
mountSources: false
memoryRequest: 2Gi
memoryLimit: 3Gi
env:
- name: HOME
value: /opt/data/home
- name: OPENCLAW_CONFIG_DIR
value: /opt/data/config
- name: OPENCLAW_WORKSPACE_DIR
value: /opt/data/config/workspace
- name: OPENCLAW_GATEWAY_BIND
value: lan
- name: OPENCLAW_SKIP_ONBOARDING
value: "1"
command: ["/bin/bash", "-c"]
args:
- |
if ! whoami &>/dev/null; then
echo "openclaw:x:$(id -u):0:OpenClaw:${HOME}:/bin/bash" >> /etc/passwd
fi
mkdir -p "${HOME}" "${OPENCLAW_CONFIG_DIR}" "${OPENCLAW_WORKSPACE_DIR}"
TOKEN_FILE="${OPENCLAW_CONFIG_DIR}/.gateway-token"
if [ ! -f "${TOKEN_FILE}" ]; then
TOKEN=$(head -c 48 /dev/urandom | base64 | tr -dc 'a-zA-Z0-9' | head -c 48)
echo "${TOKEN}" > "${TOKEN_FILE}"
chmod 600 "${TOKEN_FILE}"
echo "============================================"
echo " Gateway token: ${TOKEN}"
echo " Run 'show-token' command to see it again."
echo "============================================"
fi
export OPENCLAW_GATEWAY_TOKEN=$(cat "${TOKEN_FILE}")
openclaw config set gateway.mode local 2>/dev/null || true
openclaw config set gateway.controlUi.allowedOrigins '["*"]' 2>/dev/null || true
openclaw config set gateway.trustedProxies '["10.0.0.0/8","172.16.0.0/12","192.168.0.0/16"]' 2>/dev/null || true
exec tini -s -- node /app/openclaw.mjs gateway
endpoints:
- name: control-ui
targetPort: 18789
exposure: public
protocol: https
attributes:
cookiesAuthEnabled: true
discoverable: false
urlRewriteSupported: false
volumeMounts:
- name: openclaw-data
path: /opt/data
- name: openclaw-data
volume:
size: 10Gi
commands:
- id: setup
exec:
label: "Configure OpenClaw (onboarding wizard)"
component: openclaw
commandLine: openclaw onboard
workingDir: /opt/data/config
- id: status
exec:
label: "Check gateway health"
component: openclaw
commandLine: |
echo "--- Health ---"
curl -fsS http://127.0.0.1:18789/healthz && echo " OK" || echo " FAIL"
echo "--- Readiness ---"
curl -fsS http://127.0.0.1:18789/readyz && echo " OK" || echo " FAIL"
workingDir: /opt/data/config
- id: show-token
exec:
label: "Display gateway access token"
component: openclaw
commandLine: cat "${OPENCLAW_CONFIG_DIR}/.gateway-token"
workingDir: /opt/data/config
- id: doctor
exec:
label: "Run diagnostics"
component: openclaw
commandLine: openclaw doctor
workingDir: /opt/data/config
- id: restart-gateway
exec:
label: "Restart gateway process"
component: openclaw
commandLine: openclaw gateway stop 2>/dev/null; openclaw gateway
workingDir: /opt/data/config