| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| log() { echo "[start] $*"; } |
|
|
| APP_PORT="${APP_PORT:-7860}" |
| BOOTSTRAP_DIR="/app/bootstrap" |
|
|
| |
| if [[ -n "${OPENCODE_PASSWORD:-}" ]]; then |
| export OPENCODE_SERVER_PASSWORD="${OPENCODE_PASSWORD}" |
| fi |
|
|
| |
| 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" |
|
|
| |
| 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_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" |
|
|
| |
| |
| |
| |
| mkdir -p /chat /project /other |
| log "Created root-level directories for web UI compatibility: /chat, /project, /other" |
|
|
| |
| rm -f /workspace |
| ln -sfn "${WORKSPACE_ROOT}" /workspace |
| log "Created workspace symlink: /workspace -> ${WORKSPACE_ROOT}" |
|
|
| |
| |
| 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" |
|
|
| |
| 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 |
|
|
| |
| 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}" |
|
|
| |
| |
| |
| sleep 2 |
| log "Filesystem synchronization complete, starting web UI..." |
|
|
| |
| |
| cd "${WORKSPACE_ROOT}" |
| exec opencode web --hostname 0.0.0.0 --port "${APP_PORT}" |