Escala ilimitada y alojamiento web gratuito con GitHub Pages y Cloudflare

Publicado: 2022-03-11

Tengo un secreto que ahorra a mis clientes una tonelada de dinero, mantiene su sitio web seguro y tiene copias de seguridad integradas.

El secreto: hago que su sitio web sea estático. Luego, lo almaceno y lo alojo con GitHub, y uso Cloudflare para servirlo a través de HTTPS y hacerlo rápido. Mis clientes solo pagan por su nombre de dominio, pero obtienen mucho más de lo que esperaban.

¿Por qué contenido estático?

Los sitios estáticos son maravillosamente rápidos ya que no hay tiempo de procesamiento del servidor involucrado. Además, al confirmar una base de código de activos estáticos en un repositorio de git, revertir los cambios simplemente se convierte en una cuestión de volver a una confirmación anterior. Las copias de seguridad son un git push , y esencialmente sirve todo su sitio web desde el caché, lo que significa que su servidor casi nunca tendrá que procesar una solicitud nuevamente.

¿Construyendo una interfaz de usuario compleja?

Con la llegada de los marcos front-end, como React y sus similares, puede crear experiencias mágicas con nada más que HTML/CSS y JavaScript. Sin embargo, tendrá que separar su lógica de back-end de su front-end, pero incluso Ruby on Rails se envía ahora con un modo API.

Cada vez que me contratan para crear un sitio web, considero si un sitio estático es suficiente o no para satisfacer las necesidades de mi cliente y, en muchos casos, lo es.

¿Se pregunta qué tipo de casos de uso tengo en mente? ¡Genial! Analicemos algunas situaciones en las que es posible que desee considerar el contenido estático y explique cómo este enfoque puede ahorrarle tiempo a usted y a su cliente.

Sitios web de folletos

Los sitios web de folletos están destinados a proporcionar información sobre una empresa y no cambian significativamente a lo largo de su vida. Una aplicación dinámica es claramente excesiva para tales sitios, y dado que estos sitios no reciben mantenimiento durante años y reciben pocas actualizaciones, si es que reciben alguna, generalmente son objetivos fáciles para que los piratas informáticos pirateen.

Las plantillas HTML estáticas son significativamente más baratas que sus contrapartes de CMS y son más fáciles de modificar en el futuro. Los desarrolladores a los que se les pide que actualicen dichos sitios no requieren conocimientos especializados sobre un CMS en particular. Por regla general, siempre hago sitios web estáticos para sitios de folletos.

Bonificación: a las pequeñas empresas les encanta no pagar tarifas de alojamiento mensuales recurrentes. Por supuesto, el alojamiento no es un costo enorme, pero los clientes simplemente no tienen que molestarse en pagar nada más que el dominio, lo cual es excelente.

Aplicaciones de una sola página

¿Presume de una aplicación nueva, genial y maravillosa que se basa en marcos front-end modernos?

Su aplicación ya es mayormente estática. Tome algunos pasos adicionales para aislar cualquier lógica del lado del servidor en una aplicación separada y obtenga el beneficio completo de tener su aplicación servida completamente desde el caché de Cloudflare.

Su aplicación estará disponible en todo momento.

blogs

Esta es una venta difícil. Es difícil convencer a la gente de que los sitios estáticos se pueden emplear para los blogs, pero léame, no me he ido al fondo.

Los blogs no son más que contenido presentado con plantillas. Simplemente no necesita una aplicación completa que analice cada solicitud y represente una nueva página. Un sitio estático es perfecto para este caso de uso.

Considere a Jekyll. Le das plantillas de Liquid y contenido de Markdown, y los combina en un sitio web estático. No se requiere procesamiento sobre la marcha, y su blog de repente se siente significativamente más rápido.

Este flujo de trabajo es especialmente útil porque las páginas de GitHub son compatibles con las compilaciones de Jekyll. De repente, las publicaciones de blog se pueden contribuir con solicitudes de extracción y todo su contenido se almacena dentro del control de versiones. Los que no son desarrolladores aún pueden contribuir con publicaciones en Markdown publicando sus publicaciones a través de Stackedit.

De hecho, ¡estoy usando Stackedit para redactar esta publicación ahora mismo!

Además, si desea comentarios en las publicaciones de su blog, Disqus le brinda un poderoso sistema de comentarios al insertar un fragmento de JavaScript.

Esta página que estás leyendo también usa Disqus.

Páginas de GitHub

GitHub Pages es la respuesta de GitHub a las páginas de proyectos y te permite servir cualquier sitio web estático directamente desde tu repositorio. Dado que las páginas de GitHub admiten dominios personalizados, puede alojar un sitio web estático en las páginas de GitHub de forma gratuita, con implementaciones directamente desde Git.

Implementación en páginas de GitHub.

¡Basta de hablar, vamos a verlo en acción!

Seguí adelante y creé una aplicación React de una sola página que obtiene y muestra el tipo de cambio actual para la rupia pakistaní desde una API pública. Implementemos esto en las páginas de GitHub.

Primero, creemos un nuevo repositorio de GitHub.

Una captura de pantalla de la nueva pantalla de creación del repositorio de GitHub, con los campos "Propietario" y "Nombre del repositorio". Este último tiene el nombre "price-check" relleno.

Las páginas de GitHub se sirven desde una rama llamada gh-pages así que vamos a crear una para mi proyecto.

 $ git checkout -b gh-pages Switched to a new branch 'gh-pages'

Y empujemos el sitio hacia arriba:

 $ git remote add origin [email protected]:amingilani/price-check.git $ git push -u origin gh-pages Counting objects: 27, done. Delta compression using up to 8 threads. Compressing objects: 100% (25/25), done. Writing objects: 100% (27/27), 28.67 KiB | 0 bytes/s, done. Total 27 (delta 3), reused 0 (delta 0) remote: Resolving deltas: 100% (3/3), done. To github.com:amingilani/price-check.git * [new branch] gh-pages -> gh-pages

¡Y hemos terminado! En este punto, el sitio web estará disponible en https://amingilani.github.io/price-check con SSL gratuito:

La página "Bienvenido a Verificación de precios" del sitio alojado en las páginas de GitHub, con una etiqueta Segura junto al campo URL del navegador.

Cosas importantes a tener en cuenta:

  • Las páginas de GitHub sirven el archivo index.html en la rama gh-pages de su proyecto
  • El sitio web se sirve en USERNAME.github.io/REPOSITORY-NAME

Personalización del nombre de dominio.

Servir el sitio desde GitHub está bien, pero cualquier sitio web decente necesita un nombre de dominio personalizado. ¡Afortunadamente, GitHub te permite traer tu propio dominio a la fiesta!

Primero, creemos un archivo CNAME especial y coloquemos nuestro nombre de dominio allí. Esto le permitirá a GitHub saber qué nombre de dominio enrutar al repositorio.

 $ echo 'pricecheck.gilani.me' > CNAME $ git add . $ git commit -m 'Add a custom domain' ... $ git push ...

En segundo lugar, apuntemos un CNAME para nuestro subdominio al DNS de GitHub en USERNAME.github.io :

Una captura de pantalla que muestra un menú desplegable con CNAME seleccionado, el nombre "pricecheck" escrito en el campo central y el dominio "amingilani.github.io" escrito en el campo de la derecha.

Precaución: ¡ NO use esto para un dominio de vértice! Agregar un registro CNAME a la raíz de su dominio deshabilitará sus registros MX y TXT . Use esto solo para su subdominio. Los dominios de Apex se analizan más adelante.

En este punto, nuestro sitio web debería ejecutarse en nuestro dominio personalizado en HTTP:

La misma página de verificación de precios en el navegador, pero ahora se accede a través de pricecheck.gilani.me. Esta vez la etiqueta de seguridad está ausente.

Cosas importantes a tener en cuenta:

  • El dominio predeterminado *.github.io se sirve a través de HTTPS.
  • Nuestro nombre de dominio personalizado se sirve a través de HTTP no seguro.
  • NO use un registro CNAME en su dominio principal a menos que desee eliminar sus correos electrónicos.

Limitaciones de las páginas de GitHub:

  • Los repositorios deben tener un tamaño de archivo inferior a 1 GB.
  • Los sitios web deben tener menos de 1 GB de tamaño de archivo.
  • El límite de ancho de banda mensual es de 100 GB. Omitiremos esto más adelante.

Uso de un dominio de Apex como su dominio personalizado

La forma más fácil de sortear esta limitación es usar www como su subdominio y redirigir todo el tráfico HTTP desde el vértice a www . En mi ejemplo, redirigiría gilani.me a www.gilani.me , que apunta a mi sitio estático, pero no me gusta hacer las cosas de manera fácil.

Si realmente desea utilizar un dominio ápice, verifique si su proveedor de DNS le permite establecer registros ANAME . Estos están (simplificados) a mitad de camino entre los registros CNAME , ya que le permiten señalar dominios y registros A , ya que no anulan otros registros en la misma zona.

¿Sin ANAME ? La última opción es cambiar a un proveedor de DNS que sí soporte esto: ingresa a Cloudflare. Cloudflare proporciona aplanamiento de CNAME en dominios de vértice, que es el equivalente a un registro ANAME . Es mejor hacer el cambio ahora mismo, ya que cubriremos Cloudflare en la siguiente sección.

TLDR : cambie al DNS gratuito de Cloudflare y configure un CNAME en su dominio principal. Hacen algo especial con su CNAME que lo hace funcionar.

SSL y Cloudflare

Bienvenidos a la era posterior a Snowden. Todos nuestros peores temores de espionaje y piratería autorizados por el gobierno se han confirmado, y el mundo se esfuerza por proteger los datos en tránsito y en reposo.

Como administrador web moderno, se espera que proporcione al menos SSL en su sitio web, sin contenido mixto .

Ha llegado al punto en que Google Chrome marca los sitios web HTTPS simples como inseguros y la Búsqueda de Google está comenzando a favorecer a los sitios web HTTPS más favorablemente en sus clasificaciones. Discutiremos aún más estrategias para hacer que su front-end sea seguro más adelante, pero por ahora, solo cubriremos SSL.

Afortunadamente, ahora tenemos Let's Encrypt.

Es una autoridad de certificación (CA) sin fines de lucro y completamente automatizada que le permite emitir mediante programación certificados SSL de 90 días a corto plazo para cualquier dominio que controle. Es muy fácil de usar; es de código abierto; y el proyecto está respaldado por una plétora de empresas, incluidas Mozilla y Electronic Frontier Foundation.

Dar buen uso a Cloudflare

Cloudflare es un servicio de protección de DNS, CDN y DDoS.

Almacena en caché su sitio web y lo sirve a los usuarios desde servidores geográficamente cercanos, lo que hace que su sitio web sea más rápido. Tiene el beneficio adicional de mantenerlo por debajo del límite de ancho de banda de 100 GB de GitHub porque incluso si su sitio web se vuelve increíblemente popular, la mayoría de las solicitudes llegarán al caché y nunca llegarán al servidor.

Además de esto, Cloudflare ofrece un servicio llamado Universal SSL en el que le emiten un certificado SSL gratuito de sus socios de CA, por lo que obtiene HTTPS gratis... para siempre.

¿Por qué Cloudflare?

Sé lo que estás pensando: Gilani, me acabas de decir lo genial que es Let's Encrypt. ¿Por qué hablas de Cloudflare? Bueno, todo se reduce a la simplicidad.

Como ejercicio mental, imagine configurar varios servidores proxy inversos y caché de Nginx en todo el mundo, brindándoles todos los certificados SSL válidos y sirviendo a los usuarios las páginas web desde sus ubicaciones más cercanas.

Esto da como resultado que su sitio web se sirva a través de SSL incluso si el servidor de origen no tiene un certificado SSL, aunque Cloudflare le brinda certificados autofirmados especiales que puede colocar en su servidor de origen para asegurar la conexión a los servidores de Cloudflare. Esto es lo que te brinda Cloudflare con un plan gratuito, y ni siquiera tienes que renovar tu certificado cada 90 días.

Como trabajador independiente, recibo clientes que desean tener un sitio en funcionamiento para su negocio lo más rápido posible. No entienden ni se preocupan por las preocupaciones de seguridad, la plaga de la web moderna o el cifrado durante el tránsito. Algunos clientes luchan por comprender la idea de los nombres de dominio y les resulta molesto tener que pagar una tarifa anual de $ 15 "solo para mantener mi sitio web en funcionamiento". Así que intente explicarles por qué tienen que pagar por un grupo de proxies inversos que protegen su sitio web que se ejecuta en alojamiento gratuito.

Configuración de Cloudflare SSL

Ensuciémonos las manos otra vez. Lo primero que debe hacer es cambiar para enrutar todo su tráfico a través de Cloudflare:

Una captura de pantalla de la configuración de Cloudflare, que muestra cuatro copias de un par de filas CNAME para que se pueda ver la información sobre herramientas sobre el ícono de configuración de cada fila, junto con la configuración final deseada. El par tiene "amin" encima de "pricecheck" y ambas filas dicen "es un alias de amingilan..." y "Automático" en el medio. Al principio, la fila superior muestra el icono "Proxy DNS y HTTP", pero la fila inferior tiene el icono "Solo DNS". Al hacer clic en el ícono, la fila inferior se alterna para ser igual a la fila superior, lo que hace que la fila inferior se vuelva verde y desaparezca un pequeño ícono "i" al lado de "CNAME".

A continuación, en Cripto, establezca el nivel de SSL en "Completo".

Una captura de pantalla de la sección SSL, con un menú desplegable desactivado. Otras opciones son Flexible, Completo y "Completo (estricto)". Cuando se elige Completo, aparece una etiqueta verde "CERTIFICADO ACTIVO" debajo del menú desplegable.

Fuerce la "Reescritura automática de HTTPS" para eliminar las advertencias de contenido mixto.

Una captura de pantalla de la sección Reescrituras automáticas de HTTPS, que muestra el cambio de Desactivado a Activado.

En este punto, nuestro sitio web funcionará tanto con HTTP como con HTTPS. Forzamos HTTPS para todo en nuestro dominio.

Captura de pantalla del cuadro de diálogo "Crear una regla de página para gilani.me". El campo "Si la URL coincide" tiene "http://*gilani.me/*" rellenado. La sección "Entonces la configuración es" tiene su campo desplegable configurado en "Usar siempre HTTPS".

Todo listo. Nuestro sitio web siempre debe cargarse a través de HTTPS con una calificación verde de "Seguro" en Chrome.

La misma página de verificación de precios en el navegador que antes, a la que se accede nuevamente a través de pricecheck.gilani.me, pero esta vez la etiqueta Segura vuelve a estar presente.

Palabras finales y consideraciones de seguridad

Hay algunas cosas que no discutí anteriormente, y me gustaría tomarme un momento para aclarar algunos puntos.

Los astutos entre ustedes señalarán que hay algunos problemas de seguridad evidentes con esta configuración, a saber, que no hay encabezados HTTP seguros como:

  • Content-Security-Policy : carga secuencias de comandos y activos de una lista blanca de hosts, y puede deshabilitar js en línea.
  • X-Frame-Options : deshabilita su sitio web para que no se cargue en un iframe.

Y tienes razón. Las páginas de GitHub e incluso Cloudflare no le permiten personalizar sus encabezados HTTP . Sin embargo, puede establecer un CSP utilizando la meta HTML.

Simplemente inserte esto en su página web:

 <meta http-equiv="Content-Security-Policy" content="default-src https:">

Sin embargo, por el momento, no existe una forma práctica de configurar el encabezado X-Frame-Options en las páginas de GitHub, lo que significa que un atacante puede cargar su página web en un iframe especialmente diseñado y realizar un ataque XSS. Sin embargo, si está dedicado, puede solucionar este problema solicitando a los usuarios que confirmen su contraseña o token 2FA en cada acción confidencial, o pasando un token CSRF en cada solicitud autenticada.

Una gran preocupación para algunos es que al usar los repositorios públicos gratuitos en GitHub, su sitio web y el código fuente están disponibles para cualquiera que quiera bifurcarlo o descargarlo. Así que creo que la preocupación aquí está fuera de lugar.

El contenido estático no es código fuente en el sentido de que no se compila o procesa como un script antes de ser entregado al usuario. Su usuario obtendrá exactamente la misma copia estática del sitio web si ejecutara un rastreador web apuntando a su sitio web. Si bien alojar el código en un repositorio de GitHub ciertamente facilita la descarga de una copia de su sitio web, no expone nada que no sea público.

Escalado, Escalado Ilimitado

Las ideas presentadas en este artículo no se limitan al alojamiento web gratuito de pequeñas aplicaciones.

Puede crear una capa de front-end basada en un marco de JavaScript moderno, conectarlo a un backend como servicio (BaaS) basado en la nube a gran escala, como Firebase, y crear aplicaciones complejas sin preocuparse por los servidores, el tiempo de actividad, o cualquier otro tema relacionado con la infraestructura.

¿Haciendo un nuevo y emocionante juego basado en la web? Echa un vistazo a GameSparks y estarás listo para empezar.

El uso de Github Pages como un servicio de alojamiento "estándar", que se espera que maneje sitios web de gran ancho de banda, no se recomienda y no debe hacerse. Agregar Cloudflare CDN encima de GitHub Pages hace que esta solución funcione. Cloudflare es mucho más que un servicio SSL gratuito. Es una empresa con una CDN global que protege su sitio web de sobretensiones y minimiza la carga en las páginas de GitHub.

Resumen, confesión y enlaces

En este artículo, hice que pareciera que publiqué manualmente mi aplicación React en gh-pages . No hice tal cosa. Trabajé en master y cuando llegó el momento de implementar, ejecuté npm run deploy que inició un script de compilación y empujó la compilación a gh-pages . Consulte la rama master de mi repositorio para ver cómo funciona.

comida para llevar

Ventajas:

  • Implementación instantánea
  • Colaboración fácil
  • Entorno de alojamiento seguro

Advertencias:

  • Sin acceso a los encabezados HTTP
  • Fácil de descargar una copia del sitio web
  • Se requiere conocimiento de GitHub
  • Depende de los proveedores de tecnología.

Enlaces:

  • Encontrará el código fuente de mi aplicación en amingilani/price-check
  • Esta aplicación está disponible en pricecheck.gilani.me y debería estar disponible indefinidamente.