Project Content Server
# ----------------------------------------------
# 1st Stage: Build Python dependencies using uv
# ----------------------------------------------
FROM ghcr.io/astral-sh/uv:python3.12-bookworm-slim AS uv
WORKDIR /app
# Set environment variables for uv
ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy
ENV PYTHONPATH=/app/src
# Copy Python dependency files and install dependencies
RUN --mount=type=cache,target=/root/.cache/uv \
--mount=type=bind,source=uv.lock,target=uv.lock \
--mount=type=bind,source=pyproject.toml,target=pyproject.toml \
uv sync --frozen --no-install-project --no-dev --no-editable
# Copy the rest of the application code
ADD . /app
# Run uv sync again after copying the full code
RUN --mount=type=cache,target=/root/.cache/uv \
uv sync --frozen --no-dev --no-editable
# ------------------------------------------------
# (OPTIONAL) 2nd Stage: Install Node.js dependencies
# ------------------------------------------------
FROM node:18-slim AS node_builder
#
WORKDIR /app
#
## Create a minimal package.json for installing agent-twitter-client
RUN printf '{\n\
"name": "agent-twitter-client-setup",\n\
"version": "1.0.0",\n\
"dependencies": {\n\
"agent-twitter-client": "^0.0.18",\n\
"tough-cookie": "^4.0.0"\n\
}\n\
}\n' > package.json
#
## Install the required Node.js packages
RUN npm install
# --------------------------------------------
# 3rd Stage: Final runtime image
# --------------------------------------------
FROM python:3.12-slim-bookworm
WORKDIR /app
# Copy Python virtual environment from the uv stage
COPY --from=uv /app/.venv /app/.venv
# OPTIONAL Copy Node.js dependencies from the node_builder stage
COPY --from=node_builder /app/node_modules /app/node_modules
COPY --from=node_builder /app/package.json /app/package.json
# OPTIONAL Install Node.js in the runtime container
RUN apt-get update && \
apt-get install -y curl && \
curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
apt-get install -y nodejs && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# Set up environment variables for Agents and other
ENV PATH="/app/.venv/bin:$PATH"
ENV LOCAL_TIMEZONE=Europe/Warsaw
ENV LOG_LEVEL=DEBUG
# ElizaOS dependencies
ENV ELIZA_PATH=/app/eliza
ENV ELIZA_API_URL=http://192.168.1.14:5173/
# Twtitter dependencies
ENV TWITTER_USERNAME=
ENV TWITTER_PASSWORD=
ENV TWITTER_EMAIL=
ENV PERSONALITY_CONFIG=/app/eliza/charachter.json
ENV ANTHROPIC_API_KEY=
ENV TWITTER_API_KEY=
ENV TWITTER_API_SECRET=
ENV TWITTER_ACCESS_TOKEN=
ENV TWITTER_ACCESS_SECRET=
ENV TWITTER_CLIENT_ID=
ENV TWITTER_CLIENT_SECRET=
ENV TWITTER_BEARER_TOKEN=
ENV RUN_AGENT=True
# Verify installations
RUN python --version # && node -v && npm -v
# Ensure the mcpagentai script exists
RUN if ! [ -x "$(command -v mcpagentai)" ]; then \
echo "mcpagentai not found in PATH"; \
exit 1; \
fi
# Set the default entry point
ENTRYPOINT ["mcpagentai"]