Storyboard / docker-entrypoint.sh
Ming0614's picture
Deploy Claude Code UI with Storyboard project
26cfe22
Raw
History Blame Contribute Delete
1.9 kB
#!/bin/bash
set -e
echo "=== Claude Code UI Docker Entrypoint ==="
# Initialize database with default user if it doesn't exist
if [ ! -f "$DATABASE_PATH" ]; then
echo "[INIT] Creating database and default user..."
node -e "
const bcrypt = require('bcrypt');
const Database = require('better-sqlite3');
const fs = require('fs');
const path = require('path');
const dbDir = path.dirname('$DATABASE_PATH');
if (!fs.existsSync(dbDir)) fs.mkdirSync(dbDir, { recursive: true });
const db = new Database('$DATABASE_PATH');
const initSql = fs.readFileSync(path.join('/app/server/database/init.sql'), 'utf8');
db.exec(initSql);
const username = process.env.DEMO_USERNAME || 'Storyboard';
const password = process.env.DEMO_PASSWORD || 'Storycoard123456*';
const hash = bcrypt.hashSync(password, 12);
db.prepare('INSERT OR IGNORE INTO users (username, password_hash, has_completed_onboarding) VALUES (?, ?, 1)').run(username, hash);
console.log('[INIT] User created:', username);
db.close();
"
else
echo "[INIT] Database already exists, skipping user creation."
fi
# Pre-seed Claude project config so the Storyboard project appears in the UI
CLAUDE_DIR="$HOME/.claude"
PROJECT_CONFIG="$CLAUDE_DIR/project-config.json"
PROJECTS_DIR="$CLAUDE_DIR/projects"
mkdir -p "$PROJECTS_DIR"
# Encode project path: /workspace/Storyboard -> -workspace-Storyboard
ENCODED_NAME=$(echo "/workspace/Storyboard" | sed 's|/|-|g')
mkdir -p "$PROJECTS_DIR/$ENCODED_NAME"
if [ ! -f "$PROJECT_CONFIG" ]; then
echo "[INIT] Creating project config for Storyboard..."
cat > "$PROJECT_CONFIG" << 'PROJEOF'
{
"-workspace-Storyboard": {
"manuallyAdded": true,
"originalPath": "/workspace/Storyboard",
"allowedTools": []
}
}
PROJEOF
fi
echo "[INIT] Starting Claude Code UI server on port ${SERVER_PORT:-7860}..."
exec node /app/server/index.js