vscode / start.sh
abcd118q's picture
Update start.sh
d85f0a5 verified
#!/bin/bash
set -euo pipefail
LOG() { echo "[$(date '+%H:%M:%S')] $*"; }
if [ -d "/data" ]; then DATA_DIR="/data"
else DATA_DIR="/root/.local/codeserver-data"; LOG "⚠️ No /data bucket"; fi
WORKSPACE="${DATA_DIR}/workspace"
CS_USER_DATA="${DATA_DIR}/vscode-user-data"
CS_LOGS="${DATA_DIR}/logs"
CS_EXTENSIONS_DIR="/root/.local/share/code-server/extensions"
mkdir -p "$WORKSPACE" "$CS_USER_DATA/User" "$CS_LOGS"
mkdir -p /tmp/nginx-client-body /tmp/nginx-proxy
SETTINGS="$CS_USER_DATA/User/settings.json"
[ ! -f "$SETTINGS" ] && tee "$SETTINGS" > /dev/null << 'EOF'
{
"workbench.colorTheme": "Default Dark+",
"workbench.iconTheme": "vs-seti",
"editor.fontSize": 14, "editor.fontFamily": "monospace",
"editor.tabSize": 2, "editor.formatOnSave": true,
"editor.wordWrap": "on", "editor.minimap.enabled": true,
"editor.bracketPairColorization.enabled": true,
"terminal.integrated.fontSize": 13,
"terminal.integrated.scrollback": 5000,
"files.autoSave": "afterDelay", "files.autoSaveDelay": 1000,
"workbench.startupEditor": "none",
"git.autofetch": true, "extensions.autoUpdate": false,
"telemetry.telemetryLevel": "off", "update.mode": "none"
}
EOF
export PASSWORD="${PASSWORD:-codeserver123}"
mkdir -p /root/.config/code-server
cat > /root/.config/code-server/config.yaml << CONF
bind-addr: 0.0.0.0:8080
auth: password
password: ${PASSWORD}
cert: false
user-data-dir: ${CS_USER_DATA}
extensions-dir: ${CS_EXTENSIONS_DIR}
CONF
git config --global init.defaultBranch main
git config --global pull.rebase false
[ -n "${GIT_USER_NAME:-}" ] && git config --global user.name "$GIT_USER_NAME"
[ -n "${GIT_USER_EMAIL:-}" ] && git config --global user.email "$GIT_USER_EMAIL"
[ -n "${GITHUB_TOKEN:-}" ] && git config --global \
url."https://${GITHUB_TOKEN}@github.com/".insteadOf "https://github.com/"
[ -n "${HF_TOKEN:-}" ] && \
huggingface-cli login --token "$HF_TOKEN" --add-to-git-credential 2>/dev/null || true
# ── 1. code-server ───────────────────────────────────────────────
LOG "πŸ’» Starting code-server..."
code-server \
--config /root/.config/code-server/config.yaml \
--disable-telemetry --disable-update-check \
"$WORKSPACE" >> "$CS_LOGS/code-server.log" 2>&1 &
# Wait for code-server to be ready
LOG "⏳ Waiting for code-server..."
for i in $(seq 1 30); do
if curl -sf http://127.0.0.1:8080/ -o /dev/null 2>&1; then
LOG "βœ… code-server ready (${i}s)"; break
fi
sleep 1
done
# ── 2. Browser server ────────────────────────────────────────────
LOG "🌐 Starting stealth browser server..."
cd /app && python3 browser_server.py >> "$CS_LOGS/browser.log" 2>&1 &
# Playwright + Chromium launch takes time β€” wait properly
LOG "⏳ Waiting for browser server (Chromium init)..."
for i in $(seq 1 60); do
if curl -sf http://127.0.0.1:8888/ -o /dev/null 2>&1; then
LOG "βœ… Browser server ready (${i}s)"; break
fi
if [ $i -eq 60 ]; then
LOG "❌ Browser server failed to start. Last logs:"
tail -20 "$CS_LOGS/browser.log"
fi
sleep 1
done
# ── 3. nginx ─────────────────────────────────────────────────────
echo ""
echo "╔══════════════════════════════════════════════════════╗"
echo "β•‘ πŸš€ All services ready β•‘"
echo "╠══════════════════════════════════════════════════════╣"
echo "β•‘ Editor : https://<space>.hf.space/ β•‘"
echo "β•‘ Browser : https://<space>.hf.space/browser/ β•‘"
echo "β•‘ Password: $PASSWORD"
echo "β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•"
LOG "🌐 Starting nginx on :7860..."
exec nginx -g "daemon off;"