# Use the official Python image from the Docker Hub | |
FROM python:3.10-slim | |
# Set the working directory in the container | |
WORKDIR /app | |
# Install git and git-lfs | |
RUN apt-get update \ | |
&& apt-get install -y git git-lfs libsndfile1 nginx \ | |
&& apt-get clean \ | |
&& rm -rf /var/lib/apt/lists/* \ | |
&& git lfs install | |
# Setup nginx folders and permissions | |
RUN mkdir -p /var/cache/nginx \ | |
/var/log/nginx \ | |
/var/lib/nginx | |
RUN touch /var/run/nginx.pid | |
RUN useradd -m -u 1000 user | |
RUN chown -R user:user /var/cache/nginx \ | |
/var/log/nginx \ | |
/var/lib/nginx \ | |
/var/run/nginx.pid | |
# Copy Nginx configuration | |
COPY --chown=user nginx.conf /etc/nginx/sites-enabled/app.conf | |
# Remove default config and Test nginx | |
RUN rm /etc/nginx/sites-enabled/default && nginx -t && service nginx start | |
# Copy the requirements file into the container | |
COPY --chown=user requirements.txt . | |
# Install the required packages | |
RUN pip install --no-cache-dir -r requirements.txt \ | |
# Install gruut[sw] separately | |
&& pip install -f 'https://synesthesiam.github.io/prebuilt-apps/' 'gruut[sw]' | |
# Copy the rest of the application code into the container | |
COPY --chown=user . . | |
# Expose the port the app runs on (from nginx) | |
EXPOSE 7860 | |
HEALTHCHECK --interval=10s --timeout=5s --start-period=5s --retries=3 \ | |
CMD ["sh", "/app/healthcheck.sh"] | |
# Use exec form to call the script | |
CMD ["/app/startup.sh"] | |