Bom dia pessoal. Estou postando apenas para deixar documentado.
Estava nessa jornada de fazer funcionar minha aplicação no Docker. Passei por quase todos os problemas postados aqui no fórum kkkkkkkk
Porém teve um que quase me fez desistir, o "network subsystem is unusable" ao fazer qualquer comunicação com o SEFAZ. Segui todas as sugestões feitas no fórum, como copiar os .so junto da aplicação, fazer downgrade ou upgrade na versão do OpenSSL, etc., mas sem êxito.
Neste momento eu estava usando o Ubuntu 20.04, porque haviam pessoas que fizeram funcionar nele, e o NodeJS 18. Não tinha como eu usar o NodeJS 12, porque meu código já não roda mais nesta versão, e não estava usando o NodeJS 20 porque tinha um package que só estava adapatado até o 18.
Depois de muito bater cabeça, não consegui fazer funcionar com essas configurações. Aí pensei, quer saber, vou botar o Ubuntu 24.04, o NodeJS 20, tirar essa package que depende da versão 18 e testar assim para ver. Deu certo! Finalmente pude ser feliz kkkkkkk
Vou colocar aqui o Dockerfile, mas não como anexo, pq teve vários posts que não consegui baixar.
FROM sitespeedio/node:ubuntu-24-04-nodejs-20.15.1
ENV NODE_ENV=production
ENV DISPLAY=:99
WORKDIR /usr/src/app
# Instalando as dependências de build para os packages da aplicação
RUN apt update && apt install -y --no-install-recommends g++ make cmake python3
# Instalando dependências do ACBrLib
RUN echo "deb http://deb.debian.org/debian buster main contrib\n" >> /etc/apt/sources.list && \
apt install -y --no-install-recommends xvfb xauth
RUN echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections && \
apt install -y perl ttf-mscorefonts-installer openssl libxml2 libgtk2.0-0 && \
ln -s /usr/lib/x86_64-linux-gnu/libxml2.so.2 /usr/lib/libxml2.so
# Instalando os packages da aplicação
RUN --mount=type=bind,source=package.json,target=package.json \
--mount=type=cache,target=/root/.npm \
npm i --omit=dev
# Copiando os arquivos da aplicação para a imagem
COPY . .
# Esse openssl.cnf está alterado para aceitar legacy algorithms, conforme especificado num post do fórum do ACBr.
# https://www.projetoacbr.com.br/forum/topic/75815-acbrnfe-programa-exemplo-para-linux/#comment-489652
# No windows é usado o legacy.dll
COPY openssl.cnf /usr/lib/ssl/openssl.cnf
# Criando usuário genérico para rodar a aplicação
RUN adduser gpsfac
# Marcando o usuário como dono da pasta da aplicação
RUN chown -R gpsfac /usr/src/app
# Rodando a aplicação como non-root user.
USER gpsfac
EXPOSE 8050
ENTRYPOINT ["bash", "/usr/src/app/run.sh"]
# run.sh
# Xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render -nolisten tcp -nolisten unix &> /usr/src/app/xvfb_warning_dump.txt & \
# node server_bundle.js