This PR enhances the Docker build and deployment process for the Arcade Worker by: - **Modularizing Docker Builds:** - Introduces a new `INSTALL_TOOLKITS` build argument in the `Dockerfile` to conditionally include toolkits. this enables the creation of a `arcadeai/worker-base` which can be used to build custom containers in a multi-stage build. an example of this is included in the example dir. - Adds `docker-base` Makefile target to build a lightweight base image without toolkits. - **Publishing to GitHub Container Registry (GHCR):** - Adds Makefile targets `publish-ghcr` and `gh-login` for pushing images to GHCR. - Supports publishing both base and full images with toolkits to GHCR. - **Docker Compose:** - Add Docker compose file and setup - Renames the `actor` service to `worker` - Adds an `nginx` service in `docker-compose.yml` to proxy requests to the Arcade Engine. - Introduces an `nginx.conf` file for the Nginx service. - **Streamlining Toolkit Installation:** - Moves toolkit installation from the `start.sh` script to the Docker build process. - Creates a `toolkits.txt` file to manage toolkit dependencies which can be edited easily when we want to add a new toolkit. Developers can also use this approach as shown in the example. - **Improving Configuration Files:** - Updates `docker.engine.yaml` and `env.example` to align with the new setup. TODO: - CI/CD needs to be adjusted so that images are pushed to ghcr on release. - AWS resources need to be renamed actor -> worker @EricGustin This can go in after the above two items are resolved. --------- Co-authored-by: Wils Dawson <wils@arcade-ai.com> Co-authored-by: Eric Gustin <34000337+EricGustin@users.noreply.github.com> Co-authored-by: sdreyer <sterling@arcade-ai.com> Co-authored-by: Sterling Dreyer <sdreyer21@gmail.com> Co-authored-by: Nate Barbettini <nathanaelb@gmail.com>
61 lines
1.5 KiB
Docker
61 lines
1.5 KiB
Docker
FROM python:3.10-slim
|
|
|
|
# Define build arguments with default values
|
|
ARG PORT=8001
|
|
ARG HOST=0.0.0.0
|
|
ARG VERSION=${VERSION:-0.1.0}
|
|
ARG INSTALL_TOOLKITS=true
|
|
|
|
# Set environment variables using the build arguments
|
|
ENV PORT=${PORT}
|
|
ENV HOST=${HOST}
|
|
ENV OTEL_ENABLE=false
|
|
ENV ARCADE_WORK_DIR=/app
|
|
|
|
# Install system dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
libssl-dev \
|
|
python3-dev \
|
|
curl \
|
|
&& apt-get clean \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app/arcade
|
|
|
|
# Copy the parent directory contents into the container
|
|
COPY ./dist ./arcade /app/arcade/
|
|
|
|
# Copy the toolkits.txt file into the container
|
|
COPY ./docker/toolkits.txt /app/arcade/
|
|
|
|
# Expose the port
|
|
EXPOSE $PORT
|
|
|
|
# List files for debugging purposes
|
|
RUN ls -la /app/arcade/
|
|
|
|
# Conditional installation based on version
|
|
RUN if [ ! "$(echo ${VERSION} | grep -E '\.dev0$')" ]; then \
|
|
echo "Installing wheel file" && \
|
|
python -m pip install ./arcade_ai-${VERSION}-py3-none-any.whl fastapi && \
|
|
python -m pip install -r ./requirements.txt; \
|
|
else \
|
|
echo "Installing from source" && \
|
|
cd /app/arcade && \
|
|
pip install poetry && \
|
|
poetry lock && \
|
|
poetry version 0.1.0 && \
|
|
pip install fastapi && \
|
|
pip install -r requirements.txt && \
|
|
pip install .; \
|
|
fi
|
|
|
|
# Conditionally install toolkits.txt dependencies
|
|
RUN if [ "$INSTALL_TOOLKITS" = "true" ] ; then \
|
|
python -m pip install -r ./toolkits.txt ; \
|
|
fi
|
|
|
|
# Run the arcade workerup (hidden cli command)
|
|
COPY docker/start.sh /app/start.sh
|
|
RUN chmod +x /app/start.sh
|
|
CMD ["/app/start.sh"]
|