# Используем официальный Python образ FROM python:3.12-slim # Устанавливаем системные зависимости RUN apt-get update && apt-get install -y \ gcc \ libaio1 \ libaio-dev \ unzip \ wget \ && rm -rf /var/lib/apt/lists/* # Устанавливаем Oracle Instant Client RUN mkdir -p /opt/oracle && \ cd /opt/oracle && \ wget https://download.oracle.com/otn_software/linux/instantclient/1921000/instantclient-basic-linux.x64-19.21.0.0.0dbru.zip && \ unzip instantclient-basic-linux.x64-19.21.0.0.0dbru.zip && \ rm instantclient-basic-linux.x64-19.21.0.0.0dbru.zip && \ echo /opt/oracle/instantclient_19_21 > /etc/ld.so.conf.d/oracle-instantclient.conf && \ ldconfig # Устанавливаем переменные окружения для Oracle ENV ORACLE_HOME=/opt/oracle/instantclient_19_21 ENV LD_LIBRARY_PATH=/opt/oracle/instantclient_19_21${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH} ENV PATH=/opt/oracle/instantclient_19_21:$PATH # Создаем пользователя для безопасности с UID 1027 и добавляем в группу users RUN useradd --create-home --shell /bin/bash --uid 1027 --gid 100 salvagebot # Создаем рабочую директорию и устанавливаем права RUN mkdir -p /home/salvagebot/app && \ chown -R salvagebot:users /home/salvagebot/app USER salvagebot WORKDIR /home/salvagebot/app # Копируем файл зависимостей COPY --chown=salvagebot:users requirements.txt . # Устанавливаем Python зависимости RUN pip install --user --no-cache-dir -r requirements.txt # Копируем entrypoint скрипт COPY --chown=salvagebot:users docker-entrypoint.sh /usr/local/bin/ USER root RUN chmod +x /usr/local/bin/docker-entrypoint.sh USER salvagebot # Копируем код приложения COPY --chown=salvagebot:users . . # Создаем необходимые директории с правильными правами RUN mkdir -p logs images data && \ chmod 755 logs images data # Устанавливаем переменные окружения Python ENV PYTHONPATH=/home/salvagebot/app ENV PYTHONUNBUFFERED=1 # Проверяем здоровье контейнера HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python -c "import sys; sys.exit(0)" # Используем entrypoint для инициализации ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] # Команда запуска CMD ["python", "main.py"]