Skip to content

Configuração e instalação (ambiente de produção) Gunicorn

Jamil Atta Junior edited this page Mar 24, 2016 · 1 revision

Instalação de Ambiente de Produção em servidor CentOS:

Pre requisitos:

  • S.O. CentOS versão 7 (x64)
  • usuário (por exemplo: developer) não root com acesso ao servidor
  • usuário "developer" deve ter privilegios sudo para tarefas administrativas

Habilitar EPEL e instalação de componentes básicos:

No terminal, digitar:

sudo yum install epel-release

para ativar EPEL.

Instalação dos componentes: nginx, pip, gcc, etc..

sudo yum install python-pip python-devel gcc nginx git libxslt-devel libxml2-devel

Instalação de: virtualenv e virtualenvwrapper

  • criar um diretorio: mkdir ~/.virtualenvs
  • adicionar estas linhas no final do ~/.bashrc
export WORKON_HOME=~/.virtualenvs
. /usr/bin/virtualenvwrapper.sh
  • recarregar arquivo: source ~/.bashrc
  • criar e destruir um virtualenv: mkvirtualenv test, deactivate e rmvirtualenv test

Instalação do mongodb

Documentação oficial: https://docs.mongodb.org/manual/tutorial/install-mongodb-on-red-hat/

Criamos um diretorio para conter o projeto

  • executamos: mkdir ~/opac_site

Criamos o virtualenv para o projeto

  • executamos: mkvirtualenv opac_env

Nos proximos pasos para ativar ou desativar o ambiente, utilize:

  • para ativar o ambiente: workon opac_env
  • para desativar o ambiente: deactivate

Clonamos o projeto:

  • acessamos diretorio do projeto: cd ~/opac_site/
  • executamos: git clone https://github.com/scieloorg/opac.git

Instalamos as dependências do projeto:

  • acessamos diretorio do repositorio do projeto: cd ~/opac_site/opac/ (dentro deve existir o arquivo: requirements.txt)
  • ativamos o virtualenv: workon opac_env caso não esteja ativado
  • instalamos as dependências: pip install -r requirements.txt
  • instalamos as dependências: pip install -r requirements.production.txt

Definimos a configuração:

  • copiamos o template de configuração: cp ~/opac_site/opac/opac/webapp/config/default.py ~/opac_site/opac/opac/webapp/config/local_settings.py
  • editamos a configuração: vi ~/opac_site/opac/opac/webapp/config/local_settings.py com os dados necessários
  • [IMPORTANTE] redefinir o valor do SECRET_KEY (instruções https://gist.github.com/jfunez/873c78890d55354739c8)
  • executamos: export OPAC_CONFIG='~/opac_site/opac/opac/webapp/config/local_settings.py'

Testamos que Gunicorn esta funcionando:

  • nos movemos aos diretorio aonde esta o manager.py: cd ~/opac_site/opac
  • ativamos o ambiente: workon opac_env
  • executamos: gunicorn --bind 0.0.0.0:8000 opac.manager:app
  • acessando pelo browser o endereço IP do servidor, e a PORTA 8000, deve responder o site: http://ip-servidor:8000/
  • se o site não responde, verificar as regras do IP tables e acesso à porta definida acima.
  • paramos a execução do gunicorn: CTRL+C
  • desativamos o ambiente: deactivate

Criamos arquivo de serviço para systemd

  • criamos o arquivo: sudo vi /etc/systemd/system/opac_site.service
  • conteúdo do arquivo:
[Unit]
Description=Gunicorn instance to serve OPAC
After=network.target

[Service]
User=developer
Group=nginx
WorkingDirectory=/home/developer/opac_site/opac/
Environment="PATH=/home/developer/.virtualenvs/opac_env/bin"
ExecStart=/home/developer/.virtualenvs/opac_env/bin/gunicorn --workers 3 --bind unix:opac.sock -m 007 opac.manager:app

[Install]
WantedBy=multi-user.target
  • executamos: sudo systemctl start opac_site
  • executamos: sudo systemctl enable opac_site

Configuração do Nginx

  • editamos o arquivo de configuração: sudo vi /etc/nginx/conf.d/opac.conf
  • definimos um novo block server {}
  • conteúdo do server:
server {
    listen 80;
    server_name SERVER_DOMAIN_OR_IP;

        location / {
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_pass http://unix:/home/developer/opac_site/opac/opac.sock;
        }
}
  • acrescentamos o usuario nginx ao grupo do usuario developer, para ter acesso ao projeto e poder criar o socket: sudo usermod -a -G user nginx
  • acrescentamos permissão para execução na home do developer: chmod 710 /home/developer
  • verificamos a configuração do nginx: sudo nginx -t, se houver erros devem ser solucionados.
  • iniciamos o serviço: sudo systemctl start nginx
  • habilitamos o serviço: sudo systemctl enable nginx