従来の意味でのコンテンツ データベースを必要としない、自立可能なコンテンツ管理システムを構築する私のこれまでの道のりを共有したいと思います。
この Web サイトのコンテンツ (ブログ投稿とブックマーク) は Notion データベースに保存されています:
私が解決しようとしていた問題は、ブックマークを追加するたびに Web サイトを手動で展開する必要がないようにすることでした。それに加えて、ホスティング料金はできるだけ安く抑えてください。私にとって、Notion データベースに追加したブックマークがどれだけ早くオンラインになるかはあまり重要ではないからです。
そこで、いくつかの調査を行った結果、次の設定を思いつきました:
システムはいくつかのコンポーネントで構成されています:
それぞれを内側から外側まで詳しく見てみましょう。
ここで言うことはあまりありません。非常に標準的なセットアップです – メインブランチへのプッシュがある場合、このワークフローはアプリを構築し、Wrangler CLI を使用して Cloudflare Pages にデプロイします。
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 }}
このワークフローは「手動」でのみトリガーできますが、GitHub Personal Access Token (別名 PAT) を使用してトリガーできるため、自動でもトリガーできます。最初にこれを書いたのは、携帯電話から変更をデプロイしたかったからです。 Notion API を使用して投稿とブックマークをダウンロードし、コードベースに変更があった場合はコミットを作成してプッシュします。適切に機能するには、このワークフローにリポジトリの「コードへの読み取りおよび書き込みアクセス」を持つ PAT が提供されている必要があります:
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
これは非常に単純です。時々実行され、上記のワークフローをトリガーするだけです。適切に機能するには、このワークフローにリポジトリの「アクションへの読み取りおよび書き込みアクセス」を持つ GitHub PAT が提供されている必要があります。私の場合は別の PAT です:
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
私にとって、このセットアップは非常に優れており、柔軟性があることがわかりました。モジュール構造のため、「コンテンツの更新」アクションは手動でトリガーできます。旅行中に携帯電話から。私にとって、これもワークフローを段階的に強化する貴重な経験でした。
これが役に立ちましたか?
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3