Spaces:
Running
Running
Commit
·
6c771b7
1
Parent(s):
bd2fd0b
add: huggingface docker
Browse files- Dockerfile +9 -17
- nginx.hf.conf +0 -67
- package.json +3 -1
Dockerfile
CHANGED
@@ -1,5 +1,5 @@
|
|
1 |
-
#
|
2 |
-
FROM node:22-alpine
|
3 |
|
4 |
# Set working directory
|
5 |
WORKDIR /app
|
@@ -7,8 +7,8 @@ WORKDIR /app
|
|
7 |
# Copy package files
|
8 |
COPY package*.json ./
|
9 |
|
10 |
-
# Install dependencies
|
11 |
-
RUN npm ci
|
12 |
|
13 |
# Copy source code
|
14 |
COPY . .
|
@@ -16,20 +16,12 @@ COPY . .
|
|
16 |
# Build the application
|
17 |
RUN npm run build
|
18 |
|
19 |
-
#
|
20 |
-
FROM nginx:alpine AS production
|
21 |
-
|
22 |
-
# Install wget for healthcheck
|
23 |
-
RUN apk add --no-cache wget
|
24 |
-
|
25 |
-
# Copy built application from builder stage
|
26 |
-
COPY --from=builder /app/dist /usr/share/nginx/html
|
27 |
-
|
28 |
-
# Copy custom nginx configuration for HF Spaces
|
29 |
-
COPY nginx.hf.conf /etc/nginx/nginx.conf
|
30 |
|
31 |
# Expose port 7860 (required by Hugging Face Spaces)
|
32 |
EXPOSE 7860
|
33 |
|
34 |
-
#
|
35 |
-
|
|
|
|
|
|
1 |
+
# Use Node.js 22 Alpine as base image
|
2 |
+
FROM node:22-alpine
|
3 |
|
4 |
# Set working directory
|
5 |
WORKDIR /app
|
|
|
7 |
# Copy package files
|
8 |
COPY package*.json ./
|
9 |
|
10 |
+
# Install all dependencies (including express for production)
|
11 |
+
RUN npm ci
|
12 |
|
13 |
# Copy source code
|
14 |
COPY . .
|
|
|
16 |
# Build the application
|
17 |
RUN npm run build
|
18 |
|
19 |
+
# Hugging Face Spaces handles user management automatically
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
|
21 |
# Expose port 7860 (required by Hugging Face Spaces)
|
22 |
EXPOSE 7860
|
23 |
|
24 |
+
# Health check removed for HF Spaces compatibility
|
25 |
+
|
26 |
+
# Start the application
|
27 |
+
CMD ["npm", "start"]
|
nginx.hf.conf
DELETED
@@ -1,67 +0,0 @@
|
|
1 |
-
# Set PID file location to writable directory
|
2 |
-
pid /tmp/nginx.pid;
|
3 |
-
|
4 |
-
events {
|
5 |
-
worker_connections 1024;
|
6 |
-
}
|
7 |
-
|
8 |
-
http {
|
9 |
-
include /etc/nginx/mime.types;
|
10 |
-
default_type application/octet-stream;
|
11 |
-
|
12 |
-
# Logging
|
13 |
-
access_log /var/log/nginx/access.log;
|
14 |
-
error_log /var/log/nginx/error.log;
|
15 |
-
|
16 |
-
# Gzip compression
|
17 |
-
gzip on;
|
18 |
-
gzip_vary on;
|
19 |
-
gzip_min_length 1024;
|
20 |
-
gzip_proxied any;
|
21 |
-
gzip_comp_level 6;
|
22 |
-
gzip_types
|
23 |
-
text/plain
|
24 |
-
text/css
|
25 |
-
text/xml
|
26 |
-
text/javascript
|
27 |
-
application/javascript
|
28 |
-
application/xml+rss
|
29 |
-
application/json;
|
30 |
-
|
31 |
-
# Security headers
|
32 |
-
add_header X-Frame-Options "SAMEORIGIN" always;
|
33 |
-
add_header X-XSS-Protection "1; mode=block" always;
|
34 |
-
add_header X-Content-Type-Options "nosniff" always;
|
35 |
-
add_header Referrer-Policy "no-referrer-when-downgrade" always;
|
36 |
-
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
|
37 |
-
|
38 |
-
server {
|
39 |
-
listen 7860;
|
40 |
-
server_name _;
|
41 |
-
root /usr/share/nginx/html;
|
42 |
-
index index.html;
|
43 |
-
|
44 |
-
# Cache static assets
|
45 |
-
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
|
46 |
-
expires 1y;
|
47 |
-
add_header Cache-Control "public, immutable";
|
48 |
-
}
|
49 |
-
|
50 |
-
# Handle SPA routing
|
51 |
-
location / {
|
52 |
-
try_files $uri $uri/ /index.html;
|
53 |
-
}
|
54 |
-
|
55 |
-
# Health check endpoint for HF Spaces
|
56 |
-
location /health {
|
57 |
-
access_log off;
|
58 |
-
return 200 "healthy\n";
|
59 |
-
add_header Content-Type text/plain;
|
60 |
-
}
|
61 |
-
|
62 |
-
# Security
|
63 |
-
location ~ /\. {
|
64 |
-
deny all;
|
65 |
-
}
|
66 |
-
}
|
67 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
package.json
CHANGED
@@ -6,6 +6,7 @@
|
|
6 |
"prepare": "husky",
|
7 |
"dev": "parcel index.html",
|
8 |
"build": "parcel build index.html",
|
|
|
9 |
"lint:js": "eslint script.js tests",
|
10 |
"lint": "npm run lint:js",
|
11 |
"test": "node tests/test.js"
|
@@ -29,6 +30,7 @@
|
|
29 |
"dependencies": {
|
30 |
"@tailwindcss/postcss": "^4.1.11",
|
31 |
"postcss": "^8.5.6",
|
32 |
-
"tailwindcss": "^4.1.11"
|
|
|
33 |
}
|
34 |
}
|
|
|
6 |
"prepare": "husky",
|
7 |
"dev": "parcel index.html",
|
8 |
"build": "parcel build index.html",
|
9 |
+
"start": "node server.js",
|
10 |
"lint:js": "eslint script.js tests",
|
11 |
"lint": "npm run lint:js",
|
12 |
"test": "node tests/test.js"
|
|
|
30 |
"dependencies": {
|
31 |
"@tailwindcss/postcss": "^4.1.11",
|
32 |
"postcss": "^8.5.6",
|
33 |
+
"tailwindcss": "^4.1.11",
|
34 |
+
"express": "^4.18.2"
|
35 |
}
|
36 |
}
|