# NovaBlog ๐Ÿš€ ไธ€ๆฌพ้ขๅ‘็จ‹ๅบๅ‘˜ๅ’Œๆžๅฎข็š„ๆž่ฝป้‡็บงๅšๅฎข็ณป็ปŸ๏ผŒ้‡‡็”จ"้™ๆ€ๆธฒๆŸ“ + ่ฝป้‡็บงๅพฎๆœๅŠก"็š„่งฃ่€ฆๆžถๆž„ใ€‚ ## โœจ ็‰นๆ€ง - **ๆž่‡ด็š„ๆŽ’็‰ˆ่‡ช็”ฑ**๏ผšๅŽŸ็”Ÿๆ”ฏๆŒ MDX๏ผŒๅ…่ฎธๅœจ Markdown ไธญ็›ดๆŽฅๅตŒๅ…ฅ Vue/React ็ป„ไปถๅ’Œ Typst ๅคๆ‚ๅญฆๆœฏๆŽ’็‰ˆ - **ไผ˜้›…็š„ๅŠจๆ€ไบคไบ’**๏ผšๆ”ฏๆŒ็”จๆˆทๆณจๅ†Œ็™ปๅฝ•ใ€่ฏ„่ฎบใ€็‚น่ตž๏ผŒไฝ†ๆ ธๅฟƒ้กต้ขไฟๆŒ็บฏ้™ๆ€ - **ไฝŽ่ต„ๆบๅ ็”จ**๏ผšGo ๅŽ็ซฏ + SQLite๏ผŒๅ†…ๅญ˜ๅ ็”จๆžไฝŽ๏ผˆ้€šๅธธๅๅ‡  MB๏ผ‰๏ผŒๅฏๅœจ 2C1G ็”š่‡ณๆ›ดไฝŽ้…็ฝฎ่ฟ่กŒ - **็ŽฐไปฃๅŒ–ไธป้ข˜็ณป็ปŸ**๏ผšๅŸบไบŽ็ป„ไปถๅŒ–ๆ€ๆƒณๆž„ๅปบ๏ผŒCSS ๅ˜้‡ๆข่‚ค๏ผŒๆ”ฏๆŒๆš—้ป‘ๆจกๅผ - **Docker ๅฎนๅ™จๅŒ–**๏ผšไธ€้”ฎ้ƒจ็ฝฒ๏ผŒๆ–นไพฟๅœจไธชไบบ NAS ๆˆ–ไบ‘ๆœๅŠกๅ™จไธŠ่ฟ่กŒ ## ๐Ÿ—๏ธ ๆžถๆž„ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Nginx โ”‚ โ”‚ (้™ๆ€ๆ–‡ไปถๆœๅŠก + API ๅๅ‘ไปฃ็†) โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ–ผ โ–ผ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Astro ๅ‰็ซฏ โ”‚ โ”‚ Go API โ”‚ โ”‚ (้™ๆ€ HTML) โ”‚โ—„โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–บโ”‚ (Gin + SQLite)โ”‚ โ”‚ Zero-JS โ”‚ HTTP โ”‚ ~15MB ๅ†…ๅญ˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿ“ ้กน็›ฎ็ป“ๆž„ ``` NovaBlog/ โ”œโ”€โ”€ src/ # Astro ๅ‰็ซฏๆบ็  โ”‚ โ”œโ”€โ”€ components/ # Vue/Astro ็ป„ไปถ โ”‚ โ”‚ โ”œโ”€โ”€ CommentSection.vue # ่ฏ„่ฎบๅŒบ็ป„ไปถ โ”‚ โ”‚ โ”œโ”€โ”€ LikeButton.vue # ็‚น่ตžๆŒ‰้’ฎ โ”‚ โ”‚ โ”œโ”€โ”€ Counter.vue # MDX ็คบไพ‹็ป„ไปถ โ”‚ โ”‚ โ””โ”€โ”€ TypstBlock.astro # Typst ๆธฒๆŸ“็ป„ไปถ โ”‚ โ”œโ”€โ”€ content/ # ๅ†…ๅฎน้›†ๅˆ โ”‚ โ”‚ โ”œโ”€โ”€ blog/ # ๅšๅฎขๆ–‡็ซ  (MDX) โ”‚ โ”‚ โ””โ”€โ”€ config.ts # ๅ†…ๅฎน้…็ฝฎ โ”‚ โ”œโ”€โ”€ layouts/ # ้กต้ขๅธƒๅฑ€ โ”‚ โ”‚ โ”œโ”€โ”€ BaseLayout.astro โ”‚ โ”‚ โ””โ”€โ”€ PostLayout.astro โ”‚ โ”œโ”€โ”€ pages/ # ้กต้ข่ทฏ็”ฑ โ”‚ โ””โ”€โ”€ styles/ # ๅ…จๅฑ€ๆ ทๅผ โ”œโ”€โ”€ server/ # Go ๅŽ็ซฏๆบ็  โ”‚ โ”œโ”€โ”€ cmd/server/ # ็จ‹ๅบๅ…ฅๅฃ โ”‚ โ”œโ”€โ”€ internal/ โ”‚ โ”‚ โ”œโ”€โ”€ config/ # ้…็ฝฎ็ฎก็† โ”‚ โ”‚ โ”œโ”€โ”€ database/ # ๆ•ฐๆฎๅบ“่ฟžๆŽฅ โ”‚ โ”‚ โ”œโ”€โ”€ handlers/ # HTTP ๅค„็†ๅ™จ โ”‚ โ”‚ โ”œโ”€โ”€ middleware/ # ไธญ้—ดไปถ โ”‚ โ”‚ โ”œโ”€โ”€ models/ # ๆ•ฐๆฎๆจกๅž‹ โ”‚ โ”‚ โ””โ”€โ”€ utils/ # ๅทฅๅ…ทๅ‡ฝๆ•ฐ โ”‚ โ””โ”€โ”€ Dockerfile โ”œโ”€โ”€ docker-compose.yml # Docker ็ผ–ๆŽ’ โ””โ”€โ”€ nginx.conf # Nginx ้…็ฝฎ ``` ## ๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹ ### ๅผ€ๅ‘็Žฏๅขƒ **ๅ‰็ซฏๅผ€ๅ‘๏ผš** ```bash # ๅฎ‰่ฃ…ไพ่ต– npm install # ๅฏๅŠจๅผ€ๅ‘ๆœๅŠกๅ™จ npm run dev # ่ฎฟ้—ฎ http://localhost:4321 ``` **ๅŽ็ซฏๅผ€ๅ‘๏ผš** ```bash cd server # ไธ‹่ฝฝไพ่ต– go mod download # ่ฟ่กŒๆœๅŠก go run ./cmd/server # API ๆœๅŠกไบŽ http://localhost:8080 ``` ### ็”Ÿไบง้ƒจ็ฝฒ ```bash # 1. ๆž„ๅปบๅ‰็ซฏ npm run build # 2. ๅฏๅŠจ Docker ๅฎนๅ™จ docker-compose up -d # ่ฎฟ้—ฎ http://localhost ``` ## ๐Ÿ“ ๅ†™ไฝœ ๅœจ `src/content/blog/` ็›ฎๅฝ•ไธ‹ๅˆ›ๅปบ `.mdx` ๆˆ– `.md` ๆ–‡ไปถ๏ผš ```yaml --- title: ๆˆ‘็š„็ฌฌไธ€็ฏ‡ๆ–‡็ซ  description: ๆ–‡็ซ ๆ่ฟฐ pubDate: 2024-01-01 author: NovaBlog tags: [ๅšๅฎข, ๆŠ€ๆœฏ] category: ๆŠ€ๆœฏ heroImage: /images/hero.jpg --- # Hello NovaBlog! ่ฟ™ๆ˜ฏไธ€็ฏ‡ไฝฟ็”จ MDX ็ผ–ๅ†™็š„ๆ–‡็ซ ... ``` ## ๐Ÿ”Œ API ๆŽฅๅฃ ### ่ฎค่ฏ | ๆ–นๆณ• | ่ทฏๅพ„ | ๆ่ฟฐ | |------|------|------| | POST | `/api/auth/register` | ็”จๆˆทๆณจๅ†Œ | | POST | `/api/auth/login` | ็”จๆˆท็™ปๅฝ• | | GET | `/api/auth/profile` | ่Žทๅ–ๅฝ“ๅ‰็”จๆˆทไฟกๆฏ (้œ€่ฎค่ฏ) | ### ่ฏ„่ฎบ | ๆ–นๆณ• | ่ทฏๅพ„ | ๆ่ฟฐ | |------|------|------| | GET | `/api/comments?post_id=xxx` | ่Žทๅ–ๆ–‡็ซ ่ฏ„่ฎบ | | POST | `/api/comments` | ๅ‘่กจ่ฏ„่ฎบ (้œ€่ฎค่ฏ) | | DELETE | `/api/comments/:id` | ๅˆ ้™ค่ฏ„่ฎบ (้œ€่ฎค่ฏ) | ### ็‚น่ตž | ๆ–นๆณ• | ่ทฏๅพ„ | ๆ่ฟฐ | |------|------|------| | GET | `/api/likes?post_id=xxx` | ่Žทๅ–็‚น่ตž็Šถๆ€ | | POST | `/api/likes` | ๅˆ‡ๆข็‚น่ตž็Šถๆ€ (้œ€่ฎค่ฏ) | ## ๐Ÿ› ๏ธ ๆŠ€ๆœฏๆ ˆ **ๅ‰็ซฏ๏ผš** - [Astro](https://astro.build/) - ้™ๆ€็ซ™็‚น็”Ÿๆˆ - [Vue 3](https://vuejs.org/) - ไบคไบ’็ป„ไปถ - [Tailwind CSS](https://tailwindcss.com/) - ๆ ทๅผ **ๅŽ็ซฏ๏ผš** - [Go](https://golang.org/) - ็ผ–็จ‹่ฏญ่จ€ - [Gin](https://gin-gonic.com/) - Web ๆก†ๆžถ - [GORM](https://gorm.io/) - ORM - [SQLite](https://www.sqlite.org/) - ๆ•ฐๆฎๅบ“ - [JWT](https://jwt.io/) - ่ฎค่ฏ **้ƒจ็ฝฒ๏ผš** - [Docker](https://www.docker.com/) - ๅฎนๅ™จๅŒ– - [Nginx](https://nginx.org/) - ๅๅ‘ไปฃ็† ## ๐Ÿ“š ๆ–‡ๆกฃ - **[ไฝฟ็”จๆŒ‡ๅ—](./docs/user-guide.md)** - ๅšๅฎขไฝฟ็”จๆ•™็จ‹๏ผŒๅŒ…ๆ‹ฌๆ–‡็ซ ็ผ–ๅ†™ใ€MDX ็ป„ไปถใ€Typst ๆŽ’็‰ˆใ€ไธป้ข˜ๅฎšๅˆถ็ญ‰ - **[ๅผ€ๅ‘ๆ–‡ๆกฃ](./docs/developer-guide.md)** - ้ขๅ‘ๅผ€ๅ‘่€…็š„ๆŠ€ๆœฏๆ–‡ๆกฃ๏ผŒๅŒ…ๆ‹ฌ API ๆŽฅๅฃใ€ๆ•ฐๆฎๅบ“็ป“ๆž„ใ€ๆทฑๅบฆๅฎšๅˆถๆŒ‡ๅ—็ญ‰ ## ๐Ÿ“œ License MIT License ยฉ 2024