Spaces:
Runtime error
Runtime error
Silicon Valley - Admin
commited on
Commit
路
3dde046
1
Parent(s):
dd07930
Refactor Dockerfile and server implementation for improved containerization and functionality
Browse files- Updated Dockerfile to streamline the build process by removing the builder stage and directly installing dependencies from requirements.txt.
- Configured Hypercorn to bind to port 7860 and added WebSocket settings in hypercorn.toml.
- Enhanced README.md with updated server title, description, and API endpoints.
- Added health check endpoint to server.py and enabled CORS for better client interaction.
- Updated requirements.txt to include necessary packages for the application.
- Dockerfile +15 -22
- README.md +18 -4
- hypercorn.toml +9 -4
- requirements.txt +4 -1
- server.py +13 -3
Dockerfile
CHANGED
@@ -1,34 +1,27 @@
|
|
1 |
# Dockerfile
|
2 |
-
FROM python:3.11-slim
|
3 |
-
|
4 |
-
# Instala dependencias de compilaci贸n si es necesario
|
5 |
-
RUN apt-get update && apt-get install -y build-essential
|
6 |
-
|
7 |
-
# Instala poetry
|
8 |
-
RUN pip install poetry
|
9 |
|
10 |
-
# Copia archivos de la aplicaci贸n
|
11 |
WORKDIR /app
|
12 |
-
COPY pyproject.toml poetry.lock /app/
|
13 |
-
COPY broker.py /app/broker.py
|
14 |
-
COPY server.py /app/server.py
|
15 |
|
16 |
-
#
|
17 |
-
RUN
|
|
|
|
|
18 |
|
19 |
-
#
|
20 |
-
|
21 |
-
|
22 |
-
|
|
|
23 |
|
24 |
-
#
|
25 |
-
|
26 |
|
27 |
# Variables de entorno
|
28 |
ENV PYTHONUNBUFFERED=1
|
29 |
|
30 |
-
#
|
31 |
EXPOSE 7860
|
32 |
|
33 |
-
# Comando para ejecutar la aplicaci贸n
|
34 |
-
CMD ["
|
|
|
1 |
# Dockerfile
|
2 |
+
FROM python:3.11-slim
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
4 |
WORKDIR /app
|
|
|
|
|
|
|
5 |
|
6 |
+
# Instalar dependencias del sistema si son necesarias
|
7 |
+
RUN apt-get update && apt-get install -y --no-install-recommends \
|
8 |
+
build-essential \
|
9 |
+
&& rm -rf /var/lib/apt/lists/*
|
10 |
|
11 |
+
# Copiar archivos de la aplicaci贸n
|
12 |
+
COPY requirements.txt .
|
13 |
+
COPY broker.py .
|
14 |
+
COPY server.py .
|
15 |
+
COPY hypercorn.toml .
|
16 |
|
17 |
+
# Instalar dependencias de Python
|
18 |
+
RUN pip install --no-cache-dir -r requirements.txt
|
19 |
|
20 |
# Variables de entorno
|
21 |
ENV PYTHONUNBUFFERED=1
|
22 |
|
23 |
+
# Exponer el puerto que Hugging Face Spaces espera
|
24 |
EXPOSE 7860
|
25 |
|
26 |
+
# Comando para ejecutar la aplicaci贸n con Hypercorn
|
27 |
+
CMD ["hypercorn", "--config", "hypercorn.toml", "server:app"]
|
README.md
CHANGED
@@ -1,10 +1,24 @@
|
|
1 |
---
|
2 |
-
title:
|
3 |
-
emoji:
|
4 |
-
colorFrom:
|
5 |
colorTo: indigo
|
6 |
sdk: docker
|
|
|
7 |
pinned: false
|
8 |
---
|
9 |
|
10 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
---
|
2 |
+
title: Kaio API Server
|
3 |
+
emoji: 馃殌
|
4 |
+
colorFrom: blue
|
5 |
colorTo: indigo
|
6 |
sdk: docker
|
7 |
+
app_port: 7860
|
8 |
pinned: false
|
9 |
---
|
10 |
|
11 |
+
# Kaio API Server
|
12 |
+
|
13 |
+
Este servidor proporciona una API REST y WebSocket para ejecutar comandos y gestionar archivos.
|
14 |
+
|
15 |
+
## Endpoints
|
16 |
+
|
17 |
+
- REST API: `https://<space-name>.hf.space/`
|
18 |
+
- WebSocket: `wss://<space-name>.hf.space/session`
|
19 |
+
|
20 |
+
## Estado
|
21 |
+
|
22 |
+
Puedes verificar el estado del servidor accediendo a:
|
23 |
+
- `https://<space-name>.hf.space/health`
|
24 |
+
- `https://<space-name>.hf.space/status`
|
hypercorn.toml
CHANGED
@@ -1,9 +1,14 @@
|
|
1 |
# Hypercorn configuration file
|
2 |
|
3 |
# Server binding options
|
4 |
-
bind = "0.0.0.0:
|
5 |
-
workers = 1
|
|
|
|
|
|
|
|
|
6 |
|
7 |
# Logging configuration
|
8 |
-
accesslog = "
|
9 |
-
|
|
|
|
1 |
# Hypercorn configuration file
|
2 |
|
3 |
# Server binding options
|
4 |
+
bind = "0.0.0.0:7860"
|
5 |
+
workers = 1
|
6 |
+
|
7 |
+
# Websocket settings
|
8 |
+
websocket_ping_interval = 20
|
9 |
+
websocket_max_message_size = 16777216
|
10 |
|
11 |
# Logging configuration
|
12 |
+
accesslog = "-"
|
13 |
+
errorlog = "-"
|
14 |
+
loglevel = "INFO"
|
requirements.txt
CHANGED
@@ -1 +1,4 @@
|
|
1 |
-
|
|
|
|
|
|
|
|
1 |
+
quart>=0.18.4
|
2 |
+
quart-schema>=0.15.0
|
3 |
+
hypercorn>=0.14.3
|
4 |
+
websockets>=11.0.3
|
server.py
CHANGED
@@ -3,11 +3,13 @@ import asyncio
|
|
3 |
import uuid
|
4 |
from typing import AsyncGenerator, Dict, Tuple, Any, Optional
|
5 |
from dataclasses import dataclass
|
6 |
-
from quart import Quart, websocket, request,
|
7 |
from quart_schema import QuartSchema, validate_request, validate_response
|
|
|
8 |
import importlib.metadata
|
9 |
import secrets
|
10 |
import logging
|
|
|
11 |
|
12 |
from broker import SessionBroker, SessionDoesNotExist, ClientRequest, ClientResponse, ClientError
|
13 |
|
@@ -16,8 +18,9 @@ TIMEOUT: int = 60
|
|
16 |
LOG_LEVEL: int = logging.INFO
|
17 |
TRUSTED_HOSTS: list[str] = ["127.0.0.1"]
|
18 |
|
19 |
-
# Crear aplicaci贸n
|
20 |
app = Quart(__name__)
|
|
|
21 |
QuartSchema(app)
|
22 |
app.logger.setLevel(LOG_LEVEL)
|
23 |
|
@@ -97,7 +100,14 @@ async def command(data: Command) -> Tuple[CommandResponse | ErrorResponse, int]:
|
|
97 |
|
98 |
# Ejecutar aplicaci贸n
|
99 |
def run():
|
100 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
101 |
|
102 |
if __name__ == "__main__":
|
103 |
run()
|
|
|
3 |
import uuid
|
4 |
from typing import AsyncGenerator, Dict, Tuple, Any, Optional
|
5 |
from dataclasses import dataclass
|
6 |
+
from quart import Quart, websocket, request, Response
|
7 |
from quart_schema import QuartSchema, validate_request, validate_response
|
8 |
+
from quart_cors import cors
|
9 |
import importlib.metadata
|
10 |
import secrets
|
11 |
import logging
|
12 |
+
import hypercorn.asyncio
|
13 |
|
14 |
from broker import SessionBroker, SessionDoesNotExist, ClientRequest, ClientResponse, ClientError
|
15 |
|
|
|
18 |
LOG_LEVEL: int = logging.INFO
|
19 |
TRUSTED_HOSTS: list[str] = ["127.0.0.1"]
|
20 |
|
21 |
+
# Crear aplicaci贸n con CORS habilitado
|
22 |
app = Quart(__name__)
|
23 |
+
app = cors(app, allow_origin="*")
|
24 |
QuartSchema(app)
|
25 |
app.logger.setLevel(LOG_LEVEL)
|
26 |
|
|
|
100 |
|
101 |
# Ejecutar aplicaci贸n
|
102 |
def run():
|
103 |
+
config = hypercorn.Config()
|
104 |
+
config.bind = ["0.0.0.0:7860"]
|
105 |
+
asyncio.run(hypercorn.asyncio.serve(app, config))
|
106 |
+
|
107 |
+
# Agregar un endpoint de health check
|
108 |
+
@app.route("/health")
|
109 |
+
async def health_check():
|
110 |
+
return {"status": "healthy"}
|
111 |
|
112 |
if __name__ == "__main__":
|
113 |
run()
|