Files
Warracker/Dockerfile
sassanix c07d2079a2 Fixing database
Fixed API Connection Issue

Changed the Nginx proxy configuration from proxy_pass http://localhost:5000; to proxy_pass http://127.0.0.1:5000; in the container's configuration
This resolved the "ERR_CONNECTION_REFUSED" error by ensuring proper communication between Nginx and the Flask backend within the Docker container

Fixed Database Serialization Error

Updated the Python imports in app.py to properly include the date class: from datetime import datetime, timedelta, date
Modified the type checking code to correctly identify date objects: isinstance(value, (datetime, date))
This resolved the "isinstance() arg 2 must be a type or tuple of types" error that was preventing the application from retrieving warranty data

These changes resolved the connection issues between frontend and backend components, allowing the application to successfully add and display warranty information.
2025-03-02 12:08:07 -04:00

116 lines
2.9 KiB
Docker

# Start with Python base image
FROM python:3.9-slim-buster
# Install nginx and dependencies
RUN apt-get update && apt-get install -y \
nginx \
curl \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Set working directory
WORKDIR /app
# Install Python dependencies
COPY backend/requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Copy backend code
COPY backend/app.py .
# Create directory for uploads
RUN mkdir -p /data/uploads
# Copy frontend files
COPY frontend/index.html /var/www/html/
COPY frontend/script.js /var/www/html/
COPY frontend/style.css /var/www/html/
# Configure nginx
RUN rm /etc/nginx/sites-enabled/default
COPY nginx.conf /etc/nginx/conf.d/default.conf
# Create startup script
RUN echo '#!/bin/bash\n\
nginx\n\
gunicorn --bind 0.0.0.0:5000 --workers 4 app:app\n\
' > /app/start.sh && chmod +x /app/start.sh
# Create nginx configuration
RUN echo 'server {\n\
listen 80;\n\
server_name localhost;\n\
root /var/www/html;\n\
index index.html;\n\
\n\
# Enable gzip compression\n\
gzip on;\n\
gzip_types text/plain text/css application/javascript application/json;\n\
\n\
location / {\n\
try_files $uri $uri/ /index.html;\n\
}\n\
\n\
# Proxy API requests to backend\n\
location /api/ {\n\
proxy_pass http://127.0.0.1:5000;\n\
proxy_set_header Host $host;\n\
proxy_set_header X-Real-IP $remote_addr;\n\
}\n\
\n\
# Proxy uploads to backend\n\
location /uploads/ {\n\
proxy_pass http://localhost:5000;\n\
proxy_set_header Host $host;\n\
proxy_set_header X-Real-IP $remote_addr;\n\
}\n\
\n\
# Cache static assets\n\
location ~* \.(css|js|jpg|jpeg|png|gif|ico|svg)$ {\n\
expires 7d;\n\
add_header Cache-Control "public, max-age=604800";\n\
}\n\
}' > /etc/nginx/conf.d/default.conf
# Expose port
EXPOSE 80
# Define health check
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \
CMD curl -f http://localhost/api/warranties || exit 1
# Set environment variables
ENV PYTHONUNBUFFERED=1
# Install supervisor to manage multiple processes
RUN apt-get update && apt-get install -y supervisor && apt-get clean
RUN mkdir -p /var/log/supervisor
# Create supervisor configuration
COPY <<EOF /etc/supervisor/conf.d/supervisord.conf
[supervisord]
nodaemon=true
user=root
[program:nginx]
command=nginx -g "daemon off;"
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:gunicorn]
command=gunicorn --bind 0.0.0.0:5000 --workers 4 app:app
directory=/app
autostart=true
autorestart=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
EOF
# Start supervisor
CMD ["/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]