sft0farid commited on
Commit
56ffd78
·
verified ·
1 Parent(s): 18ea053

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +48 -37
Dockerfile CHANGED
@@ -1,14 +1,17 @@
1
  # syntax=docker/dockerfile:1.4
 
 
 
 
 
 
 
2
  FROM python:3.11-slim
3
 
4
  # 1. Системные зависимости + Node.js
5
- RUN apt-get update && apt-get install -y curl gnupg \
6
  && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
7
- && apt-get install -y \
8
- nodejs \
9
- supervisor \
10
- git \
11
- wget \
12
  && rm -rf /var/lib/apt/lists/*
13
 
14
  # 2. zrok
@@ -18,20 +21,27 @@ RUN wget -q https://github.com/openziti/zrok/releases/download/v0.4.42/zrok_0.4.
18
  && chmod +x /usr/local/bin/zrok \
19
  && rm zrok_0.4.42_linux_amd64.tar.gz
20
 
21
- # 3. Non-root пользователь (uid=1000 — требование HF Spaces)
 
 
 
 
22
  RUN useradd -m -u 1000 user
23
 
24
- # 4. Директории — pidfile теперь в /data, а не в /var/run
 
 
25
  RUN mkdir -p \
26
- /data/aiclient2api \
 
 
27
  /data/kirogo \
28
  /data/bifrost \
29
  /data/supervisor/conf.d \
30
- /data/supervisor/logs \
31
  /data/supervisor/run \
32
- && chown -R user:user /data
33
 
34
- # 5. Конфиги supervisor — через RUN echo, без heredoc
35
  RUN printf '[supervisord]\n\
36
  nodaemon=true\n\
37
  logfile=/dev/stdout\n\
@@ -39,7 +49,7 @@ logfile_maxbytes=0\n\
39
  pidfile=/data/supervisor/run/supervisord.pid\n\
40
  \n\
41
  [program:bifrost]\n\
42
- command=python /data/bifrost/main.py --port 7860 --host 0.0.0.0\n\
43
  directory=/data/bifrost\n\
44
  autostart=true\n\
45
  autorestart=true\n\
@@ -49,9 +59,9 @@ stderr_logfile=/dev/stderr\n\
49
  stderr_logfile_maxbytes=0\n\
50
  \n\
51
  [program:aiclient]\n\
52
- command=npm start\n\
53
- environment=PORT=8081\n\
54
- directory=/data/aiclient2api\n\
55
  autostart=true\n\
56
  autorestart=true\n\
57
  stdout_logfile=/dev/stdout\n\
@@ -60,7 +70,8 @@ stderr_logfile=/dev/stderr\n\
60
  stderr_logfile_maxbytes=0\n\
61
  \n\
62
  [program:kirogo]\n\
63
- command=/data/kirogo/kiro-go --port 8082\n\
 
64
  directory=/data/kirogo\n\
65
  autostart=true\n\
66
  autorestart=true\n\
@@ -70,7 +81,7 @@ stderr_logfile=/dev/stderr\n\
70
  stderr_logfile_maxbytes=0\n\
71
  \n\
72
  [program:zrok]\n\
73
- command=/data/start_zrok.sh\n\
74
  autostart=true\n\
75
  autorestart=true\n\
76
  stdout_logfile=/dev/stdout\n\
@@ -79,44 +90,44 @@ stderr_logfile=/dev/stderr\n\
79
  stderr_logfile_maxbytes=0\n\
80
  ' > /data/supervisor/conf.d/supervisord.conf
81
 
82
- # 6. Скрипт для zrok — отдельный файл, чтобы безопасно обработать отсутствие токена
83
  RUN printf '#!/bin/bash\n\
84
  if [ -z "$ZROK_TOKEN" ] || [ -z "$ZROK_SHARE_NAME" ]; then\n\
85
  echo "ZROK_TOKEN or ZROK_SHARE_NAME not set, skipping zrok"\n\
86
  sleep infinity\n\
87
- exit 0\n\
88
  fi\n\
89
  zrok enable "$ZROK_TOKEN" --headless 2>/dev/null || true\n\
90
  exec zrok share reserved "$ZROK_SHARE_NAME" --headless\n\
91
- ' > /data/start_zrok.sh && chmod +x /data/start_zrok.sh
92
 
93
- # 7. Entrypoint
94
  RUN printf '#!/bin/bash\n\
 
 
 
 
 
 
95
  exec /usr/bin/supervisord -c /data/supervisor/conf.d/supervisord.conf\n\
96
- ' > /data/start.sh && chmod +x /data/start.sh
97
 
98
- # 8. Переключаемся на user для установки приложений
99
  USER user
100
- WORKDIR /data
101
 
102
  # AIClient2API
103
- RUN git clone https://github.com/justlovemaki/AIClient2API.git /data/aiclient2api \
104
- && cd /data/aiclient2api \
105
  && npm install
106
 
107
- # Kiro-go
108
- RUN wget -q -O /data/kirogo/kiro-go \
109
- https://github.com/Quorinex/Kiro-Go/releases/latest/download/kiro-go-linux-amd64 \
110
- && chmod +x /data/kirogo/kiro-go
111
-
112
  # Bifrost
113
- RUN git clone https://github.com/maximhq/bifrost.git /data/bifrost \
114
- && if [ -f /data/bifrost/requirements.txt ]; then \
115
- pip install --no-cache-dir --user -r /data/bifrost/requirements.txt; \
116
  else \
117
- echo "WARNING: bifrost/requirements.txt not found"; \
118
  fi
119
 
120
  EXPOSE 7860
121
 
122
- CMD ["/data/start.sh"]
 
1
  # syntax=docker/dockerfile:1.4
2
+ FROM golang:1.22-alpine AS kiro-builder
3
+ RUN apk add --no-cache git
4
+ RUN git clone https://github.com/Quorinex/Kiro-Go.git /src \
5
+ && cd /src \
6
+ && go build -o /kiro-go .
7
+
8
+ # ─────────────────────────────────────────────
9
  FROM python:3.11-slim
10
 
11
  # 1. Системные зависимости + Node.js
12
+ RUN apt-get update && apt-get install -y curl gnupg wget git supervisor \
13
  && curl -fsSL https://deb.nodesource.com/setup_20.x | bash - \
14
+ && apt-get install -y nodejs \
 
 
 
 
15
  && rm -rf /var/lib/apt/lists/*
16
 
17
  # 2. zrok
 
21
  && chmod +x /usr/local/bin/zrok \
22
  && rm zrok_0.4.42_linux_amd64.tar.gz
23
 
24
+ # 3. Kiro-Go бинарник из builder-стадии
25
+ COPY --from=kiro-builder /kiro-go /usr/local/bin/kiro-go
26
+ RUN chmod +x /usr/local/bin/kiro-go
27
+
28
+ # 4. Non-root пользователь (uid=1000 — требование HF Spaces)
29
  RUN useradd -m -u 1000 user
30
 
31
+ # 5. Директории:
32
+ # /app — код приложений
33
+ # /data — конфиги, базы, рантайм (сюда монтить persistent storage на HF)
34
  RUN mkdir -p \
35
+ /app/aiclient2api \
36
+ /app/bifrost \
37
+ /data/aiclient2api/configs \
38
  /data/kirogo \
39
  /data/bifrost \
40
  /data/supervisor/conf.d \
 
41
  /data/supervisor/run \
42
+ && chown -R user:user /app /data
43
 
44
+ # 6. supervisord.conf
45
  RUN printf '[supervisord]\n\
46
  nodaemon=true\n\
47
  logfile=/dev/stdout\n\
 
49
  pidfile=/data/supervisor/run/supervisord.pid\n\
50
  \n\
51
  [program:bifrost]\n\
52
+ command=python /app/bifrost/main.py --port 7860 --host 0.0.0.0\n\
53
  directory=/data/bifrost\n\
54
  autostart=true\n\
55
  autorestart=true\n\
 
59
  stderr_logfile_maxbytes=0\n\
60
  \n\
61
  [program:aiclient]\n\
62
+ command=node /app/aiclient2api/src/core/master.js\n\
63
+ environment=PORT=3000\n\
64
+ directory=/app/aiclient2api\n\
65
  autostart=true\n\
66
  autorestart=true\n\
67
  stdout_logfile=/dev/stdout\n\
 
70
  stderr_logfile_maxbytes=0\n\
71
  \n\
72
  [program:kirogo]\n\
73
+ command=kiro-go\n\
74
+ environment=PORT=8082,ADMIN_PASSWORD=%(ENV_KIRO_ADMIN_PASSWORD)s\n\
75
  directory=/data/kirogo\n\
76
  autostart=true\n\
77
  autorestart=true\n\
 
81
  stderr_logfile_maxbytes=0\n\
82
  \n\
83
  [program:zrok]\n\
84
+ command=/app/start_zrok.sh\n\
85
  autostart=true\n\
86
  autorestart=true\n\
87
  stdout_logfile=/dev/stdout\n\
 
90
  stderr_logfile_maxbytes=0\n\
91
  ' > /data/supervisor/conf.d/supervisord.conf
92
 
93
+ # 7. Скрипт zrok — не падает если токен не задан
94
  RUN printf '#!/bin/bash\n\
95
  if [ -z "$ZROK_TOKEN" ] || [ -z "$ZROK_SHARE_NAME" ]; then\n\
96
  echo "ZROK_TOKEN or ZROK_SHARE_NAME not set, skipping zrok"\n\
97
  sleep infinity\n\
 
98
  fi\n\
99
  zrok enable "$ZROK_TOKEN" --headless 2>/dev/null || true\n\
100
  exec zrok share reserved "$ZROK_SHARE_NAME" --headless\n\
101
+ ' > /app/start_zrok.sh && chmod +x /app/start_zrok.sh
102
 
103
+ # 8. Entrypoint — симлинк configs + запуск супервизора
104
  RUN printf '#!/bin/bash\n\
105
+ # AIClient2API пишет конфиги в /app/aiclient2api/configs\n\
106
+ # симлинкаем туда /data/aiclient2api/configs чтобы данные были в /data\n\
107
+ if [ ! -L /app/aiclient2api/configs ]; then\n\
108
+ rm -rf /app/aiclient2api/configs\n\
109
+ ln -s /data/aiclient2api/configs /app/aiclient2api/configs\n\
110
+ fi\n\
111
  exec /usr/bin/supervisord -c /data/supervisor/conf.d/supervisord.conf\n\
112
+ ' > /app/start.sh && chmod +x /app/start.sh
113
 
114
+ # 9. Устанавливаем приложения под user
115
  USER user
116
+ WORKDIR /app
117
 
118
  # AIClient2API
119
+ RUN git clone https://github.com/justlovemaki/AIClient2API.git /app/aiclient2api \
120
+ && cd /app/aiclient2api \
121
  && npm install
122
 
 
 
 
 
 
123
  # Bifrost
124
+ RUN git clone https://github.com/maximhq/bifrost.git /app/bifrost \
125
+ && if [ -f /app/bifrost/requirements.txt ]; then \
126
+ pip install --no-cache-dir --user -r /app/bifrost/requirements.txt; \
127
  else \
128
+ pip install --no-cache-dir --user /app/bifrost; \
129
  fi
130
 
131
  EXPOSE 7860
132
 
133
+ CMD ["/app/start.sh"]