Files
controles/Dockerfile

49 lines
1.3 KiB
Docker
Raw Permalink Normal View History

FROM alpine:latest
2025-04-04 15:21:39 -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 \
gcc \
musl-dev \
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
# Copiar código da aplicação
COPY . .
# 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
# 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
# Rodar aplicação como usuário não-root
USER appuser
2025-04-04 15:21:39 -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
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]