Really-amin commited on
Commit
470bf5f
Β·
verified Β·
1 Parent(s): e472fd5

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +43 -26
Dockerfile CHANGED
@@ -9,8 +9,6 @@ RUN apt-get update && apt-get install -y \
9
  gcc \
10
  g++ \
11
  pkg-config \
12
- curl \
13
- wget \
14
  && rm -rf /var/lib/apt/lists/*
15
 
16
  # Upgrade pip and install wheel
@@ -23,6 +21,8 @@ ENV PATH="/opt/venv/bin:$PATH"
23
  # Copy requirements and install dependencies
24
  WORKDIR /build
25
  COPY requirements.txt .
 
 
26
  RUN pip install --no-cache-dir -r requirements.txt
27
 
28
  # ────────────────
@@ -30,7 +30,7 @@ RUN pip install --no-cache-dir -r requirements.txt
30
  # ────────────────
31
  FROM python:3.10-slim
32
 
33
- # Create non-root user
34
  RUN groupadd -g 1000 appuser && useradd -r -u 1000 -g appuser appuser
35
 
36
  # Install runtime dependencies
@@ -45,6 +45,21 @@ RUN apt-get update && apt-get install -y \
45
  libxext6 \
46
  libxrender-dev \
47
  libgomp1 \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  sqlite3 \
49
  && rm -rf /var/lib/apt/lists/* \
50
  && apt-get clean
@@ -56,27 +71,26 @@ ENV PATH="/opt/venv/bin:$PATH"
56
  # Set working directory
57
  WORKDIR /app
58
 
59
- # Create necessary directories
60
- RUN mkdir -p /app/data /app/cache /app/logs /app/uploads /app/backups \
61
- && chown -R appuser:appuser /app
62
-
63
- # Copy project files
 
 
 
 
 
 
 
 
 
 
 
64
  COPY --chown=appuser:appuser . .
65
 
66
- # Add start script
67
- RUN echo '#!/bin/sh\n\
68
- set -e\n\
69
- if [ -f "/app/main.py" ]; then\n\
70
- TARGET="main:app"\n\
71
- elif [ -f "/app/app/main.py" ]; then\n\
72
- TARGET="app.main:app"\n\
73
- else\n\
74
- echo "❌ No main.py found. Exiting..."\n\
75
- exit 1\n\
76
- fi\n\
77
- echo "βœ… Starting FastAPI using $TARGET ..."\n\
78
- exec uvicorn $TARGET --host 0.0.0.0 --port 8000 --workers 1 --log-level info\n\
79
- ' > /app/start.sh && chmod +x /app/start.sh
80
 
81
  # Environment variables
82
  ENV PYTHONPATH=/app
@@ -91,15 +105,18 @@ ENV REDIS_HOST=redis
91
  ENV REDIS_PORT=6379
92
  ENV REDIS_URL=redis://redis:6379/0
93
 
94
- # Use non-root user
95
  USER appuser
96
 
97
  # Expose port
98
  EXPOSE 8000
99
 
100
- # Health check
101
  HEALTHCHECK --interval=45s --timeout=30s --start-period=180s --retries=10 \
102
  CMD curl -fs http://localhost:8000/ping || exit 1
103
 
104
- # Default command
105
- CMD ["./start.sh"]
 
 
 
 
9
  gcc \
10
  g++ \
11
  pkg-config \
 
 
12
  && rm -rf /var/lib/apt/lists/*
13
 
14
  # Upgrade pip and install wheel
 
21
  # Copy requirements and install dependencies
22
  WORKDIR /build
23
  COPY requirements.txt .
24
+
25
+ # Install Python packages
26
  RUN pip install --no-cache-dir -r requirements.txt
27
 
28
  # ────────────────
 
30
  # ────────────────
31
  FROM python:3.10-slim
32
 
33
+ # Create non-root user with specific UID/GID for compatibility
34
  RUN groupadd -g 1000 appuser && useradd -r -u 1000 -g appuser appuser
35
 
36
  # Install runtime dependencies
 
45
  libxext6 \
46
  libxrender-dev \
47
  libgomp1 \
48
+ libgbm1 \
49
+ libxss1 \
50
+ libgtk-3-0 \
51
+ libxtst6 \
52
+ libxrandr2 \
53
+ libasound2 \
54
+ libpangocairo-1.0-0 \
55
+ libatk1.0-0 \
56
+ libcairo-gobject2 \
57
+ libgdk-pixbuf2.0-0 \
58
+ libffi-dev \
59
+ libssl-dev \
60
+ build-essential \
61
+ curl \
62
+ wget \
63
  sqlite3 \
64
  && rm -rf /var/lib/apt/lists/* \
65
  && apt-get clean
 
71
  # Set working directory
72
  WORKDIR /app
73
 
74
+ # Create all necessary directories with proper permissions
75
+ RUN mkdir -p \
76
+ /app/data \
77
+ /app/database \
78
+ /app/cache \
79
+ /app/logs \
80
+ /app/uploads \
81
+ /app/backups \
82
+ /app/frontend \
83
+ /tmp/app_fallback \
84
+ && chown -R appuser:appuser /app \
85
+ && chown -R appuser:appuser /tmp/app_fallback \
86
+ && chmod -R 755 /app \
87
+ && chmod -R 777 /tmp/app_fallback
88
+
89
+ # Copy application files with proper ownership
90
  COPY --chown=appuser:appuser . .
91
 
92
+ # Make startup script executable if exists
93
+ RUN if [ -f start.sh ]; then chmod +x start.sh; fi
 
 
 
 
 
 
 
 
 
 
 
 
94
 
95
  # Environment variables
96
  ENV PYTHONPATH=/app
 
105
  ENV REDIS_PORT=6379
106
  ENV REDIS_URL=redis://redis:6379/0
107
 
108
+ # Switch to non-root user BEFORE any file operations
109
  USER appuser
110
 
111
  # Expose port
112
  EXPOSE 8000
113
 
114
+ # Optimized health check
115
  HEALTHCHECK --interval=45s --timeout=30s --start-period=180s --retries=10 \
116
  CMD curl -fs http://localhost:8000/ping || exit 1
117
 
118
+ # Pre-create directories as appuser
119
+ RUN mkdir -p /app/data /app/logs /app/cache /app/uploads /app/backups
120
+
121
+ # Default CMD with error handling and correct import path
122
+ CMD ["sh", "-c", "python -c 'import os; os.makedirs(\"/app/data\", exist_ok=True); os.makedirs(\"/app/logs\", exist_ok=True); print(\"=== Application Startup at $(date) ===\")' && uvicorn app.main:app --host 0.0.0.0 --port 8000 --workers 1 --log-level info"]