diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000000..34557b85d4f1f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,74 @@ +FROM python:3.10-slim + +WORKDIR /app + +# Latest releases available at https://github.com/aptible/supercronic/releases +ARG TARGETARCH +ENV SUPERCRONIC_VERSION=v0.2.39 + +RUN set -ex && \ + apt-get update && \ + apt-get install -y --no-install-recommends curl ca-certificates && \ + case ${TARGETARCH} in \ + amd64) \ + export SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/${SUPERCRONIC_VERSION}/supercronic-linux-amd64; \ + export SUPERCRONIC_SHA1SUM=c98bbf82c5f648aaac8708c182cc83046fe48423; \ + export SUPERCRONIC=supercronic-linux-amd64; \ + ;; \ + arm64) \ + export SUPERCRONIC_URL=https://github.com/aptible/supercronic/releases/download/${SUPERCRONIC_VERSION}/supercronic-linux-arm64; \ + export SUPERCRONIC_SHA1SUM=5ef4ccc3d43f12d0f6c3763758bc37cc4e5af76e; \ + export SUPERCRONIC=supercronic-linux-arm64; \ + ;; \ + *) \ + echo "Unsupported architecture: ${TARGETARCH}"; \ + exit 1; \ + ;; \ + esac && \ + echo "Downloading supercronic for ${TARGETARCH} from ${SUPERCRONIC_URL}" && \ + # 重试机制:最多3次,每次超时30秒 + for i in 1 2 3; do \ + echo "Download attempt $i/3"; \ + if curl -fsSL --connect-timeout 30 --max-time 60 -o "$SUPERCRONIC" "$SUPERCRONIC_URL"; then \ + echo "Download successful"; \ + break; \ + else \ + echo "Download attempt $i failed"; \ + if [ $i -eq 3 ]; then \ + echo "All download attempts failed"; \ + exit 1; \ + fi; \ + sleep 2; \ + fi; \ + done && \ + echo "${SUPERCRONIC_SHA1SUM} ${SUPERCRONIC}" | sha1sum -c - && \ + chmod +x "$SUPERCRONIC" && \ + mv "$SUPERCRONIC" "/usr/local/bin/${SUPERCRONIC}" && \ + ln -s "/usr/local/bin/${SUPERCRONIC}" /usr/local/bin/supercronic && \ + supercronic -version && \ + apt-get remove -y curl && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* + +COPY requirements.txt . +RUN pip install --no-cache-dir -r requirements.txt + +COPY docker/manage.py . +COPY trendradar/ ./trendradar/ + +# 复制配置文件 +COPY config/ ./config/ + +# 复制 entrypoint.sh 并强制转换为 LF 格式 +COPY docker/entrypoint.sh /entrypoint.sh.tmp +RUN sed -i 's/\r$//' /entrypoint.sh.tmp && \ + mv /entrypoint.sh.tmp /entrypoint.sh && \ + chmod +x /entrypoint.sh && \ + chmod +x manage.py && \ + mkdir -p ./config ./output + +ENV PYTHONUNBUFFERED=1 \ + CONFIG_PATH=/app/config/config.yaml \ + FREQUENCY_WORDS_PATH=/app/config/frequency_words.txt + +ENTRYPOINT ["/entrypoint.sh"]