Me gustaría compartir mi viaje hacia la construcción de un sistema de gestión de contenido autosostenible que no requiera una base de datos de contenido en el sentido tradicional.
El contenido (publicaciones de blog y marcadores) de este sitio web se almacena en una base de datos de Notion:
El problema que estaba tratando de resolver era no tener que implementar el sitio web manualmente después de cada marcador que agrego allí. Y además de eso, mantenga el alojamiento lo más barato posible, porque para mí realmente no importa qué tan rápido terminen en línea los marcadores que agrego a mi base de datos de Notion.
Entonces, después de investigar un poco, se me ocurrió la siguiente configuración:
El sistema consta de varios componentes:
Veamos cada uno de ellos desde adentro hacia afuera en detalle.
No hay mucho que decir aquí, configuración bastante estándar: cuando hay un impulso a la rama principal, este flujo de trabajo crea la aplicación y la implementa en Cloudflare Pages usando la CLI de Wrangler:
name: Push to Main on: push: branches: [main] workflow_dispatch: {} jobs: deploy-cloudflare-pages: runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Checkout uses: actions/checkout@v4 - name: Setup pnpm uses: pnpm/action-setup@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version-file: .node-version cache: pnpm - name: Install node modules run: | pnpm --version pnpm install --frozen-lockfile - name: Build the App run: | pnpm build - name: Publish Cloudflare Pages env: CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} CLOUDFLARE_API_TOKEN: ${{ secrets.CLOUDFLARE_API_TOKEN }} run: | pnpm wrangler pages deploy ./out --project-name ${{ secrets.CLOUDFLARE_PROJECT_NAME }}
Este flujo de trabajo solo se puede activar "manualmente"... pero también automáticamente porque puedes activarlo usando un token de acceso personal de GitHub, también conocido como PAT. Inicialmente lo escribí porque quería implementar cambios desde mi teléfono. Descarga las publicaciones y los marcadores utilizando la API de Notion y luego, si hay algún cambio en el código base, crea una confirmación y la envía. Para funcionar correctamente, este flujo de trabajo debe contar con una PAT que tenga “acceso de lectura y escritura al código” del repositorio:
name: Update Content on: workflow_dispatch: {} jobs: download-content: runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Checkout uses: actions/checkout@v4 with: # A Github Personal Access Token with access to the repository # that has the follwing permissions: # ✅ Read and Write access to code token: ${{ secrets.GITHUB_PAT_CONTENT }} - name: Setup pnpm uses: pnpm/action-setup@v4 - name: Setup Node uses: actions/setup-node@v4 with: node-version-file: .node-version cache: pnpm - name: Install node modules run: | pnpm --version pnpm install --frozen-lockfile - name: Download articles content from Notion env: NOTION_KEY: "${{ secrets.NOTION_KEY }}" NOTION_ARTICLES_DATABASE_ID: "${{ secrets.NOTION_ARTICLES_DATABASE_ID }}" run: | pnpm download-articles - name: Download bookmarks content from Notion env: NOTION_KEY: ${{ secrets.NOTION_KEY }} NOTION_BOOKMARKS_DATABASE_ID: ${{ secrets.NOTION_BOOKMARKS_DATABASE_ID }} run: | pnpm download-bookmarks - name: Configure Git run: | git config --global user.email "${{ secrets.GIT_USER_EMAIL }}" git config --global user.name "${{ secrets.GIT_USER_NAME }}" - name: Check if anything changed id: check-changes run: | if [ -n "$(git status --porcelain)" ]; then echo "There are changes" echo "HAS_CHANGED=true" >> $GITHUB_OUTPUT else echo "There are no changes" echo "HAS_CHANGED=false" >> $GITHUB_OUTPUT fi - name: Commit changes if: steps.check-changes.outputs.HAS_CHANGED == 'true' run: | git add ./src/content git add ./public git commit -m "Automatic content update commit" git push
Este es bastante simple: simplemente se ejecuta de vez en cuando y activa el flujo de trabajo anterior. Para funcionar correctamente, este flujo de trabajo debe contar con una PAT de GitHub que tenga "acceso de lectura y escritura a acciones" del repositorio. En mi caso es un PAT diferente:
name: Update Content on Schedule on: schedule: - cron: "13 0,12 * * *" workflow_dispatch: {} jobs: trigger-update-content: runs-on: ubuntu-latest timeout-minutes: 5 steps: - name: Checkout uses: actions/checkout@v4 - name: Dispatch the Update Content workflow env: # A Github Personal Access Token with access to the repository # that has the follwing permissions: # ✅ Read and Write access to actions GH_TOKEN: ${{ secrets.GITHUB_PAT_ACTIONS }} run: | gh workflow run "Update Content" --ref main
Para mí, esta configuración ha demostrado ser realmente buena y flexible. Debido a la estructura modular, la acción "Actualizar contenido" se puede activar manualmente, p. desde mi teléfono mientras viajo. Para mí, esta fue otra experiencia valiosa de mejora progresiva de un flujo de trabajo.
¿Espero que te resulte útil?
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3