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"]