-
Notifications
You must be signed in to change notification settings - Fork 46
Colocando a aplicação em produção com NGINX
Como sabemos softwares feitos com python/Django e node.js/Express, são excelentes em relação a produtividade de produção, mas quando o a aplicação inteira é colcoada em cima dessas tecnologias, a perfomace reduz consideravelmente. Nesse tutorial vamos aprender a como colcoar uma aplicação em produção integrando com NGINX visando o aumento da perfomace da aplicação, atendendo mais usuários com os mesmos recursos. Dessa forma iremos criar dois servidores, proxy server do nginx com Django ou Express e também um servidor static server pelo qual será usado para o processamento de arquivos estáticos. Dessa forma é possível diminuir o número de requisições diretas a aplicação.
(Foi utilizado sistema ubuntu na instalação)
Execute os comandos em sequência:
* sudo apt-get update
* sudo apt-get sudo apt-get install nginx
* sudo service nginx start
* sudo update-rc.d nginx defaults
Os ultimos dois comandos iniciam a aplicação e a definição para executar a aplicação quando o sistema for iniciado, repectivamente.
Agora vamos configurar o NGINX para que ele comece a servir os arquivos estáticos para o própria aplicação, node ou django, não precisar fazer isso. Essas configurações serão realizadas dentro do arquivo principal do ngix, chamado "nginx.conf". No ubuntu a localização dele se encontra: "/etc/nginx/nginx.conf".
Arquivo nginx.conf melhorado--→>>
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 80;
server_name localhost;
access_log logs/access.log;
location /static {
root /meuapp/public;
expires max;
}
location / {
proxy_pass http://localhost:3000;
}
}
}
Para melhorar a perfomace habilitamos o gzip, em "gzip on", os arquivos vão compactados para o cliente e lá são descompactados, a performace da aplicação como um todo é melhorada visto que GZIP consegue em média reduzir o tamanho dos arquivos estáticos em 50%. O servidor conseguirá atender mais usuários com a mesma largura de banda.
Em "location /static{" definimos a rota dos arquivos estáticos da aplicação. No caso "/static" será o caminho no site para os arquivos estáticos e em "root" será o caminho absoluto dentro da maquina para os arquivos estáticos. Dentro do location também é colocado "expires max" um cache simples.
location / {
proxy_pass http://localhost:3000;
}
No último location, o location /, vai para a raiz da aplicação sendo ela um proxy da nossa aplicação, node.js ou python, que está rodando em localhost:3000.
Mas então quer dizer que se eu quiser rodar a aplicação em um servidor e os arquivos estáticos em outro eu posso? Sim, pode! Inclusive pode se fazer isso para aumentar ainda mais a perfomace do servidor e atenter mais usuários.
https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-14-04-lts [How to install NGINX on ubuntu] https://udgwebdev.com/nginx-servindo-nodejs [NGINX servindo nodejs] http://blog.thiagobelem.net/habilitando-gzip-em-servidores-nginx [Habilitando Gzip]
EPS/MDS - FGA/UnB
Métodos de Desenvolvimento de Software
Gestão de Portfólio e Projetos de Software
RUP (Rational Unified Process)
Fase Elaboração (RUP) Planejamento(PMBOK)
Fase de Construção (RUP), Execução/Monitoramente e Controle (PMBOK)
Fase Transição (RUP), Finalização (PMBOK)
Acceptance Test Driven Development (ATDD)
Integração Contínua Deploy Contínuo
Automação de Ambiente com Docker
Orquestração de Containers com Docker Compose
Automação de Ambiente com Vagrant
Deploy Contínuo na Plataforma Heroku
Integração Contínua com Travis CI
Disponibilizando a Aplicação com o Proxy Reverso Nginx
Tutorial de Instalação do Ionic
Android Integração contínua com Circle CI
Configuração de Ambiente para React Native
Tutorial Instalação Ruby on Rails
Teste Automatizado Cucumber JS
Teste Automatizado Cucumber Rails
Testando AngularJS com Jasmine
Teste Automatizado com Selenium IDE
Configurar o SonarCloud para um projeto usando Jest
Configurar o SonarCloud para um projeto usando Pytest
Configurar o SonarCloud para um projeto usando Mocha e Istambul