Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 17 additions & 17 deletions docker-compose_build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,36 +8,36 @@ services:
- POSTGRES_DB=${POSTGRES_DB}
- POSTGRES_HOST_AUTH_METHOD=${POSTGRES_HOST_AUTH_METHOD}
volumes:
- ./data/postgres/:/var/lib/postgresql/data/
# - 4cat_db:/var/lib/postgresql/data/
# - ./data/postgres/:/var/lib/postgresql/data/
- 4cat_db:/var/lib/postgresql/data/
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER}" ]
interval: 5s
timeout: 5s
retries: 5

backend:
image: 4cat
image: 4cat:slim
build:
context: .
dockerfile: docker/Dockerfile
dockerfile: docker/Dockerfile_slim
container_name: 4cat_backend
env_file:
- .env
depends_on:
db:
condition: service_healthy
volumes:
- ./data/datasets/:/usr/src/app/data/
- ./data/config/:/usr/src/app/config/
- ./data/logs/:/usr/src/app/logs/
# - 4cat_data:/usr/src/app/data/
# - 4cat_config:/usr/src/app/config/
# - 4cat_logs:/usr/src/app/logs/
# - ./data/datasets/:/usr/src/app/data/
# - ./data/config/:/usr/src/app/config/
# - ./data/logs/:/usr/src/app/logs/
- 4cat_data:/usr/src/app/data/
- 4cat_config:/usr/src/app/config/
- 4cat_logs:/usr/src/app/logs/
entrypoint: docker/docker-entrypoint.sh

frontend:
image: 4cat
image: 4cat:slim
container_name: 4cat_frontend
env_file:
- .env
Expand All @@ -48,12 +48,12 @@ services:
- ${SERVER_BIND_ADDRESS}:${PUBLIC_PORT}:5000
- ${TELEGRAM_PORT}:443
volumes:
- ./data/datasets/:/usr/src/app/data/
- ./data/config/:/usr/src/app/config/
- ./data/logs/:/usr/src/app/logs/
# - 4cat_data:/usr/src/app/data/
# - 4cat_config:/usr/src/app/config/
# - 4cat_logs:/usr/src/app/logs/
# - ./data/datasets/:/usr/src/app/data/
# - ./data/config/:/usr/src/app/config/
# - ./data/logs/:/usr/src/app/logs/
- 4cat_data:/usr/src/app/data/
- 4cat_config:/usr/src/app/config/
- 4cat_logs:/usr/src/app/logs/
command: ["docker/wait-for-backend.sh"]

volumes:
Expand Down
103 changes: 103 additions & 0 deletions docker/Dockerfile_slim
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
# Multi-stage build for 4CAT - Slim version
# Stage 1: Build stage with all build dependencies
FROM python:3.11-slim as builder

# Install build dependencies
RUN apt-get update && apt-get install -y \
# Build tools
build-essential \
gcc \
g++ \
# Development headers
libpq-dev \
python3-dev \
postgresql-server-dev-all \
# Git for any git-based dependencies
git \
# Additional build dependencies that might be needed
pkg-config \
libffi-dev \
libssl-dev \
# Clean up cache
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*

# Set working directory
WORKDIR /usr/src/app

# Set environment variables for building
ENV PYTHONUNBUFFERED=1
ENV PIP_NO_CACHE_DIR=1
ENV PIP_DISABLE_PIP_VERSION_CHECK=1

# Copy requirements and setup files first
COPY ./requirements.txt /usr/src/app/requirements.txt
COPY ./setup.py /usr/src/app/setup.py
COPY ./VERSION /usr/src/app/VERSION
COPY ./README.md /usr/src/app/README.md

# Copy only the extensions directory for dependency detection
COPY ./extensions /usr/src/app/extensions

# Create minimal directory structure that setup.py expects
RUN mkdir -p /usr/src/app/backend /usr/src/app/webtool /usr/src/app/datasources
RUN touch /usr/src/app/backend/__init__.py /usr/src/app/webtool/__init__.py /usr/src/app/datasources/__init__.py

# Install Python dependencies to a virtual environment
RUN python -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

# Upgrade pip and install wheel first
RUN pip install --upgrade pip

# Install build dependencies for Python packages
RUN pip install --no-cache-dir setuptools==78.1.0 wheel==0.46.1

# Install requirements with verbose output for debugging
RUN pip install --no-cache-dir --verbose -r requirements.txt

# Install gunicorn
RUN pip install --no-cache-dir gunicorn

# Stage 2: Runtime stage with minimal dependencies
FROM python:3.11-slim as runtime

# Install only runtime dependencies
RUN apt-get update && apt-get install -y \
# Runtime libraries only
libpq5 \
# Tools needed at runtime
curl \
netcat-traditional \
postgresql-client \
# Git for application use
git \
# Video processing (if needed)
#ffmpeg \
# Clean up
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* \
&& rm -rf /tmp/* \
&& rm -rf /var/tmp/*

# Copy virtual environment from builder stage
COPY --from=builder /opt/venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"

# Set working directory
WORKDIR /usr/src/app

# Ensure Python outputs everything
ENV PYTHONUNBUFFERED=1

# Copy application code
COPY . /usr/src/app/

# Set permissions for scripts
RUN chmod +x docker/wait-for-backend.sh docker/docker-entrypoint.sh

# Remove unnecessary files to save space
RUN find /usr/src/app -name "*.pyc" -delete && \
find /usr/src/app -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true && \
find /usr/src/app -name "*.pyo" -delete && \
find /usr/src/app -name ".pytest_cache" -type d -exec rm -rf {} + 2>/dev/null || true
Loading