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.
- Visita la página Proxy en el panel.
- Agrega el dominio en el que se ejecutará la aplicación.
- Selecciona el número de puerto en el que se ejecutará el servidor autónomo.
- Click Agregar un servidor proxy.
En todos los ejemplos siguientes, se utiliza el puerto 8002.
Node.js
- Instala una versión personalizada de Node.js.
- 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