First version
This commit is contained in:
commit
02365a6379
5 changed files with 525 additions and 0 deletions
180
.dockerignore
Normal file
180
.dockerignore
Normal file
|
@ -0,0 +1,180 @@
|
||||||
|
.git
|
||||||
|
.home
|
||||||
|
.data
|
||||||
|
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
share/python-wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.nox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
*.py,cover
|
||||||
|
.hypothesis/
|
||||||
|
.pytest_cache/
|
||||||
|
cover/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
db.sqlite3
|
||||||
|
db.sqlite3-journal
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
.pybuilder/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# IPython
|
||||||
|
profile_default/
|
||||||
|
ipython_config.py
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
# For a library or package, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# .python-version
|
||||||
|
|
||||||
|
# pipenv
|
||||||
|
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||||
|
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||||
|
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||||
|
# install all needed dependencies.
|
||||||
|
#Pipfile.lock
|
||||||
|
|
||||||
|
# poetry
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||||
|
#poetry.lock
|
||||||
|
|
||||||
|
# pdm
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||||
|
#pdm.lock
|
||||||
|
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||||
|
# in version control.
|
||||||
|
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
||||||
|
.pdm.toml
|
||||||
|
.pdm-python
|
||||||
|
.pdm-build/
|
||||||
|
|
||||||
|
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||||
|
__pypackages__/
|
||||||
|
|
||||||
|
# Celery stuff
|
||||||
|
celerybeat-schedule
|
||||||
|
celerybeat.pid
|
||||||
|
|
||||||
|
# SageMath parsed files
|
||||||
|
*.sage.py
|
||||||
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
.spyproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# mkdocs documentation
|
||||||
|
/site
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.mypy_cache/
|
||||||
|
.dmypy.json
|
||||||
|
dmypy.json
|
||||||
|
|
||||||
|
# Pyre type checker
|
||||||
|
.pyre/
|
||||||
|
|
||||||
|
# pytype static type analyzer
|
||||||
|
.pytype/
|
||||||
|
|
||||||
|
# Cython debug symbols
|
||||||
|
cython_debug/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||||
|
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
|
#.idea/
|
||||||
|
|
||||||
|
docker-compose.override.yml
|
||||||
|
common.override.yml
|
||||||
|
|
||||||
|
.data/
|
||||||
|
.home/
|
||||||
|
tmp/
|
||||||
|
|
||||||
|
.joe_state
|
||||||
|
.plandex/
|
||||||
|
.plandex-home/
|
||||||
|
.bash_history
|
||||||
|
.cache
|
||||||
|
.local
|
176
.gitignore
vendored
Normal file
176
.gitignore
vendored
Normal file
|
@ -0,0 +1,176 @@
|
||||||
|
# Byte-compiled / optimized / DLL files
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
|
||||||
|
# C extensions
|
||||||
|
*.so
|
||||||
|
|
||||||
|
# Distribution / packaging
|
||||||
|
.Python
|
||||||
|
build/
|
||||||
|
develop-eggs/
|
||||||
|
dist/
|
||||||
|
downloads/
|
||||||
|
eggs/
|
||||||
|
.eggs/
|
||||||
|
lib/
|
||||||
|
lib64/
|
||||||
|
parts/
|
||||||
|
sdist/
|
||||||
|
var/
|
||||||
|
wheels/
|
||||||
|
share/python-wheels/
|
||||||
|
*.egg-info/
|
||||||
|
.installed.cfg
|
||||||
|
*.egg
|
||||||
|
MANIFEST
|
||||||
|
|
||||||
|
# PyInstaller
|
||||||
|
# Usually these files are written by a python script from a template
|
||||||
|
# before PyInstaller builds the exe, so as to inject date/other infos into it.
|
||||||
|
*.manifest
|
||||||
|
*.spec
|
||||||
|
|
||||||
|
# Installer logs
|
||||||
|
pip-log.txt
|
||||||
|
pip-delete-this-directory.txt
|
||||||
|
|
||||||
|
# Unit test / coverage reports
|
||||||
|
htmlcov/
|
||||||
|
.tox/
|
||||||
|
.nox/
|
||||||
|
.coverage
|
||||||
|
.coverage.*
|
||||||
|
.cache
|
||||||
|
nosetests.xml
|
||||||
|
coverage.xml
|
||||||
|
*.cover
|
||||||
|
*.py,cover
|
||||||
|
.hypothesis/
|
||||||
|
.pytest_cache/
|
||||||
|
cover/
|
||||||
|
|
||||||
|
# Translations
|
||||||
|
*.mo
|
||||||
|
*.pot
|
||||||
|
|
||||||
|
# Django stuff:
|
||||||
|
*.log
|
||||||
|
local_settings.py
|
||||||
|
db.sqlite3
|
||||||
|
db.sqlite3-journal
|
||||||
|
|
||||||
|
# Flask stuff:
|
||||||
|
instance/
|
||||||
|
.webassets-cache
|
||||||
|
|
||||||
|
# Scrapy stuff:
|
||||||
|
.scrapy
|
||||||
|
|
||||||
|
# Sphinx documentation
|
||||||
|
docs/_build/
|
||||||
|
|
||||||
|
# PyBuilder
|
||||||
|
.pybuilder/
|
||||||
|
target/
|
||||||
|
|
||||||
|
# Jupyter Notebook
|
||||||
|
.ipynb_checkpoints
|
||||||
|
|
||||||
|
# IPython
|
||||||
|
profile_default/
|
||||||
|
ipython_config.py
|
||||||
|
|
||||||
|
# pyenv
|
||||||
|
# For a library or package, you might want to ignore these files since the code is
|
||||||
|
# intended to run in multiple environments; otherwise, check them in:
|
||||||
|
# .python-version
|
||||||
|
|
||||||
|
# pipenv
|
||||||
|
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
|
||||||
|
# However, in case of collaboration, if having platform-specific dependencies or dependencies
|
||||||
|
# having no cross-platform support, pipenv may install dependencies that don't work, or not
|
||||||
|
# install all needed dependencies.
|
||||||
|
#Pipfile.lock
|
||||||
|
|
||||||
|
# poetry
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
|
||||||
|
# This is especially recommended for binary packages to ensure reproducibility, and is more
|
||||||
|
# commonly ignored for libraries.
|
||||||
|
# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
|
||||||
|
#poetry.lock
|
||||||
|
|
||||||
|
# pdm
|
||||||
|
# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
|
||||||
|
#pdm.lock
|
||||||
|
# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
|
||||||
|
# in version control.
|
||||||
|
# https://pdm.fming.dev/latest/usage/project/#working-with-version-control
|
||||||
|
.pdm.toml
|
||||||
|
.pdm-python
|
||||||
|
.pdm-build/
|
||||||
|
|
||||||
|
# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
|
||||||
|
__pypackages__/
|
||||||
|
|
||||||
|
# Celery stuff
|
||||||
|
celerybeat-schedule
|
||||||
|
celerybeat.pid
|
||||||
|
|
||||||
|
# SageMath parsed files
|
||||||
|
*.sage.py
|
||||||
|
|
||||||
|
# Environments
|
||||||
|
.env
|
||||||
|
.venv
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
env.bak/
|
||||||
|
venv.bak/
|
||||||
|
|
||||||
|
# Spyder project settings
|
||||||
|
.spyderproject
|
||||||
|
.spyproject
|
||||||
|
|
||||||
|
# Rope project settings
|
||||||
|
.ropeproject
|
||||||
|
|
||||||
|
# mkdocs documentation
|
||||||
|
/site
|
||||||
|
|
||||||
|
# mypy
|
||||||
|
.mypy_cache/
|
||||||
|
.dmypy.json
|
||||||
|
dmypy.json
|
||||||
|
|
||||||
|
# Pyre type checker
|
||||||
|
.pyre/
|
||||||
|
|
||||||
|
# pytype static type analyzer
|
||||||
|
.pytype/
|
||||||
|
|
||||||
|
# Cython debug symbols
|
||||||
|
cython_debug/
|
||||||
|
|
||||||
|
# PyCharm
|
||||||
|
# JetBrains specific template is maintained in a separate JetBrains.gitignore that can
|
||||||
|
# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
|
||||||
|
# and can be added to the global gitignore or merged into this file. For a more nuclear
|
||||||
|
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
|
||||||
|
#.idea/
|
||||||
|
|
||||||
|
docker-compose.override.yml
|
||||||
|
common.override.yml
|
||||||
|
|
||||||
|
.data/
|
||||||
|
.home/
|
||||||
|
tmp/
|
||||||
|
|
||||||
|
.joe_state
|
||||||
|
.plandex/
|
||||||
|
.plandex-home/
|
||||||
|
.bash_history
|
||||||
|
.cache
|
||||||
|
.local
|
86
Dockerfile
Normal file
86
Dockerfile
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
FROM buildpack-deps:bookworm
|
||||||
|
|
||||||
|
ARG SRV_UID="1000"
|
||||||
|
ARG SRV_GID="1000"
|
||||||
|
ARG SRV_VERSION="0"
|
||||||
|
ARG SRV_APT_GET_INSTALL=""
|
||||||
|
|
||||||
|
ENV SRV_UID="${SRV_UID}"
|
||||||
|
ENV SRV_GID="${SRV_GID}"
|
||||||
|
ENV SRV_VERSION="${SRV_VERSION}"
|
||||||
|
ENV SRV_APT_GET_INSTALL="${SRV_APT_GET_INSTALL}"
|
||||||
|
|
||||||
|
# Install Debian packages ----------------------------------------------------
|
||||||
|
|
||||||
|
ENV DEBIAN_FRONTEND="noninteractive"
|
||||||
|
|
||||||
|
RUN echo "locales locales/locales_to_be_generated multiselect en_US.UTF-8 UTF-8" > /debconf-preseed.txt \
|
||||||
|
&& echo "locales locales/default_environment_locale select en_US.UTF-8" >> /debconf-preseed.txt \
|
||||||
|
&& debconf-set-selections /debconf-preseed.txt && apt-get update -y \
|
||||||
|
&& apt-get update -y \
|
||||||
|
&& apt-get install -y git zip unzip curl ca-certificates build-essential \
|
||||||
|
${SRV_APT_GET_INSTALL} \
|
||||||
|
&& apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/log/* /var/cache/*
|
||||||
|
|
||||||
|
# Install Python -------------------------------------------------------------
|
||||||
|
|
||||||
|
WORKDIR /usr/src
|
||||||
|
|
||||||
|
ENV PYTHON_MAJOR="3"
|
||||||
|
ENV PYTHON_MINOR="10"
|
||||||
|
ENV PYTHON_VERSION="${PYTHON_MAJOR}.${PYTHON_MINOR}.16"
|
||||||
|
|
||||||
|
ENV PYTHON_DIR="/usr/local/python/${PYTHON_VERSION}"
|
||||||
|
ENV PATH="${PYTHON_DIR}/bin:${PATH}"
|
||||||
|
|
||||||
|
RUN mkdir -p /usr/src/python && cd /usr/src/python \
|
||||||
|
&& curl -sfSLO https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz \
|
||||||
|
&& tar --strip-components=1 -xzf Python-${PYTHON_VERSION}.tgz -C /usr/src/python \
|
||||||
|
&& rm Python-${PYTHON_VERSION}.tgz \
|
||||||
|
&& ./configure --prefix=${PYTHON_DIR} \
|
||||||
|
--enable-shared \
|
||||||
|
--enable-optimizations \
|
||||||
|
--enable-ipv6 \
|
||||||
|
LDFLAGS=-Wl,-rpath=${PYTHON_DIR}/lib,--disable-new-dtags \
|
||||||
|
&& make -j $(nproc) \
|
||||||
|
&& make -j $(nproc) altinstall \
|
||||||
|
&& ln -s ${PYTHON_DIR}/bin/python${PYTHON_MAJOR}.${PYTHON_MINOR} ${PYTHON_DIR}/bin/python${PYTHON_MAJOR} \
|
||||||
|
&& ln -s ${PYTHON_DIR}/bin/python${PYTHON_MAJOR} ${PYTHON_DIR}/bin/python \
|
||||||
|
&& ln -s ${PYTHON_DIR}/bin/pip${PYTHON_MAJOR}.${PYTHON_MINOR} ${PYTHON_DIR}/bin/pip \
|
||||||
|
&& cd .. && rm -rf /usr/src/python
|
||||||
|
|
||||||
|
RUN pip install ollama openai groq anthropic crewai crewai-tools \
|
||||||
|
composio_crewai
|
||||||
|
|
||||||
|
COPY ./docker-entrypoint.sh /docker-entrypoint.sh
|
||||||
|
|
||||||
|
# Install crewai user ---------------------------------------------------------
|
||||||
|
|
||||||
|
RUN mkdir /home/crewai /opt/rust \
|
||||||
|
&& groupadd -g ${SRV_GID} crewai \
|
||||||
|
&& useradd -s /bin/bash -d /home/crewai -u ${SRV_UID} -g ${SRV_GID} crewai \
|
||||||
|
&& chown ${SRV_UID}.${SRV_GID} /home/crewai /opt/rust \
|
||||||
|
&& rm -rf /tmp/*
|
||||||
|
|
||||||
|
# Activate crewai user --------------------------------------------------------
|
||||||
|
|
||||||
|
USER ${SRV_UID}:${SRV_GID}
|
||||||
|
|
||||||
|
RUN ln -s /app/.bash_history $HOME/.bash_history \
|
||||||
|
&& ln -s /app/.composio $HOME/.composio
|
||||||
|
|
||||||
|
VOLUME /app
|
||||||
|
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Install rustup --------------------------------------------------------------
|
||||||
|
|
||||||
|
ENV RUSTUP_HOME=/opt/rust/rustup
|
||||||
|
ENV CARGO_HOME=/opt/rust/cargo
|
||||||
|
|
||||||
|
ENV PATH="${PATH}:/opt/rust/cargo/bin"
|
||||||
|
|
||||||
|
RUN curl https://sh.rustup.rs -sSf | \
|
||||||
|
sh -s -- --default-toolchain stable --profile default --no-modify-path -y
|
||||||
|
|
||||||
|
ENTRYPOINT ["/docker-entrypoint.sh"]
|
60
README.md
Normal file
60
README.md
Normal file
|
@ -0,0 +1,60 @@
|
||||||
|
# CrewAI image
|
||||||
|
|
||||||
|
## How To Use
|
||||||
|
|
||||||
|
Best used as alias, like in `.bashrc` with:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
alias crewai="docker run --rm -it --env-file .env -v \$(pwd):/app src.ci/srv/crewai:latest"
|
||||||
|
```
|
||||||
|
|
||||||
|
With this alias you can then directly work with the image, just by using the command `crewai`, assuming you have the User ID 1000, else you might need to make a custom image, see ARGS.
|
||||||
|
|
||||||
|
You can directly go into a directory where you want to gather all your crews, and run the following commands to create a new crew and run the crew directly:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crewai create crew myvikings
|
||||||
|
cd myvikings
|
||||||
|
crewai run
|
||||||
|
```
|
||||||
|
|
||||||
|
You can also get into the environment of the image with `bash` or directly all the `composio` CLI tool.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
crewai bash
|
||||||
|
crewai composio
|
||||||
|
```
|
||||||
|
|
||||||
|
More to come
|
||||||
|
|
||||||
|
### Image Name
|
||||||
|
|
||||||
|
The image name for your Docker is **src.ci/srv/crewai:latest**. This is only applicable, if you do not need to change the User ID and Group ID.
|
||||||
|
|
||||||
|
### ARGS
|
||||||
|
|
||||||
|
For changing the ARGS, you need to copy the repository and build the image yourself with setting the necessary ARGS to get a new image. As convention, you could use the User ID as the tag name for your new image, we will not make an official tag that is just a number, so you will not collide here in the future. Of course, you can also just give it then a complete new image name, so that there can't be any collide. You can also *git submodule* the repository in a subdirectory and then add it with args to your Docker-Compose configuration, like in this example, assuming you put the submodule of the repository under *docker/crewai*:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
services:
|
||||||
|
crewai:
|
||||||
|
image: "src.ci/srv/crewai:1010"
|
||||||
|
build:
|
||||||
|
context: "docker/crewai"
|
||||||
|
args:
|
||||||
|
SRV_UID: "1010"
|
||||||
|
```
|
||||||
|
|
||||||
|
#### SRV_UID
|
||||||
|
|
||||||
|
User ID for the CrewAI process and so of the data (Default: 1000)
|
||||||
|
|
||||||
|
#### SRV_GID
|
||||||
|
|
||||||
|
Group ID for the CrewAI process and so of the data (Default: 1000)
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
### Email
|
||||||
|
|
||||||
|
You can also email me under [**getty@conflict.industries**](mailto:getty@conflict.industries)
|
23
docker-entrypoint.sh
Executable file
23
docker-entrypoint.sh
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
export IP=$( hostname -i )
|
||||||
|
|
||||||
|
cat <<EOF
|
||||||
|
__ _
|
||||||
|
___ _ ____ __/ /__ _ __ _____ ____ _(_)
|
||||||
|
/ __| '__\\ \\ / / / __| '__/ _ \\ \\ /\\ / / _\` | |
|
||||||
|
\\__ \\ | \\ V / / (__| | | __/\\ V V / (_| | |
|
||||||
|
|___/_| \\_/_/ \\___|_| \\___| \\_/\\_/ \\__,_|_|
|
||||||
|
|
||||||
|
-------------------------------------------------
|
||||||
|
IP: $IP
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if [[ $1 == "composio" ]]; then
|
||||||
|
exec $@
|
||||||
|
elif [[ $1 == "bash" ]]; then
|
||||||
|
exec $@
|
||||||
|
else
|
||||||
|
exec crewai $@
|
||||||
|
fi
|
Loading…
Add table
Add a link
Reference in a new issue