FROM python:3.13-slim WORKDIR /app # Install system dependencies RUN apt-get update && apt-get install -y \ curl \ git \ libpq-dev \ gcc \ g++ \ python3-dev \ postgresql-client \ && rm -rf /var/lib/apt/lists/* # Build arguments for GitHub release deployment ARG RELEASE_VERSION=latest ARG GITHUB_TOKEN ARG GITHUB_REPO=ct/bmc_hub ARG GITEA_URL=https://g.bmcnetworks.dk # Copy requirements first for better caching COPY requirements.txt /tmp/requirements.txt # If RELEASE_VERSION is set and not "latest", pull from GitHub release # Otherwise, use local requirements RUN if [ "$RELEASE_VERSION" != "latest" ] && [ -n "$GITHUB_TOKEN" ]; then \ echo "Downloading release ${RELEASE_VERSION} from Gitea..." && \ curl -H "Authorization: token ${GITHUB_TOKEN}" \ -L "${GITEA_URL}/api/v1/repos/${GITHUB_REPO}/archive/${RELEASE_VERSION}.tar.gz" \ -o /tmp/release.tar.gz && \ tar -xzf /tmp/release.tar.gz --strip-components=1 -C /app && \ rm /tmp/release.tar.gz && \ echo "Installing dependencies from release..." && \ pip install --no-cache-dir -r requirements.txt; \ else \ echo "Using local files..." && \ pip install --no-cache-dir -r /tmp/requirements.txt; \ fi # Copy application code COPY . . # Create necessary directories RUN mkdir -p /app/logs /app/uploads /app/static /app/data # Expose port EXPOSE 8000 # Health check HEALTHCHECK --interval=30s --timeout=10s --retries=3 --start-period=40s \ CMD curl -f http://localhost:8000/health || exit 1 # Run application CMD ["python", "main.py"]