c6683b28dc
Release package / release (push) Successful in 17m59s
Co-authored-by: TakahashiNg <83152264+TakahashiNguyen@users.noreply.github.com> Reviewed-on: #50
32 lines
886 B
Docker
32 lines
886 B
Docker
# --- Stage 1: Build (Cài đặt thư viện) ---
|
|
FROM python:3.9-slim AS builder
|
|
|
|
WORKDIR /build
|
|
|
|
# Khởi tạo môi trường ảo để tách biệt thư viện
|
|
RUN python -m venv /opt/venv
|
|
ENV PATH="/opt/venv/bin:$PATH"
|
|
|
|
COPY requirements.txt .
|
|
RUN pip install --upgrade --no-cache-dir -r requirements.txt
|
|
|
|
|
|
# --- Stage 2: Runtime (Chỉ chạy Prod) ---
|
|
FROM python:3.9-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# Chỉ copy môi trường ảo đã build xong từ Stage 1
|
|
COPY --from=builder /opt/venv /opt/venv
|
|
ENV PATH="/opt/venv/bin:$PATH"
|
|
|
|
# Copy mã nguồn
|
|
COPY main.py .
|
|
|
|
# Tạo folder lưu ảnh và phân quyền (tăng tính bảo mật)
|
|
RUN mkdir images && chmod 777 images
|
|
|
|
# Chạy bằng Uvicorn với chế độ production (tắt reload)
|
|
# Port 80 theo yêu cầu trước đó của bạn
|
|
EXPOSE 80
|
|
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "80", "--workers", "4"] |