ayoub5550 commited on
Commit
cef2fa1
Β·
verified Β·
1 Parent(s): 7303c5e

Upload start.sh with huggingface_hub

Browse files
Files changed (1) hide show
  1. start.sh +125 -0
start.sh ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/bin/bash
2
+ set -e
3
+
4
+ echo "=== Claude Code Real β€” Starting ==="
5
+ echo "Model backend: ${MODEL:-z-ai/glm-5.1}"
6
+
7
+ # ── Pre-configure Claude Code ──
8
+ mkdir -p /home/user/.claude
9
+ cat > /home/user/.claude/settings.json << 'JSON'
10
+ {
11
+ "permissions": {
12
+ "allow": ["Bash(*)","Read(*)","Write(*)","Edit(*)","Computer(*)","WebFetch(*)","mcp__*"],
13
+ "deny": []
14
+ },
15
+ "hasCompletedOnboarding": true,
16
+ "hasAcknowledgedDisclaimer": true
17
+ }
18
+ JSON
19
+ touch /home/user/.claude/.terms-accepted
20
+
21
+ # ── Create .bashrc with Claude env for terminal users ──
22
+ cat > /home/user/.bashrc << 'BASHRC'
23
+ export ANTHROPIC_BASE_URL="http://localhost:4000"
24
+ export ANTHROPIC_API_KEY="sk-ant-proxy-key-for-local-translation"
25
+ export ANTHROPIC_MODEL="claude-sonnet-4-20250514"
26
+ export DISABLE_PROMPT_CACHING="true"
27
+ export CLAUDE_CODE_SKIP_OOBE="1"
28
+ export TERM="xterm-256color"
29
+ export PATH="/home/user/.npm-global/bin:/home/user/.local/bin:$PATH"
30
+
31
+ echo ""
32
+ echo "πŸ€– Claude Code Terminal β€” Ready!"
33
+ echo " Model: ${MODEL:-z-ai/glm-5.1} via NVIDIA API"
34
+ echo " Run: claude"
35
+ echo " Or: claude -p 'your prompt' --dangerously-skip-permissions"
36
+ echo ""
37
+ cd /home/user/workspace
38
+ BASHRC
39
+
40
+ # ── Start Anthropicβ†’OpenAI proxy on port 4000 ──
41
+ echo "Starting proxy on :4000..."
42
+ python3 /home/user/proxy.py &
43
+ PROXY_PID=$!
44
+
45
+ for i in $(seq 1 20); do
46
+ if curl -s http://localhost:4000/health > /dev/null 2>&1; then
47
+ echo "βœ… Proxy ready!"
48
+ break
49
+ fi
50
+ sleep 1
51
+ done
52
+
53
+ curl -s http://localhost:4000/health | python3 -m json.tool 2>/dev/null || true
54
+ echo "Claude Code: $(claude --version 2>/dev/null || echo 'checking...')"
55
+
56
+ # ── Quick test (don't block startup) ──
57
+ echo "Testing Claude Code (background)..."
58
+ export ANTHROPIC_BASE_URL="http://localhost:4000"
59
+ export ANTHROPIC_API_KEY="sk-ant-proxy-key-for-local-translation"
60
+ export ANTHROPIC_MODEL="claude-sonnet-4-20250514"
61
+ export DISABLE_PROMPT_CACHING="true"
62
+ export CLAUDE_CODE_SKIP_OOBE="1"
63
+
64
+ timeout 30 claude -p "Say hi" --dangerously-skip-permissions --output-format text 2>&1 | head -5 &
65
+
66
+ # ── Start ttyd web terminal on port 7862 (password protected) ──
67
+ echo "Starting web terminal on :7862..."
68
+ TERM_PASSWORD="${TERMINAL_PASSWORD:-2004}"
69
+ ttyd -p 7862 -c "ayoub:${TERM_PASSWORD}" \
70
+ -t fontSize=14 \
71
+ -t 'theme={"background":"#1a1b26","foreground":"#c0caf5"}' \
72
+ bash --login &
73
+ TTYD_PID=$!
74
+ echo " ttyd PID: $TTYD_PID"
75
+
76
+ # ── Start nginx on port 7860 ──
77
+ echo "Starting nginx on :7860..."
78
+ nginx -c /home/user/nginx.conf -g 'daemon off;' &
79
+ NGINX_PID=$!
80
+ sleep 1
81
+
82
+ # Check if nginx started OK
83
+ if kill -0 $NGINX_PID 2>/dev/null; then
84
+ echo " βœ… nginx PID: $NGINX_PID"
85
+ else
86
+ echo " ⚠️ nginx failed! Falling back to Flask on :7860"
87
+ NGINX_PID=""
88
+ # If nginx fails, start Flask directly on 7860
89
+ export FLASK_PORT=7860
90
+ fi
91
+
92
+ # ── Start Flask + Telegram bot ──
93
+ FLASK_PORT=${FLASK_PORT:-7861}
94
+ echo "Starting Flask+Bot on :${FLASK_PORT}..."
95
+ FLASK_PORT=$FLASK_PORT python3 /home/user/app.py &
96
+ APP_PID=$!
97
+
98
+ echo ""
99
+ echo "=== All services started ==="
100
+ echo " Proxy: PID $PROXY_PID (:4000)"
101
+ echo " App: PID $APP_PID (:$FLASK_PORT)"
102
+ echo " Terminal: PID $TTYD_PID (:7862)"
103
+ [ -n "$NGINX_PID" ] && echo " Nginx: PID $NGINX_PID (:7860)"
104
+ echo ""
105
+ echo " 🌐 Web Terminal: https://ayoub5550-claudecode.hf.space/terminal/"
106
+ echo " πŸ’š Health: https://ayoub5550-claudecode.hf.space/health"
107
+ echo ""
108
+
109
+ # ── Keep alive: only die if the main app (bot) dies ──
110
+ # Don't use wait -n, only wait for the bot process
111
+ while true; do
112
+ if ! kill -0 $APP_PID 2>/dev/null; then
113
+ echo "❌ App process died! Restarting..."
114
+ FLASK_PORT=$FLASK_PORT python3 /home/user/app.py &
115
+ APP_PID=$!
116
+ sleep 5
117
+ fi
118
+ if ! kill -0 $PROXY_PID 2>/dev/null; then
119
+ echo "❌ Proxy died! Restarting..."
120
+ python3 /home/user/proxy.py &
121
+ PROXY_PID=$!
122
+ sleep 5
123
+ fi
124
+ sleep 10
125
+ done