Raymond Weitekamp commited on
Commit
1706a3b
·
1 Parent(s): 114ac8e

Add Nginx reverse proxy setup for Hugging Face Spaces

Browse files
Files changed (4) hide show
  1. Dockerfile +14 -2
  2. cadviewer.py +2 -8
  3. nginx.conf +44 -0
  4. 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
- # Run the application
66
- CMD ["python", "-c", "import cadviewer; from nicegui import app; app.native.start_args['port'] = 7860; cadviewer.ui.run(native=False, host='0.0.0.0', port=7860)"]
 
 
 
 
 
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
- if space_url:
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)"