Implement unified Oracle mode support with auto-detection
- Unified Dockerfile with thick/thin mode auto-detection - Single docker-compose.yaml with build arguments - Auto-detect logic: thick mode for Oracle 10g/11g, thin mode for 12.1+ - Simplified .env configuration with clear mode selection - Updated admin.py with FORCE_THIN_MODE and INSTANTCLIENTPATH support - Added comprehensive documentation for both deployment modes - Container tested successfully with thick mode for Oracle 11g compatibility 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -1,33 +1,38 @@
|
||||
# Multi-stage build for Oracle Instant Client + Python Flask
|
||||
FROM python:3.11.4-slim-buster as oracle_base
|
||||
# UNIFIED Dockerfile - AUTO-DETECT Thick/Thin Mode
|
||||
FROM python:3.11-slim as base
|
||||
|
||||
# Installing Oracle instant client
|
||||
WORKDIR /opt/oracle
|
||||
RUN apt-get update && apt-get install -y libaio1 wget unzip curl \
|
||||
&& wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip \
|
||||
&& unzip instantclient-basiclite-linuxx64.zip \
|
||||
&& rm -f instantclient-basiclite-linuxx64.zip \
|
||||
&& cd /opt/oracle/instantclient* \
|
||||
&& rm -f *jdbc* *occi* *mysql* *README *jar uidrvci genezi adrci \
|
||||
&& echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf \
|
||||
&& ldconfig
|
||||
# Set argument for build mode (thick by default for compatibility)
|
||||
ARG ORACLE_MODE=thick
|
||||
|
||||
# Application layer
|
||||
FROM oracle_base
|
||||
# Base application setup
|
||||
WORKDIR /app
|
||||
|
||||
# Copy TNS configuration for Oracle connection
|
||||
COPY tnsnames.ora /app/tnsnames.ora
|
||||
COPY requirements.txt /app/requirements.txt
|
||||
|
||||
# Install Python dependencies
|
||||
RUN pip3 install -r requirements.txt
|
||||
|
||||
# Copy application code
|
||||
# Oracle Instant Client installation (only if thick mode)
|
||||
RUN if [ "$ORACLE_MODE" = "thick" ] ; then \
|
||||
apt-get update && apt-get install -y libaio-dev wget unzip curl && \
|
||||
mkdir -p /opt/oracle && cd /opt/oracle && \
|
||||
wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basiclite-linuxx64.zip && \
|
||||
unzip instantclient-basiclite-linuxx64.zip && \
|
||||
rm -f instantclient-basiclite-linuxx64.zip && \
|
||||
cd /opt/oracle/instantclient* && \
|
||||
rm -f *jdbc* *occi* *mysql* *README *jar uidrvci genezi adrci && \
|
||||
echo /opt/oracle/instantclient* > /etc/ld.so.conf.d/oracle-instantclient.conf && \
|
||||
ldconfig && \
|
||||
ln -sf /usr/lib/x86_64-linux-gnu/libaio.so.1t64 /usr/lib/x86_64-linux-gnu/libaio.so.1 ; \
|
||||
else \
|
||||
echo "Thin mode - skipping Oracle Instant Client installation" ; \
|
||||
fi
|
||||
|
||||
# Copy application files
|
||||
COPY . .
|
||||
|
||||
# Health check endpoint
|
||||
# Create logs directory
|
||||
RUN mkdir -p /app/logs
|
||||
|
||||
# Expose port
|
||||
EXPOSE 5000
|
||||
|
||||
# Run Flask application
|
||||
# Run Flask application with auto-detect mode
|
||||
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "admin:app", "--reload", "--access-logfile", "-"]
|
||||
Reference in New Issue
Block a user