86 lines
2.3 KiB
Docker
86 lines
2.3 KiB
Docker
# --------
|
|
# STAGE: base runtime con Node e strumenti minimi
|
|
# --------
|
|
FROM node:20-bookworm-slim AS runtime-base
|
|
|
|
# Impostazioni ambiente e sicurezza build
|
|
ENV DEBIAN_FRONTEND=noninteractive \
|
|
PIP_NO_CACHE_DIR=1 \
|
|
PYTHONDONTWRITEBYTECODE=1 \
|
|
PYTHONUNBUFFERED=1 \
|
|
NODE_ENV=production
|
|
|
|
# Aggiorna e installa Python + strumenti
|
|
# Nota: build-essential utile per pacchetti Python nativi (puoi rimuoverlo se non necessario)
|
|
RUN apt-get update && apt-get install -y --no-install-recommends \
|
|
python3 python3-venv python3-pip \
|
|
ca-certificates curl tini \
|
|
build-essential \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Workdir applicazione
|
|
WORKDIR /usr/src/app
|
|
|
|
# Crea utente non-root e cartelle
|
|
#RUN useradd -m -u 10001 appuser \
|
|
# && mkdir -p /usr/src/app \
|
|
# && chown -R appuser:appuser /usr/src/app
|
|
|
|
# --------
|
|
# STAGE: dipendenze Node
|
|
# --------
|
|
FROM runtime-base AS node-deps
|
|
|
|
WORKDIR /usr/src/app
|
|
|
|
#copia tutto
|
|
COPY . .
|
|
COPY downloadsite-docker.sh downloadsite.sh
|
|
# Installa packages e dipendenze
|
|
RUN npm ci --only=production
|
|
|
|
# --------
|
|
# STAGE: dipendenze Python (venv)
|
|
# --------
|
|
FROM node-deps AS python-deps
|
|
|
|
WORKDIR /usr/src/app
|
|
|
|
# crea venv
|
|
RUN python3 -m venv /opt/pyenv \
|
|
&& /opt/pyenv/bin/pip install --upgrade pip \
|
|
&& /opt/pyenv/bin/pip install -r requirements.txt
|
|
|
|
# --------
|
|
# STAGE: final image
|
|
# --------
|
|
FROM python-deps AS final
|
|
|
|
# Riduci ulteriormente l'immagine togliendo strumenti di build se li avevi installati
|
|
# (In questo esempio li teniamo per eventuali run-time native libs; opzionale rimuoverli con apt-get purge)
|
|
WORKDIR /usr/src/app
|
|
|
|
|
|
|
|
# Imposta PATH per usare il venv e crea symlink "python3" puntato al venv
|
|
ENV PATH="/opt/pyenv/bin:${PATH}"
|
|
ENV PATH="/usr/src/app:${PATH}"
|
|
# Symlink esplicito utile se il tuo codice chiama "python3" hard-coded
|
|
RUN ln -sf /opt/pyenv/bin/python /usr/local/bin/python3
|
|
|
|
# Sicurezza: esegui come utente non-root
|
|
#USER appuser
|
|
|
|
# Espone la porta dell'Express server
|
|
EXPOSE 3600
|
|
|
|
# Healthcheck semplice sulla root
|
|
#HEALTHCHECK --interval=30s --timeout=5s --start-period=15s --retries=3 \
|
|
# CMD curl -fsS http://localhost:3000/ || exit 1
|
|
|
|
# Usa tini come init per gestire segnali e orphan processes
|
|
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
|
|
|
|
# Avvio
|
|
CMD ["node", "server_docker.js"]
|