| |
| FROM node:18-slim as frontend-builder |
|
|
| WORKDIR /app/frontend |
| COPY frontend/package*.json ./ |
| RUN npm ci |
| COPY frontend/ ./ |
| RUN npm run build |
|
|
| |
| FROM python:3.9-slim |
|
|
| WORKDIR /app |
|
|
| |
| RUN apt-get update && apt-get install -y \ |
| nginx \ |
| libgomp1 \ |
| libglib2.0-0 \ |
| libsm6 \ |
| libxext6 \ |
| libxrender1 \ |
| curl \ |
| && rm -rf /var/lib/apt/lists/* |
|
|
| |
| COPY backend/requirements.txt ./backend/ |
| RUN pip install --no-cache-dir -r backend/requirements.txt |
|
|
| |
| COPY backend/ ./backend/ |
|
|
| |
| COPY --from=frontend-builder /app/frontend/dist /usr/share/nginx/html |
|
|
| |
| RUN rm -f /etc/nginx/sites-enabled/default && \ |
| echo 'server { \ |
| listen 7860; \ |
| server_name localhost; \ |
| root /usr/share/nginx/html; \ |
| index index.html; \ |
| \ |
| location / { \ |
| try_files $uri $uri/ /index.html; \ |
| } \ |
| \ |
| location /api/ { \ |
| proxy_pass http://127.0.0.1:8000/; \ |
| proxy_http_version 1.1; \ |
| proxy_set_header Upgrade $http_upgrade; \ |
| proxy_set_header Connection "upgrade"; \ |
| proxy_set_header Host $host; \ |
| proxy_set_header X-Real-IP $remote_addr; \ |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; \ |
| proxy_set_header X-Forwarded-Proto $scheme; \ |
| proxy_buffering off; \ |
| proxy_read_timeout 86400; \ |
| } \ |
| }' > /etc/nginx/sites-enabled/default |
|
|
| |
| RUN mkdir -p /var/log |
|
|
| |
| RUN echo ' |
| set -e \ |
| echo "Starting FastVLM Screen Observer..." \ |
| echo "Starting nginx..." \ |
| service nginx start \ |
| echo "Starting backend API..." \ |
| exec python -m uvicorn backend.app.main:app --host 127.0.0.1 --port 8000 --workers 1' > /app/start.sh && \ |
| chmod +x /app/start.sh |
|
|
| |
| EXPOSE 7860 |
|
|
| |
| ENV USE_EXTREME_OPTIMIZATION=true |
| ENV MAX_MEMORY_GB=3 |
| ENV PYTHONUNBUFFERED=1 |
|
|
| |
| CMD ["/app/start.sh"] |