Add File
This commit is contained in:
126
Dockerfile
Normal file
126
Dockerfile
Normal file
@@ -0,0 +1,126 @@
|
||||
# LandPPT Docker Image
|
||||
# Multi-stage build for minimal image size
|
||||
|
||||
# Build stage
|
||||
FROM python:3.11-slim AS builder
|
||||
|
||||
# Set environment variables for build
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
PIP_NO_CACHE_DIR=1 \
|
||||
PIP_DISABLE_PIP_VERSION_CHECK=1 \
|
||||
UV_PROJECT_ENVIRONMENT=/opt/venv
|
||||
|
||||
# Install build dependencies
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
curl \
|
||||
git \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Install uv for faster dependency management
|
||||
RUN pip install --no-cache-dir uv
|
||||
|
||||
# Set work directory and copy dependency files
|
||||
WORKDIR /app
|
||||
COPY pyproject.toml uv.lock* README.md ./
|
||||
COPY src/ ./src/
|
||||
|
||||
# Install Python dependencies using uv
|
||||
# uv sync will create venv at UV_PROJECT_ENVIRONMENT and install all dependencies
|
||||
RUN uv sync && \
|
||||
uv pip install apryse-sdk>=11.5.0 --extra-index-url=https://pypi.apryse.com && \
|
||||
# Verify key packages are installed
|
||||
/opt/venv/bin/python -c "import uvicorn; import playwright; import fastapi" && \
|
||||
# Clean up build artifacts
|
||||
find /opt/venv -name "*.pyc" -delete && \
|
||||
find /opt/venv -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true
|
||||
|
||||
# Production stage
|
||||
FROM python:3.11-slim AS production
|
||||
|
||||
# Set environment variables
|
||||
ENV PYTHONUNBUFFERED=1 \
|
||||
PYTHONDONTWRITEBYTECODE=1 \
|
||||
PYTHONPATH=/app/src:/opt/venv/lib/python3.11/site-packages \
|
||||
PATH=/opt/venv/bin:$PATH \
|
||||
PLAYWRIGHT_BROWSERS_PATH=/root/.cache/ms-playwright \
|
||||
HOME=/root \
|
||||
VIRTUAL_ENV=/opt/venv
|
||||
|
||||
# Install essential runtime dependencies and wkhtmltopdf
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends \
|
||||
poppler-utils \
|
||||
libmagic1 \
|
||||
ca-certificates \
|
||||
curl \
|
||||
wget \
|
||||
chromium \
|
||||
libgomp1 \
|
||||
fonts-liberation \
|
||||
fonts-noto-cjk \
|
||||
fontconfig \
|
||||
netcat-openbsd \
|
||||
xfonts-75dpi \
|
||||
xfonts-base \
|
||||
libjpeg62-turbo \
|
||||
libxrender1 \
|
||||
libfontconfig1 \
|
||||
libx11-6 \
|
||||
libxext6 \
|
||||
&& \
|
||||
# Download and install wkhtmltopdf from official releases
|
||||
WKHTMLTOPDF_VERSION="0.12.6.1-3" && \
|
||||
wget -q "https://github.com/wkhtmltopdf/packaging/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}.bookworm_amd64.deb" -O /tmp/wkhtmltox.deb && \
|
||||
dpkg -i /tmp/wkhtmltox.deb || apt-get install -f -y && \
|
||||
rm /tmp/wkhtmltox.deb && \
|
||||
fc-cache -fv && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* /root/.cache
|
||||
|
||||
# Create non-root user (for compatibility, but run as root)
|
||||
RUN groupadd -r landppt && \
|
||||
useradd -r -g landppt -m -d /home/landppt landppt && \
|
||||
mkdir -p /home/landppt/.cache/ms-playwright /root/.cache/ms-playwright
|
||||
|
||||
# Copy Python packages from builder
|
||||
COPY --from=builder /opt/venv /opt/venv
|
||||
|
||||
# Install Playwright browsers (chromium) - package already installed in builder stage
|
||||
RUN python -m playwright install chromium && \
|
||||
chown -R landppt:landppt /home/landppt && \
|
||||
rm -rf /tmp/* /var/tmp/*
|
||||
|
||||
# Set work directory
|
||||
WORKDIR /app
|
||||
|
||||
# Copy application code (minimize layers)
|
||||
COPY run.py ./
|
||||
COPY src/ ./src/
|
||||
COPY template_examples/ ./template_examples/
|
||||
COPY docker-healthcheck.sh docker-entrypoint.sh ./
|
||||
COPY .env.example ./.env
|
||||
|
||||
# Create directories and set permissions in one layer
|
||||
RUN chmod +x docker-healthcheck.sh docker-entrypoint.sh && \
|
||||
mkdir -p temp/ai_responses_cache temp/style_genes_cache temp/summeryanyfile_cache temp/templates_cache \
|
||||
research_reports lib/Linux lib/MacOS lib/Windows uploads data && \
|
||||
chown -R landppt:landppt /app /home/landppt && \
|
||||
chmod -R 755 /app /home/landppt && \
|
||||
chmod 666 /app/.env
|
||||
|
||||
# Keep landppt user but run as root to handle file permissions
|
||||
# USER landppt
|
||||
|
||||
# Expose port
|
||||
EXPOSE 8000
|
||||
|
||||
# Minimal health check
|
||||
HEALTHCHECK --interval=30s --timeout=10s --start-period=30s --retries=2 \
|
||||
CMD ./docker-healthcheck.sh
|
||||
|
||||
# Set entrypoint and command
|
||||
ENTRYPOINT ["./docker-entrypoint.sh"]
|
||||
CMD ["python", "run.py"]
|
||||
Reference in New Issue
Block a user