Skip to content

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

Jamil Atta Junior edited this page Mar 24, 2016 · 28 revisions

Instalação de Ambiente de Produção no servidor CentOS com Circus:

Pre-requisitos:

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

No terminal como root, digitar:

yum install epel-release

para ativar EPEL (Extra Packages for Enterprise Linux).

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

yum install python-pip python-devel gcc gcc-c++ nginx git libxslt-devel libxml2-devel

Instalação de: virtualenv e virtualenvwrapper:

  • executar: pip install virtualenv virtualenvwrapper
  • criar um diretorio: mkdir -p /var/www/.virtualenvs
  • adicionar estas linhas no final do ~/.bashrc
export WORKON_HOME=/var/www/.virtualenvs
. /usr/bin/virtualenvwrapper.sh
  • recarregar arquivo: source ~/.bashrc
  • criar e destruir um virtualenv: mkvirtualenv test && deactivate && rmvirtualenv test

Instalação do mongodb

Ter acesso a uma instância de mongo, caso não tenha consulte documentação oficial para instalação

IMPORTANTE: a instalação do MongoDB pode ser em outro host, nesse caso tenha por perto as credenciais para configurar a conexão ao banco.

Criar as pastas definidas no modelo de implantação de apps:

Obs: caso o servidor já tiver configurado circus para outras apps, as seguintes instruções não serão necessárias, de qualquer forma é bom verificar.

Executar:

  • mkdir -p /etc/circus/apps/
  • mkdir -p /etc/scieloapps/

Na descrição do Modelo de Implantação para Apps SciELO, indica que deve ser criada uma pasta /etc/init, entretanto nunca é utilizada.

Arquivo de configuração do circus:

Obs: caso o servidor já tiver configurado circus para outras apps, as seguintes instruções não serão necessárias, de qualquer forma é bom verificar.

  • Criar o arquivo de configuração do Circus: vi /etc/circus/circusd.ini
  • Conteúdo:
[circus]
include_dir = apps
logoutput = /var/log/circusd.log
loglevel = debug
statsd = True
httpd = True
httpd_host = 0.0.0.0
httpd_port = 11000

[env]
STDERR_CLASS = TimedRotatingFileStream
STDERR_TIME_FORMAT = %Y-%m-%d %H:%M:%S
STDERR_UTC = True
STDERR_ROTATE_WHEN = D
STDERR_ROTATE_INTERVAL = 1
SOCK_DIR = /var/run
LOG_DIR = /var/log

Adicionar o circus como serviço no SO:

Obs: caso o servidor já tiver configurado circus para outras apps, as seguintes instruções não serão necessárias, de qualquer forma é bom verificar.

  • Criar o arquivo: vi /etc/systemd/system/circus.service
  • Conteúdo:
[Unit]
Description=Circus process manager
After=syslog.target network.target nss-lookup.target

[Service]
Type=simple
ExecReload=/root/local/bin/circusctl reload
ExecStart=/root/local/bin/circusd /etc/circus/circusd.ini
Restart=always
RestartSec=5
Environment="PYTHONPATH=/usr/lib64/python27.zip:/usr/lib64/python2.7:/usr/lib64/python2.7/plat-linux2:/usr/lib64/python2.7/lib-tk:/usr/lib64/python2.7/lib-old:/usr/lib64/python2.7/lib-dynload:/root/local/lib/python2.7/site-packages:/usr/lib64/python2.7/site-packages:/usr/lib/python2.7/site-packages"

[Install]
WantedBy=default.target

Iniciar o serviço (systemd):

Obs: caso o servidor já tiver configurado circus para outras apps, as seguintes instruções não serão necessárias, de qualquer forma é bom verificar.

  • systemctl --system daemon-reload
  • systemctl start circus

Importante:

Se tudo ocorreu como deveria, à partir deste momento é possível acessar http://host_do_servidor:11000 para acessar a interface de administração remota de processos, caso não consiga visualizar/acessar, considere listar/limpar as regras de firewall.

Gerenciamento de processos

Criar arquivo de configuração para o processo: vi /etc/circus/apps/opac.ini

Adicionar o conteúdo:

[watcher:opac]
name = opac
cmd = chaussette
args = --fd $(circus.sockets.opacwebapp) --backend gevent opac.manager.app
use_sockets = True
numprocesses = 3
virtualenv = /var/www/.virtualenvs/opac/
copy_env = True
uid = nginx
gid = nginx

stderr_stream.class = $(circus.env.STDERR_CLASS)
stderr_stream.filename = $(circus.env.LOG_DIR)/opac.log
stderr_stream.time_format = $(circus.env.STDERR_TIME_FORMAT)
stderr_stream.utc = $(circus.env.STDERR_UTC)
stderr_stream.rotate_when = $(circus.env.STDERR_ROTATE_WHEN)
stderr_stream.rotate_interval = $(circus.env.STDERR_ROTATE_INTERVAL)

[socket:opacwebapp]
path = $(circus.env.SOCK_DIR)/opac.sock
family = AF_UNIX
umask = 000

[env:opacwebapp]
OPAC_CONFIG = /etc/scieloapps/opac_config.py

Criamos o virtualenv para o projeto

  • executar: mkvirtualenv opac

Nos próximos pasos para ativar ou desativar o ambiente, utilize:

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

Instalação da aplicação

  • ativar o virtualenv: workon opac
  • baixar o arquivo de requirements: curl -fsSL https://raw.githubusercontent.com/scieloorg/opac/master/requirements.txt -o /tmp/opac_requirements.txt
  • instalar os requirements: pip install -r /tmp/opac_requirements.txt

Configuração da aplicação:

Criando arquivo:

  • copiar arquivo de configuração a partir do template:
cp /var/www/.virtualenvs/opac/src/opac/opac/webapp/config/default.py  /etc/scieloapps/opac_config.py
  • editar as configurações (ver abaixo)

  • Modificar as permissões para que o usuário nginx consiga acessar os estáticos e outro arquivos:

chown nginx:nginx -R /var/www/.virtualenvs/opac/src/opac/

Editando arquivo:

Editar o arquivo /etc/scieloapps/opac_config.py, configurar as seções:

  • setar/verificar o modo debug em falso: DEBUG=False
  • Ajustar as credenciais de envio de email.
  • Ajustar as credenciais da conexão com mongodb e nome do banco (Ex.: db name = homolog_prod_opac)
  • Ajustar o caminho para criar o banco de dados SQLite (Ex.: /var/www/.virtualenvs/opac/src/opac/data)
  • Gerar um novo valor para SECRET_KEY, seguindo este script: https://gist.github.com/jfunez/873c78890d55354739c8

Testando:

  • ativamos o ambiente: workon opac
  • executamos o chaussette: chaussette opac.manager:app --port 8000 --host 0.0.0.0
  • acessar ao IP/host do servidor na porta indicada acima: http://SERVER_NAME_OR_IP:8000/

Configuração do Nginx

  • criamos o arquivo de configuração:
vi /etc/nginx/conf.d/opac.conf
  • criar/verificar as pastas para armazenamento dos logs, e a permissão para escrita do usuário nginx:
mkdir -p /var/log/opac
chown nginx:nginx /var/log/opac
  • conteúdo do arquivo:
upstream opac {
    server unix:/var/run/opac.sock fail_timeout=20;
}

server {
    listen 8000;
    server_name SERVER_NAME;    
    access_log /var/log/opac/access.log;
    error_log  /var/log/opac/error.log;
    
    location ^~ /static/ {
        root /var/www/.virtualenvs/opac/src/opac/opac/webapp;
    }

    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://opac;
        }
}
  • para aplicar a nova configuração, executar: nginx -s reload

IMPORTANTE:

Caso não consiga acessar ao site:

  • verifique/reinicie que o circus esta gerenciando o processo para servir a app:
circusctl restart opac
  • verifique as permissões no arquivo do socket: /var/run/opac.sock aonde o usuário: nginx.
  • verifique que o usuário nginx seja o proprietário do diretorio da app:
chown -R nginx:nginx /var/www/.virtualenvs/opac/src/opac/