py2apk / Dockerfile
broadfield-dev's picture
Update Dockerfile
faf4f38 verified
FROM python:3.11-slim
# Create a non-root user and set up home directory
RUN useradd -m -u 1000 appuser && \
mkdir -p /home/appuser/.cache /home/appuser/.local && \
chown -R appuser:appuser /home/appuser
# Set working directory
WORKDIR /app
# Install system dependencies for Android SDK, Briefcase, and native builds
RUN apt-get update && apt-get install -y \
openjdk-17-jdk \
git \
unzip \
wget \
build-essential \
pkg-config \
libcairo2-dev \
meson \
ninja-build \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# Ensure pip is installed and up-to-date
RUN python3 -m ensurepip --upgrade && \
python3 -m pip install --no-cache-dir --upgrade pip
# Install Python dependencies as root
COPY requirements.txt .
RUN python3 -m pip install --no-cache-dir -r requirements.txt
# Set up Android SDK
ENV ANDROID_HOME=/opt/android-sdk
ENV ANDROID_SDK_ROOT=/opt/android-sdk
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
RUN mkdir -p $ANDROID_HOME/cmdline-tools && \
wget -q https://dl.google.com/android/repository/commandlinetools-linux-9477386_latest.zip -O tools.zip && \
unzip tools.zip -d $ANDROID_HOME/cmdline-tools && \
mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/latest && \
rm tools.zip
# Update PATH to include Android SDK tools and user-local bin
ENV PATH=$PATH:$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:/usr/local/bin:/home/appuser/.local/bin
# Install Android SDK components
RUN sdkmanager "build-tools;33.0.0" "platforms;android-33" "platform-tools" "ndk;25.2.9519653"
# Accept Android SDK licenses
RUN mkdir -p $ANDROID_HOME/licenses && \
echo "24333f8a63b6825ea9c5514f83c2829b004d1fee" > $ANDROID_HOME/licenses/android-sdk-license && \
echo "84831b9409646a918e30573bab4c9c91346d8abd" > $ANDROID_HOME/licenses/android-sdk-preview-license && \
echo "d975f751698a77b662f1254ddbeed3901e976f5a" > $ANDROID_HOME/licenses/intel-android-extra-license && \
chown -R appuser:appuser $ANDROID_HOME
# Verify SDK installation
RUN sdkmanager --list --verbose
# Copy application code
COPY app.py .
# Set up persistent storage
RUN mkdir -p /persistent_storage && chown appuser:appuser /persistent_storage
# Switch to non-root user
USER appuser
# Expose port
EXPOSE 7860
CMD ["python3", "app.py"]