Update Dockerfile
Browse files- 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.
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
RUN useradd -m -u 1000 user
|
| 23 |
|
| 24 |
-
#
|
|
|
|
|
|
|
| 25 |
RUN mkdir -p \
|
| 26 |
-
/
|
|
|
|
|
|
|
| 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 |
-
#
|
| 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 /
|
| 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=
|
| 53 |
-
environment=PORT=
|
| 54 |
-
directory=/
|
| 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=
|
|
|
|
| 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=/
|
| 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 |
-
#
|
| 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 |
-
' > /
|
| 92 |
|
| 93 |
-
#
|
| 94 |
RUN printf '#!/bin/bash\n\
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 95 |
exec /usr/bin/supervisord -c /data/supervisor/conf.d/supervisord.conf\n\
|
| 96 |
-
' > /
|
| 97 |
|
| 98 |
-
#
|
| 99 |
USER user
|
| 100 |
-
WORKDIR /
|
| 101 |
|
| 102 |
# AIClient2API
|
| 103 |
-
RUN git clone https://github.com/justlovemaki/AIClient2API.git /
|
| 104 |
-
&& cd /
|
| 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 /
|
| 114 |
-
&& if [ -f /
|
| 115 |
-
pip install --no-cache-dir --user -r /
|
| 116 |
else \
|
| 117 |
-
|
| 118 |
fi
|
| 119 |
|
| 120 |
EXPOSE 7860
|
| 121 |
|
| 122 |
-
CMD ["/
|
|
|
|
| 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"]
|