2025-04-04 17:55:58 -03:00
|
|
|
FROM alpine:latest
|
2025-04-04 15:21:39 -03:00
|
|
|
|
2026-02-20 17:19:15 -03:00
|
|
|
# Diretório de trabalho
|
|
|
|
|
WORKDIR /app
|
|
|
|
|
|
|
|
|
|
# UID/GID configuráveis para compatibilizar permissões em bind mounts Linux
|
|
|
|
|
ARG APP_UID=1000
|
|
|
|
|
ARG APP_GID=1000
|
|
|
|
|
|
|
|
|
|
# Instalar Python no Alpine e criar alias `python`
|
|
|
|
|
RUN apk add --no-cache python3 py3-pip \
|
|
|
|
|
&& ln -sf python3 /usr/bin/python
|
|
|
|
|
|
|
|
|
|
# Instalar dependências Python em venv usando build deps temporários
|
|
|
|
|
COPY requirements.txt .
|
|
|
|
|
RUN apk add --no-cache --virtual .build-deps \
|
2025-04-04 17:55:58 -03:00
|
|
|
gcc \
|
|
|
|
|
musl-dev \
|
2026-02-20 17:19:15 -03:00
|
|
|
linux-headers \
|
|
|
|
|
&& python -m venv /venv \
|
|
|
|
|
&& /venv/bin/pip install --upgrade pip \
|
|
|
|
|
&& /venv/bin/pip install --no-cache-dir -r requirements.txt \
|
|
|
|
|
&& apk del .build-deps
|
2025-04-04 17:55:58 -03:00
|
|
|
|
2026-02-20 17:19:15 -03:00
|
|
|
# Copiar código da aplicação
|
|
|
|
|
COPY . .
|
2025-04-04 17:55:58 -03:00
|
|
|
|
2026-02-20 17:19:15 -03:00
|
|
|
# Criar usuário sem privilégios e diretórios de escrita necessários
|
|
|
|
|
RUN addgroup -S -g "${APP_GID}" appgroup \
|
|
|
|
|
&& adduser -S -D -H -u "${APP_UID}" -G appgroup appuser \
|
|
|
|
|
&& mkdir -p /data /app/logs \
|
|
|
|
|
&& chown -R appuser:appgroup /app /data /venv
|
2025-04-04 17:55:58 -03:00
|
|
|
|
2026-02-20 17:19:15 -03:00
|
|
|
# Ambiente padrão
|
|
|
|
|
ENV PATH="/venv/bin:$PATH" \
|
|
|
|
|
FLASK_APP=app.py \
|
|
|
|
|
FLASK_ENV=production \
|
|
|
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
|
|
|
PYTHONUNBUFFERED=1
|
2025-04-04 15:21:39 -03:00
|
|
|
|
2026-02-20 17:19:15 -03:00
|
|
|
# Rodar aplicação como usuário não-root
|
|
|
|
|
USER appuser
|
2025-04-04 15:21:39 -03:00
|
|
|
|
2025-04-04 17:55:58 -03:00
|
|
|
# Expor a porta que o Flask usa
|
2025-04-04 15:21:39 -03:00
|
|
|
EXPOSE 5000
|
|
|
|
|
|
|
|
|
|
# Comando para rodar a aplicação
|
2026-02-20 17:19:15 -03:00
|
|
|
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
|