Развертывание FastAPI/Poetry Docker на платформе приложений Digital Ocean/дроплетеPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Развертывание FastAPI/Poetry Docker на платформе приложений Digital Ocean/дроплете

Сообщение Anonymous »

У меня есть проект FastAPI, который я пытаюсь развернуть на платформе приложений Digital Ocean. Я использую базовый экземпляр ЦП, и это не является проблемой, поскольку я тестировал образы большего размера с большим объемом оперативной памяти и ЦП.
У меня есть файл Dockerfile для моего приложения FastAPI, который собирается и запускается. успешно на моем локальном компьютере (MacBook Pro M3 Pro), но когда я пытаюсь выполнить развертывание через Github/Dockerfile на платформе приложений, я постоянно получаю две ошибки:
Deploy Error: Container Terminated & Ошибка развертывания: проверки работоспособности
Похоже, при запуске контейнера Docker возникает проблема, заключающаяся в том, что мой проект не установлен должным образом или на него неправильно ссылаются, потому что когда я хочу использовать любые модули, которые импортируют компоненты из самого пакета (например, humblapi.core.config import Config), контейнер, кажется, зависает. Кажется, что conaitner будет успешно развернут, если в качестве приложения FastAPI у меня будет только один файл, но не при импорте модулей из пакета. Я видел сообщение об ошибке, что пакет humblapi не был установлен (когда я не использовал --no-root), а также /app/src/humblapi не содержит ни одного элемента.
Как мне добиться правильной установки поэзии или запуска контейнера?
Попытки
Я пробовал использовать поэтическую установку --no-root, чтобы избежать установки самого пакета, но это не сработало.
Я пытался изменить [tool.poetry], чтобы включить пакеты = [{ include = "humblapi", from = "src" },], это не сработало.
Я попробовал выполнить предложенную установку по протоколу из документации FastAPI, это не сработало.
Развертывание будет успешным только в том случае, если я не включаю импорт humblapi.
Я также развернул дроплет с веткой pip-install от humblAPI, и меня также встретил зависающий контейнер. Кажется, он работает только на моей локальной машине. Что является причиной этого?
Знаете ли вы, могу ли я использовать только относительный импорт для Digital Ocean? Я в замешательстве, потому что мой локальный контейнер Dockerfile работает отлично.
Последняя попытка развернуть ветку pip-install` привела к этой ошибке. Он запускается, но затем сворачивается и закрывается.
Изображение

Ресурсы
Я использую docker build -t humblapi . и docker run --rm -p 8080:8080 humblapi code>
poetry install --no-root (запускается локально)
FROM python:3.11-slim

WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y \
gcc \
g++ \
curl \
pkg-config \
libssl-dev \
libgtk-3-dev \
libsoup2.4-dev \
libjavascriptcoregtk-4.0-dev \
libwebkit2gtk-4.0-dev \
&& rm -rf /var/lib/apt/lists/*

# Install Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

# Copy project files
COPY pyproject.toml poetry.lock* README.md /app/

# Install dependencies without pywry
RUN pip install poetry && \
poetry config virtualenvs.create false && \
poetry install --no-dev --no-interaction --no-ansi --no-root -v

# Install pywry separately
RUN pip install pywry==0.6.2

# Copy the rest of the application
COPY . /app

EXPOSE 8080
CMD ["fastapi", "run", "src/humblapi/main.py", "--host", "0.0.0.0", "--port", "8080"]

pip install многоэтапный файл Dockerfile (запускается локально)
# Stage 1: Generate requirements.txt
FROM python:3.11-slim as requirements-stage

WORKDIR /tmp

RUN pip install poetry

COPY pyproject.toml poetry.lock* /tmp/

RUN poetry export -f requirements.txt --output requirements.txt --without-hashes

# Stage 2: Final image
FROM python:3.11-slim

WORKDIR /app

# Install system dependencies
RUN apt-get update && apt-get install -y \
gcc \
g++ \
curl \
pkg-config \
libssl-dev \
libgtk-3-dev \
libsoup2.4-dev \
libjavascriptcoregtk-4.0-dev \
libwebkit2gtk-4.0-dev \
&& rm -rf /var/lib/apt/lists/*

# Install Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

# Copy requirements.txt from the previous stage
COPY --from=requirements-stage /tmp/requirements.txt /app/requirements.txt

# Install dependencies
RUN pip install --no-cache-dir -r /app/requirements.txt

# Copy the rest of the application
COPY . /app

EXPOSE 8080
CMD ["fastapi", "run", "src/humblapi/main.py", "--host", "0.0.0.0", "--port", "8080"]


Подробнее здесь: https://stackoverflow.com/questions/787 ... rm-droplet
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»