# moon **Repository Path**: ksllh/moon ## Basic Information - **Project Name**: moon - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-03-20 - **Last Updated**: 2026-03-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ๐ŸŒ™ MOON - Manipulate OpenHarmony Over Net

Rust 2024 Astro 5 Vue 3 MIT License OpenHarmony

**MOON** ๆ˜ฏไธ€ไธชไธ“ไธบ OpenHarmony/KaihongOS ่ฎพๅค‡่ฎพ่ฎก็š„ๅˆ†ๅธƒๅผ่ฟœ็จ‹็ฎก็†ๅนณๅฐ๏ผŒๆไพ›่ทจๅœฐๅŸŸ็‰ฉ่”็ฝ‘่ฎพๅค‡็š„ๅฎžๆ—ถ็›‘ๆŽงใ€ๆ–‡ไปถ็ฎก็†ใ€็ปˆ็ซฏ่ฎฟ้—ฎๅ’ŒๆกŒ้ขๆŠ•ๅฑ็ญ‰ๅŠŸ่ƒฝใ€‚ ## โœจ ็‰นๆ€งไบฎ็‚น - ๐ŸŒ **ๅˆ†ๅธƒๅผๆžถๆž„** - ไบ‘็ซฏๅŽ็ซฏ + ่พน็ผ˜ไธญ็ปง + ่ฎพๅค‡็ซฏๆœๅŠก็š„ไธ‰ๅฑ‚ๆžถๆž„่ฎพ่ฎก - ๐Ÿ“ **ๆ–‡ไปถ็ฎก็†** - ่ฟœ็จ‹ๆต่งˆใ€ไธŠไผ ใ€ไธ‹่ฝฝใ€ๅˆ›ๅปบใ€ๅˆ ้™คใ€็งปๅŠจใ€ๆœ็ดขใ€็ผ–่พ‘ๆ–‡ไปถ - ๐Ÿ–ฅ๏ธ **่ฟœ็จ‹็ปˆ็ซฏ** - ๅŸบไบŽ xterm.js ็š„ๅฎžๆ—ถ Web ็ปˆ็ซฏ๏ผŒๆ”ฏๆŒไบคไบ’ๅผ Shell - ๐Ÿ–ผ๏ธ **ๆกŒ้ขๆŠ•ๅฑ** - ๅŸบไบŽ noVNC ็š„ๅฎžๆ—ถ่ฎพๅค‡ๅฑๅน•้•œๅƒไธŽ่ฟœ็จ‹ๆŽงๅˆถ - ๐Ÿ› ๏ธ **้…็ฝฎ็ฎก็†** - ่ฎพๅค‡้…็ฝฎๆจกๆฟใ€้…็ฝฎไธ‹ๅ‘ไธŽ็‰ˆๆœฌ็ฎก็† - ๐Ÿ“ฆ **ๆœๅŠก็ฎก็†** - ่ฟœ็จ‹ๆœๅŠก้ƒจ็ฝฒใ€ไบŒ่ฟ›ๅˆถไธ‹ๅ‘ใ€ๆœๅŠก็Šถๆ€็›‘ๆŽง - ๐Ÿ” **ๆŽˆๆƒ็ฎก็†** - ่ฎพๅค‡ๆŽˆๆƒ่ฏไนฆ็ฎก็†ไธŽๅˆ†ๅ‘ - ๐Ÿ‘ฅ **็”จๆˆท็ฎก็†** - ๅŸบไบŽ่ง’่‰ฒ็š„่ฎฟ้—ฎๆŽงๅˆถ๏ผˆRBAC๏ผ‰๏ผŒๆ”ฏๆŒ่ถ…็บง็ฎก็†ๅ‘˜/็ฎก็†ๅ‘˜/ๆ™ฎ้€š็”จๆˆท - ๐Ÿ”„ **่‡ชๅŠจ้‡่ฟž** - ๆ–ญ็บฟ่‡ชๅŠจ้‡่ฟžไธŽๆŒ‡ๆ•ฐ้€€้ฟ็ญ–็•ฅ - ๐Ÿ“Š **ๅฎžๆ—ถ็Šถๆ€** - ่ฎพๅค‡ๅœจ็บฟ็Šถๆ€ไธŽๆœๅŠกๅฅๅบท็›‘ๆŽง - โšก **้ซ˜ๆ€ง่ƒฝ** - ๅŸบไบŽ Rust + Tokio ๅผ‚ๆญฅ่ฟ่กŒๆ—ถ๏ผŒไฝŽๅปถ่ฟŸ้ซ˜ๅนถๅ‘ ## ๐Ÿ—๏ธ ็ณป็ปŸๆžถๆž„ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Cloud Layer โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ moon-backend โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Event Router โ”‚ State Manager โ”‚ WS Handler โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ†• WebSocket โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ†• WebSocket โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Edge Layer โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ moon-relay โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Device Context โ”‚ File Proxy โ”‚ Event Bridge โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ†• WebSocket โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ†• WebSocket โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ Device Layer โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ moon-stat โ”‚ โ”‚ dufs (File) โ”‚ โ”‚ rush (Term) โ”‚ โ”‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ Service Mgr โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”‚ OpenHarmony / KaihongOS Device โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ## ๐Ÿ“ฆ ๆจกๅ—่ฏดๆ˜Ž | ๆจกๅ— | ๆ่ฟฐ | |------|------| | `moon-backend` | ไบ‘็ซฏๅŽ็ซฏๆœๅŠก๏ผŒ็ฎก็†ๅฎขๆˆท็ซฏๅ’Œไธญ็ปงๆณจๅ†Œ๏ผŒไบ‹ไปถ่ทฏ็”ฑไธŽ่ฝฌๅ‘๏ผŒๆ‰˜็ฎกๅ‰็ซฏ้™ๆ€ๆ–‡ไปถ | | `moon-relay` | ่พน็ผ˜ไธญ็ปงๆœๅŠก๏ผŒๆกฅๆŽฅๅŽ็ซฏไธŽ่ฎพๅค‡๏ผŒไปฃ็†ๆ–‡ไปถๆ“ไฝœ๏ผŒ้…็ฝฎ/ๆœๅŠก/ๆŽˆๆƒไธ‹ๅ‘ | | `moon-stat` | ่ฎพๅค‡็ซฏๅฎˆๆŠค่ฟ›็จ‹๏ผŒ็ฎก็†ๆœฌๅœฐๆœๅŠก็”Ÿๅ‘ฝๅ‘จๆœŸไธŽๅฅๅบทๆฃ€ๆŸฅ | | `moon-common` | ๅ…ฌๅ…ฑๅบ“๏ผŒๅฎšไน‰ไบ‹ไปถๅ่ฎฎไธŽๆ•ฐๆฎ็ป“ๆž„ | | `moon-frontend` | Web ๅ‰็ซฏ็•Œ้ข๏ผŒๆไพ›่ฎพๅค‡ๆŽงๅˆถไธญๅฟƒ | ## ๐ŸŽฏ ๅŠŸ่ƒฝๆจกๅ— | ๆจกๅ— | ๅŠŸ่ƒฝ | ็Šถๆ€ | |------|------|------| | ๐Ÿ–ฅ๏ธ **ๆŽงๅˆถๅฐ** | ็ณป็ปŸๆฆ‚่งˆใ€ๅฟซ้€Ÿๆ“ไฝœใ€็Šถๆ€็›‘ๆŽง | โœ… ๅทฒๅฎŒๆˆ | | ๐Ÿ“ฑ **่ฎพๅค‡็ฎก็†** | ่ฎพๅค‡ๅˆ—่กจใ€ๅœจ็บฟ็Šถๆ€ใ€ๆœๅŠก่ฟžๆŽฅ | โœ… ๅทฒๅฎŒๆˆ | | ๐Ÿ› ๏ธ **้…็ฝฎ็ฎก็†** | ้…็ฝฎๆจกๆฟใ€้…็ฝฎไธ‹ๅ‘ใ€็‰ˆๆœฌ็ฎก็† | โœ… ๅทฒๅฎŒๆˆ | | ๐Ÿ“ฆ **ๆœๅŠก็ฎก็†** | ๆœๅŠก้ƒจ็ฝฒใ€ไบŒ่ฟ›ๅˆถไธ‹ๅ‘ใ€็Šถๆ€็›‘ๆŽง | โœ… ๅทฒๅฎŒๆˆ | | ๐Ÿ” **ๆŽˆๆƒ็ฎก็†** | ๆŽˆๆƒ่ฏไนฆ็ฎก็†ใ€ๆ‰น้‡ๅˆ†ๅ‘ | โœ… ๅทฒๅฎŒๆˆ | | ๐Ÿ‘ฅ **็”จๆˆท็ฎก็†** | ็”จๆˆท/็ป„็ฎก็†ใ€่ง’่‰ฒๆƒ้™ใ€ๅฏ†็ ้‡็ฝฎ | โœ… ๅทฒๅฎŒๆˆ | | โš™๏ธ **็ณป็ปŸ่ฎพ็ฝฎ** | ็ณป็ปŸๅ‚ๆ•ฐ้…็ฝฎ | โœ… ๅทฒๅฎŒๆˆ | | ๐Ÿ“ **ๆ–‡ไปถ็ฎก็†** | ่ฟœ็จ‹ๆ–‡ไปถๆต่งˆใ€ไธŠไผ ไธ‹่ฝฝใ€็ผ–่พ‘ | โœ… ๅทฒๅฎŒๆˆ | | ๐Ÿ–ฅ๏ธ **่ฟœ็จ‹็ปˆ็ซฏ** | Web ็ปˆ็ซฏใ€ไบคไบ’ๅผ Shell | โœ… ๅทฒๅฎŒๆˆ | | ๐Ÿ–ผ๏ธ **่ฟœ็จ‹ๆกŒ้ข** | ๅฑๅน•ๆŠ•ๅฐ„ใ€่ฟœ็จ‹ๆŽงๅˆถ | โœ… ๅทฒๅฎŒๆˆ | ## ๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹ ### ๅ‰็ฝฎ่ฆๆฑ‚ - Rust 1.85+ (2024 Edition) - Node.js **20+** - `bash`ใ€`curl`ใ€`sudo` - OpenHarmony/KaihongOS ่ฎพๅค‡๏ผˆ็”จไบŽ่ฎพๅค‡็ซฏๆœๅŠก๏ผ‰ - ไธ€้”ฎๅฎ‰่ฃ…่„šๆœฌ้œ€ **`jq` ๆˆ– `python3`**๏ผˆ็”จไบŽ่งฃๆž `cargo metadata`๏ผŒๆžšไธพ `moon-services/` ไธ‹็š„ workspace ๅŒ…๏ผ‰ - ่‹ฅๅœจ Backend ไธŠไบคๅ‰็ผ–่ฏ‘ `*-ohos` ็š„่ฎพๅค‡ๆœๅŠก๏ผš้œ€ **OHOS SDK**๏ผˆไธŽๅ„ crate ไธ‹ `.cargo/config.toml` ไธญ linker ไธ€่‡ด๏ผ‰ใ€`rustup` **nightly** ไธŽ **`rust-src`** ### ๅฎ‰่ฃ…OpenHarmony SDK - ไธ‹่ฝฝOpenHarmony SDK่งฃๅŽ‹ๅˆฐ/opt/oho-sdk็›ฎๅฝ•ไธ‹ - ๅœจ/opt/ohos-sdk/linux/native/llvm/bin/็›ฎๅฝ•ไธ‹ๅˆ›ๅปบไปฅไธ‹shell่„šๆœฌ ``` # aarch64-unknown-linux-ohos-clang.sh #!/bin/sh exec /opt/ohos-sdk/linux/native/llvm/bin/clang -v \ -target aarch64-linux-ohos \ --sysroot=/opt/ohos-sdk/linux/native/sysroot \ -D__MUSL__ \ "$@" # aarch64-unknown-linux-ohos-clang++.sh #!/bin/sh exec /opt/ohos-sdk/linux/native/llvm/bin/clang++ -v \ -target aarch64-linux-ohos \ --sysroot=/opt/ohos-sdk/linux/native/sysroot \ -D__MUSL__ \ "$@" # armv7-unknown-linux-ohos-clang.sh #!/bin/sh exec /opt/ohos-sdk/linux/native/llvm/bin/clang -v \ -target arm-linux-ohos \ --sysroot=/opt/ohos-sdk/linux/native/sysroot \ -D__MUSL__ \ -march=armv7-a \ -mfloat-abi=softfp \ -mtune=generic-armv7-a \ -mthumb \ "$@" # armv7-unknown-linux-ohos-clang++.sh #!/bin/sh exec /opt/ohos-sdk/linux/native/llvm/bin/clang++ -v \ -target arm-linux-ohos \ --sysroot=/opt/ohos-sdk/linux/native/sysroot \ -D__MUSL__ \ -march=armv7-a \ -mfloat-abi=softfp \ -mtune=generic-armv7-a \ -mthumb \ "$@" ``` ### ๆž„ๅปบ ```bash # ๅ…‹้š†ไป“ๅบ“ git clone "ssh://@gerrit.kaihongdigi.com:29418/Test-Engineering/kaihong-toolbox" cd moon # ๆž„ๅปบๅŽ็ซฏๆœๅŠก cargo build --release # ๆž„ๅปบๅ‰็ซฏ cd moon-frontend npm install npm run build ``` ### ไธ€้”ฎๅฎ‰่ฃ…๏ผˆBackend ไธปๆœบ๏ผ‰ ๅœจไป“ๅบ“ `moon/` ็›ฎๅฝ•ๆ‰ง่กŒ **`scripts/install-moon.sh`**๏ผš`-a` ไธบๅ…จ้ƒจๅฎ‰่ฃ…๏ผ›`-f` / `-b` / `-r` / `-s` ๅˆ†ๅˆซ่กจ็คบ**่ฆๅฎ‰่ฃ…**ๅ‰็ซฏใ€`moon-backend`ใ€`moon-relay`ใ€่ฎพๅค‡ๆœๅŠก๏ผŒๅฏๆŒ‰้œ€็ป„ๅˆ๏ผ›**`-h` ๆˆ–ไธไผ ๅ‚ๆ•ฐ**ๆ‰“ๅฐๅธฎๅŠฉใ€‚ๅ…จ้‡ๆ—ถๆต็จ‹ไธบ๏ผšๅทฅๅ…ท้“พ่‡ชๆฃ€ โ†’ ๆž„ๅปบๅนถๅฎ‰่ฃ… `moon-backend` ไธŽ `moon-relay` โ†’ ๅฏน **workspace ไธญ `moon-services/` ไธ‹ๆฏไธช crate** ๆŒ‰ๅˆๅนถๅŽ็š„ไบคๅ‰ targets ๆž„ๅปบๅนถๅฎ‰่ฃ… โ†’ ๆž„ๅปบๅ‰็ซฏๅนถ้ƒจ็ฝฒ้™ๆ€่ต„ๆบใ€‚ - **้™ๆ€่ต„ๆบ**้ป˜่ฎคๅฎ‰่ฃ…ๅˆฐ **`/var/lib/moon/static`**๏ผˆไธŽไปฃ็ ไธญๅธธ้‡ใ€็Žฏๅขƒๅ˜้‡ **`MOON_STATIC_RESOURCE_DIR`** ไธ€่‡ด๏ผ›ๅฏ้€š่ฟ‡่ฏฅ็Žฏๅขƒๅ˜้‡่ฆ†็›–่ทฏๅพ„๏ผ‰ใ€‚ - **`moon-backend` / `moon-relay`** ๅฎ‰่ฃ…ๅˆฐ **`/usr/local/bin/`**๏ผˆ้œ€ `sudo`๏ผ‰ใ€‚ - **่ฎพๅค‡ๆœๅŠก**๏ผˆๅฝ“ๅ‰ๅฆ‚ `moon-stat`๏ผŒๅŽ็ปญๅœจ `moon-services/` ๅขžๅŠ ๅนถๅŠ ๅ…ฅ workspace ๅณๅฏ๏ผ‰๏ผšๅฎ‰่ฃ…ๅˆฐ **`/var/lib/moon//<ๅŒ…ๅ>//<ๅŒ…ๅ>`**๏ผˆไธŽ Backend ไบŒ่ฟ›ๅˆถไธ‹่ฝฝ่ทฏๅพ„ไธ€่‡ด๏ผ›**้ป˜่ฎคๅฏๆ‰ง่กŒๆ–‡ไปถๅ็ญ‰ไบŽ Cargo package name**๏ผ‰ใ€‚ไบคๅ‰็ผ–่ฏ‘็š„ target ๆฅ่‡ช **`moon-services/.cargo/config.toml`๏ผˆ่‹ฅๅญ˜ๅœจ๏ผ‰ไธŽๅ„ `moon-services/*/.cargo/config.toml` ็š„ๅˆๅนถๅŽป้‡**๏ผ›`arch` ไธบ `aarch64` / `arm` / `x86_64` ็ญ‰็Ÿญๅ๏ผ›ๅŒไธ€ CPU arch ๅคšไธช Rust target ๆ—ถๆŒ‰้…็ฝฎ้กบๅบ**ๆ‹ฉไผ˜้ฆ–ไธชๆž„ๅปบๆˆๅŠŸ**็š„ไบง็‰ฉใ€‚ - **`/var/lib/moon` ๆ•ดๆฃตๆ ‘ๅฑžไธป**ไธบ**ๅ‘่ตทๅ‘ฝไปค็š„็”จๆˆท**๏ผš่‹ฅไฝฟ็”จ `sudo ./scripts/install-moon.sh`๏ผŒ่„šๆœฌไผšๆŒ‰ **`SUDO_UID` / `SUDO_GID`** ่ฟ˜ๅŽŸไธบๅฎž้™…็™ปๅฝ•็”จๆˆท๏ผŒไปฅไพฟไฝ ไปฅๆ™ฎ้€š็”จๆˆทๅฏๅŠจ `moon-backend` ๆ—ถ่ƒฝ่ฏปๅ–้™ๆ€่ต„ๆบไธŽไบŒ่ฟ›ๅˆถไป“ๅบ“ใ€‚ ่„šๆœฌไผšๅฐฝๅŠ›่‡ชๅŠจๅฎ‰่ฃ… **rustup**ใ€ไธบๆฏไธช target ๆ‰ง่กŒ **`rustup target add`**ใ€**nightly + rust-src**๏ผˆๅฝ“ๅญ˜ๅœจ `*-ohos` target ๆ—ถ๏ผ‰ใ€ๅนถๅœจ็ผบๅคฑๆ—ถ็”จ **apt** ๅฐ่ฏ•ๅฎ‰่ฃ… Node๏ผˆ็‰ˆๆœฌๅฏ่ƒฝๅๆ—ง๏ผŒไปไปฅ **Node โ‰ฅ 20** ไธบๅ‡†๏ผ‰ใ€‚**ไธๆไพ›**่ทณ่ฟ‡้ƒจๅˆ† target ็š„็Žฏๅขƒๅ˜้‡๏ผ›ๆ—  OHOS SDK ๆ—ถ `*-ohos` ๆž„ๅปบไผšๅคฑ่ดฅ๏ผŒๅฏๅฎ‰่ฃ… SDK ๆˆ–่‡ช่กŒ็ผ–่พ‘็›ธๅ…ณ `.cargo/config.toml` ๆš‚ๆ—ถๅŽปๆމ targetใ€‚ ```bash cd moon ./scripts/install-moon.sh -a # ๅ…จ้‡๏ผˆ็ญ‰ๅŒๅŽŸๆœ‰ไธ€้”ฎๆต็จ‹๏ผ‰ # ./scripts/install-moon.sh -f # ๅช่ท‘ๅ‰็ซฏๅฎ‰่ฃ…ๆญฅ้ชค # ./scripts/install-moon.sh -b -r # ๅŽ็ซฏ + relay๏ผˆๅฏไปปๆ„็ป„ๅˆ -f/-b/-r/-s๏ผ‰ ``` ๆ‰‹ๅŠจไป…้ƒจ็ฝฒ้™ๆ€ๆ–‡ไปถ๏ผˆไธ่ท‘ไธ€้”ฎ่„šๆœฌๆ—ถ๏ผ‰๏ผš ```bash sudo mkdir -p /var/lib/moon/static sudo cp -r moon-frontend/dist/* /var/lib/moon/static/ # ๅฑžไธป้œ€ไธŽ่ฟ่กŒ moon-backend ็š„็”จๆˆทไธ€่‡ด๏ผŒไพ‹ๅฆ‚๏ผš # sudo chown -R "$USER:$USER" /var/lib/moon ``` ### ่ฟ่กŒ **ๅฏๅŠจๅŽ็ซฏๆœๅŠก**๏ผˆๅŒๆ—ถๆ‰˜็ฎกๅ‰็ซฏ้™ๆ€ๆ–‡ไปถ๏ผ‰ ```bash ./target/release/moon-backend --host 0.0.0.0 --port 8080 ``` **ๅฏๅŠจไธญ็ปงๆœๅŠก** ```bash ./target/release/moon-relay --host 0.0.0.0 --port 8031 --backend ws://backend-host:8080 ``` **ๅฏๅŠจ่ฎพๅค‡็ซฏๆœๅŠก** (ๅœจ่ฎพๅค‡ไธŠ่ฟ่กŒ) ```bash ./moon-stat --relay ws://relay-host:8031 ``` **ๅ‰็ซฏๅผ€ๅ‘ๆจกๅผ** ```bash cd moon-frontend npm run dev ``` ### ่ฎฟ้—ฎ - **็”Ÿไบง็Žฏๅขƒ**: `http://:8080/` - **ๅผ€ๅ‘็Žฏๅขƒ**: `http://localhost:4321/` **่‹ฅ `/login` ็ญ‰่ทฏ็”ฑๅ‡บ็Žฐ 404/503**๏ผš็กฎ่ฎค **`/var/lib/moon/static/index.html`** ๅทฒ้ƒจ็ฝฒ๏ผˆๆˆ– **`MOON_STATIC_RESOURCE_DIR`** ๆŒ‡ๅ‘ๅซ `index.html` ็š„็›ฎๅฝ•๏ผ‰๏ผ›ๅฏๅŠจๆ—ฅๅฟ—ไผšๆ‰“ๅฐๅฎž้™…ไฝฟ็”จ็š„้™ๆ€ๆ น็›ฎๅฝ•ใ€‚่‹ฅไป…ๆœ‰ 404 ไธ”ๆ— ่‡ชๅฎšไน‰่ฏดๆ˜Ž้กต๏ผŒๅคšไธบ**ๆœชๆ›ดๆ–ฐ**ๅธฆ `"/[path:.*]"` ้™ๆ€่ทฏ็”ฑ็š„ `moon-backend` ไบŒ่ฟ›ๅˆถ๏ผŒ่ฏท้‡ๆ–ฐ็ผ–่ฏ‘ๅฎ‰่ฃ…ๅŽ็ซฏใ€‚ ### ้ป˜่ฎค่ดฆๆˆท | ็”จๆˆทๅ | ๅฏ†็  | ่ง’่‰ฒ | |--------|------|------| | `admin` | `admin123` | ่ถ…็บง็ฎก็†ๅ‘˜ | | `dengkx` | `password` | ็ฎก็†ๅ‘˜ | | `test` | `test123` | ๆ™ฎ้€š็”จๆˆท | > โš ๏ธ **ๆณจๆ„**: ไปฅไธŠไธบๅผ€ๅ‘ๆต‹่ฏ•่ดฆๆˆท๏ผŒ็”Ÿไบง็Žฏๅขƒ่ฏทๅŠๆ—ถไฟฎๆ”นๆˆ–ๅฏนๆŽฅๅŽ็ซฏ่ฎค่ฏ APIใ€‚ ### ๅ‘ฝไปค่กŒๅ‚ๆ•ฐ **moon-backend** | ๅ‚ๆ•ฐ | ้ป˜่ฎคๅ€ผ | ่ฏดๆ˜Ž | |------|--------|------| | `--host` | `0.0.0.0` | ็›‘ๅฌๅœฐๅ€ | | `--port` | `8080` | ็›‘ๅฌ็ซฏๅฃ | | `--log-file` | - | ๆ—ฅๅฟ—ๆ–‡ไปถ่ทฏๅพ„ | | `--daemonize` | `false` | ๅŽๅฐ่ฟ่กŒ | **moon-relay** | ๅ‚ๆ•ฐ | ้ป˜่ฎคๅ€ผ | ่ฏดๆ˜Ž | |------|--------|------| | `--host` | `0.0.0.0` | ็›‘ๅฌๅœฐๅ€ | | `--port` | `8031` | ็›‘ๅฌ็ซฏๅฃ | | `--backend` | - | ๅŽ็ซฏ WebSocket ๅœฐๅ€ | | `--log-file` | - | ๆ—ฅๅฟ—ๆ–‡ไปถ่ทฏๅพ„ | | `--daemonize` | `false` | ๅŽๅฐ่ฟ่กŒ | **moon-stat** | ๅ‚ๆ•ฐ | ้ป˜่ฎคๅ€ผ | ่ฏดๆ˜Ž | |------|--------|------| | `--relay` | - | ไธญ็ปง WebSocket ๅœฐๅ€ | | `--log-file` | - | ๆ—ฅๅฟ—ๆ–‡ไปถ่ทฏๅพ„ | | `--daemonize` | `false` | ๅŽๅฐ่ฟ่กŒ | ## ๐Ÿ› ๏ธ ๆŠ€ๆœฏๆ ˆ **ๅŽ็ซฏ** - ๐Ÿฆ€ **Rust 2024 Edition** - ็ณป็ปŸ็ผ–็จ‹่ฏญ่จ€ - โšก **Tokio** - ๅผ‚ๆญฅ่ฟ่กŒๆ—ถ - ๐ŸŒ **Hyperlane** - ้ซ˜ๆ€ง่ƒฝ Web ๆก†ๆžถ - ๐Ÿ“ก **WebSocket** - ๅฎžๆ—ถๅŒๅ‘้€šไฟก - ๐Ÿ“ **Tracing** - ็ป“ๆž„ๅŒ–ๆ—ฅๅฟ— **ๅ‰็ซฏ** - ๐Ÿš€ **Astro 5** - ็Žฐไปฃ้™ๆ€็ซ™็‚นๆก†ๆžถ - ๐Ÿ’š **Vue 3** - ๅ“ๅบ”ๅผ UI ็ป„ไปถ - ๐ŸŽจ **CSS Variables** - ไธป้ข˜ๅŒ–่ฎพ่ฎก - ๐Ÿ–ฅ๏ธ **xterm.js** - Web ็ปˆ็ซฏๆจกๆ‹Ÿๅ™จ - ๐Ÿ–ผ๏ธ **noVNC** - Web VNC ๅฎขๆˆท็ซฏ ## ๐Ÿ“‹ TODO - [ ] ๅŽ็ซฏ็”จๆˆท่ฎค่ฏ API ๅฏนๆŽฅ - [ ] ้€šไฟกๅŠ ๅฏ†๏ผˆTLS/WSS๏ผ‰ - [ ] ๆ“ไฝœๅฎก่ฎกๆ—ฅๅฟ— - [ ] ่ฎฟ้—ฎไปค็‰ŒไธŽ่ฟ‡ๆœŸๆœบๅˆถ - [ ] ๅคงๆ–‡ไปถๅˆ†็‰‡ไผ ่พ“ - [ ] ๅคš่ฎพๅค‡ๆ‰น้‡ๆ“ไฝœ - [ ] ่ฎพๅค‡ๅˆ†็ป„็ฎก็† ## ๐Ÿ“„ ่ฎธๅฏ่ฏ [MIT License](LICENSE) ## ๐Ÿค ่ดก็Œฎ ๆฌข่ฟŽๆไบค Issue ๅ’Œ Pull Request๏ผ ## ๐Ÿ“ฎ ่”็ณป - ไฝœ่€…: dengkx - ็ป„็ป‡: ๆทฑๅœณๅผ€้ธฟๆ•ฐๅญ—ๆœ‰้™ๅ…ฌๅธ