Spaces:
Sleeping
Sleeping
File size: 4,617 Bytes
71b4454 dad8bfa 71b4454 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 | FROM python:3.11-slim-bookworm
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
ANDROID_HOME=/opt/android-sdk \
ANDROID_SDK_ROOT=/opt/android-sdk \
ANDROID_BUILD_TOOLS_VERSION=36.0.0 \
ANDROID_PLATFORM_VERSION=36 \
PATH=/opt/android-sdk/cmdline-tools/latest/bin:/opt/android-sdk/platform-tools:/opt/android-sdk/build-tools/36.0.0:$PATH
WORKDIR /app
RUN apt-get update && \
apt-get install -y --no-install-recommends \
bash \
ca-certificates \
curl \
wget \
git \
unzip \
zip \
openjdk-17-jdk-headless \
build-essential \
libstdc++6 \
libc6 \
zlib1g && \
rm -rf /var/lib/apt/lists/*
###############################################################################
# Android command-line tools
#
# Official Linux command-line tools release.
# SHA-256 is verified before extraction.
###############################################################################
ARG ANDROID_CMDLINE_TOOLS_URL="https://dl.google.com/android/repository/commandlinetools-linux-15859902_latest.zip"
ARG ANDROID_CMDLINE_TOOLS_SHA256="4e4c464f145a7512b57d088ac6c278c03c9eea610886b35a5e0804e74eedf583"
RUN set -eux; \
mkdir -p "${ANDROID_SDK_ROOT}/cmdline-tools"; \
cd /tmp; \
curl -fsSL --retry 5 --retry-delay 3 \
"${ANDROID_CMDLINE_TOOLS_URL}" \
-o commandlinetools.zip; \
echo "${ANDROID_CMDLINE_TOOLS_SHA256} commandlinetools.zip" | sha256sum -c -; \
unzip -q commandlinetools.zip -d "${ANDROID_SDK_ROOT}/cmdline-tools"; \
mv "${ANDROID_SDK_ROOT}/cmdline-tools/cmdline-tools" \
"${ANDROID_SDK_ROOT}/cmdline-tools/latest"; \
rm -f commandlinetools.zip
###############################################################################
# Android SDK packages required by native_apk_builder
###############################################################################
RUN yes | sdkmanager --sdk_root="${ANDROID_SDK_ROOT}" --licenses >/dev/null || true
RUN sdkmanager --sdk_root="${ANDROID_SDK_ROOT}" \
"platform-tools" \
"platforms;android-${ANDROID_PLATFORM_VERSION}" \
"build-tools;${ANDROID_BUILD_TOOLS_VERSION}"
###############################################################################
# Verify the complete native Android toolchain during image construction.
###############################################################################
RUN set -eux; \
test -x "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/aapt2"; \
test -x "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/d8"; \
test -x "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/zipalign"; \
test -x "${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/apksigner"; \
test -f "${ANDROID_SDK_ROOT}/platforms/android-${ANDROID_PLATFORM_VERSION}/android.jar"; \
java -version; \
"${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/aapt2" version; \
"${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/d8" --version; \
"${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/zipalign" -v 4 /dev/null /dev/null 2>/dev/null || true; \
"${ANDROID_SDK_ROOT}/build-tools/${ANDROID_BUILD_TOOLS_VERSION}/apksigner" --version
###############################################################################
# Python dependencies
###############################################################################
COPY requirements.txt .
RUN python -m pip install --upgrade pip && \
python -m pip install --no-cache-dir -r requirements.txt
###############################################################################
# Application
###############################################################################
COPY . .
RUN python - <<'PY'
import importlib
for module in (
"fastapi",
"uvicorn",
"asyncpg",
"edge_tts",
):
importlib.import_module(module)
import app
assert app.app.__class__.__name__ == "FastAPI"
print("[OK] Production application import passed")
PY
###############################################################################
# Runtime verification
###############################################################################
RUN set -eux; \
command -v java; \
command -v aapt2; \
command -v d8; \
command -v zipalign; \
command -v apksigner; \
test -f "${ANDROID_SDK_ROOT}/platforms/android-${ANDROID_PLATFORM_VERSION}/android.jar"
EXPOSE 7860
CMD ["python", "-m", "uvicorn", "app:app", "--host", "0.0.0.0", "--port", "7860"]
|