sft0farid commited on
Commit
8d2093c
·
verified ·
1 Parent(s): e86c188

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +65 -53
Dockerfile CHANGED
@@ -4,26 +4,26 @@ FROM calciumion/new-api:latest AS newapi-source
4
  FROM justlikemaki/aiclient-2-api:latest AS aiclient-source
5
  FROM ghcr.io/quorinex/kiro-go:latest AS kirogo-source
6
 
 
7
  FROM python:3.11-slim
8
 
9
  # 1. Системные зависимости + Node.js
10
- RUN apt-get update && apt-get install -y curl jq gnupg supervisor \
11
  && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
12
  && apt-get install -y nodejs \
13
  && rm -rf /var/lib/apt/lists/*
14
 
15
- # 2. zrok v1.1.11
16
  RUN ARCH=$(dpkg --print-architecture) \
17
  && case "$ARCH" in \
18
  amd64) GOARCH=amd64 ;; \
19
  arm64) GOARCH=arm64 ;; \
20
- armhf) GOARCH=armv7 ;; \
21
  *) echo "Unsupported arch: $ARCH"; exit 1 ;; \
22
  esac \
23
- && curl -fsSL \
24
- "https://github.com/openziti/zrok/releases/download/v1.1.11/zrok_1.1.11_linux_${GOARCH}.tar.gz" \
25
- | tar -xz -C /usr/local/bin zrok \
26
- && chmod +x /usr/local/bin/zrok
27
 
28
  # 3. Копируем из готовых образов
29
  COPY --from=newapi-source /new-api /usr/local/bin/new-api
@@ -50,6 +50,7 @@ RUN echo '[supervisord]'
50
  && echo 'logfile=/dev/stdout' >> /data/supervisor/conf.d/supervisord.conf \
51
  && echo 'logfile_maxbytes=0' >> /data/supervisor/conf.d/supervisord.conf \
52
  && echo 'pidfile=/data/supervisor/run/supervisord.pid' >> /data/supervisor/conf.d/supervisord.conf \
 
53
  && echo '' >> /data/supervisor/conf.d/supervisord.conf \
54
  && echo '[program:newapi]' >> /data/supervisor/conf.d/supervisord.conf \
55
  && echo 'command=new-api --port 7860 --log-dir /data/newapi/logs' >> /data/supervisor/conf.d/supervisord.conf \
@@ -95,55 +96,66 @@ RUN echo '[supervisord]'
95
  && echo 'stderr_logfile=/dev/stderr' >> /data/supervisor/conf.d/supervisord.conf \
96
  && echo 'stderr_logfile_maxbytes=0' >> /data/supervisor/conf.d/supervisord.conf
97
 
98
- # 7. Скрипт zrok
99
- RUN echo '#!/bin/bash' > /app/start_zrok.sh \
100
- && echo 'if [ -z "$ZROK_TOKEN" ]; then' >> /app/start_zrok.sh \
101
- && echo ' echo "ZROK_TOKEN not set, skipping zrok"' >> /app/start_zrok.sh \
102
- && echo ' sleep infinity' >> /app/start_zrok.sh \
103
- && echo ' exit 0' >> /app/start_zrok.sh \
104
- && echo 'fi' >> /app/start_zrok.sh \
105
- && echo 'export HOME=/data/zrok-home' >> /app/start_zrok.sh \
106
- && echo 'mkdir -p "$HOME"' >> /app/start_zrok.sh \
107
- && echo 'ZROK_API="${ZROK_API_ENDPOINT:-https://api-v1.zrok.io}"' >> /app/start_zrok.sh \
108
- && echo 'if [ ! -f "$HOME/.zrok/environment.json" ]; then' >> /app/start_zrok.sh \
109
- && echo ' zrok config set apiEndpoint "$ZROK_API"' >> /app/start_zrok.sh \
110
- && echo ' echo "Enabling zrok..."' >> /app/start_zrok.sh \
111
- && echo ' zrok enable "$ZROK_TOKEN" --headless' >> /app/start_zrok.sh \
112
- && echo ' if [ $? -ne 0 ]; then echo "zrok enable failed"; sleep infinity; exit 1; fi' >> /app/start_zrok.sh \
113
- && echo 'fi' >> /app/start_zrok.sh \
114
- && echo 'SHARE_FILE="$HOME/.zrok/reserved_share"' >> /app/start_zrok.sh \
115
- && echo 'if [ -n "$ZROK_SHARE_NAME" ]; then' >> /app/start_zrok.sh \
116
- && echo ' SHARE_TOKEN="$ZROK_SHARE_NAME"' >> /app/start_zrok.sh \
117
- && echo 'elif [ -f "$SHARE_FILE" ]; then' >> /app/start_zrok.sh \
118
- && echo ' SHARE_TOKEN=$(cat "$SHARE_FILE")' >> /app/start_zrok.sh \
119
- && echo ' echo "Using existing reserved share: $SHARE_TOKEN"' >> /app/start_zrok.sh \
120
- && echo 'else' >> /app/start_zrok.sh \
121
- && echo ' echo "Creating new reserved share..."' >> /app/start_zrok.sh \
122
- && echo ' SHARE_TOKEN=$(zrok reserve public http://localhost:7860 2>/dev/null | grep -oP "token is '"'"'\K[a-z0-9]+")' >> /app/start_zrok.sh \
123
- && echo ' if [ -z "$SHARE_TOKEN" ]; then echo "Failed to create reserved share"; sleep infinity; exit 1; fi' >> /app/start_zrok.sh \
124
- && echo ' echo "$SHARE_TOKEN" > "$SHARE_FILE"' >> /app/start_zrok.sh \
125
- && echo ' echo "Reserved share created: $SHARE_TOKEN"' >> /app/start_zrok.sh \
126
- && echo ' echo "URL: https://${SHARE_TOKEN}.share.zrok.io"' >> /app/start_zrok.sh \
127
- && echo 'fi' >> /app/start_zrok.sh \
128
- && echo 'echo "Starting zrok share reserved: $SHARE_TOKEN"' >> /app/start_zrok.sh \
129
- && echo 'exec zrok share reserved "$SHARE_TOKEN" --headless' >> /app/start_zrok.sh \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
130
  && chmod +x /app/start_zrok.sh
131
 
132
  # 8. Entrypoint
133
- RUN echo '#!/bin/bash' > /app/start.sh \
134
- && echo 'if [ ! -L /app/aiclient2api/configs ]; then' >> /app/start.sh \
135
- && echo ' rm -rf /app/aiclient2api/configs' >> /app/start.sh \
136
- && echo ' ln -s /data/aiclient2api/configs /app/aiclient2api/configs' >> /app/start.sh \
137
- && echo 'fi' >> /app/start.sh \
138
- && echo 'SHARE_FILE="/data/zrok-home/.zrok/reserved_share"' >> /app/start.sh \
139
- && echo 'if [ -f "$SHARE_FILE" ]; then' >> /app/start.sh \
140
- && echo ' TOKEN=$(cat "$SHARE_FILE")' >> /app/start.sh \
141
- && echo ' if ! echo "$TOKEN" | grep -qP "^[a-z0-9]{12}$"; then' >> /app/start.sh \
142
- && echo ' echo "Removing corrupt reserved_share file"' >> /app/start.sh \
143
- && echo ' rm -f "$SHARE_FILE"' >> /app/start.sh \
144
- && echo ' fi' >> /app/start.sh \
145
- && echo 'fi' >> /app/start.sh \
146
- && echo 'exec /usr/bin/supervisord -c /data/supervisor/conf.d/supervisord.conf' >> /app/start.sh \
147
  && chmod +x /app/start.sh
148
 
149
  EXPOSE 7860
 
4
  FROM justlikemaki/aiclient-2-api:latest AS aiclient-source
5
  FROM ghcr.io/quorinex/kiro-go:latest AS kirogo-source
6
 
7
+ # ─────────────────────────────────────────────
8
  FROM python:3.11-slim
9
 
10
  # 1. Системные зависимости + Node.js
11
+ RUN apt-get update && apt-get install -y curl gnupg supervisor \
12
  && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
13
  && apt-get install -y nodejs \
14
  && rm -rf /var/lib/apt/lists/*
15
 
16
+ # 2. zrok v2 — latest
17
  RUN ARCH=$(dpkg --print-architecture) \
18
  && case "$ARCH" in \
19
  amd64) GOARCH=amd64 ;; \
20
  arm64) GOARCH=arm64 ;; \
 
21
  *) echo "Unsupported arch: $ARCH"; exit 1 ;; \
22
  esac \
23
+ && VERSION=$(curl -fsSL https://api.github.com/repos/openziti/zrok/releases/latest | grep '"tag_name"' | cut -d'"' -f4 | tr -d v) \
24
+ && curl -fsSL "https://github.com/openziti/zrok/releases/download/v${VERSION}/zrok_${VERSION}_linux_${GOARCH}.tar.gz" \
25
+ | tar -xz -C /usr/local/bin zrok2 \
26
+ && chmod +x /usr/local/bin/zrok2
27
 
28
  # 3. Копируем из готовых образов
29
  COPY --from=newapi-source /new-api /usr/local/bin/new-api
 
50
  && echo 'logfile=/dev/stdout' >> /data/supervisor/conf.d/supervisord.conf \
51
  && echo 'logfile_maxbytes=0' >> /data/supervisor/conf.d/supervisord.conf \
52
  && echo 'pidfile=/data/supervisor/run/supervisord.pid' >> /data/supervisor/conf.d/supervisord.conf \
53
+ && echo 'user=root' >> /data/supervisor/conf.d/supervisord.conf \
54
  && echo '' >> /data/supervisor/conf.d/supervisord.conf \
55
  && echo '[program:newapi]' >> /data/supervisor/conf.d/supervisord.conf \
56
  && echo 'command=new-api --port 7860 --log-dir /data/newapi/logs' >> /data/supervisor/conf.d/supervisord.conf \
 
96
  && echo 'stderr_logfile=/dev/stderr' >> /data/supervisor/conf.d/supervisord.conf \
97
  && echo 'stderr_logfile_maxbytes=0' >> /data/supervisor/conf.d/supervisord.conf
98
 
99
+ # 7. Скрипт zrok v2
100
+ # Логика:
101
+ # - ZROK2_TOKEN обязателен
102
+ # - ZROK2_SHARE_NAME опционален — если не задан, имя генерируется и сохраняется в /data/zrok-home/share_name
103
+ # - environment.json проверяется — enable пропускается при повторном старте
104
+ # - имя создаётся один раз и сохраняется, при повторных стартах переиспользуется
105
+ RUN echo '#!/bin/bash' > /app/start_zrok.sh \
106
+ && echo 'set -e' >> /app/start_zrok.sh \
107
+ && echo '' >> /app/start_zrok.sh \
108
+ && echo 'if [ -z "$ZROK2_TOKEN" ]; then' >> /app/start_zrok.sh \
109
+ && echo ' echo "[zrok] ZROK2_TOKEN not set, skipping zrok"' >> /app/start_zrok.sh \
110
+ && echo ' sleep infinity' >> /app/start_zrok.sh \
111
+ && echo ' exit 0' >> /app/start_zrok.sh \
112
+ && echo 'fi' >> /app/start_zrok.sh \
113
+ && echo '' >> /app/start_zrok.sh \
114
+ && echo 'export HOME=/data/zrok-home' >> /app/start_zrok.sh \
115
+ && echo 'mkdir -p "$HOME"' >> /app/start_zrok.sh \
116
+ && echo 'SHARE_NAME_FILE="$HOME/share_name"' >> /app/start_zrok.sh \
117
+ && echo '' >> /app/start_zrok.sh \
118
+ && echo '# Шаг 1: enable — только если ещё не активировано' >> /app/start_zrok.sh \
119
+ && echo 'if [ ! -f "$HOME/.zrok2/environment.json" ]; then' >> /app/start_zrok.sh \
120
+ && echo ' echo "[zrok] Enabling zrok2 environment..."' >> /app/start_zrok.sh \
121
+ && echo ' zrok2 enable "$ZROK2_TOKEN" --headless' >> /app/start_zrok.sh \
122
+ && echo ' echo "[zrok] Environment enabled successfully"' >> /app/start_zrok.sh \
123
+ && echo 'else' >> /app/start_zrok.sh \
124
+ && echo ' echo "[zrok] Environment already enabled, skipping"' >> /app/start_zrok.sh \
125
+ && echo 'fi' >> /app/start_zrok.sh \
126
+ && echo '' >> /app/start_zrok.sh \
127
+ && echo '# Шаг 2: определяем имя шара' >> /app/start_zrok.sh \
128
+ && echo 'if [ -n "$ZROK2_SHARE_NAME" ]; then' >> /app/start_zrok.sh \
129
+ && echo ' SHARE_NAME="$ZROK2_SHARE_NAME"' >> /app/start_zrok.sh \
130
+ && echo ' echo "[zrok] Using share name from env: $SHARE_NAME"' >> /app/start_zrok.sh \
131
+ && echo 'elif [ -f "$SHARE_NAME_FILE" ]; then' >> /app/start_zrok.sh \
132
+ && echo ' SHARE_NAME=$(cat "$SHARE_NAME_FILE")' >> /app/start_zrok.sh \
133
+ && echo ' echo "[zrok] Using saved share name: $SHARE_NAME"' >> /app/start_zrok.sh \
134
+ && echo 'else' >> /app/start_zrok.sh \
135
+ && echo ' echo "[zrok] Creating new reserved name..."' >> /app/start_zrok.sh \
136
+ && echo ' SHARE_NAME=$(zrok2 create name 2>&1 | grep -oE "[a-z0-9]{4,32}" | tail -1)' >> /app/start_zrok.sh \
137
+ && echo ' if [ -z "$SHARE_NAME" ]; then' >> /app/start_zrok.sh \
138
+ && echo ' echo "[zrok] Failed to create name, falling back to ephemeral share"' >> /app/start_zrok.sh \
139
+ && echo ' exec zrok2 share public http://localhost:7860 --headless' >> /app/start_zrok.sh \
140
+ && echo ' fi' >> /app/start_zrok.sh \
141
+ && echo ' zrok2 modify name -n public "$SHARE_NAME" -r' >> /app/start_zrok.sh \
142
+ && echo ' echo "$SHARE_NAME" > "$SHARE_NAME_FILE"' >> /app/start_zrok.sh \
143
+ && echo ' echo "[zrok] Reserved name created: $SHARE_NAME"' >> /app/start_zrok.sh \
144
+ && echo ' echo "[zrok] URL: https://${SHARE_NAME}.shares.zrok.io"' >> /app/start_zrok.sh \
145
+ && echo 'fi' >> /app/start_zrok.sh \
146
+ && echo '' >> /app/start_zrok.sh \
147
+ && echo '# Шаг 3: запуск шара' >> /app/start_zrok.sh \
148
+ && echo 'echo "[zrok] Starting share: https://${SHARE_NAME}.shares.zrok.io"' >> /app/start_zrok.sh \
149
+ && echo 'exec zrok2 share public http://localhost:7860 -n "public:${SHARE_NAME}" --headless' >> /app/start_zrok.sh \
150
  && chmod +x /app/start_zrok.sh
151
 
152
  # 8. Entrypoint
153
+ RUN echo '#!/bin/bash' > /app/start.sh \
154
+ && echo 'if [ ! -L /app/aiclient2api/configs ]; then' >> /app/start.sh \
155
+ && echo ' rm -rf /app/aiclient2api/configs' >> /app/start.sh \
156
+ && echo ' ln -s /data/aiclient2api/configs /app/aiclient2api/configs' >> /app/start.sh \
157
+ && echo 'fi' >> /app/start.sh \
158
+ && echo 'exec /usr/bin/supervisord -c /data/supervisor/conf.d/supervisord.conf' >> /app/start.sh \
 
 
 
 
 
 
 
 
159
  && chmod +x /app/start.sh
160
 
161
  EXPOSE 7860