sft0farid commited on
Commit
903162d
·
verified ·
1 Parent(s): c8493f0

Delete Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +0 -219
Dockerfile DELETED
@@ -1,219 +0,0 @@
1
- # syntax=docker/dockerfile:1.4
2
-
3
- # ==================== STAGE 1: Source images ====================
4
- FROM calciumion/new-api:latest AS newapi-source
5
- FROM justlikemaki/aiclient-2-api:latest AS aiclient-source
6
- FROM ghcr.io/quorinex/kiro-go:latest AS kirogo-source
7
-
8
- # ==================== STAGE 2: Final image ====================
9
- FROM python:3.11-slim-bookworm
10
-
11
- ENV DEBIAN_FRONTEND=noninteractive \
12
- PYTHONUNBUFFERED=1 \
13
- NODE_ENV=production
14
-
15
- # 1. System deps: Node.js 20, supervisor, sqlite3, jq, curl
16
- RUN apt-get update && apt-get install -y --no-install-recommends \
17
- curl ca-certificates gnupg supervisor sqlite3 jq \
18
- && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
19
- && apt-get install -y --no-install-recommends nodejs \
20
- && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
21
-
22
- # 2. Install zrok2 (latest release)
23
- RUN ARCH=$(dpkg --print-architecture) && \
24
- case "$ARCH" in \
25
- amd64) GOARCH=amd64 ;; \
26
- arm64) GOARCH=arm64 ;; \
27
- *) echo "Unsupported arch: $ARCH"; exit 1 ;; \
28
- esac && \
29
- VERSION=$(curl -sSf https://api.github.com/repos/openziti/zrok/releases/latest | grep '"tag_name"' | cut -d'"' -f4) && \
30
- echo "Installing zrok ${VERSION} ${GOARCH}" && \
31
- curl -sSfL "https://github.com/openziti/zrok/releases/download/${VERSION}/zrok_${VERSION#v}_linux_${GOARCH}.tar.gz" | tar -xz -C /tmp && \
32
- install -m 755 /tmp/zrok2 /usr/local/bin/zrok2 && \
33
- rm -rf /tmp/zrok*
34
-
35
- # 3. Copy binaries from sources
36
- COPY --from=newapi-source /new-api /usr/local/bin/new-api
37
- COPY --from=kirogo-source /app/kiro-go /usr/local/bin/kiro-go
38
- COPY --from=aiclient-source /app /app/aiclient2api
39
- RUN chmod +x /usr/local/bin/new-api /usr/local/bin/kiro-go
40
-
41
- # 4. Create user (HF Spaces runs as uid 1000)
42
- RUN useradd -m -u 1000 user 2>/dev/null || true
43
-
44
- # 5. Prepare dirs
45
- RUN mkdir -p /app /var/log/supervisor /tmp/supervisor /data && \
46
- chown -R user:user /app /var/log/supervisor /tmp/supervisor /data
47
-
48
- # 6. Supervisord config
49
- RUN echo '[supervisord]' > /app/supervisord.conf \
50
- && echo 'nodaemon=true' >> /app/supervisord.conf \
51
- && echo 'logfile=/tmp/supervisor/supervisord.log' >> /app/supervisord.conf \
52
- && echo 'logfile_maxbytes=0' >> /app/supervisord.conf \
53
- && echo 'pidfile=/tmp/supervisor/supervisord.pid' >> /app/supervisord.conf \
54
- && echo '' >> /app/supervisord.conf \
55
- && echo '[program:newapi]' >> /app/supervisord.conf \
56
- && echo 'command=/usr/local/bin/new-api --port 7860' >> /app/supervisord.conf \
57
- && echo 'directory=/data/newapi' >> /app/supervisord.conf \
58
- && echo 'environment=HOME="/data/newapi",TZ="UTC"' >> /app/supervisord.conf \
59
- && echo 'user=user' >> /app/supervisord.conf \
60
- && echo 'priority=10' >> /app/supervisord.conf \
61
- && echo 'autostart=true' >> /app/supervisord.conf \
62
- && echo 'autorestart=true' >> /app/supervisord.conf \
63
- && echo 'stopasgroup=true' >> /app/supervisord.conf \
64
- && echo 'killasgroup=true' >> /app/supervisord.conf \
65
- && echo 'stdout_logfile=/dev/stdout' >> /app/supervisord.conf \
66
- && echo 'stdout_logfile_maxbytes=0' >> /app/supervisord.conf \
67
- && echo 'stderr_logfile=/dev/stderr' >> /app/supervisord.conf \
68
- && echo 'stderr_logfile_maxbytes=0' >> /app/supervisord.conf \
69
- && echo '' >> /app/supervisord.conf \
70
- && echo '[program:aiclient]' >> /app/supervisord.conf \
71
- && echo 'command=/usr/bin/node /app/aiclient2api/src/core/master.js' >> /app/supervisord.conf \
72
- && echo 'environment=PORT=3000' >> /app/supervisord.conf \
73
- && echo 'directory=/app/aiclient2api' >> /app/supervisord.conf \
74
- && echo 'user=user' >> /app/supervisord.conf \
75
- && echo 'priority=10' >> /app/supervisord.conf \
76
- && echo 'autostart=true' >> /app/supervisord.conf \
77
- && echo 'autorestart=true' >> /app/supervisord.conf \
78
- && echo 'stopasgroup=true' >> /app/supervisord.conf \
79
- && echo 'killasgroup=true' >> /app/supervisord.conf \
80
- && echo 'stdout_logfile=/dev/stdout' >> /app/supervisord.conf \
81
- && echo 'stdout_logfile_maxbytes=0' >> /app/supervisord.conf \
82
- && echo 'stderr_logfile=/dev/stderr' >> /app/supervisord.conf \
83
- && echo 'stderr_logfile_maxbytes=0' >> /app/supervisord.conf \
84
- && echo '' >> /app/supervisord.conf \
85
- && echo '[program:kirogo]' >> /app/supervisord.conf \
86
- && echo 'command=/usr/local/bin/kiro-go' >> /app/supervisord.conf \
87
- && echo 'environment=PORT=8080' >> /app/supervisord.conf \
88
- && echo 'directory=/data/kirogo' >> /app/supervisord.conf \
89
- && echo 'user=user' >> /app/supervisord.conf \
90
- && echo 'priority=20' >> /app/supervisord.conf \
91
- && echo 'autostart=true' >> /app/supervisord.conf \
92
- && echo 'autorestart=true' >> /app/supervisord.conf \
93
- && echo 'stopasgroup=true' >> /app/supervisord.conf \
94
- && echo 'killasgroup=true' >> /app/supervisord.conf \
95
- && echo 'stdout_logfile=/dev/stdout' >> /app/supervisord.conf \
96
- && echo 'stdout_logfile_maxbytes=0' >> /app/supervisord.conf \
97
- && echo 'stderr_logfile=/dev/stderr' >> /app/supervisord.conf \
98
- && echo 'stderr_logfile_maxbytes=0' >> /app/supervisord.conf \
99
- && echo '' >> /app/supervisord.conf \
100
- && echo '[program:zrok]' >> /app/supervisord.conf \
101
- && echo 'command=/app/start_zrok.sh' >> /app/supervisord.conf \
102
- && echo 'user=user' >> /app/supervisord.conf \
103
- && echo 'priority=30' >> /app/supervisord.conf \
104
- && echo 'autostart=true' >> /app/supervisord.conf \
105
- && echo 'autorestart=false' >> /app/supervisord.conf \
106
- && echo 'startsecs=2' >> /app/supervisord.conf \
107
- && echo 'stopasgroup=true' >> /app/supervisord.conf \
108
- && echo 'killasgroup=true' >> /app/supervisord.conf \
109
- && echo 'stdout_logfile=/dev/stdout' >> /app/supervisord.conf \
110
- && echo 'stdout_logfile_maxbytes=0' >> /app/supervisord.conf \
111
- && echo 'stderr_logfile=/dev/stderr' >> /app/supervisord.conf \
112
- && echo 'stderr_logfile_maxbytes=0' >> /app/supervisord.conf
113
-
114
- # 7. Zrok startup script
115
- RUN echo '#!/bin/bash' > /app/start_zrok.sh \
116
- && echo 'set -e' >> /app/start_zrok.sh \
117
- && echo '' >> /app/start_zrok.sh \
118
- && echo 'if [ -z "$ZROK_TOKEN" ]; then' >> /app/start_zrok.sh \
119
- && echo ' echo "[zrok] ZROK_TOKEN not set, skipping tunnel."' >> /app/start_zrok.sh \
120
- && echo ' sleep infinity' >> /app/start_zrok.sh \
121
- && echo ' exit 0' >> /app/start_zrok.sh \
122
- && echo 'fi' >> /app/start_zrok.sh \
123
- && echo '' >> /app/start_zrok.sh \
124
- && echo 'export HOME=/data/zrok-home' >> /app/start_zrok.sh \
125
- && echo 'trap '"'"'echo "[zrok] Shutting down..."; zrok2 disable 2>/dev/null || true; exit 0'"'"' SIGTERM SIGINT' >> /app/start_zrok.sh \
126
- && echo 'mkdir -p "$HOME"' >> /app/start_zrok.sh \
127
- && echo '' >> /app/start_zrok.sh \
128
- && echo 'export ZROK2_API_ENDPOINT=https://api-v2.zrok.io' >> /app/start_zrok.sh \
129
- && echo '' >> /app/start_zrok.sh \
130
- && echo 'if [ ! -f "$HOME/.zrok2/environment.json" ]; then' >> /app/start_zrok.sh \
131
- && echo ' echo "[zrok] Enabling environment..."' >> /app/start_zrok.sh \
132
- && echo ' mkdir -p "$HOME/.zrok2"' >> /app/start_zrok.sh \
133
- && echo ' if ! zrok2 enable "$ZROK_TOKEN" --headless; then' >> /app/start_zrok.sh \
134
- && echo ' echo "[zrok] FATAL: enable failed. Check your token."' >> /app/start_zrok.sh \
135
- && echo ' sleep infinity' >> /app/start_zrok.sh \
136
- && echo ' exit 1' >> /app/start_zrok.sh \
137
- && echo ' fi' >> /app/start_zrok.sh \
138
- && echo ' echo "[zrok] Checking environment.json was created..."' >> /app/start_zrok.sh \
139
- && echo ' ls -la "$HOME/.zrok2/" || true' >> /app/start_zrok.sh \
140
- && echo ' if [ ! -f "$HOME/.zrok2/environment.json" ]; then' >> /app/start_zrok.sh \
141
- && echo ' echo "[zrok] FATAL: environment.json not created after enable!"' >> /app/start_zrok.sh \
142
- && echo ' sleep infinity' >> /app/start_zrok.sh \
143
- && echo ' exit 1' >> /app/start_zrok.sh \
144
- && echo ' fi' >> /app/start_zrok.sh \
145
- && echo ' echo "[zrok] Environment enabled successfully."' >> /app/start_zrok.sh \
146
- && echo 'else' >> /app/start_zrok.sh \
147
- && echo ' echo "[zrok] Reusing persisted environment."' >> /app/start_zrok.sh \
148
- && echo ' echo "[zrok] environment.json exists, proceeding..."' >> /app/start_zrok.sh \
149
- && echo 'fi' >> /app/start_zrok.sh \
150
- && echo '' >> /app/start_zrok.sh \
151
- && echo 'NAME_FILE="$HOME/.zrok2/share_name"' >> /app/start_zrok.sh \
152
- && echo 'if [ -n "$ZROK_SHARE_NAME" ]; then' >> /app/start_zrok.sh \
153
- && echo ' SHARE_NAME="$ZROK_SHARE_NAME"' >> /app/start_zrok.sh \
154
- && echo 'elif [ -f "$NAME_FILE" ]; then' >> /app/start_zrok.sh \
155
- && echo ' SHARE_NAME=$(cat "$NAME_FILE")' >> /app/start_zrok.sh \
156
- && echo 'else' >> /app/start_zrok.sh \
157
- && echo ' SHARE_NAME=$(cat /proc/sys/kernel/random/uuid | tr -d - | head -c 12)' >> /app/start_zrok.sh \
158
- && echo 'fi' >> /app/start_zrok.sh \
159
- && echo 'echo "$SHARE_NAME" > "$NAME_FILE"' >> /app/start_zrok.sh \
160
- && echo '' >> /app/start_zrok.sh \
161
- && echo 'echo "[zrok] Reserving name: $SHARE_NAME ..."' >> /app/start_zrok.sh \
162
- && echo 'zrok2 create name -n public "$SHARE_NAME" 2>/dev/null || echo "[zrok] Name already reserved."' >> /app/start_zrok.sh \
163
- && echo '' >> /app/start_zrok.sh \
164
- && echo 'echo "[zrok] ==========================================="' >> /app/start_zrok.sh \
165
- && echo 'echo "[zrok] STATIC URL: https://${SHARE_NAME}.shares.zrok.io"' >> /app/start_zrok.sh \
166
- && echo 'echo "[zrok] ==========================================="' >> /app/start_zrok.sh \
167
- && echo '' >> /app/start_zrok.sh \
168
- && echo 'echo "[zrok] Waiting for New API to be ready..."' >> /app/start_zrok.sh \
169
- && echo 'for i in $(seq 1 30); do' >> /app/start_zrok.sh \
170
- && echo ' curl -sf http://localhost:7860/api/status > /dev/null 2>&1 && break' >> /app/start_zrok.sh \
171
- && echo ' sleep 2' >> /app/start_zrok.sh \
172
- && echo 'done' >> /app/start_zrok.sh \
173
- && echo 'echo "[zrok] New API is ready, starting tunnel..."' >> /app/start_zrok.sh \
174
- && echo '' >> /app/start_zrok.sh \
175
- && echo 'echo "[zrok] Force-cleaning any existing shares for: $SHARE_NAME"' >> /app/start_zrok.sh \
176
- && echo 'for SHARE_TOKEN in $(zrok2 list shares 2>/dev/null | grep "$SHARE_NAME" | awk '"'"'{print $1}'"'"'); do' >> /app/start_zrok.sh \
177
- && echo ' echo "[zrok] Deleting share token: $SHARE_TOKEN"' >> /app/start_zrok.sh \
178
- && echo ' zrok2 delete share "$SHARE_TOKEN" 2>/dev/null || true' >> /app/start_zrok.sh \
179
- && echo 'done' >> /app/start_zrok.sh \
180
- && echo 'sleep 5' >> /app/start_zrok.sh \
181
- && echo '' >> /app/start_zrok.sh \
182
- && echo 'while true; do' >> /app/start_zrok.sh \
183
- && echo ' echo "[zrok] Starting share on localhost:7860 ..."' >> /app/start_zrok.sh \
184
- && echo ' zrok2 share public http://localhost:7860 -n "public:${SHARE_NAME}" --headless' >> /app/start_zrok.sh \
185
- && echo ' EXIT_CODE=$?' >> /app/start_zrok.sh \
186
- && echo ' if [ $EXIT_CODE -eq 0 ]; then' >> /app/start_zrok.sh \
187
- && echo ' echo "[zrok] Share ended cleanly, restarting in 5s..."' >> /app/start_zrok.sh \
188
- && echo ' sleep 5' >> /app/start_zrok.sh \
189
- && echo ' else' >> /app/start_zrok.sh \
190
- && echo ' echo "[zrok] Share crashed (exit $EXIT_CODE), retrying in 30s..."' >> /app/start_zrok.sh \
191
- && echo ' sleep 30' >> /app/start_zrok.sh \
192
- && echo ' fi' >> /app/start_zrok.sh \
193
- && echo 'done' >> /app/start_zrok.sh
194
- RUN chmod +x /app/start_zrok.sh
195
-
196
- # 8. Entrypoint
197
- RUN echo '#!/bin/bash' > /app/start.sh \
198
- && echo 'set -e' >> /app/start.sh \
199
- && echo '' >> /app/start.sh \
200
- && echo 'mkdir -p /data/aiclient2api/configs /data/kirogo /data/newapi /data/zrok-home' >> /app/start.sh \
201
- && echo 'chown -R user:user /data' >> /app/start.sh \
202
- && echo '' >> /app/start.sh \
203
- && echo 'if [ ! -L /app/aiclient2api/configs ] && [ ! -d /app/aiclient2api/configs ]; then' >> /app/start.sh \
204
- && echo ' ln -s /data/aiclient2api/configs /app/aiclient2api/configs' >> /app/start.sh \
205
- && echo 'fi' >> /app/start.sh \
206
- && echo '' >> /app/start.sh \
207
- && echo 'if [ ! -L /app/data ] && [ ! -d /app/data ]; then' >> /app/start.sh \
208
- && echo ' ln -s /data/kirogo /app/data' >> /app/start.sh \
209
- && echo 'fi' >> /app/start.sh \
210
- && echo '' >> /app/start.sh \
211
- && echo 'mkdir -p /tmp/supervisor && chmod 777 /tmp/supervisor' >> /app/start.sh \
212
- && echo '' >> /app/start.sh \
213
- && echo 'echo "[start] Starting supervisord..."' >> /app/start.sh \
214
- && echo 'exec supervisord -c /app/supervisord.conf' >> /app/start.sh
215
- RUN chmod +x /app/start.sh
216
-
217
- EXPOSE 7860
218
-
219
- CMD ["/app/start.sh"]