feat: sanitized agent config — Nexus no longer reads secrets from openclaw.json
- Mount agents-sanitized.json (agents key only, no secrets) instead of full openclaw.json - Update AgentService default path from /home/node/.openclaw/openclaw.json to /etc/nexus/agents-sanitized.json - Add AgentConfigPath env var to compose for explicit path configuration - Generate sanitized file in deploy-nexus.sh before each deploy using Python extraction - Add agents-sanitized.json to .gitignore Eliminates the fragile ACL on openclaw.json (uid 1654) that causes 500 errors on the Board endpoint when lost.
This commit is contained in:
@@ -106,6 +106,28 @@ git archive --format=tar HEAD | docker run --rm -i \
|
|||||||
chown -R "$dest_owner" /dest
|
chown -R "$dest_owner" /dest
|
||||||
'
|
'
|
||||||
|
|
||||||
|
# ── Sanitized agents config for Nexus (no secrets) ──
|
||||||
|
echo "Generating sanitized agents config for Nexus"
|
||||||
|
AGENTS_SANITIZED_PATH="/home/projekte_bao/openclaw/data/openclaw/agents-sanitized.json"
|
||||||
|
OPENCLAW_CONFIG="/home/projekte_bao/openclaw/data/openclaw/openclaw.json"
|
||||||
|
if [ -f "$OPENCLAW_CONFIG" ]; then
|
||||||
|
python3 -c "
|
||||||
|
import json, sys
|
||||||
|
with open('$OPENCLAW_CONFIG') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
agents = data.get('agents')
|
||||||
|
if agents is None:
|
||||||
|
print('ERROR: \"agents\" key not found in openclaw.json', file=sys.stderr)
|
||||||
|
sys.exit(1)
|
||||||
|
with open('$AGENTS_SANITIZED_PATH', 'w') as f:
|
||||||
|
json.dump({'agents': agents}, f, indent=2)
|
||||||
|
"
|
||||||
|
chmod 644 "$AGENTS_SANITIZED_PATH" 2>/dev/null || true
|
||||||
|
echo "Sanitized agents config written to $AGENTS_SANITIZED_PATH"
|
||||||
|
else
|
||||||
|
echo "WARNING: openclaw.json not found at $OPENCLAW_CONFIG — agents-sanitized.json NOT generated" >&2
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Building and starting Docker compose stack"
|
echo "Building and starting Docker compose stack"
|
||||||
docker run --rm \
|
docker run --rm \
|
||||||
-v "$DEPLOY_PATH:/workspace/nexus" \
|
-v "$DEPLOY_PATH:/workspace/nexus" \
|
||||||
|
|||||||
@@ -39,3 +39,6 @@ frontend/.corepack-home/
|
|||||||
|
|
||||||
# Claude local config (per-developer, not repo-shared)
|
# Claude local config (per-developer, not repo-shared)
|
||||||
.claude/
|
.claude/
|
||||||
|
|
||||||
|
# Sanitized agent config (generated on host, not committed)
|
||||||
|
backend/agents-sanitized.json
|
||||||
|
|||||||
@@ -235,7 +235,7 @@ public sealed class AgentService(IConfiguration configuration, IAgentRuntime run
|
|||||||
private async Task<IReadOnlyList<AgentConfig>> LoadAgentConfigsAsync(CancellationToken cancellationToken)
|
private async Task<IReadOnlyList<AgentConfig>> LoadAgentConfigsAsync(CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var path = configuration.GetValue<string>("AgentConfigPath")
|
var path = configuration.GetValue<string>("AgentConfigPath")
|
||||||
?? "/home/node/.openclaw/openclaw.json";
|
?? "/etc/nexus/agents-sanitized.json";
|
||||||
|
|
||||||
if (!File.Exists(path))
|
if (!File.Exists(path))
|
||||||
return BuildFallbackConfigs();
|
return BuildFallbackConfigs();
|
||||||
|
|||||||
+2
-1
@@ -64,6 +64,7 @@ services:
|
|||||||
Integrations__OpenClaw__Password: ${OPENCLAW_GATEWAY_PASSWORD:-}
|
Integrations__OpenClaw__Password: ${OPENCLAW_GATEWAY_PASSWORD:-}
|
||||||
Admin__ResetToken: ${Admin__ResetToken:-}
|
Admin__ResetToken: ${Admin__ResetToken:-}
|
||||||
NexusApiKey: ${NEXUS_API_KEY:-}
|
NexusApiKey: ${NEXUS_API_KEY:-}
|
||||||
|
AgentConfigPath: /etc/nexus/agents-sanitized.json
|
||||||
extra_hosts:
|
extra_hosts:
|
||||||
- host.docker.internal:host-gateway
|
- host.docker.internal:host-gateway
|
||||||
depends_on:
|
depends_on:
|
||||||
@@ -77,7 +78,7 @@ services:
|
|||||||
retries: 3
|
retries: 3
|
||||||
start_period: 15s
|
start_period: 15s
|
||||||
volumes:
|
volumes:
|
||||||
- /home/projekte_bao/openclaw/data/openclaw/openclaw.json:/home/node/.openclaw/openclaw.json:ro
|
- /home/projekte_bao/openclaw/data/openclaw/agents-sanitized.json:/etc/nexus/agents-sanitized.json:ro
|
||||||
- /home/projekte_bao/openclaw/data/openclaw/workspace-iris:/mnt/workspace-iris
|
- /home/projekte_bao/openclaw/data/openclaw/workspace-iris:/mnt/workspace-iris
|
||||||
- /home/projekte_bao/openclaw/data/openclaw/workspace-programmer:/mnt/workspace-programmer
|
- /home/projekte_bao/openclaw/data/openclaw/workspace-programmer:/mnt/workspace-programmer
|
||||||
- /home/projekte_bao/openclaw/data/openclaw/workspace-reviewer:/mnt/workspace-reviewer
|
- /home/projekte_bao/openclaw/data/openclaw/workspace-reviewer:/mnt/workspace-reviewer
|
||||||
|
|||||||
Reference in New Issue
Block a user