Spaces:
Running
Running
# Pull the base image | |
FROM vaibhavarduino/librechat:latest | |
# FROM librechat/librechat-dev:latest | |
# Set environment variables (Consider moving sensitive ones like ngrok token to build args or runtime envs) | |
ENV HOST=0.0.0.0 \ | |
PORT=7860 \ | |
SESSION_EXPIRY=900000 \ | |
REFRESH_TOKEN_EXPIRY=604800000 \ | |
# MEILI_NO_ANALYTICS=true \ | |
# MEILI_HOST=https://librechat-meilisearch.hf.space \ | |
PYTHONUNBUFFERED=1 \ | |
NGROK_AUTHTOKEN=2vPTfcN3MOK2T12aE2fxtBzjxue_6ejqTQUkkWqZfRm2QAN49 | |
# Combine directory creation and permission setting | |
RUN mkdir -p /app/uploads/temp \ | |
/app/client/public/images/temp \ | |
/app/api/logs/ \ | |
/app/data \ | |
/app/code_interpreter && \ | |
chmod -R 777 /app/uploads/temp \ | |
/app/client/public/images \ | |
/app/api/logs/ \ | |
/app/data \ | |
/app/code_interpreter | |
# Copy configuration and tests | |
COPY librechat.yaml /app/librechat.yaml | |
COPY tests.py /app/tests.py | |
# --- Build Stage --- | |
# Temporarily switch to root for package installation | |
USER root | |
RUN sed -i 's/#\(.*\/community\)/\1/' /etc/apk/repositories | |
# Install Node.js dependencies first (leverages layer cache if package.json doesn't change often) | |
# Assuming package.json is in /app/api in the base image or copied before | |
# If not, uncomment and adjust COPY commands if needed: | |
# COPY api/package.json api/package-lock.json* ./api/ | |
RUN cd /app/api && npm install --omit=dev --no-audit --no-fund --prefer-offline && npm cache clean --force | |
# Note: Using --omit=dev might break if runtime needs dev deps. Remove if necessary. | |
# --prefer-offline might help if network is slow/flaky, uses cache more aggressively. | |
# npm cache clean --force might free up a little space within the layer. | |
RUN wget https://bin.equinox.io/c/bNyj1mQVY4c/ngrok-v3-stable-linux-amd64.tgz -O ngrok.tgz && tar xvzf ngrok.tgz && cp ngrok /usr/local/bin && rm ngrok.tgz | |
# Install system dependencies (including build tools), Python packages, and cleanup in one RUN command | |
# Reduces layers and removes build tools afterwards | |
RUN apk add --no-cache --virtual .build-deps \ | |
build-base \ | |
gcc \ | |
libc-dev \ | |
mpc1-dev \ | |
python3-dev && \ | |
apk add --no-cache \ | |
bash \ | |
git \ | |
expect \ | |
busybox-suid \ | |
libc6-compat \ | |
py3-pip \ | |
openjdk21 \ | |
zlib-dev \ | |
python3 && \ | |
ln -sf python3 /usr/bin/python && \ | |
# Consider specific versions if needed: python3~=3.10 | |
echo "Starting pip install..." && \ | |
pip3 install --no-cache-dir --upgrade --break-system-packages \ | |
pip \ | |
setuptools \ | |
mcp \ | |
mcp-simple-pubmed \ | |
mcp-simple-arxiv \ | |
mpxj \ | |
jpype1 \ | |
litellm==1.67.2 \ | |
gradio \ | |
XlsxWriter \ | |
openpyxl \ | |
google-genai \ | |
matplotlib \ | |
requests-futures \ | |
pexpect && \ | |
# (Add back commented packages here if needed, e.g., actors-mcp-server) | |
echo "Pip install finished. Cleaning up..." && \ | |
apk del .build-deps && \ | |
rm -rf /var/cache/apk/* /root/.cache /tmp/* && \ | |
echo "Cleanup finished." | |
# RUN su root | |
USER root | |
WORKDIR /app | |
RUN git clone https://github.com/AIGENHACKER/mcp-hfspace && cd mcp-hfspace && npm install && npm run build && npm link | |
RUN git clone https://github.com/exa-labs/exa-mcp-server && cd exa-mcp-server && npm install --save axios dotenv && npm run build && npm link | |
EXPOSE 7860 | |
USER root | |
RUN npm install -g express ejs chart.js && npm cache clean --force | |
USER node | |
RUN ngrok config add-authtoken 2vPTfcN3MOK2T12aE2fxtBzjxue_6ejqTQUkkWqZfRm2QAN49 | |
USER root | |
CMD ["npm", "run", "backend"] |