Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Problemas na configuração da aplicação #283

Open
caiosabadin opened this issue Jul 31, 2019 · 11 comments
Open

Problemas na configuração da aplicação #283

caiosabadin opened this issue Jul 31, 2019 · 11 comments

Comments

@caiosabadin
Copy link

Estou tentando executar a nova versão do ForPDI em uma máquina de testes local, mas esbarrei com alguns problemas durante o processo.

Tanto o MySQL 5.7 quanto o Maven 3.6, o Java 1.8, o Apache 2 e o Wildfly 9.0.2 foram instalados com sucesso e estão rodando corretamente na máquina.

Ao acessar o backend da aplicação pelo endereço localhost:8080/forpdi, deparo-me com o erro a seguir:

Erro do Wildfly Error processing request Context Path: /forpdi

Servlet Path:
/WEB-INF/jsp/index/index.jsp

Path Info:
null

Query String:
null

Stack Trace
javax.servlet.ServletException: /WEB-INF/jsp/index/index.jsp raised an exception
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:127)
io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85)
io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:58)
io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:72)
io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:282)
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:261)
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:80)
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:172)
io.undertow.server.Connectors.executeRootHandler(Connectors.java:199)
io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:774)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
java.lang.Thread.run(Thread.java:748)

Meu pom.xml está configurado para usar o arquivo test.properties e o front-end de produção, conforme:

	<properties>
		<version.vraptor.boilerplate>1.0.0</version.vraptor.boilerplate>
		<dbConfigFile>hibernate.cfg.xml</dbConfigFile>
		<propertiesfile>test.properties</propertiesfile>
		<war.frontenddir>production</war.frontenddir>
	</properties>

	<profiles>
		<profile>
			<id>test</id>
			<properties>
				<propertiesfile>test.properties</propertiesfile>
				<war.frontenddir>production</war.frontenddir>
			</properties>
		</profile>

E meu test.properties:

war.frontenddir=production
backendUrl=http://localhost:8080/forpdi/

db.host=localhost
db.port=3306
db.name=forpdi
db.username=root
db.password=root

mail.smtp.from.name=ForPDI
mail.smtp.from.email=noreply@forpdi.org
mail.smtp.url=localhost
mail.smtp.port=25
mail.smtp.username=
mail.smtp.password=
mail.smtp.ssl=false
mail.smtp.tls=false

store.pdfs=./temp
store.files=/var/forpdi/files/

O banco no MySQL foi criado conforme o sugerido pelo README, com o charset utf-8. O standalone.xml está conforme:

        <subsystem xmlns="urn:jboss:domain:undertow:2.0">
            <buffer-cache name="default"/>
            <server name="default-server">
                <ajp-listener name="default-ajp" socket-binding="ajp" redirect-socket="http"/>
                <http-listener name="default" socket-binding="http" redirect-socket="https"/>
                <host name="default-host" alias="localhost">
                    <location name="/" handler="welcome-content"/>
                    <filter-ref name="server-header"/>
                    <filter-ref name="x-powered-by-header"/>
                </host>
            </server>
            <servlet-container name="default">
                <jsp-config/>
                <websockets/>
            </servlet-container>
            <handlers>
                <file name="welcome-content" path="${jboss.home.dir}/welcome-content"/>
            </handlers>
            <filters>
                <response-header name="server-header" header-name="Server" header-value="WildFly/9"/>
                <response-header name="x-powered-by-header" header-name="X-Powered-By" header-value="Undertow/1"/>
            </filters>

Da parte do front-end, passo também por problemas. Configurei o mod_proxy, mod_proxy_ajp e mod_rewrite no Apache, e salvei um arquivo .conf para o ForPDI. Copiei o conteúdo da pasta frontend-web/dist (depois de executar o build com o Node sem maiores problemas) para /var/www/html/. Meu arquivo conf ficou assim:

# Arquivo forpdi.conf
<VirtualHost *:80>
	ServerName localhost
	UseCanonicalName  Off
	ServerAdmin contato@forpdi.org
	DocumentRoot /var/www/forpdi

	ErrorLog logs/forpdi-error.log
	CustomLog logs/forpdi-access.log combined

	<Location /forpdi>
		ProxyPreserveHost on
		ProxyPass ajp://0.0.0.0:8009/forpdi
		Order allow,deny
		Allow from all
	</Location>
</VirtualHost>
<Directory /var/www/forpdi>
	Options Indexes FollowSymLinks
	AllowOverride None
	Require all granted
	<IfModule mod_rewrite.c>
		RewriteEngine On
		RewriteBase /
		RewriteRule ^index\.html$ - [L]
		RewriteCond %{REQUEST_FILENAME} !-f
		RewriteCond %{REQUEST_FILENAME} !-d
		RewriteCond %{REQUEST_FILENAME} !-l
		RewriteRule . /index.html [L]
	</IfModule>
</Directory>

# As configurações abaixo são opcionais mas são recomendadas para performance em produção
KeepAlive on
KeepAliveTimeout 15
MaxKeepAliveRequests 0
Header append Vary User-Agent
AddOutputFilterByType DEFLATE text/html text/css application/json application/javascript text/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
DeflateCompressionLevel 4 # 1 a 9
DeflateMemLevel 9 # 1 a 9
DeflateWindowSize 15 # 1 a 15

# As configurações abaixo servem para habilitar acesso via HTTPS:
<VirtualHost *:443>
	ServerName localhost
	UseCanonicalName  Off
	ServerAdmin contato@forpdi.org
	DocumentRoot /var/www/forpdi

	SSLEngine on
	# Caminho dos arquivos de certificado digital fictícios, deve trocar pelo
	# caminho dos arquivos em seu servidor
	SSLCertificateFile "/etc/httpd/ssl/forpdi/cert.crt"
	SSLCertificateKeyFile "/etc/httpd/ssl/forpdi/private.key"
	SSLCACertificateFile "/etc/httpd/ssl/forpdi/ca-bundle.crt"
	SSLCompression Off
	SSLHonorCipherOrder On
	SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:!LOW:!MD5:!aNULL:!eNULL:!3DES:!EXP:!PSK:!SRP:!DSS

	ErrorLog logs/forpdi-ssl-error.log
	CustomLog logs/forpdi-ssl-access.log combined

	<Location /forpdi>
		ProxyPreserveHost on
		ProxyPass ajp://0.0.0.0:8009/forpdi
		Order allow,deny
		Allow from all
	</Location>
</VirtualHost>
# Para permitir apenas acesso SSL, pode trocar o virtual host da porta 80 para:
<VirtualHost *:80>
	ServerName localhost
	UseCanonicalName  Off
	RewriteEngine On
	RewriteCond %{HTTPS} !=on
	RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]
</VirtualHost>

No entanto, ao acessar localhost no navegador, deparo-me com uma tela em branco, na qual, se eu uso o Console de JavaScript, vejo os seguintes erros: Falha no carregamento do <script> com a fonte “http://localhost/forpdi/environment” e ReferenceError: EnvInfo is not defined.

Por conta disto, tentei substituir localhost do meu arquivo .conf para localhost:8080/forpdi. Esta tentativa se deu sem sucesso.

Toda ajuda para sanar este problema é muito bem-vinda e apreciada. Agradeço-lhes a atenção.

@arthurd2
Copy link
Contributor

Salve @caiosabadin , lancei um Merge Request recentemente que possibilitar subir toda a infra em Docker com apenas um comando, se quiser testar fique a vontade. =D
MR: #282
Branch: https://github.com/arthurd2/plataforma-for/tree/docker-support

@renatorroliveira
Copy link
Contributor

Oi @caiosabadin

Quanto ao seu backend, provavelmente está tudo certo, veja a conclusão da issue #280 que diz o correto, para testar seu backend pelo HTTP na porta 8080 acesse http://localhost:8080/forpdi/environment uma vez que não existe uma UI em http://localhost:8080/forpdi/

Quanto ao frontend, copie o seu build do front para /var/www/forpdi, conforme está configurado no DocumentRoot do seu aruqivo conf.

Além disso, para seus testes, remova as duas última entradas <VirtualHost /> já que estas são exclusivas em relação à primeira (para restringir o acesso à HTTPS apenas).

O docker é uma outra opção caso você tenha essa disponibilidade.

@caiosabadin
Copy link
Author

@arthurd2 obrigado, mas infelizmente não é possível utilizar o docker :/

@renatorroliveira muito obrigado pela resposta e por seu tempo! 😄

Você está certo, o backend está configurado porque, acessando pelo link http://localhost:8080/forpdi/environment, consigo ver os dados.

Quanto ao front, fiz as modificações necessárias, mas passo ainda pelos mesmos problemas. Copiei meu front de forpdi/frontend-web/dist para /var/www/html/forpdi/, e fiz a seguinte modificação no meu arquivo conf:

# Arquivo forpdi.conf
<VirtualHost *:80>
    ServerName localhost    # aqui tentei localhost, localhost/forpdi e localhost/forpdi/, sem sucesso
    UseCanonicalName  Off
    ServerAdmin contato@forpdi.org
    DocumentRoot /var/www/html/forpdi/    # aqui tentei com e sem a / do final, sem sucesso
 
    ErrorLog logs/forpdi-error.log
    CustomLog logs/forpdi-access.log combined
 
    <Location /forpdi>
        ProxyPreserveHost on
        ProxyPass ajp://0.0.0.0:8009/forpdi
        Order allow,deny
        Allow from all
    </Location>
</VirtualHost>
<Directory /var/www/html/forpdi/>  # aqui tentei com e sem a / do final, sem sucesso
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteBase /
        RewriteRule ^index\.html$ - [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-l
        RewriteRule . /index.html [L]
    </IfModule>
</Directory>
 
# As configurações abaixo são opcionais mas são recomendadas para performance em produção
KeepAlive on
KeepAliveTimeout 15
MaxKeepAliveRequests 0
Header append Vary User-Agent
AddOutputFilterByType DEFLATE text/html text/css application/json application/javascript text/javascript
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
DeflateCompressionLevel 4 # 1 a 9
DeflateMemLevel 9 # 1 a 9
DeflateWindowSize 15 # 1 a 15

Realmente não sei se devo colocar essas / finais ou não, se devo deixar apenas localhost ou, então, localhost/forpdi etc.

Novamente, muito obrigado por sua ajuda e tempo.

@arthurd2
Copy link
Contributor

arthurd2 commented Aug 9, 2019

Well, como diria Jack, vamos por partes:

  1. A conexão AJP esta funcionando?
    Você consegue testar com o seguinte comando:
$JBOSS_HOME/bin/twiddle.sh get "jboss.web:name=ajp-0.0.0.0-8009,type=ThreadPool" currentThreadsBusy 
  1. Checar se os seguintes módulos do Apache estão habilitados:
  • MOD_PROXY
  • MOD_REWRITE
  • MOD_PROXY_AJP
  1. Poderia listar os aquivos que estão no seu DocumentRoot?

  2. Ja testou em uma aba anonima? (parece besta, mas cache de navegador é inimigo do Debugger)

@fabriziomachado
Copy link

@caiosabadin estamos com o mesmo problema da tela branca. O front faz uma requisição para http://localhost/forpdi/environment que não retorna, devido a este resposta estar na porta 8080 (http://localhost:8080/forpdi/environment).

Vocês conseguiram resolver esta situação e a configuração do sistema na institução?

Obrigado!

@arthurd2
Copy link
Contributor

arthurd2 commented Mar 14, 2020 via email

@fabriziomachado
Copy link

Opa @arthurd2 com o Docker o ambiente subiu corretamente. O problema era que estava tentao insalar o yarn globalmente, e quando ele já está instalado dáva o erro.

Valeu pela ajuda.

npm i -g yarn node-gyp

@caiosabadin
Copy link
Author

Olá, @fcm , a gente adotou o docker mesmo...

@augustoarraes
Copy link

Salve @caiosabadin , lancei um Merge Request recentemente que possibilitar subir toda a infra em Docker com apenas um comando, se quiser testar fique a vontade. =D
MR: #282
Branch: https://github.com/arthurd2/plataforma-for/tree/docker-support

Olá, @arthurd2
Venho aqui acompanhando os posts e estou precisando subir individualmente um container do FrontEnd. Já tentei vários caminhos. Sou fã do Docker, mas ainda n tive êxito. Testei a branch master e a sua tb. Creio que seja algum detalhe na configuração. Quanto ao Back consegui subir separado, mas ainda está na minha IDE, enquanto isso já queria ver o front rodando. Quando possível, estamos muito precisando de ajuda para essa aplicação.

@arthurd2
Copy link
Contributor

Vou responder no #301 .

@samuelclerod
Copy link

samuelclerod commented Aug 31, 2020

Salve @caiosabadin , lancei um Merge Request recentemente que possibilitar subir toda a infra em Docker com apenas um comando, se quiser testar fique a vontade. =D
MR: #282
Branch: https://github.com/arthurd2/plataforma-for/tree/docker-support

Olá, @arthurd2
Venho aqui acompanhando os posts e estou precisando subir individualmente um container do FrontEnd. Já tentei vários caminhos. Sou fã do Docker, mas ainda n tive êxito. Testei a branch master e a sua tb. Creio que seja algum detalhe na configuração. Quanto ao Back consegui subir separado, mas ainda está na minha IDE, enquanto isso já queria ver o front rodando. Quando possível, estamos muito precisando de ajuda para essa aplicação.

Bom dia Pessoal,
Tive um problema ao subir o ambiente com Docker (do repositório @arthurd2 também), e aqui na UFCA temos preferência por subir nossas aplicações em containers. O erro tinha algo relacionado ao undertow com docker, e o suporte a IPV6 de alguns S.O.s . Ao verificar erro similar em https://github.com/jboss-dockerfiles/jbpm/issues/26, passei o argumento "-Djava.net.preferIPv4Stack=true" para JVM e funcionou.
O docker-compose.yml ficou assim:

[...]
forpdi-backend:
  build: ./backend-java
    image: platfor-backend
    volumes:
      - pdfs:/var/forpdi/pdfs
      - arquivos:/var/forpdi/files
    depends_on:
      - forpdi-database
    ports:
      - 8009:8009
      - 8080:8080
    environment: 
      - "JAVA_OPTS=-Djava.net.preferIPv4Stack=true"
[...]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

6 participants