Consultores Daniel InfoCotidiano Postado 8 Maio Consultores Compartilhar Postado 8 Maio Bom dia @Gandalf Infelizmente não consegui fazer rodar sua aplicação em seu ambiente. Talvez por não dominar sua linguagem e o docker. Mas observando no gerenciador de arquivos, lá na pasta da sua aplicação existem algumas dll não sei se é normal da sua linguagem isso, geralmente Linux é .so. mas não sei se existe alguma compatibilidade com estas dlls. Basicamente quando vc utiliza a ACBrLib no Linux, vc precisa instalar as dependências conforme este manual: https://acbr.sourceforge.io/ACBrLib/ComoInstalarDistribuir.htm A Biblioteca ACBrLibNFe.so (64 MT), vc salva em /usr/lib64 lembre-se quando não usamos ambiente gráficos no linux, precisamos usar o xvfb (https://www.geeksforgeeks.org/how-to-install-xvfb-on-ubuntu/) dar o start no XVFB xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1 e rodar sua aplicação. Você precisa dar permissão de leitura e gravação nas pastas para salvar o arquivo INI, XML, PDF, etc Quando a biblioteca é inicializada corretamente, ela gera o arquivo.ini automaticamente. É importante vc configurar a pasta de log e controlar o retorno dos metodos. Exemplo: Quando for inicializar a biblioteca NFE_Inicializar([eArqConfig, eChaveCrypt]) veja o que está retornando: 0 Indica que a biblioteca foi inicializada corretamente. -1 Indica que houve falhas na inicialização da biblioteca. -5 Indica que não foi possível localizar o arquivo INI informado. -6 Indica que não foi possível encontrar o diretório do arquivo INI. Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 8 Maio Autor Membros Pro Compartilhar Postado 8 Maio Obrigado pelo esforço, Daniel. Eu já coloco a biblioteca em /usr/lib64 e, mesmo assim, não funciona. Não há ninguém mais no suporte que entenda de docker? Ou alguma consultoria que pudessem me indicar para fazer isso funcionar? Toda a minha estrutura de microserviços está no linux e eu não gostaria de ter de criar outro plano no Azure somente para isso. Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 8 Maio Consultores Compartilhar Postado 8 Maio 13 minutos atrás, Gandalf disse: Eu já coloco a biblioteca em /usr/lib64 e, mesmo assim, não funciona. Quando vc pede para inicializar, qual o erro está retornando? Consegue capturar este código? Se as pastas da aplicação estiver com as permissões, ele inicializa a biblioteca, e gera o ACBrLib.ini Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 8 Maio Autor Membros Pro Compartilhar Postado 8 Maio A única mensagem que retorna é que a biblioteca não pode ser carregada. Se houver alguém que já conseguiu fazer funcionar, podemos negociar. Eu preciso disso funcionando. Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 8 Maio Autor Membros Pro Compartilhar Postado 8 Maio Provavelmente é alguma configuração no dockerfile, em relação às dependências, porque ele compila e roda o conteiner normalmente. Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 8 Maio Autor Membros Pro Compartilhar Postado 8 Maio Meu dockerfile está assim: #See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging. FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base USER root WORKDIR /app EXPOSE 8080 FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build ARG BUILD_CONFIGURATION=Release WORKDIR /src COPY ["NFEsAPI/NFEsAPI.csproj", "NFEsAPI/"] COPY ["NFEs.App/NFEs.App.csproj", "NFEs.App/"] COPY ["ACBrTrunk2/trunk2/Projetos/ACBrLib/Demos/C#/NFe/Imports/Dinamico/MT/ACBrLib.NFe.csproj", "ACBrTrunk2/trunk2/Projetos/ACBrLib/Demos/C#/NFe/Imports/Dinamico/MT/"] COPY ["ACBrTrunk2/trunk2/Projetos/ACBrLib/Demos/C#/Shared/ACBrLib.Core/ACBrLib.Core.csproj", "ACBrTrunk2/trunk2/Projetos/ACBrLib/Demos/C#/Shared/ACBrLib.Core/"] COPY ["GAFNETLibrary/GAFNETLibrary/GAFNETLibrary.csproj", "GAFNETLibrary/GAFNETLibrary/"] COPY ["NFEs.Domain/NFEs.Domain.csproj", "NFEs.Domain/"] RUN dotnet restore "./NFEsAPI/NFEsAPI.csproj" COPY . . WORKDIR "/src/NFEsAPI" RUN dotnet build "./NFEsAPI.csproj" -c $BUILD_CONFIGURATION -o /app/build FROM build AS publish ARG BUILD_CONFIGURATION=Release RUN dotnet publish "./NFEsAPI.csproj" -c $BUILD_CONFIGURATION -o /app/publish /p:UseAppHost=false FROM base AS final WORKDIR /app COPY --from=publish /app/publish . COPY ACBrLib /app/ACBrLib COPY ACBrLib/x64/libacbrnfe64.so /usr/lib/x86_64-linux-gnu/libacbrnfe64.so # Atualiza a lista de pacotes e instala as ferramentas necessárias RUN apt-get update \ && apt-get install -y \ apt-utils \ wget \ unzip \ software-properties-common RUN apt-get download \ libxml2 \ libxslt1.1 \ libcurl4 \ libssl-dev \ uuid-dev \ libudev-dev \ && mv *.deb /usr/lib64 # Atualiza a lista de pacotes e instala as dependências RUN apt-get update \ && apt-get install -y \ openssl \ libxml2 \ libxslt1.1 \ libcurl4 \ libssl-dev \ uuid-dev \ libudev-dev \ gcc \ g++ \ make \ && rm -rf /var/lib/apt/lists/* USER app ENTRYPOINT ["dotnet", "NFEsAPI.dll"] Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio 20 horas atrás, Gandalf disse: Meu dockerfile está assim: Bom dia ! vc pode anexar o arquivo para melhor visualização. Olhando o seu script onde estão as dependências da biblioteca que eu anexei o link em post anteriores? é instalado posteriormente ? Exemplo: onde vc executa a instalação no linux do xvfb ? (nao encontrei no seu script) tbm não encontrei o comando de instalação libgtk2.0-0 e ttf-mscorefonts-installe lembre-se que a acbrlibnfe.so vai ser copiada para /usr/lib64, no seu script esta assim: (está correto?) Aqui neste link tem as dependências necessárias: https://acbr.sourceforge.io/ACBrLib/ComoInstalarDistribuir.html Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Bom dia, Acrescentei as dependências e agora estou recebendo a mensagem Gtk-WARNING **: 12:53:38.689: cannot open display: Acrescentei as seguintes linhas no dockerfile (antes de acrescentá-las também estava dando esse erro): RUN Xvfb :1 -screen 0 1024x768x16 &> xvfb.log & RUN DISPLAY=:1.0 RUN export DISPLAY Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio 11 minutos atrás, Gandalf disse: Acrescentei as dependências e agora estou recebendo a mensagem Gtk-WARNING **: 12:53:38.689: cannot open display: Bom dia ! Show, sinal que já evoluímos com isso ! Vou mostrar em meu ambiente server ubuntu. Vou executar minha aplicação NodeJS, vai dar o mesmo erro que vc reportou. Então vou executar o comando para ativar a virtualização X e depois executar o meu programa exemplo novamente. Xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1 Agora ele esta aguardando o comando na porta 3333 desta API de Exemplo Node. Esta funcionando. 1 Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Continua retornando a mesma resposta. Será que o comportamento no conteiner é diferente? A porta que a minha aplicação roda é a 8080 Lembrando que o erro não dá em tempo de compilação, somente quando eu tento acessar o ACBrLib Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio Em minhas pesquisas sobre docker relacionado a este erro encontrei este q possa lhe ajudar: Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Acrescentei essas linhas no meu dockerfile: ENV DISPLAY :99 COPY run.sh /app/run.sh RUN chmod 0755 /app/run.sh ENTRYPOINT ["bash", "/app/run.sh"] E o meu run.sh está assim Xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render -noreset & php-fpm & dotnet NFEsAPI.dll E agora a mensagem é: Gtk-WARNING **: 14:34:59.216: cannot open display: :99 Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio isso é de um docker é com php; php-fpm é um serviço, o link q te passei é apenas como base para abstrair como foi feito em um Docker. Se observar a resposta em seguida do amigo que utiliza java, ele nao usa php-fpm no comando do docker ele. Pode testar desta forma: Docker: COPY run.sh /app/run.sh RUN chmod 0755 /app/run.sh ENTRYPOINT ["bash", "/app/run.sh"] no run.sh: Xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1 dotnet NFEsAPI.dll caso nao der certo, tente assim no run.sh Xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1 & dotnet NFEsAPI.dll Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Acrescentando no dockerfile ENV DISPLAY :1, retorna a mensagem Gtk-WARNING **: 17:57:58.738: cannot open display: :1 Se não acrescentar ENV DISPLAY :1, retorna somente a mensagem Gtk-WARNING **: 17:57:58.738: cannot open display: run.sh = Xvfb :1 -screen 0 1280x1024x16 & export DISPLAY=:1 dotnet NFEsAPI.dll Se colocar os comandos em uma linha somente, o resultado é o mesmo. Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Se eu dou um echo $DISPLAY, ele me retorna :1 Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio 4 minutos atrás, Gandalf disse: Se eu dou um echo $DISPLAY, ele me retorna :1 Pode anexar deu dockerfile aqui? Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Aí vai! Dockerfile Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio E se no dockerfile usar ENV DISPLAY :99 e no arquivo sh: xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render dotnet NFEsAPI.dll ou, caso a opção acima nao tenha dado certo xvfb :99 -screen 0 1280x1024x16 & export DISPLAY=:99 dotnet NFEsAPI.dll Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Olha que estranho, mesmo com o dockerfile do jeito que está (eu não cheguei a colocar essa última alteração), se eu for no container e executar o comando: Xvfb :1 eu consigo carregar a biblioteca normalmente. Mas parece que executando pelo dockerfile não funciona. Aliás, se eu colocar esse comando sozinho no dockerfile, ele não dá erro, mas também não sobe a api. O que pode ser isso? Como eu posso executar esse comando pelo dockerfile ou pelo arquivo sh:? Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio sh é um arquivo de script shell do linux. seu start.sh esta assim: xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render dotnet NFEsAPI.dll qdo start.sh ele é executado é a mesma coisa que vc digitasse os comandos no terminal: xvfb :99 -screen 0 1280x1024x24 -ac +extension GLX +render dotnet NFEsAPI.dll Entao para que vc nao fique escrevendo , vc pode criar um script, exemplo: -Script backup mariadb: backup.sh mysqldump -uroot -p1234 -P3306 minhabase > /home/backupmariadb/meubackup.sql entao para nao ter q ficar dando este comando enorme, eu executo o backup.sh Quando sua API está em pé, vc exibe algum comando como no meu exemplo... api em execução ou aguardando comandos? se não, vc pode colar isso, assim vai saber se esta rodando. Ele chegou a criar um arquivo acbrlib.ini ? se criou, configure o log para uma pasta, nivel 4 Pois com o log na mao é mais facil identificar problemas 1 Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Em qual pasta ele cria o acbrlib.ini ? Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Outra coisa, no ["bash", "/app/run.sh"] a que se refere o parâmetro bash? Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio 9 minutos atrás, Gandalf disse: Em qual pasta ele cria o acbrlib.ini ? NFE_Inicializar("/minhapasta/acbrlib.ini", ); 3 minutos atrás, Gandalf disse: Outra coisa, no ["bash", "/app/run.sh"] a que se refere o parâmetro bash? Este é um parametro do Docker (https://nerdexpert.com.br/docker-run-vs-cmd-vs-entrypoint-entendendo-as-instrucoes-de-construcao-do-docker/) pelo que entendo o /app/run.sh sera executado no terminal via interpretador de comandos. uma observação.. execute como administrador p ver se muda o comportamento sudo dotnet NFEsAPI.dll Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Membros Pro Gandalf Postado 9 Maio Autor Membros Pro Compartilhar Postado 9 Maio Não tem jeito, o sudo Xvfb :1 ele não executa. Somente se eu for no terminal e mandar rodar. Link para o comentário Compartilhar em outros sites More sharing options...
Consultores Daniel InfoCotidiano Postado 9 Maio Consultores Compartilhar Postado 9 Maio 12 minutos atrás, Gandalf disse: Não tem jeito, o sudo Xvfb :1 ele não executa. Somente se eu for no terminal e mandar rodar. se for no terminal e rodar ele sobe a api ? ele cria os arquivos log no path q vc indicou ? (mandei em post anterior como configurar) Daniel de Morais (Infocotidiano) Ajude o Projeto ACBr crescer - Assine o SAC (15) 2105-0750 (15)99790-2976. Discord Link para o comentário Compartilhar em outros sites More sharing options...
Recommended Posts