Spaces:
Sleeping
Sleeping
Raymond Weitekamp
commited on
Commit
·
1706a3b
1
Parent(s):
114ac8e
Add Nginx reverse proxy setup for Hugging Face Spaces
Browse files- Dockerfile +14 -2
- cadviewer.py +2 -8
- nginx.conf +44 -0
- start.sh +7 -0
Dockerfile
CHANGED
|
@@ -11,6 +11,7 @@ RUN apt-get update && apt-get install -y \
|
|
| 11 |
libx11-6 \
|
| 12 |
libx11-dev \
|
| 13 |
libxrender1 \
|
|
|
|
| 14 |
&& rm -rf /var/lib/apt/lists/*
|
| 15 |
|
| 16 |
# Create matplotlib config directory with proper permissions
|
|
@@ -32,6 +33,13 @@ RUN useradd -m -d /home/appuser -s /bin/bash appuser && \
|
|
| 32 |
chown -R appuser:appuser /home/appuser && \
|
| 33 |
chmod 666 /home/appuser/.ocpvscode
|
| 34 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 35 |
# Install uv and create virtual environment
|
| 36 |
RUN pip install uv && \
|
| 37 |
uv venv /opt/venv
|
|
@@ -62,5 +70,9 @@ ENV HOME=/home/appuser
|
|
| 62 |
# Expose port 7860 for Hugging Face Spaces
|
| 63 |
EXPOSE 7860
|
| 64 |
|
| 65 |
-
#
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 11 |
libx11-6 \
|
| 12 |
libx11-dev \
|
| 13 |
libxrender1 \
|
| 14 |
+
nginx \
|
| 15 |
&& rm -rf /var/lib/apt/lists/*
|
| 16 |
|
| 17 |
# Create matplotlib config directory with proper permissions
|
|
|
|
| 33 |
chown -R appuser:appuser /home/appuser && \
|
| 34 |
chmod 666 /home/appuser/.ocpvscode
|
| 35 |
|
| 36 |
+
# Configure Nginx
|
| 37 |
+
COPY nginx.conf /etc/nginx/nginx.conf
|
| 38 |
+
RUN mkdir -p /run/nginx && \
|
| 39 |
+
chown -R appuser:appuser /run/nginx && \
|
| 40 |
+
chown -R appuser:appuser /var/log/nginx && \
|
| 41 |
+
chown -R appuser:appuser /var/lib/nginx
|
| 42 |
+
|
| 43 |
# Install uv and create virtual environment
|
| 44 |
RUN pip install uv && \
|
| 45 |
uv venv /opt/venv
|
|
|
|
| 70 |
# Expose port 7860 for Hugging Face Spaces
|
| 71 |
EXPOSE 7860
|
| 72 |
|
| 73 |
+
# Create startup script
|
| 74 |
+
COPY start.sh /code/start.sh
|
| 75 |
+
RUN chmod +x /code/start.sh
|
| 76 |
+
|
| 77 |
+
# Run the startup script
|
| 78 |
+
CMD ["/code/start.sh"]
|
cadviewer.py
CHANGED
|
@@ -198,14 +198,8 @@ with ui.splitter().classes(
|
|
| 198 |
space_url = os.getenv('SPACE_URL', '')
|
| 199 |
logger.info(f"Space URL: {space_url}")
|
| 200 |
|
| 201 |
-
# Construct the viewer URL
|
| 202 |
-
|
| 203 |
-
# We're in a Hugging Face Space
|
| 204 |
-
viewer_url = f"{space_url}/proxy/3939/viewer"
|
| 205 |
-
else:
|
| 206 |
-
# Local development
|
| 207 |
-
viewer_url = "http://localhost:3939/viewer"
|
| 208 |
-
|
| 209 |
logger.info(f"Using viewer URL: {viewer_url}")
|
| 210 |
|
| 211 |
ocpcv = (
|
|
|
|
| 198 |
space_url = os.getenv('SPACE_URL', '')
|
| 199 |
logger.info(f"Space URL: {space_url}")
|
| 200 |
|
| 201 |
+
# Construct the viewer URL - always use /viewer since Nginx handles the routing
|
| 202 |
+
viewer_url = "/viewer"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
logger.info(f"Using viewer URL: {viewer_url}")
|
| 204 |
|
| 205 |
ocpcv = (
|
nginx.conf
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
worker_processes 1;
|
| 2 |
+
error_log /dev/stdout info;
|
| 3 |
+
pid /run/nginx/nginx.pid;
|
| 4 |
+
|
| 5 |
+
events {
|
| 6 |
+
worker_connections 1024;
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
http {
|
| 10 |
+
access_log /dev/stdout;
|
| 11 |
+
|
| 12 |
+
upstream nicegui {
|
| 13 |
+
server 127.0.0.1:7861;
|
| 14 |
+
}
|
| 15 |
+
|
| 16 |
+
upstream viewer {
|
| 17 |
+
server 127.0.0.1:3939;
|
| 18 |
+
}
|
| 19 |
+
|
| 20 |
+
server {
|
| 21 |
+
listen 7860;
|
| 22 |
+
server_name localhost;
|
| 23 |
+
|
| 24 |
+
# Main app (NiceGUI)
|
| 25 |
+
location / {
|
| 26 |
+
proxy_pass http://nicegui;
|
| 27 |
+
proxy_http_version 1.1;
|
| 28 |
+
proxy_set_header Upgrade $http_upgrade;
|
| 29 |
+
proxy_set_header Connection "upgrade";
|
| 30 |
+
proxy_set_header Host $host;
|
| 31 |
+
proxy_set_header X-Real-IP $remote_addr;
|
| 32 |
+
}
|
| 33 |
+
|
| 34 |
+
# Viewer route
|
| 35 |
+
location /viewer/ {
|
| 36 |
+
proxy_pass http://viewer/viewer/;
|
| 37 |
+
proxy_http_version 1.1;
|
| 38 |
+
proxy_set_header Upgrade $http_upgrade;
|
| 39 |
+
proxy_set_header Connection "upgrade";
|
| 40 |
+
proxy_set_header Host $host;
|
| 41 |
+
proxy_set_header X-Real-IP $remote_addr;
|
| 42 |
+
}
|
| 43 |
+
}
|
| 44 |
+
}
|
start.sh
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/bin/bash
|
| 2 |
+
|
| 3 |
+
# Start Nginx
|
| 4 |
+
nginx
|
| 5 |
+
|
| 6 |
+
# Start the application on port 7861 (Nginx will proxy from 7860)
|
| 7 |
+
python -c "import cadviewer; from nicegui import app; app.native.start_args['port'] = 7861; cadviewer.ui.run(native=False, host='0.0.0.0', port=7861)"
|