- padronizando o nome de get_db_connection e session para get_db_session, para não confundir com session do Flask ou sessoes web
- corrigindo potenciais erros
-- has_permission nao consegue com lazy load carregar permission depois de load_user fechar a conexao, entao joinedLoad com Permission antes de fechar
-- db.rollback não existe caso db = get_db_session() apareça muito depois dentro do try, padronizando antes de try
--- comparar role por nivel (Role.SECRETARIO_GERAL) e nao por nome ("Secretario Geral")
- unificacao de get_otp_qr_code
- mudança de nowutc() para now(UTC) conforme novo padrão
49 lines
1.3 KiB
Docker
49 lines
1.3 KiB
Docker
FROM alpine:latest
|
|
|
|
# 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
|
|
|
|
# Rodar aplicação como usuário não-root
|
|
USER appuser
|
|
|
|
# Expor a porta que o Flask usa
|
|
EXPOSE 5000
|
|
|
|
# Comando para rodar a aplicação
|
|
CMD ["gunicorn", "--bind", "0.0.0.0:5000", "app:app"]
|