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

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +93 -90
Dockerfile CHANGED
@@ -1,118 +1,121 @@
1
  # syntax=docker/dockerfile:1.4
2
  FROM python:3.11-slim
3
 
4
- # 1. Установка системных зависимостей + Node.js (для AIClient2API) [1]
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 (качаем стабильный бинарник напрямую)
15
- RUN wget https://github.com/openziti/zrok/releases/download/v0.4.42/zrok_0.4.42_linux_amd64.tar.gz \
16
  && tar -xzf zrok_0.4.42_linux_amd64.tar.gz zrok \
17
  && mv zrok /usr/local/bin/ \
18
  && chmod +x /usr/local/bin/zrok \
19
  && rm zrok_0.4.42_linux_amd64.tar.gz
20
 
21
- # 3. Создание non-root пользователя
22
  RUN useradd -m -u 1000 user
23
 
24
- # 4. Создание всех нужных абсолютных путей
25
- RUN mkdir -p /data/aiclient2api /data/kirogo /data/bifrost /etc/supervisor/conf.d /var/log/supervisor /var/run/supervisor \
26
- && chown -R user:user /data /etc/supervisor /var/log/supervisor /var/run/supervisor
27
-
28
- # 5. Переключение на non-root пользователя
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  USER user
30
  WORKDIR /data
31
 
32
- # ============================================
33
- # SECTION: AIClient2API (Node.js) [1]
34
- # ============================================
35
- # ВНИМАНИЕ: Замени ТВОЙ_НИК на реального автора, в поиске его не было
36
  RUN git clone https://github.com/justlovemaki/AIClient2API.git /data/aiclient2api \
37
  && cd /data/aiclient2api \
38
  && npm install
39
 
40
- # ============================================
41
- # SECTION: Kiro-go [12]
42
- # ============================================
43
- # Используем найденный репозиторий Quorinex/Kiro-Go
44
- RUN wget -O /data/kirogo/kiro-go https://github.com/Quorinex/Kiro-Go/releases/latest/download/kiro-go-linux-amd64 \
45
  && chmod +x /data/kirogo/kiro-go
46
 
47
- # ============================================
48
- # SECTION: Bifrost
49
- # ============================================
50
- # ВНИМАНИЕ: Замени ТВОЙ_НИК на реального ��втора
51
  RUN git clone https://github.com/maximhq/bifrost.git /data/bifrost \
52
- && pip install --no-cache-dir -r /data/bifrost/requirements.txt
53
-
54
- # ============================================
55
- # CONFIGS (Heredoc синтаксис)
56
- # ============================================
57
-
58
- COPY --chown=user:user <<EOF /etc/supervisor/conf.d/supervisord.conf
59
- [supervisord]
60
- nodaemon=true
61
- logfile=/dev/stdout
62
- logfile_maxbytes=0
63
- pidfile=/var/run/supervisor/supervisord.pid
64
-
65
- [program:bifrost]
66
- command=python /data/bifrost/main.py --port 7860
67
- directory=/data/bifrost
68
- autostart=true
69
- autorestart=true
70
- stdout_logfile=/dev/stdout
71
- stdout_logfile_maxbytes=0
72
- stderr_logfile=/dev/stderr
73
- stderr_logfile_maxbytes=0
74
-
75
- [program:aiclient]
76
- # Для Node.js используем npm start и передаем порт через переменную окружения [1]
77
- command=npm start
78
- environment=PORT=8081
79
- directory=/data/aiclient2api
80
- autostart=true
81
- autorestart=true
82
- stdout_logfile=/dev/stdout
83
- stdout_logfile_maxbytes=0
84
- stderr_logfile=/dev/stderr
85
- stderr_logfile_maxbytes=0
86
-
87
- [program:kirogo]
88
- command=/data/kirogo/kiro-go --port 8082
89
- directory=/data/kirogo
90
- autostart=true
91
- autorestart=true
92
- stdout_logfile=/dev/stdout
93
- stdout_logfile_maxbytes=0
94
- stderr_logfile=/dev/stderr
95
- stderr_logfile_maxbytes=0
96
-
97
- [program:zrok]
98
- command=zrok share reserved %(ENV_ZROK_SHARE_NAME)s --headless
99
- autostart=true
100
- autorestart=true
101
- stdout_logfile=/dev/stdout
102
- stdout_logfile_maxbytes=0
103
- stderr_logfile=/dev/stderr
104
- stderr_logfile_maxbytes=0
105
- EOF
106
-
107
- COPY --chown=user:user <<'EOF' /data/start.sh
108
- #!/bin/bash
109
- if [ -n "$ZROK_TOKEN" ]; then
110
- zrok enable $ZROK_TOKEN --headless 2>/dev/null || true
111
- fi
112
- exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
113
- EOF
114
-
115
- RUN chmod +x /data/start.sh
116
 
117
  EXPOSE 7860
118
 
 
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
15
+ RUN wget -q https://github.com/openziti/zrok/releases/download/v0.4.42/zrok_0.4.42_linux_amd64.tar.gz \
16
  && tar -xzf zrok_0.4.42_linux_amd64.tar.gz zrok \
17
  && mv zrok /usr/local/bin/ \
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\
38
+ 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\
46
+ stdout_logfile=/dev/stdout\n\
47
+ stdout_logfile_maxbytes=0\n\
48
+ 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\
58
+ stdout_logfile_maxbytes=0\n\
59
+ 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\
67
+ stdout_logfile=/dev/stdout\n\
68
+ stdout_logfile_maxbytes=0\n\
69
+ 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\
77
+ stdout_logfile_maxbytes=0\n\
78
+ 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