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.