Download Dockerfile from nitrox/ten: direct link, hf CLI and curl.
- Browser
- Download file 5.86 kB
-
https://huggingface.co/spaces/nitrox/ten/resolve/main/Dockerfile
- Command line
-
hf download hf://spaces/nitrox/ten/Dockerfile
-
curl -L -o Dockerfile https://huggingface.co/spaces/nitrox/ten/resolve/main/Dockerfile
5.86 kB
| 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"] | |