Cómo alojar varios proyectos y nombres de dominio en un servidor

NGINX es una herramienta mágica

Soy dueño de varios nombres de dominio y cada uno alberga un proyecto paralelo diferente. Durante mucho tiempo, todo lo que requería 'alojamiento' se alojó en Heroku. Pero su nivel gratuito puede ser bastante limitado, también puede resultar costoso rápidamente si paga por cada proyecto por separado. Así que, en cambio, decidí explorar unirlos todos usando NGINX (recomendado por Jane Manchun Wong).

Recursos necesarios

Servidor privado virtual (VPS)

Necesitará un servidor virtual como DigitalOcean o EC2 de AWS. Personalmente, uso Vultr (aquí está el enlace de no referencia) que me cuesta alrededor de $ 2.50 / mes.

Nombres de dominio

Deberá registrar algunos nombres de dominio. Suponiendo que probablemente ya los tenga, asegúrese de que sus nombres de dominio apunten a los servidores de nombres de su VPS. Debe haber una sección de DNS en su panel de servicio de nombres de dominio donde puede seleccionar "DNS personalizado" o algo similar. Si no está seguro de cuáles son los servidores de nombres de su VPS, debería poder encontrar esa información fácilmente mediante una simple búsqueda de “servidor de nombres” + nombre del servicio VPS.

Configuración de NGINX

Instalación y configuración básica

Referencia de Cómo instalar Nginx en Ubuntu 16.04

Ejecute los siguientes comandos a través de SSH-ing en el VPS. Instalará NGINX, establecerá reglas de firewall que lo permitan y configurará NGINX para que se inicie automáticamente al arrancar.

Configuración de configuración

Referencia de alojar varios dominios en un servidor / IP con Apache o nginx

La ubicación virtual.conf predeterminada debe estar en /etc/nginx/conf.d/virtual.conf. Recomiendo hacer una copia de seguridad del archivo predeterminado antes de realizar cambios. (Si no existe, simplemente puede crearlo). Edite el archivo para que se parezca a lo siguiente:

Aquí hay algunas cosas para mirar:

  • bloque de servidor : cada uno de estos debe representar cada dominio o subdominio diferente en uso.
  • root : esta es la ubicación desde donde se cargan los archivos (HTML).
  • server_name - (sub) nombre (s) de dominio que deben cargar estos archivos específicos.
  • proxy_redirect : en los casos en los que está redirigiendo un subdominio específico a un servidor activo, querrá agregar esto y poner la ubicación de IP después de él. (Para servidores locales, //127.0.0.1:port o // localhost: port debería funcionar como se esperaba ).
sudo systemctl restart nginx

Una vez que haya terminado, reinicie el servidor para que se carguen y apliquen las nuevas configuraciones.

Clonación y vinculación

Ahora recuerde, dado que tiene su directorio apuntando a / opt / htdocs / websiteName , su pensamiento inicial podría ser clonar sus proyectos en estas carpetas. Esto puede funcionar, pero no es ideal, ya que muchas operaciones en estas carpetas requieren acceso de root para hacer cualquier cosa.

En su lugar, puede clonarlos en su carpeta de usuario o en cualquier otro lugar como lo haría normalmente, y luego crear un enlace suave para conectar la ruta a su carpeta de repositorio. Algo como esto:

git clone [email protected]:binhonglee/binhonglee.github.io ~/websitesudo ln -s ~/website /opt/htdocs/binhong

Por supuesto, cuando esté clonando una carpeta de sitio estática de Node.js (ReactJS, Angular o Vue.js), querrá instalarlos ( npm install) y construirlos ( npm run-script build). Luego, vincule la carpeta ./build en lugar del nivel base del repositorio clonado. (De manera similar para los sitios Jekyll, pero use la carpeta ./_output en su lugar). En cuanto a los servidores activos, solo asegúrese de que su servidor se esté ejecutando en el mismo puerto que aparece en el archivo de configuración.

Configurar HTTPS con certbot

Gracias a Let's Encrypt, ahora puede obtener certificados HTTPS fáciles y gratuitos. Con la introducción de certbot, ¡todo se volvió aún más fácil!

Referencia de Cómo proteger Nginx con Let's Encrypt en Ubuntu 16.04

Simplemente ejecute lo anterior para todos sus dominios y nombres de subdominios y certbot se encargará de todo. Si tuviera que renovar los certificados, puede ejecutar lo siguiente para que el certbot lo ayude a renovar su certificado SSL.

sudo certbot renew --dry-run

Actualizando todo

Ahora que tiene todo en funcionamiento, es posible que esté pensando, bueno, parece haber mucho que recordar si necesito actualizar algo. Desafortunadamente, eso es cierto, pero siempre podemos hacerlo más fácil agregando un script que lo haga por nosotros.

Así es como se vería uno:

¡Gracias por leer! Avíseme si tiene alguna pregunta en los comentarios a continuación.

Sobre mí

En el momento de escribir este artículo, trabajo en Apple Inc. en el puesto de Siri Language Engineer como contratista independiente a través de AdvantisGlobal. Paso mucho de mi tiempo libre experimentando y construyendo cosas nuevas con tecnologías que encuentro divertidas e interesantes. Siga mi viaje de exploración aquí o en GitHub.

Otras referencias

  • nginx proxy pass redirecciona ignora el puerto en el servidor predeterminado
  • Continuar tarea / trabajos en segundo plano SSH al cerrar SSH en superusuario