Skip to content

Navigation Menu

Sign in
Sign up

Repository files navigation

๐ŸŒฟ ForestBlog (ๆž—้—ด้š็ฌ”)

๐Ÿƒ ้™่ฐงๆธฉๆถฆใ€ๆฏซ็ง’็›ดๅ‡บ โ€”โ€” ๅŸบไบŽ Cloudflare Workers + D1 + R2 + Hono ๆž„ๅปบ็š„็ŽฐไปฃๅŒ– Serverless ่พน็ผ˜ๅšๅฎข็ณป็ปŸใ€‚

Deploy to Cloudflare Workers License: MIT Release Cloudflare Workers Hono Database TypeScript

English ยท ็ฎ€ไฝ“ไธญๆ–‡

ๅ…ผๅ…ท้™ๆ€ๅšๅฎข็š„ ้›ถ็ปดๆŠคใ€้›ถๆœๅŠกๅ™จๆœˆ็งŸใ€ๅ…จ็ƒ CDN ่พน็ผ˜ๆฏซ็ง’็›ดๅ‡บ,ไธŽๅŠจๆ€ๅšๅฎข็š„ ๅœจ็บฟๅŽๅฐ็ฎก็†ใ€ๅฎžๆ—ถๅ‘ๅธƒใ€9ๅฅ—็ฒพ้€‰ๅคๅคไธŽ็Žฐไปฃไธป้ข˜ๅณๆ—ถๆข่‚คใ€FTS5 ๅ…จๆ–‡ๆฃ€็ดขใ€็ตๅŠจๅ่จ€้‡‘ๅฅไธŽไธ€้”ฎๅˆ†ไบซ ่ƒฝๅŠ›ใ€‚

๐Ÿ”— ็บฟไธŠๆผ”็คบ DEMO:https://note.0000996.xyz


๐Ÿ—๏ธ ๆžถๆž„่ฎพ่ฎกไธŽๆ•ฐๆฎๆตๅ‘

 โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
 โ”‚ Cloudflare Global Edge Network โ”‚
 โ”‚ (300+ Cities Worldwide) โ”‚
 โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 โ”‚
 [ HTTPS Request ]
 โ”‚
 โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Cloudflare Worker Runtime (Hono Framework) โ”‚
โ”‚ โ”‚
โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚ โ”‚ Edge SSR HTML โ”‚ โ”‚ FTS5 Search API โ”‚ โ”‚ Admin SPA Auth โ”‚ โ”‚ RSS/XML โ”‚ โ”‚
โ”‚ โ”‚ (Zero-Flicker) โ”‚ โ”‚ (Title+Content) โ”‚ โ”‚ (JWT HMAC-256) โ”‚ โ”‚ Sitemap โ”‚ โ”‚
โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
 โ”‚ โ”‚ โ”‚ โ”‚
 โ–ผ โ–ผ โ–ผ โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Cloudflare D1 (Serverless SQLite) โ”‚ โ”‚ Cloudflare R2 (Storage) โ”‚
โ”‚ - posts / categories / tags / links / settings โ”‚ โ”‚ - Uploaded Images โ”‚
โ”‚ - posts_fts (FTS5 Full-Text Search Virtual Table) โ”‚ โ”‚ - Zero Egress Fees โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐Ÿ’ฐ ็œŸๆญฃ็š„ 0 ๆˆๆœฌ ยท ๅ…่ดน้ขๅบฆไธŽๅผ€้”€ๆต‹็ฎ—

ๅพˆๅคšๅผ€ๅ‘่€…ๆ‹…ๅฟƒ Serverless ไผšๅ› ไธบ็ˆฌ่™ซๆˆ–ๅˆท้‡ไบง็”Ÿๆ„ๅค–่ดฆๅ•ใ€‚ForestBlog ๅ……ๅˆ†่ฟ่กŒๅœจ Cloudflare ๆฐธไน…ๅ…่ดน้ขๅบฆ ๅ†…,ไธ”ๆ”ฏๆŒๅœจๆŽงๅˆถๅฐ่ฎพ็ฝฎ่ถ…้™ๆ‹ฆๆˆช,ๅฎž็Žฐ็œŸๆญฃ็š„ 100% ้›ถ่ดฆๅ•้ฃŽ้™ฉ:

Cloudflare ๆœๅŠก้กน ๅฎ˜ๆ–นๅ…่ดน้ขๅบฆ (Free Tier) ไธชไบบๅšๅฎขๆœˆๅ‡ๅฎž้™…ๆถˆ่€—ไผฐ็ฎ— ่ดน็”จๅˆคๅฎš
Workers ่ฏทๆฑ‚ๆ•ฐ 100,000 ๆฌก / ๅคฉ (300 ไธ‡ๆฌก/ๆœˆ) ็บฆ 3~10 ไธ‡ๆฌก / ๆœˆ ๐ŸŸข ๅฎŒๅ…จๅ…่ดน (ๅ ้ขๅบฆ <3%)
D1 SQL ่ฏปๅ– 5,000,000 ่กŒ / ๅคฉ (1.5 ไบฟ่กŒ/ๆœˆ) ็บฆ 100~300 ไธ‡่กŒ / ๆœˆ ๐ŸŸข ๅฎŒๅ…จๅ…่ดน (ๅ ้ขๅบฆ <2%)
D1 SQL ๅ†™ๅ…ฅ 100,000 ่กŒ / ๅคฉ (300 ไธ‡่กŒ/ๆœˆ) ไธป่ฆๆ˜ฏ้˜…่ฏปๆ•ฐ่‡ชๅขžไธŽๅ‘ๆ–‡ ๐ŸŸข ๅฎŒๅ…จๅ…่ดน (ๅ ้ขๅบฆ <2%)
D1 ๅญ˜ๅ‚จๅฎน้‡ 5 GB 1,000 ็ฏ‡้•ฟๆ–‡็บฆ 15 MB ๐ŸŸข ๅฎŒๅ…จๅ…่ดน (ๅ ้ขๅบฆ <0.3%)
R2 ๅฏน่ฑกๅญ˜ๅ‚จ 10 GB ๅญ˜ๅ‚จ + 1000 ไธ‡ๆฌก/ๆœˆ่ฏปๅ– ๅšๅฎข้…ๅ›พ็บฆ 500 MB~2 GB ๐ŸŸข ๅฎŒๅ…จๅ…่ดน + 0 ๅ‡บ็ฝ‘ๆต้‡่ดน
TLS ่ฏไนฆ & CDN ่‡ชๅŠจ็ญพๅ‘ๆณ›ๅŸŸๅ SSL + ๅ…จ็ƒ Anycast CDN ่‡ชๅŠจ็ปญๆœŸ,ๆ— ้กปไบบๅทฅ่ฟ็ปด ๐ŸŸข 0 ่ฟ็ปด่ดน็”จ

๐Ÿ“ธ ่ง†่ง‰ๆ•ˆๆžœๅฑ•็คบ (Showcase)

1. ้ฆ–้กต ยท ๅ…ธ้›…ๆฃฎ็ณป็บธๆ„Ÿๅก็‰‡ไธŽๅ…จๅŠŸ่ƒฝไพง่พนๆ 

ๆธฉๆถฆ็บธ่ดจ่ดจๆ„Ÿ,ๆธ…ๆ™ฐ็š„็ปŸ่ฎกๅก็‰‡ใ€ๅˆ†็ฑปๅฏผ่ˆชใ€็ฒพ้€‰ๆ ‡็ญพใ€ๅ‹ๆƒ…้“พๆŽฅไธŽ็ฝฎ้กถๆ ‡่ฏ†ใ€‚ ้ฆ–้กต้ข„่งˆ

2. ๐ŸŽจ 9 ๅฅ—็ฒพ้€‰ๅคๅคไธŽ็Žฐไปฃไธป้ข˜ ยท ๅฎžๆ—ถไธ€้”ฎๆข่‚ค

็‚นๅ‡ปๅณไธŠ่ง’ ๐ŸŽจ ้…่‰ฒ ้šๆ—ถๅˆ‡ๆข:ๆ™š็ฏๆ‰‹่ฎฐ (Akari Vintage ยท ้ป˜่ฎค)ใ€ๅคๅคๆŠฅๅˆŠ (Parchment Retro)ใ€ๆš–ๆœจไธญๅค (Caramel Antique)ใ€ๆฃฎ็ณปๆธฉๆถฆใ€่ฝๆจฑๅ’Œ้ฃŽใ€ๅฎ‡ๆฒปๆŠน่Œถใ€ๆ˜Ÿ้‡Žๆทฑ่“ใ€Geist ๆžๅฎขใ€่ต›ๅšๆทฑๅคœใ€‚ๅๅฅฝๆœฌๅœฐๆŒไน…ๅŒ–่ฎฐๅฟ†,ๆ”ฏๆŒ่ทŸ้š็ณป็ปŸๆทฑ่‰ฒๅๅฅฝ,้ฆ–ๅฑ้›ถ้—ช็ƒใ€‚ ไธป้ข˜ๅˆ‡ๆข้ข„่งˆ

3. ๐Ÿ“– ๆฒ‰ๆตธๅผ้•ฟๆ–‡้˜…่ฏป ยท ็›ฎๅฝ• TOC ไธŽ็ฒพ่ฐƒๆŽ’็‰ˆ

้กถ้ƒจๅนณๆป‘้˜…่ฏป่ฟ›ๅบฆๆกใ€ไปฃ็ ้ซ˜ไบฎไธ€้”ฎๅคๅˆถใ€ๆ–‡็ซ ็›ฎๅฝ•ๆ™บ่ƒฝ่ทณ่ฝฌใ€ๅ›พ็‰‡็‚นๅ‡ป็ฏ็ฎฑๆ”พๅคงไธŽๆ–‡็ซ ไธ€้”ฎๅคๅˆถๅˆ†ไบซใ€‚ ๆ–‡็ซ ้˜…่ฏป้ข„่งˆ

4. ๐Ÿ“ฑ ็งปๅŠจ็ซฏๆž่‡ด้€‚้… ยท ไธๆป‘ๆŠฝๅฑ‰ๅฏผ่ˆช

้’ˆๅฏนๆ‰‹ๆœบ็ซฏๆทฑๅบฆ่ฐƒไผ˜,ๆŠฝๅฑ‰ๅผๅฏผ่ˆชๆ ใ€่‡ช้€‚ๅบ”่กจๆ ผๆจชๅ‘ๆปšๅŠจใ€ๆ‚ฌๆตฎไธ€้”ฎๅ›žๅˆฐ้กถ้ƒจ,ๅฐๅฑๅน•้˜…่ฏปไฝ“้ชŒ็ปไฝณใ€‚ ็งปๅŠจ็ซฏ้ข„่งˆ


โœจ ๆ ธๅฟƒ็‰นๆ€งไธ€่งˆ

ๆจกๅ— ็‰นๆ€งไบฎ็‚น
โšก ่พน็ผ˜ๆธฒๆŸ“ (Edge SSR) Cloudflare Workers ๅ…จ็ƒ 300+ ่พน็ผ˜่Š‚็‚น็›ดๅ‡บ HTML,้ฆ–ๅฑ TTFB < 45ms,SEO ๆžไฝณใ€‚
๐ŸŽจ 9ๅฅ—็ฒพ่ฐƒไธป้ข˜ ๅ†…็ฝฎๆ™š็ฏๆ‰‹่ฎฐ (่‡ดๆ•ฌ Akari ๆธฉๆš–ๆ‰‹ๅธ)ใ€ๅคๅคๆŠฅๅˆŠใ€ๆš–ๆœจไธญๅคใ€ๆฃฎ็ณปใ€่ฝๆจฑใ€ๆŠน่Œถใ€ๆทฑ่“ใ€Geist ๆžๅฎขใ€่ต›ๅšๆทฑๅคœ,ๆ”ฏๆŒๅฎžๆ—ถๆ— ๅˆทๅˆ‡ๆขไธŽ็ณป็ปŸๆทฑ่‰ฒ่‡ช้€‚ๅบ”ใ€‚
๐Ÿ” ๅ…จๆ–‡ๅณๆ—ถๆฃ€็ดข ๅŸบไบŽ SQLite FTS5 ๅ…จๆ–‡็ดขๅผ• + LIKE ๆททๅˆๅŒๆจกๅผ•ๆ“Ž,ๆ”ฏๆŒ Ctrl + K ๅฟซๆท้”ฎ็žฌ้—ด่ฐƒๅ‡บๆœ็ดขๅผน็ช—ใ€‚
๐Ÿ“ ๅผ€็ฎฑๅณ็”จๅŽๅฐ ่ฎฟ้—ฎ /admin/ ๅณๅฏ็ฎก็†ๆ–‡็ซ ใ€ๅˆ†็ฑปใ€ๅ‹้“พไธŽๅ…จ็ซ™้…็ฝฎ,ๅ†…็ฝฎ Markdown ๅทฅๅ…ทๆ ไธŽ็ฝฎ้กถ/่‰็จฟๅผ€ๅ…ณใ€‚
๐Ÿ’ฌ ็ตๅŠจๅ่จ€้‡‘ๅฅ ้กถๆ ้›†ๆˆ็ฒพ้€‰ๆ–‡ๅญฆ/ๅ“ฒๆ€ๅ่จ€ๅบ“,ๆ”ฏๆŒ็‚นๅ‡ป/ๅˆทๆ–ฐๅณๆ—ถๅ‘ผๅธๅˆ‡ๆข,ๅ……ๆปกๆ•ฐๅญ—่Šฑๅ›ญไบบๆ–‡ๆฐ”ๆฏใ€‚
๐Ÿ–ผ๏ธ ๅ›พ็‰‡็ฏ็ฎฑ & ไปฃ็ ้ซ˜ไบฎ ๆ–‡็ซ ๅ†…ๅ›พ็‰‡ๆ”ฏๆŒ็‚นๅ‡ปๆ”พๅคง้ข„่งˆ (Lightbox),ไปฃ็ ๅ—้›†ๆˆ Prism ่ฏญๆณ•็€่‰ฒไธŽไธ€้”ฎๅคๅˆถไปฃ็ ใ€‚
๐Ÿ“ฑ ๅ…จ็ซฏๅ“ๅบ”ๅผ ๆ‰‹ๆœบ็ซฏไธ“ๅฑžๆฑ‰ๅ ก่œๅ•ๆŠฝๅฑ‰ๅฏผ่ˆช,้กถ้ƒจๅนณๆป‘้˜…่ฏป่ฟ›ๅบฆๆกไธŽๆ‚ฌๆตฎๅ›žๅˆฐ้กถ้ƒจๆŒ‰้’ฎใ€‚
๐Ÿ“ก ๆ ‡ๅ‡†็”Ÿๆ€ ๅŽŸ็”Ÿ่พ“ๅ‡บ RSS 2.0 ่ฎข้˜…ๆบ (/rss.xml)ใ€ๆœ็ดขๅผ•ๆ“Ž Sitemap (/sitemap.xml) ไธŽ OpenGraph ็คพไบคๅก็‰‡ใ€‚
๐Ÿ’พ ๆ•ฐๆฎ่‡ชไธปๆŽŒๆŽง ๅŽๅฐๆ”ฏๆŒไธ€้”ฎๅฏผๅ‡บๅ…จ็ซ™ๆ•ฐๆฎไธบๆ ‡ๅ‡† JSON ๅค‡ไปฝ,้šๆ—ถ่ฟ็งปๆ— ็ป‘ๅฎšใ€‚

๐Ÿš€ ๆž้€Ÿ้ƒจ็ฝฒๆŒ‡ๅ— (3 ็งๆ–นๅผไปปๆ„้€‰)


ๆ–นๆกˆ A:Fork ไธ€้”ฎ้ƒจ็ฝฒ (ๆœ€ๆŽจ่ ยท ็บฏ็ฝ‘้กต็‚นๅ‡ป)

ๅช้œ€็‚นๅ‡ปไธ‹ๆ–นๆŒ‰้’ฎ,Cloudflare ไผšๅผ•ๅฏผไฝ ่‡ชๅŠจ Fork ๆœฌไป“ๅบ“ๅนถๅฎŒๆˆ่พน็ผ˜ Worker ้ƒจ็ฝฒ:

Deploy to Cloudflare Workers

  1. ็‚นๅ‡ปไธŠๆ–น Deploy with Workers ๆŒ‰้’ฎใ€‚
  2. ็™ปๅฝ•ไฝ ็š„ Cloudflare ่ดฆๅท,ๆŒ‰็…ง็ฝ‘้กตๆŒ‡ๅผ•ๆŽˆๆƒ GitHub ๅนถ Fork ๆœฌ้กน็›ฎใ€‚
  3. ๅœจ Cloudflare ๆŽงๅˆถๅฐไธบๅ…ถ็ป‘ๅฎšไธ€ไธช D1 ๆ•ฐๆฎๅบ“(ๅ็งฐ:forest-blog-db)ใ€‚
  4. ๅœจ D1 ๆŽงๅˆถๅฐ็š„ Console ไธญ็ฒ˜่ดดๆ‰ง่กŒๆœฌ้กน็›ฎๆ น็›ฎๅฝ•็š„ schema.sql ๅณๅฏๅฎŒๆˆๅˆๅง‹ๅŒ–!

ๆ–นๆกˆ B:Cloudflare ๆŽงๅˆถๅฐ Git ๅฏผๅ…ฅ (ๆŒ็ปญ้›†ๆˆ้ƒจ็ฝฒ)

  1. Fork ไป“ๅบ“:็‚นๅ‡ปๆœฌ้กน็›ฎๅณไธŠ่ง’ Fork,ๅ…‹้š†ไธ€ไปฝๅˆฐไฝ ่‡ชๅทฑ็š„ GitHub ่ดฆๅทไธ‹ใ€‚
  2. ็™ปๅฝ• Cloudflare:่ฟ›ๅ…ฅ Cloudflare ๆŽงๅˆถๅฐใ€‚
  3. ๅˆ›ๅปบ D1 ๆ•ฐๆฎๅบ“:
    • ๅฏผ่ˆชๅˆฐ Storage & Databases โ†’ D1 SQL Database โ†’ Create databaseใ€‚
    • ๆ•ฐๆฎๅบ“ๅ็งฐ่พ“ๅ…ฅ forest-blog-db,ๅˆ›ๅปบๅฎŒๆˆๅŽ่ฟ›ๅ…ฅ Consoleใ€‚
    • ๅฐ†ๆœฌ้กน็›ฎ schema.sql ็š„ๅ†…ๅฎนๅคๅˆถ็ฒ˜่ดด่ฟ›ๅŽปๅนถ็‚นๅ‡ป Execute ๆ‰ง่กŒๅˆๅง‹ๅŒ–ใ€‚
  4. ่ฟžๆŽฅ Git ้ƒจ็ฝฒ:
    • ๅฏผ่ˆชๅˆฐ Compute (Workers & Pages) โ†’ Create Application โ†’ Pages โ†’ Connect to Gitใ€‚
    • ้€‰ๆ‹ฉๅˆšๆ‰ Fork ็š„ forest-blog ไป“ๅบ“,็‚นๅ‡ป Begin setupใ€‚
    • ๅœจ Settings โ†’ Bindings ไธญๆทปๅŠ  D1 ๆ•ฐๆฎๅบ“็ป‘ๅฎš(Variable name: DB,็ป‘ๅฎšๅˆšๆ‰ๅˆ›ๅปบ็š„ forest-blog-db)ใ€‚
  5. ็‚นๅ‡ป Save and Deploy:็ญ‰ๅพ… 10 ็ง’ๅณๅˆปไธŠ็บฟ!

ๆ–นๆกˆ C:CLI ็ปˆ็ซฏๅฟซ้€Ÿ้ƒจ็ฝฒ (ๆžๅฎขๅผ€ๅ‘่€… ยท 3ๆญฅๆžๅฎš)

# 1. ๅ…‹้š†ไปฃ็ ๅนถๅฎ‰่ฃ…ไพ่ต–
git clone https://github.com/shali10/forest-blog.git
cd forest-blog
npm install
# 2. ๅˆ›ๅปบ Cloudflare D1 ๆ•ฐๆฎๅบ“ๅนถๅˆๅง‹ๅŒ–่กจ็ป“ๆž„
npx wrangler d1 create forest-blog-db
# ๅฐ†่พ“ๅ‡บ็š„ database_id ๅกซๅ…ฅ wrangler.toml
npm run db:init:remote
# 3. ไธ€้”ฎๅ‘ๅธƒไธŠ็บฟ
npm run deploy

๐Ÿ’ก ่ฎพ็ฝฎๅŽๅฐๅ‡ญๆฎ:

npx wrangler secret put ADMIN_PASSWORD
npx wrangler secret put JWT_SECRET

JWT_SECRET ๅฏ็”จ openssl rand -hex 32 ็”Ÿๆˆใ€‚ๅฝ“ๅ‰็‰ˆๆœฌๆœช้…็ฝฎ่ฟ™ไธคไธช Secret ๆ—ถไผšๆ‹’็ปๅŽๅฐ็™ปๅฝ•,ไธๆไพ›ๅ…ฌๅผ€้ป˜่ฎคๅฏ†็ ใ€‚


๐Ÿ“ ็›ฎๅฝ•็ป“ๆž„

forest-blog/
โ”œโ”€โ”€ .github/
โ”‚ โ””โ”€โ”€ workflows/
โ”‚ โ””โ”€โ”€ deploy.yml # GitHub Actions ่‡ชๅŠจๅŒ– CI/CD ้ƒจ็ฝฒ
โ”œโ”€โ”€ docs/
โ”‚ โ””โ”€โ”€ images/ # ้ซ˜ๆธ…ๆ•ˆๆžœๅ›พไธŽไธป้ข˜ๅฑ•็คบ
โ”œโ”€โ”€ src/
โ”‚ โ”œโ”€โ”€ index.ts # Hono ่ทฏ็”ฑๅ…ฅๅฃไธŽ SSR ๆŒ‚่ฝฝ
โ”‚ โ”œโ”€โ”€ auth.ts # HMAC-SHA256 Token ็ญพๅ้‰ดๆƒ
โ”‚ โ”œโ”€โ”€ db.ts # D1 ๆ•ฐๆฎๅบ“ไบคไบ’ไธŽ FTS5 ๆฃ€็ดข้€ป่พ‘
โ”‚ โ”œโ”€โ”€ markdown.ts # Markdown ่งฃๆžใ€็›ฎๅฝ• TOC ๆๅ–ไธŽไปฃ็ ้ซ˜ไบฎ
โ”‚ โ”œโ”€โ”€ routes/
โ”‚ โ”‚ โ”œโ”€โ”€ admin.ts # ็ฎก็†ๅŽๅฐ APIใ€Markdown ๅทฅๅ…ทๆ ไธŽๆ•ฐๆฎๅฏผๅ‡บ
โ”‚ โ”‚ โ””โ”€โ”€ api.ts # ๅ…ฌๅผ€ REST APIใ€RSS ไธŽ Sitemap
โ”‚ โ””โ”€โ”€ theme/
โ”‚ โ”œโ”€โ”€ styles.ts # 6 ๅฅ—่ฐƒ่‰ฒ็›˜ CSS ๅ˜้‡ใ€่ฟ›ๅบฆๆกไธŽๆž็ฎ€ๆ ทๅผ
โ”‚ โ””โ”€โ”€ views.ts # Edge SSR ้กต้ขๆจกๆฟ (้ฆ–้กต/ๆ–‡็ซ /ๅฝ’ๆกฃ/ๅ‹้“พ/404)
โ”œโ”€โ”€ schema.sql # D1 ๆ•ฐๆฎๅบ“็ป“ๆž„ไธŽๅˆๅง‹ๅŒ–ๆ•ฐๆฎ
โ”œโ”€โ”€ wrangler.toml # Cloudflare Workers ้ƒจ็ฝฒ้…็ฝฎ
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ tsconfig.json

๐Ÿ“„ ๅผ€ๆบๅ่ฎฎ

ๆœฌ้กน็›ฎๅŸบไบŽ MIT ๅ่ฎฎ ๅผ€ๆบ,ๆฌข่ฟŽ่‡ช็”ฑ Forkใ€ไฟฎๆ”นไธŽๅˆ†ไบซ!

About

๐ŸŒฟ ๅŸบไบŽ Cloudflare Workers + D1 + R2 + Hono ็š„็ŽฐไปฃๅŒ–่ฝป้‡่พน็ผ˜ๅšๅฎข็ณป็ปŸ | Next-Gen Serverless Edge Blog with Edge SSR, FTS5 Search & 6 Themes

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

AltStyle ใซใ‚ˆใฃใฆๅค‰ๆ›ใ•ใ‚ŒใŸใƒšใƒผใ‚ธ (->ใ‚ชใƒชใ‚ธใƒŠใƒซ) /