1
0
mirror of https://github.com/osmarks/meme-search-engine.git synced 2026-02-08 19:00:14 +00:00
Files
meme-search-engine/docker/Dockerfile
osmarks a1bf23055e docker
2025-03-26 12:59:02 +00:00

93 lines
2.4 KiB
Docker

# Base Image
FROM debian:trixie-slim
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
wget \
build-essential \
python3 \
python3-pip \
nginx \
curl \
pkg-config \
libssl-dev \
nasm \
meson \
ninja-build \
libavcodec-dev \
libavformat-dev \
libavutil-dev \
libswscale-dev \
libswresample-dev \
libpostproc-dev \
libsqlite3-dev \
libzstd-dev \
libjpeg-dev \
libpng-dev \
libwebp-dev \
libavdevice-dev \
libclang-dev \
libopenblas-dev \
nodejs \
npm \
cmake \
rustup \
dav1d \
libdav1d-dev \
&& apt-get clean
# Set environment variables for Rust
ENV PATH="/root/.cargo/bin:${PATH}"
# Install nightly Rust and set it as default
RUN rustup install nightly \
&& rustup default nightly
# Update Rust to the latest version and confirm nightly is active
RUN rustup update && rustc --version
# Build and install FAISS from source
RUN git clone https://github.com/Enet4/faiss /tmp/faiss -b c_api_head \
&& cd /tmp/faiss \
&& sed -i "14i #include <cstdint>" faiss/Index.h \
&& cmake -B build -DFAISS_ENABLE_PYTHON=OFF -DFAISS_ENABLE_GPU=OFF -DFAISS_ENABLE_C_API=ON -DBUILD_SHARED_LIBS=ON -DBUILD_TESTING=OFF . \
&& cmake --build build --target install \
&& cp build/c_api/libfaiss_c.so /usr/local/lib/ \
&& cp build/faiss/libfaiss.so /usr/local/lib \
&& rm -rf /tmp/faiss
# Set environment variables for library paths
ENV PKG_CONFIG_PATH="/usr/local/lib/pkgconfig:/usr/lib/x86_64-linux-gnu/pkgconfig"
ENV LD_LIBRARY_PATH="/usr/local/lib:${LD_LIBRARY_PATH}"
# Set working directory
WORKDIR /app
# Clone the repository
RUN git clone https://github.com/osmarks/meme-search-engine.git . && git checkout 5121de63890ca5e3024a4a630385a274acbb510a
# Build Rust backend
RUN cargo +nightly build --release --bin meme-search-engine
# Install Python dependencies
RUN pip install -r requirements.txt --break-system-packages
COPY config/frontend_config.json /app
# Build frontend
RUN cd clipfront2 && npm install && node src/build.js
# Configure nginx
RUN rm /etc/nginx/sites-enabled/default
COPY config/nginx.conf /etc/nginx/sites-enabled/default
# Expose necessary ports
EXPOSE 80 1707 1708
# Start all services
CMD ["bash", "-c", "\
python3 clip_server.py /app/config/clip_server_config.json & \
/app/target/release/meme-search-engine /app/config/backend_config.json & \
nginx -g 'daemon off;'"]