Ejecutar una aplicación de Nginx sin Passenger

Generalidades

Las máquinas VPS no pueden ejecutar Passenger si el tipo de servidor está configurado en Nginx (en vez de Apache).

Un método alternativo para alojar una aplicación en Nginx sin pasajero sería ejecutarla en un servidor HTTP independiente. Esto también debe ejecutarse en un puerto sin privilegios. El proxy se puede habilitar a través del panel DreamHost.

Este artículo enumera algunos ejemplos simples de cómo crear un servidor independiente para Node, Python y Ruby.

Configuración inicial

 

Paso 1 — Configurar el directorio público

Primero, configura el dominio para usar el subdirectorio público como directorio principal del dominio. Consulta el siguiente artículo para obtener instrucciones sobre cómo ajustar el directorio web de tu sitio en el servidor.

Por ejemplo, lo cambiaría a: example.com/public

Paso 2 — Ejecuta la aplicación en un puerto sin privilegios

Utiliza las instrucciones a continuación para configurar el script de tu aplicación para que se ejecute en un puerto sin privilegios. Este sería un puerto entre 8000 y 65535.

Los puertos 80 y 443 no se pueden usar, sin embargo, la página Proxy en el panel permite que la aplicación se ejecute sin el número de puerto vinculado a la URL.

Paso 3 — Configura el dominio en la página Proxy

Este paso te permite ejecutar la aplicación sin vincular el número de puerto a la URL.

  1. Visita la página Proxy en el panel.
  2. Agrega el dominio en el que se ejecutará la aplicación.
  3. Selecciona el número de puerto en el que se ejecutará el servidor autónomo.
  4. Click Agregar un servidor proxy.

En todos los ejemplos siguientes, se utiliza el puerto 8002.

Node.js

  1. Instala una versión personalizada de Node.js.
  2. En el directorio de la aplicación (example.com), crea un archivo llamado app.js llamado app.js con el siguiente código:
var http = require("http");

  var server = http.createServer(function (request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.end("Hello World From Node");
  }).listen(8002);

La función listen le dice al nodo en qué puerto debe escuchar la aplicación.

Inicia el servidor de nodo predeterminado corriendo el archivo app.js.

[server]$ node app.js

Esto carga el archivo app.js solo mientras tu sesión SSH actual aún está activa. También puedes usar un paquete como Forever que te permitiría salir de la sesión SSH mientras continúas ejecutando la aplicación.

Visita el dominio (sin el puerto agregado a la URL) y verás que se ejecuta la aplicación.

Python

Un servidor independiente común que se utiliza para aplicaciones Python es Gunicorn inspirado en el servidor Ruby Unicorn.

Primero debes instalar una versión personalizada de Python. Esto te permite crear un virtualenv e instalar módulos personalizados de Python localmente.

Asegúrate de haber activado tu virtualenv. La primera parte de tu símbolo del sistema cambia al nombre de su virtualenv.

Luego puedes usar pip para instalar Gunicorn.

(venv)[server]$ pip3 install gunicorn

A continuación, crea un archivo Python para ejecutar el sitio. Este ejemplo se llama myapp.py.

(venv)[server]$ vim myapp.py

Agrega el siguiente código al archivo.

def app(environ, start_response):
  data = b"Hello, World From Gunicorn!"
  start_response("200 OK", [
      ("Content-Type", "text/plain"),
      ("Content-Length", str(len(data)))
                           ])
  return iter([data])

Inicia Gunicorn pasando el puerto # al comando.

(venv)[server]$ GUNICORN_CMD_ARGS="--bind=localhost:8002" gunicorn myapp:app

Visita el dominio y verás 'Hello, World From Gunicorn!'.

Ruby

Haz .gems el directorio de gemas predeterminado para nuestro usuario. Agrega lo siguiente al archivo .bash_profile.

export PATH=$HOME/.gems/bin:$PATH
export GEM_PATH=$HOME/.gems/

Haz source al archivo para cargar la nueva configuración.

[server]$ source ~/.bash_profile

A continuación, instala la gema.

[server]$ gem install puma

En el directorio de la aplicación, crea un archivo config.rb.

[server]$ vi config.rb

Agrega lo siguiente:

app do |env|
    body = 'Hello, World From Puma'
    [200, { 'Content-Type' => 'text/plain', 'Content-Length' => body.length.to_s
}, [body]]
end

bind 'tcp://127.0.0.1:8002'

Finalmente, inicia el servidor.

[server]$ puma -C config.rb

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?