Construcción Blog

HIce varios experimentos creando mi blog personal probando los siguientes stack

  • Wordpress
  • Ghost CMS
  • Gatsby + Strapi CMS + Cloudinary + Heroku + PostgreSQL

Sin duda el stack mas complicado fue el último pero también el mas completo, fue allí donde nacio el diseño y la distrubicón de los datos de la versión final. El Stack me daba un CMS muy completo y versatil, pero despues de varios meses de mantenerlo, me di cuenta que consumía mas tiempo actualizando cada tecnología, migrando bibliotecas y manteniendome al día con la versión estable de cada una tecnología en mi stack.

Por ello tomé la decisión de mantenerlo simple (KISS), y eliminé todo a excepción de Gatsby para la generación del sitio web estatico y cambio los plugin para la conexión con strapi por un plugin para la generación del contenido a partir de archivos markdown (gatsby-transformer-remark). De esta manera dedico mas tiempo a escribir contenido y la tecnología utilizada es mas que suficinte para cumplir con el objetivo.

Tech stack

  • Gatsby
  • Github pages
  • Docker y Docker Compose (Para desarrollo)

Docker image

La creación de imágen docker es solo desarrollo, ya que el despliegue se realiza utilizando github actions y github pages.

FROM node:14.18.3-stretch
WORKDIR /srv/app
COPY ./package*.json ./
RUN npm install
EXPOSE 8000
CMD [ "npm", "run", "develop"]

Para facilitar aún más la ejecución utilizo docker-compose.

version: '3'
services:
	jlpa-blog:
		container_name: jlpa-blog
		build: .
		command: "npm run develop"
		environment:
		- NODE_ENV=development		
		- GATSBY_TELEMETRY_DISABLED=1
		- INTERNAL_STATUS_PORT=42899
		ports:
		- 8000:8000
		- 42899:42899
		volumes:
		- .:/srv/app
		- /srv/app/node_modules

GithubPages

Mi blog personal al ser de contenido estático puede aprovechar la funcionalidad provista por Github a través del servicio de Github Pages, esto me permite alojar y servir el contenido generado por Gatsby en un subdominio de Github, también tenemos la opción de vicularlo a un dominio propio.

Github Actions

No todo el contenido del blog es público, hay contenido que prefiero mantener en privado por un determinado tiempo, asi que el código fuente está alojado en un repositorio privado, y mendiante una acción de Github publico el contenido generado por Gatsby a un repositroio público que ademas es un requisito para poder utilizar Github Pages.

name: Build and Deploy

on: [push]

jobs:

	build-and-deploy:

	runs-on: ubuntu-latest

	steps:

	- name: Checkout 🛎️
	  uses: actions/checkout@v2.3.1

	- name: Install and Build 🔧 
      run: |
	    npm ci
	    PREFIX_PATHS=true npm run build
	- name: Deploy 🚀
	  uses: JamesIves/github-pages-deploy-action@4.1.7
	  with:
		repository-name: jlpa-dev/brain
		branch: master # The branch the action should deploy to.
		folder: public # The folder the action should deploy.
		token: ${{ secrets.GH_PAT }}

La acción ejecuta los comandos necesarios para la contstrucción del sitio estatico, cuyo resultado se alamcena en una carpeta llamada "public", posteriomente se realiza una acción push del cotenido de esta carpeta al repositrio que tiene habilitado Githbub Pages.

Nota: El comando npm ci es similar a npm install, la diferencia reside en que npm ci, no crea ni almacena las dependencias en la carpeta llamada node_modules.

© 2022 Jorge Luis Parihuamán Arivilca