Update Dockerfile
Browse files- Dockerfile +67 -11
Dockerfile
CHANGED
|
@@ -1,6 +1,4 @@
|
|
| 1 |
-
# Dockerfile pour Apex Ores avec
|
| 2 |
-
# Ce Dockerfile lance à la fois l'application Flask ET le scheduler en arrière-plan
|
| 3 |
-
|
| 4 |
FROM python:3.11-bookworm
|
| 5 |
|
| 6 |
# Mettre à jour et installer les dépendances système
|
|
@@ -8,6 +6,8 @@ RUN apt-get update && apt-get install -y \
|
|
| 8 |
wkhtmltopdf \
|
| 9 |
xvfb \
|
| 10 |
supervisor \
|
|
|
|
|
|
|
| 11 |
&& rm -rf /var/lib/apt/lists/*
|
| 12 |
|
| 13 |
# Créer l'utilisateur
|
|
@@ -27,12 +27,60 @@ RUN pip install --no-cache-dir --upgrade -r requirements.txt
|
|
| 27 |
# Copier tout le code
|
| 28 |
COPY --chown=user . /app
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
# Créer la configuration supervisord
|
| 31 |
RUN echo '[supervisord]\n\
|
| 32 |
nodaemon=true\n\
|
| 33 |
user=root\n\
|
| 34 |
logfile=/var/log/supervisor/supervisord.log\n\
|
| 35 |
pidfile=/var/run/supervisord.pid\n\
|
|
|
|
| 36 |
\n\
|
| 37 |
[program:flask]\n\
|
| 38 |
command=flask run --host=0.0.0.0 --port=7860\n\
|
|
@@ -40,9 +88,13 @@ directory=/app\n\
|
|
| 40 |
user=user\n\
|
| 41 |
autostart=true\n\
|
| 42 |
autorestart=true\n\
|
| 43 |
-
stdout_logfile=/
|
| 44 |
-
|
| 45 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
\n\
|
| 47 |
[program:scheduler]\n\
|
| 48 |
command=python3 -m app.task_runner --daemon\n\
|
|
@@ -50,9 +102,13 @@ directory=/app\n\
|
|
| 50 |
user=user\n\
|
| 51 |
autostart=true\n\
|
| 52 |
autorestart=true\n\
|
| 53 |
-
stdout_logfile=/
|
| 54 |
-
|
| 55 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 56 |
|
| 57 |
# Variables d'environnement
|
| 58 |
ENV PYTHONPATH=/app
|
|
@@ -62,5 +118,5 @@ ENV PATH="/home/user/.local/bin:$PATH"
|
|
| 62 |
# Exposer le port Flask
|
| 63 |
EXPOSE 7860
|
| 64 |
|
| 65 |
-
# Commande de démarrage
|
| 66 |
-
CMD ["/
|
|
|
|
| 1 |
+
# Dockerfile pour Apex Ores avec PostgreSQL et diagnostics
|
|
|
|
|
|
|
| 2 |
FROM python:3.11-bookworm
|
| 3 |
|
| 4 |
# Mettre à jour et installer les dépendances système
|
|
|
|
| 6 |
wkhtmltopdf \
|
| 7 |
xvfb \
|
| 8 |
supervisor \
|
| 9 |
+
postgresql-client \
|
| 10 |
+
curl \
|
| 11 |
&& rm -rf /var/lib/apt/lists/*
|
| 12 |
|
| 13 |
# Créer l'utilisateur
|
|
|
|
| 27 |
# Copier tout le code
|
| 28 |
COPY --chown=user . /app
|
| 29 |
|
| 30 |
+
# Script de démarrage avec vérification de la DB
|
| 31 |
+
RUN echo '#!/bin/bash\n\
|
| 32 |
+
set -e\n\
|
| 33 |
+
\n\
|
| 34 |
+
echo "===== Application Startup at $(date) ====="\n\
|
| 35 |
+
echo "Environment variables:"\n\
|
| 36 |
+
echo "FLASK_ENV: $FLASK_ENV"\n\
|
| 37 |
+
echo "DATABASE_URL: ${DATABASE_URL:0:30}..." # Affiche seulement le début\n\
|
| 38 |
+
\n\
|
| 39 |
+
# Test de connexion PostgreSQL\n\
|
| 40 |
+
echo "Testing PostgreSQL connection..."\n\
|
| 41 |
+
python3 -c "\n\
|
| 42 |
+
import sys\n\
|
| 43 |
+
import os\n\
|
| 44 |
+
try:\n\
|
| 45 |
+
from sqlalchemy import create_engine, text\n\
|
| 46 |
+
db_url = os.environ.get(\"DATABASE_URL\")\n\
|
| 47 |
+
if not db_url:\n\
|
| 48 |
+
print(\"ERROR: DATABASE_URL not set\")\n\
|
| 49 |
+
sys.exit(1)\n\
|
| 50 |
+
engine = create_engine(db_url)\n\
|
| 51 |
+
with engine.connect() as conn:\n\
|
| 52 |
+
result = conn.execute(text(\"SELECT version();\"))\n\
|
| 53 |
+
print(f\"PostgreSQL connected: {result.scalar()[:50]}\")\n\
|
| 54 |
+
print(\"Database connection successful!\")\n\
|
| 55 |
+
except Exception as e:\n\
|
| 56 |
+
print(f\"ERROR connecting to database: {e}\")\n\
|
| 57 |
+
sys.exit(1)\n\
|
| 58 |
+
"\n\
|
| 59 |
+
\n\
|
| 60 |
+
# Initialiser la base de données\n\
|
| 61 |
+
echo "Initializing database..."\n\
|
| 62 |
+
python3 -c "\n\
|
| 63 |
+
from app import create_app, db\n\
|
| 64 |
+
app = create_app()\n\
|
| 65 |
+
with app.app_context():\n\
|
| 66 |
+
db.create_all()\n\
|
| 67 |
+
print(\"Database tables created successfully\")\n\
|
| 68 |
+
" || {\n\
|
| 69 |
+
echo "ERROR: Failed to initialize database"\n\
|
| 70 |
+
exit 1\n\
|
| 71 |
+
}\n\
|
| 72 |
+
\n\
|
| 73 |
+
echo "Starting supervisord..."\n\
|
| 74 |
+
exec /usr/bin/supervisord -c /etc/supervisor/conf.d/apex.conf\n\
|
| 75 |
+
' > /app/start.sh && chmod +x /app/start.sh
|
| 76 |
+
|
| 77 |
# Créer la configuration supervisord
|
| 78 |
RUN echo '[supervisord]\n\
|
| 79 |
nodaemon=true\n\
|
| 80 |
user=root\n\
|
| 81 |
logfile=/var/log/supervisor/supervisord.log\n\
|
| 82 |
pidfile=/var/run/supervisord.pid\n\
|
| 83 |
+
loglevel=info\n\
|
| 84 |
\n\
|
| 85 |
[program:flask]\n\
|
| 86 |
command=flask run --host=0.0.0.0 --port=7860\n\
|
|
|
|
| 88 |
user=user\n\
|
| 89 |
autostart=true\n\
|
| 90 |
autorestart=true\n\
|
| 91 |
+
stdout_logfile=/dev/stdout\n\
|
| 92 |
+
stdout_logfile_maxbytes=0\n\
|
| 93 |
+
stderr_logfile=/dev/stderr\n\
|
| 94 |
+
stderr_logfile_maxbytes=0\n\
|
| 95 |
+
environment=PYTHONPATH=/app,FLASK_APP=run.py\n\
|
| 96 |
+
startsecs=10\n\
|
| 97 |
+
startretries=3\n\
|
| 98 |
\n\
|
| 99 |
[program:scheduler]\n\
|
| 100 |
command=python3 -m app.task_runner --daemon\n\
|
|
|
|
| 102 |
user=user\n\
|
| 103 |
autostart=true\n\
|
| 104 |
autorestart=true\n\
|
| 105 |
+
stdout_logfile=/dev/stdout\n\
|
| 106 |
+
stdout_logfile_maxbytes=0\n\
|
| 107 |
+
stderr_logfile=/dev/stderr\n\
|
| 108 |
+
stderr_logfile_maxbytes=0\n\
|
| 109 |
+
environment=PYTHONPATH=/app\n\
|
| 110 |
+
startsecs=10\n\
|
| 111 |
+
startretries=3' > /etc/supervisor/conf.d/apex.conf
|
| 112 |
|
| 113 |
# Variables d'environnement
|
| 114 |
ENV PYTHONPATH=/app
|
|
|
|
| 118 |
# Exposer le port Flask
|
| 119 |
EXPOSE 7860
|
| 120 |
|
| 121 |
+
# Commande de démarrage avec script de vérification
|
| 122 |
+
CMD ["/app/start.sh"]
|