|
|
FROM python:3.12 |
|
|
|
|
|
|
|
|
RUN useradd -m -u 1000 user |
|
|
|
|
|
WORKDIR /code |
|
|
|
|
|
|
|
|
COPY ./requirements.txt /code/requirements.txt |
|
|
|
|
|
|
|
|
USER root |
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \ |
|
|
ffmpeg \ |
|
|
curl \ |
|
|
wget \ |
|
|
unzip \ |
|
|
procps \ |
|
|
&& rm -rf /var/lib/apt/lists/* |
|
|
|
|
|
|
|
|
RUN wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-9.0.1-linux-x86_64.tar.gz && \ |
|
|
tar -xzf elasticsearch-9.0.1-linux-x86_64.tar.gz && \ |
|
|
mv elasticsearch-9.0.1 /usr/share/elasticsearch && \ |
|
|
rm elasticsearch-9.0.1-linux-x86_64.tar.gz |
|
|
|
|
|
|
|
|
COPY elasticsearch.yml /usr/share/elasticsearch/config/elasticsearch.yml |
|
|
|
|
|
|
|
|
RUN chown -R user:user /usr/share/elasticsearch /code |
|
|
USER user |
|
|
|
|
|
|
|
|
RUN pip install --no-cache-dir -r /code/requirements.txt |
|
|
|
|
|
|
|
|
COPY --chown=user:user . /code |
|
|
|
|
|
|
|
|
ENV PATH="/home/user/.local/bin:${PATH}" |
|
|
ENV discovery.type=single-node |
|
|
|
|
|
|
|
|
RUN echo '#!/bin/bash\n\ |
|
|
set -e\n\ |
|
|
echo "Starting Elasticsearch..."\n\ |
|
|
/usr/share/elasticsearch/bin/elasticsearch > /tmp/es.log 2>&1 &\n\ |
|
|
echo "Waiting for Elasticsearch to start..."\n\ |
|
|
until curl -s http://localhost:9200 >/dev/null 2>&1; do sleep 2; done\n\ |
|
|
echo "Elasticsearch is ready."\n\ |
|
|
echo "Starting FastAPI app..."\n\ |
|
|
exec uvicorn main:app --host 0.0.0.0 --port 7860\n' > /code/start.sh \ |
|
|
&& chmod +x /code/start.sh |
|
|
|
|
|
|
|
|
EXPOSE 7860 9200 |
|
|
|
|
|
|
|
|
CMD ["/bin/bash", "/code/start.sh"] |
|
|
|