أود أن أشارك رحلتي في بناء نظام إدارة محتوى مستدام ذاتيًا ولا يتطلب قاعدة بيانات محتوى بالمعنى التقليدي.
يتم تخزين المحتوى (منشورات المدونة والإشارات المرجعية) لهذا الموقع في قاعدة بيانات Notion:
كانت المشكلة التي كنت أحاول حلها هي عدم الاضطرار إلى نشر موقع الويب يدويًا بعد كل إشارة مرجعية أقوم بإضافتها هناك. علاوة على ذلك - اجعل الاستضافة رخيصة قدر الإمكان، لأنه بالنسبة لي لا يهم حقًا مدى سرعة وصول الإشارات المرجعية التي أقوم بإضافتها إلى قاعدة بيانات Notion الخاصة بي إلى الإنترنت.
لذلك، وبعد إجراء بعض الأبحاث، توصلت إلى الإعداد التالي:
يتكون النظام من عدة مكونات:
دعونا ننظر إلى كل واحد منهم من الداخل إلى الخارج بالتفصيل.
ليس هناك الكثير مما يمكن قوله هنا، إعداد قياسي جدًا، - عندما يكون هناك دفعة إلى الفرع الرئيسي، يقوم سير العمل هذا ببناء التطبيق ونشره على صفحات Cloudflare باستخدام Wrangler CLI:
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 الذي يتمتع "بحق الوصول للقراءة والكتابة إلى الإجراءات" الخاصة بالمستودع. في حالتي، الأمر بات مختلفًا:
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