ocweb / start.sh
habppyar's picture
Update start.sh
7efdd11 verified
#!/usr/bin/env bash
set -euo pipefail
log() { echo "[start] $*"; }
APP_PORT="${APP_PORT:-7860}"
BOOTSTRAP_DIR="/app/bootstrap"
# OpenCode web basic-auth uses OPENCODE_SERVER_PASSWORD
if [[ -n "${OPENCODE_PASSWORD:-}" ]]; then
export OPENCODE_SERVER_PASSWORD="${OPENCODE_PASSWORD}"
fi
# Persist ONLY settings/skills here (no sessions)
PERSIST_ROOT="/data/opencode-persist"
if [[ ! -d "/data" || ! -w "/data" ]]; then
log "WARNING: /data not writable (bucket not mounted or permission issue). Falling back to ephemeral storage."
PERSIST_ROOT="/root/persist-ephemeral"
fi
CONFIG_FILE="${PERSIST_ROOT}/opencode.jsonc"
CONFIG_DIR="${PERSIST_ROOT}/opencode.d"
# Tell OpenCode where to load config + skills/plugins/etc from
export OPENCODE_CONFIG="${CONFIG_FILE}"
export OPENCODE_CONFIG_DIR="${CONFIG_DIR}"
log "== diagnostics =="
id || true
ls -ld /data || true
df -h /data || true
mkdir -p "${PERSIST_ROOT}" "${CONFIG_DIR}"
# ---- Workspace: create your daily folders on the persistent disk (/data) ----
WORKSPACE_ROOT="/data/workspace"
if [[ ! -d "/data" || ! -w "/data" ]]; then
WORKSPACE_ROOT="/root/workspace-ephemeral"
fi
mkdir -p "${WORKSPACE_ROOT}/chat" "${WORKSPACE_ROOT}/test" "${WORKSPACE_ROOT}/project"
# --- KEY FIX FOR WEB UI ISSUE #12487: Also create directories at root level ----
# Some web UI implementations (especially in containerized environments)
# expect to see folders at predictable root-level paths rather than through symlinks
# or nested paths. Creating these at root level improves web UI compatibility.
mkdir -p /chat /project /other
log "Created root-level directories for web UI compatibility: /chat, /project, /other"
# --- ALSO: Ensure symlink is handled robustly ----
rm -f /workspace
ln -sfn "${WORKSPACE_ROOT}" /workspace
log "Created workspace symlink: /workspace -> ${WORKSPACE_ROOT}"
# --- ADDITIONAL ROOT-LEVEL SYMLINKS FOR WEB UI COMPATIBILITY ----
# Create direct symlinks to common directories that web UI might expect
ln -sfn "${WORKSPACE_ROOT}/chat" /chat || true
ln -sfn "${WORKSPACE_ROOT}/project" /project || true
ln -sfn "${WORKSPACE_ROOT}/other" /other || true
log "Created direct symlinks for web UI compatibility"
# Seed/overwrite persisted config from repo bootstrap (simple + reproducible)
log "Sync bootstrap => ${PERSIST_ROOT}"
cp -f "${BOOTSTRAP_DIR}/opencode.jsonc" "${CONFIG_FILE}"
rm -rf "${CONFIG_DIR}"
mkdir -p "${CONFIG_DIR}"
cp -r "${BOOTSTRAP_DIR}/opencode.d/"* "${CONFIG_DIR}/" || true
# Prove persistence: append a timestamp
date -u +"%Y-%m-%dT%H:%M:%SZ started" >> "${PERSIST_ROOT}/startup.log"
log "opencode path: $(command -v opencode || true)"
opencode --version || true
log "Workspace root: ${WORKSPACE_ROOT}"
log "Starting OpenCode Web on 0.0.0.0:${APP_PORT}"
# --- IMPROVED STARTUP SEQUENCE FOR WEB UI RELIABILITY ----
# Add a small delay to ensure all filesystem operations are complete
# before the web UI starts initializing and attempting to read directory structures
sleep 2
log "Filesystem synchronization complete, starting web UI..."
# IMPORTANT: do NOT use "--cwd" (this opencode doesn't support it)
# Start from the workspace root as originally intended
cd "${WORKSPACE_ROOT}"
exec opencode web --hostname 0.0.0.0 --port "${APP_PORT}"