ten / Dockerfile
3v324v23's picture
Полное изменение подхода: создание отдельного мок-сервера для API дизайнера
9006d1c
FROM ubuntu:22.04
# Принудительное обновление для HuggingFace, чтобы использовать правильную версию Dockerfile
# Установка необходимых пакетов
RUN apt-get clean && apt-get update && apt-get install -y --no-install-recommends \
libasound2 \
libgstreamer1.0-dev \
libunwind-dev \
libc++1 \
libssl-dev \
python3 \
python3-venv \
python3-pip \
python3-dev \
curl \
wget \
unzip \
git \
build-essential \
jq \
vim \
ca-certificates \
&& apt-get clean && rm -rf /var/lib/apt/lists/* && rm -rf /tmp/*
# Установка Python-пакетов
RUN pip3 install requests
# Установка Go 1.21
RUN wget https://golang.org/dl/go1.21.0.linux-amd64.tar.gz && \
tar -C /usr/local -xzf go1.21.0.linux-amd64.tar.gz && \
rm go1.21.0.linux-amd64.tar.gz
ENV PATH=$PATH:/usr/local/go/bin
ENV GOPATH=/go
ENV PATH=$PATH:$GOPATH/bin
# Создаем каталог для кэша Go и устанавливаем правильные разрешения
RUN mkdir -p /go && chmod 777 /go
# Установка Node.js и pnpm
RUN curl -fsSL https://deb.nodesource.com/setup_20.x | bash - && \
apt-get install -y nodejs && \
npm install -g pnpm
# Создаем пользователя tenuser с правильными правами
RUN useradd -m -u 1000 -s /bin/bash tenuser
# Устанавливаем рабочую директорию
WORKDIR /app
# Клонируем репозиторий TEN-Agent
RUN git clone --depth 1 https://github.com/TEN-framework/TEN-Agent.git /app && \
echo "Доступные ветки и теги:" && \
git branch -a && \
git tag -l
# Устанавливаем task для сборки
RUN go install github.com/go-task/task/v3/cmd/task@latest
# Создаем необходимые директории и устанавливаем права
RUN mkdir -p /app/server/bin && \
mkdir -p /app/agents && \
mkdir -p /tmp/ten_agent && \
mkdir -p /app/.pnpm-store && \
mkdir -p /app/backup && \
mkdir -p /app/mock-api && \
chown -R tenuser:tenuser /app && \
chown -R tenuser:tenuser /tmp/ten_agent
# Копируем .env файл
COPY .env /app/.env
RUN chown tenuser:tenuser /app/.env
# Создаем файл для мок-API дизайнера
RUN echo '{\n "success": true,\n "packages": [\n {\n "name": "default",\n "description": "Default package",\n "graphs": [\n {\n "name": "Voice Agent",\n "description": "Voice Agent with OpenAI",\n "file": "voice_agent.json",\n "id": "voice_agent",\n "package": "default"\n },\n {\n "name": "Chat Agent",\n "description": "Chat Agent",\n "file": "chat_agent.json",\n "id": "chat_agent",\n "package": "default"\n }\n ]\n }\n ]\n}' > /app/mock-api/designer-packages.json
# Настраиваем прокси-правила в Next.js для перенаправления запросов к дизайнеру на обычный API
RUN echo 'module.exports = { \
async rewrites() { \
return [ \
{ \
source: "/api/designer/:path*", \
destination: "http://localhost:8080/api/agents/:path*", \
}, \
{ \
source: "/api/dev/:path*", \
destination: "http://localhost:8080/api/agents/:path*", \
}, \
]; \
}, \
};' > /app/playground/next.config.js
# Компилируем сервер
RUN cd /app/server && \
go mod tidy && \
go mod download && \
go build -o bin/api main.go && \
chmod +x bin/api
# Установка зависимостей для Playground UI
ENV PNPM_HOME="/app/.pnpm-store"
ENV PATH="$PNPM_HOME:$PATH"
RUN cd /app/playground && \
pnpm install
# Создаем базовый manifest.json
RUN echo '{\n\
"name": "default",\n\
"agents": [\n\
{\n\
"name": "voice_agent",\n\
"description": "A simple voice agent"\n\
},\n\
{\n\
"name": "chat_agent",\n\
"description": "A text chat agent"\n\
}\n\
]\n\
}' > /app/agents/manifest.json
# Создаем базовый property.json в формате TEN
RUN echo '{\n\
"_ten": {},\n\
"name": "TEN Agent Example",\n\
"version": "0.0.1",\n\
"extensions": ["openai_chatgpt"],\n\
"description": "A basic voice agent with OpenAI",\n\
"graphs": [\n\
{\n\
"name": "Voice Agent",\n\
"description": "Basic voice agent with OpenAI",\n\
"file": "voice_agent.json"\n\
},\n\
{\n\
"name": "Chat Agent",\n\
"description": "Simple chat agent",\n\
"file": "chat_agent.json"\n\
}\n\
]\n\
}' > /app/agents/property.json
# Создаем простые примеры графов
RUN echo '{\n\
"nodes": [],\n\
"edges": [],\n\
"groups": [],\n\
"templates": [],\n\
"root": null\n\
}' > /app/agents/voice_agent.json
RUN echo '{\n\
"nodes": [],\n\
"edges": [],\n\
"groups": [],\n\
"templates": [],\n\
"root": null\n\
}' > /app/agents/chat_agent.json
# Устанавливаем правильные права доступа для всех файлов
RUN chmod -R 777 /app && \
find /app -type d -exec chmod 777 {} \; && \
find /app -type f -exec chmod 666 {} \; && \
chmod +x /app/server/bin/api
# Настраиваем стартовый скрипт
COPY app.py /app/app.py
RUN chmod +x /app/app.py && \
chown tenuser:tenuser /app/app.py
# Переключаемся на пользователя tenuser
USER tenuser
# Открываем порты
EXPOSE 7860 8080 3000 9090
# Запускаем API сервер и Playground в dev-режиме
ENTRYPOINT ["python3", "/app/app.py"]