Como configurar corretamente o Play Framework 2.1+ e o Nginx para produção?

3

Estou tentando configurar corretamente o Play Framework com o Nginx como o servidor HTTP front-end na Amazon AMI.

Estou um pouco confuso com a documentação oficial estabelecida pelo Google Play . Eles estão sugerindo que você corra

start -Dhttp.port=9000

e, em seguida, configurar o Nginx para redirecionar para a porta 9000, a fim de servir adequadamente o meu aplicativo? Eu sinto que ter um usuário dedicado apenas para executar o comando start é um desperdício, não há uma maneira melhor de fazer isso?

Eu realmente aprecio algumas estratégias básicas para as práticas recomendadas para um aplicativo da Web Play Framework de produção.

    
por Bert B. 15.07.2013 / 03:34

1 resposta

1

A razão pela qual eu uso um usuário dedicado para isso é que eu posso colocar vários ambientes diferentes em uma única máquina, eles são todos impedidos de trilhar um no outro pelo id do usuário separado. Por exemplo, temos um aplicativo chamado "d1", que temos que colocar em vários ambientes, para que tenhamos um usuário para cada ambiente:

d1test d1desenvolvimento d1nightly

Para a compilação todas as noites , o nginx.conf se parece com:

upstream d1nightly {
  ip_hash;
  server 127.0.0.1:20101;
  server 127.0.0.1:20102;
 }

 server {
  listen 443 ssl;
  server_name nightly.d1.org;
  ssl_certificate      /etc/ssl/certs/cert.pem;
  ssl_certificate_key    /etc/ssl/private/key.pem;
  ssl_session_timeout 5m;
  ssl_protocols SSLv3 TLSv1;
  ssl_ciphers HIGH:!ADH:!MD5;
  ssl_prefer_server_ciphers on;
  location /500x.html {
    alias /usr/share/nginx/html/500x.html;
  }


  location / {
   proxy_set_header Host $http_host;
   proxy_set_header X-Real-IP $remote_addr;
   proxy_set_header X-Forwarded-Proto https;
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_redirect http:// https://;
   add_header Pragma "no-cache";
   proxy_pass http://d1nightly;
   error_page 500 502 503 504 /500x.html;
  }
 }

Agora, quando vamos para nightly.d1.org , temos o lançamento noturno.

Pagamos uma taxa fixa por VM por hora, em vez de pelo tempo de CPU, para que possamos obter mais valor com essa combinação, reunindo 3 ou 4 ambientes em uma única máquina durante nossos testes.

Para iniciar os aplicativos de reprodução, tenho uma função de script de shell bem básica:

function startPlayAppd1 {
        #start a d1 play app with appropriate system properties
        nohup ${base_directory}/${app}-latest-${jvm}/${snapshot_name}/start \
                       -Dhttp.port=${listen_port}                                             \
                       -Denv.name=${env_name}                                                 \
                       -Dlogger.file=${logger_file}                                           \
                       -Dsession.secure=${session_secure}                                     \
                       -Dga.domain=${ga_domain}                                               \
                       -Djava.net.preferIPv4Stack=${preferIPv4Stack}                          \
                       -Dcom.sun.management.jmxremote                                         \
                       -Dcom.sun.management.jmxremote.port=${jmx_port}                        \
                       -Dcom.sun.management.jmxremote.authenticate=${jmx_remote_authenticate} \
                       -Dcom.sun.management.jmxremote.password.file=jmxremote.password        \
                       -Dcom.sun.management.jmxremote.access.file=jmxremote.access            \
                       -Dcom.sun.management.jmxremote.ssl=false                               \
                       -Djavax.net.debug=${javaxDebugLevel}                                   \
                > ${listen_port}.nohup 2>&1 &
        sleep 5
}

A outra vantagem de um ambiente por usuário é a flexibilidade que ele cria.

Como você pode ver, várias propriedades do sistema foram adicionadas, por exemplo, para ativar o JMX, para que nossas ferramentas de monitoramento possam observar os aplicativos de reprodução.

Esta é uma solução que funcionou bem para nossos casos de uso.

    
por 02.09.2013 / 09:02

Tags