Profile
Back to NewsBack
GitHub Trending 8 min
Reader Mode
engigu/baihu-panel: ๐Ÿฏ่ฝป้‡็บงๅฎšๆ—ถไปปๅŠก็ฎก็†็ณป็ปŸ๏ผŒๆ”ฏๆŒ Python, Node.js, Go, Rust, PHP ็ญ‰ๆ‰€ๆœ‰ไธปๆต่ฏญ่จ€็š„ๅŠจๆ€ๅฎ‰่ฃ…ไธŽๅคš็‰ˆๆœฌๅˆ‡ๆข,๏ผŒDocker/Compose ๅณ็”จใ€‚A lightweight, high-performance cron panel built with Go & Vue 3.

engigu/baihu-panel: ๐Ÿฏ่ฝป้‡็บงๅฎšๆ—ถไปปๅŠก็ฎก็†็ณป็ปŸ๏ผŒๆ”ฏๆŒ Python, Node.js, Go, Rust, PHP ็ญ‰ๆ‰€ๆœ‰ไธปๆต่ฏญ่จ€็š„ๅŠจๆ€ๅฎ‰่ฃ…ไธŽๅคš็‰ˆๆœฌๅˆ‡ๆข,๏ผŒDocker/Compose ๅณ็”จใ€‚A lightweight, high-performance cron panel built with Go & Vue 3.

12 hours ago

็™ฝ่™Ž้ขๆฟ

Hits</a> !Version Contributors</a> !Image Size !Image pulls

็™ฝ่™Ž้ขๆฟ (Baihu Panel) ๆ˜ฏไธ€ๆฌพๆž่‡ด่ฝป้‡ใ€้ซ˜ๆ€ง่ƒฝ็š„่‡ชๅŠจๅŒ–ไปปๅŠก่ฐƒๅบฆๅนณๅฐใ€‚้‡‡็”จ Go + Vue3 ๆžถๆž„๏ผŒไธ“ๆณจไบŽ้ซ˜ๆ€ง่ƒฝไธŽไฝŽ็ณป็ปŸๅผ€้”€ใ€‚้€š่ฟ‡ๆทฑๅบฆ้›†ๆˆ Mise ่ฟ่กŒๆ—ถ็ฎก็†๏ผŒๅฎƒๅŽŸ็”Ÿๆ”ฏๆŒ Pythonใ€Node.jsใ€Goใ€Rustใ€PHP ็ญ‰ๆ‰€ๆœ‰ไธปๆต่ฏญ่จ€็Žฏๅขƒ็š„ๅŠจๆ€ๅฎ‰่ฃ…๏ผˆๅ‡ ไนŽๆ‰€ๆœ‰็š„็‰ˆๆœฌ๏ผ‰ไธŽ็ปŸไธ€ไพ่ต–็ฎก็†ใ€‚ๆ”ฏๆŒ Docker/Docker-Compose ไธ€้”ฎ้ƒจ็ฝฒ๏ผŒๅผ€็ฎฑๅณ็”จ๏ผŒๆ˜ฏๆ‚จ็†ๆƒณ็š„่ฝป้‡ๅŒ–่„šๆœฌๆ‰˜็ฎกไธŽไปปๅŠก่ฐƒๅบฆ่งฃๅ†ณๆ–นๆกˆใ€‚

ๆˆชๆญข20260922๏ผŒ็ณป็ปŸๆ ธๅฟƒ่“ๅ›พๅทฒๅ…จ้ขๆ‹ผ้ฝ๏ผŒไปŽๅฃฐๆ˜Žๅผ YAML ็š„ๅ…จๆต็จ‹็ผ–ๆŽ’ๅฎšไน‰๏ผŒๅˆฐๅบ•ๅฑ‚ไปปๅŠก่ฐƒๅบฆ๏ผŒๅ†ๅˆฐๅคš็ซฏๆถˆๆฏๆŽจ้€๏ผŒๆญฃๅผๆž„ๅปบ่ตทๅฎŒๆ•ด็š„่‡ชๅŠจๅŒ–็”Ÿๅ‘ฝๅ‘จๆœŸ้—ญ็Žฏใ€‚

ๆผ”็คบ็ซ™็‚น(ๆผ”็คบ็ซ™็‚น็š„ๆœๅŠกๅ™จๆฏ”่พƒ็ƒ‚๏ผŒ่ง่ฐ…) ๆผ”็คบ็ซ™็‚น

ๆ–‡ๆกฃ่ฏดๆ˜Ž ๆ–‡ๆกฃ่ฏดๆ˜Ž

ๆ›ดๆ–ฐๆ—ฅๅฟ—

[!NOTE]
ๆœ€ๆ–ฐ็‰ˆๆœฌ๏ผšv1.6.0 (2026.11.03)
  • ไปปๅŠก่ถ…ๆ—ถๆ”ฏๆŒ 0 ไธ้™ๅˆถ๏ผš่งฃ้™คๆ•ฐๆฎๆจกๅž‹ๅฏน่ถ…ๆ—ถ้ป˜่ฎคๅ€ผ็š„้™ๅˆถ๏ผŒ่งฃๅ†ณๅญ˜ไธบ 0 ๅ›ž้€€ไธบ 30 ็š„้—ฎ้ข˜๏ผŒๅ‰็ซฏๅ…จๆต็จ‹ๅ…ผๅฎน 0 ๅ€ผ่พ“ๅ…ฅไธŽๅฏผๅ‡บใ€‚
  • ้™ๅˆถๅนถๅ‘ไปปๅŠก่ฟ่กŒไธญๅˆ‡ๆขไธบๅœๆญขๆŒ‰้’ฎ๏ผš้™ๅˆถๅนถๅ‘็š„ไปปๅŠกๅœจๆ‰ง่กŒไธญๅฐ†ๆกŒ้ขไธŽ็งปๅŠจ็ซฏ็š„ๆ“ไฝœไฝ็”ฑโ€œๆ‰ง่กŒ/ๅŒๆญฅโ€ๅˆ‡ๆขไธบโ€œๅœๆญขโ€๏ผŒ้…ๅˆๅŽ็ซฏๆ‰ฉๅฑ•็š„้€š็”จๅœๆญขๆŽฅๅฃ๏ผŒๅฎž็Žฐๅˆ—่กจไธ€้”ฎ็ปˆๆญข่ฟ่กŒใ€‚
  • ๆ‰ง่กŒๅކๅฒๆ—ฅๅฟ—้˜ฒ้‡ๆธฒๆŸ“ไฟฎๅค๏ผš้‡ๆž„ๆ—ฅๅฟ—่ฏทๆฑ‚็‰ˆๆœฌ่ฟฝ่ธชๆœบๅˆถ๏ผŒๅฝปๅบ•่งฃๅ†ณๅคšไปปๅŠกๅฟซ้€Ÿๅˆ‡ๆขๅŠ้‡ๅค็‚นๅ‡ปๆ—ถๅކๅฒๆ—ฅๅฟ—ๅ†…ๅฎน้‡ๅค่พ“ๅ‡บ็š„็ซžๆ€็ผบ้™ท๏ผˆ#205๏ผ‰ใ€‚
  • ๆผ”็คบๆจกๅผๅˆ‡้ขไธŽๅฎนๅ™จๆŽงๅญ˜่ฐƒไผ˜๏ผšๆๅ–ๆผ”็คบๆจกๅผๅˆ‡้ขไธญ้—ดไปถไธŽๅ‰็ซฏ่ทฏ็”ฑๅฎˆๅซ๏ผ›ๅ†…ๅปบๅŠฉๆ‰‹ๅบ“ๅฎ‰่ฃ…ๅฎŒๆˆๅŽไธปๅŠจๅ›žๆ”ถๆดป่ทƒๆ–‡ไปถ็ผ“ๅญ˜ใ€‚
็‚นๅ‡ปๅฑ•ๅผ€ๆŸฅ็œ‹่ฟ‘ๆœŸๅކๅฒ็‰ˆๆœฌๆ—ฅๅฟ—
  • 2026.10.30 (v1.5.9) - Docker ๅฎนๅ™จๅผ‚ๆญฅๅˆๅง‹ๅŒ–ๅ†…ๅปบๅŠฉๆ‰‹ๅบ“ใ€Node.js ๅ†…ๅปบ้€š็Ÿฅๅฅๅฃฎๆ€งๅŠ ๅ›บไธŽ่ฟ”ๅ›žๅ€ผๆ”ฏๆŒใ€ๅ˜้‡ๆœบๅฏ†็ผ–่พ‘ๆก†ๆœ€ๅŽ็ผ–่พ‘ๆ—ถ้—ดๅฑ•็คบใ€‚
  • 2026.10.27 (v1.5.8) - ่ฏญ่จ€ๅฎ‰่ฃ…ไธ‹่ฝฝ้•œๅƒๅŠ ้€ŸไธŽ Mise ่ฟ่กŒๆ—ถ้•œๅƒๆบ้…็ฝฎใ€ๅทฒ่ฃ…ๅบ”็”จๆ›ดๆ–ฐๆฃ€ๆต‹ไธŽๆ— ๆŸๅ‡็บงไธญๆžขใ€OpenAPI ๆ–‡ไปถ็ฎก็†่ƒฝๅŠ›ๅผ€ๆ”พไธŽๅ…จ็ซ™ๅฎ‰ๅ…จๅŠ ๅ›บใ€‚
  • 2026.10.21 (v1.5.7) - ไปปๅŠกๆ—ฅๅฟ—่‡ชๅฎšไน‰ๅ˜้‡ๆๅ–ไธŽ้€š็Ÿฅๆจกๆฟๆณจๅ…ฅใ€่ฎพ็ฝฎไธญๅฟƒๅ…จๅฑ€ๆ‚ฌๆตฎไฟๅญ˜ไธŽๆ”นๅŠจ่ฟฝ่ธชใ€่„šๆœฌ็ผ–่พ‘็ปˆ็ซฏ้‡ๆž„ๅŠไฝ“้ชŒๅŠ ๅ›บใ€‚
  • 2026.10.17 (v1.5.6) - ่ฟ่กŒๆ—ถ PageCache ๆŽงๅญ˜็ญ–็•ฅ้‡ๆž„ใ€ๅฎนๅ™จๅ…ฅๅฃๆ ‡ๅ‡†ๅŒ–ไธŽๅ…ฌๅ…ฑๅบ“ๆŠฝๅ–ใ€OIDC ้ข†ๅŸŸๅฑ‚่งฃ่€ฆๅŠๅ‰็ซฏไบคไบ’ไผ˜ๅŒ–ใ€‚
  • 2026.10.16 (v1.5.5) - ๅคš่บซไปฝๆบๅ•็‚น็™ปๅฝ•ๅนถ่กŒๅ…ฑๅญ˜ๆžถๆž„ใ€SSO ็‹ฌ็ซ‹่ทฏ็”ฑไธŽๅ‡ญๆฎ่งฃ่€ฆใ€็งปๅŠจ็ซฏๅ“ๅบ”ๅผไธŽ่ง†่ง‰็ป†่Š‚ๆ‰“็ฃจใ€‚
  • 2026.10.15 (v1.5.4) - MCP ๅŒไผ ่พ“ๅ…ฑๅญ˜ๆžถๆž„ (Streamable HTTP + SSE)ใ€้€š็”จ OAuth 2.0 ๅ•็‚น็™ปๅฝ•ไธŽๅ…จ็ซ™ Inter ๅญ—ไฝ“ๆŽ’็‰ˆใ€‚
  • 2026.10.15 (v1.5.3) - ๅŽŸ็”Ÿ OIDC / Pocket ID ๅ•็‚น็™ปๅฝ•ใ€ไปปๅŠกๆ‰น้‡่ฎพ็ฝฎๅคš็ฑปๅž‹ๆทท้€‰้‡ๆž„ใ€่กจๆ ผๅˆ†้กตๆ•ฐ็‹ฌ็ซ‹ๆŒไน…ๅŒ–ไธŽๆผ”็คบๆจกๅผๅ…จ้ขๅŠ ๅ›บใ€‚
  • 2026.10.12 (v1.5.2) - ๅฎนๅ™จ PageCache ่‡ช้€‚ๅบ”ๅ›žๆ”ถไธŽ็‚นๆ€ใ€tini ๅƒตๅฐธ่ฟ›็จ‹ๅ›žๆ”ถใ€ๆ ‘ๅฝข็›ฎๅฝ•ๆ‰น้‡ๅฑ•ๅผ€ใ€ๅฐๅฑไปฃ็ ็ผ–่พ‘ไผ˜ๅŒ–ใ€‚
  • 2026.10.09 (v1.5.1) - Windows ๆ‰˜็›˜ๆ— ้ป‘็ช—้™้ป˜่ฟ่กŒใ€ๅฎนๅ™จๅ†…ๅญ˜ๅฃๅพ„ๅฏน้ฝ Docker Statsใ€OpenAPI MCP ๆœๅŠกๅฅๅฃฎๆ€งๅŠ ๅ›บใ€‚
  • 2026.10.07 (v1.5.0) - ๅŽŸ็”Ÿๅ†…็ฝฎ MCP ๆœๅŠกใ€Server้…ฑๆŽจ้€้€š้“ใ€ๆ–‡ไปถๆ ‘ๆŒ‰้œ€ๆ‡’ๅŠ ่ฝฝไธŽๆฃ€็ดขใ€Agent ๅฎžๆ—ถๅขž้‡ๅŒๆญฅใ€‚
  • 2026.10.01 (v1.4.2) - ็ณป็ปŸ่ฎพ็ฝฎๅ…จๆจกๅ—่ง†่ง‰ไธŽไบคไบ’้‡ๆž„ใ€ๅฃฐๆ˜Žๅผๅบ”็”จๅธ่ฝฝ็บง่”ๆธ…็†ไธŽๆ ‡็ญพ่‡ชๅŠจๅ›žๆ”ถใ€‚
  • 2026.09.30 (v1.4.1) - ่ฟœ็จ‹ Agent ๅทฅไฝœ็›ฎๅฝ•่งฃๆžไฟฎๅคใ€Windows Agent Shell ๅ…ไพ่ต–ๅ›ž้€€ใ€Bark ๅŠจๆ€ๅ‚ๆ•ฐ่ฆ†็›–ใ€‚
  • 2026.09.29 (v1.4.0) - RESTful ็Šถๆ€็ ๅŒ่ฝจๅฏน้ฝใ€Bark ็ซฏๅˆฐ็ซฏๅŠ ๅฏ†ๆŽจ้€ใ€ไปปๅŠกๆทฑๅฑ‚็›ฎๅฝ•ๅฑ•ๅผ€ใ€‚
  • 2026.09.23 (v1.3.0) - ๆœบๅฏ†็ซฏๅˆฐ็ซฏๅฎ‰ๅ…จ่งฃๅฏ† (ECDH+AES-GCM)ใ€ๆ—ฅๅฟ—ๅ†—ไฝ™ไปปๅŠกๅใ€ๆ–‡ๆกฃไฝ“้ชŒๅ‡็บงใ€‚
  • 2026.09.22 (v1.2.0) - ๅฃฐๆ˜Žๅผๅบ”็”จๅผ•ๆ“ŽไธŽๅบ”็”จๅธ‚ๅœบใ€2FA ๅค‡ไปฝๆขๅคไฟฎๅคใ€่ทจๅนณๅฐ่ทฏๅพ„ๅ‡็บงใ€‚
  • 2026.09.11 (v1.1.30) - ๆ ‡็ญพๅ…ณ่”่ต„ๆบ็ฉฟ้€่ทณ่ฝฌใ€่พ“ๅ…ฅๆณ•ๅ›ž่ฝฆไธขๅคฑไฟฎๅคใ€่ฐƒๅบฆๅผ•ๆ“Ž่ฐƒไผ˜ใ€‚
  • 2026.09.08 (v1.1.29) - Windows ConPTY ไผช็ปˆ็ซฏ้‡ๆž„ใ€hosts ่‡ชๅŠจๆ˜ ๅฐ„ใ€ๆ‰˜็›˜ UI ๅ‡็บงใ€‚
  • 2026.09.04 (v1.1.28) - IDE ๅบ•้ƒจ Terminalใ€็ŽฏๅขƒๆŒไน…ๅŒ–ใ€ไปปๅŠก้…็ฝฎๆ‰น้‡ๆ›ดๆ–ฐใ€‚
  • 2026.08.21 (v1.1.27) - ้€š็Ÿฅ่ฟ‡ๆปคๆœบๅˆถใ€็งปๅŠจ็ซฏๅนณๆป‘ๆปšๅŠจไธŽๅฐๅฑ้€‚้…ไผ˜ๅŒ–ใ€‚
  • 2026.08.17 (v1.1.26) - ็ปŸไธ€้€š็Ÿฅๅ†…ๅฎนไธŽ Options SDKใ€ๆ—ฅๅฟ— SSE ็Šถๆ€ๅธงๅ่ฎฎใ€‚
  • 2026.08.10 (v1.1.25) - ไผไธšๅพฎไฟกๆŽจ้€ๆŽฅๅ…ฅใ€ๅค‡ไปฝๆขๅค่‡ชๅŠจๅŠ ่ฝฝ่ฐƒๅบฆใ€ๅฎ‰ๅ…จๆผๆดžไฟฎๅคใ€‚
  • 2026.07.31 (v1.1.24) - ๆ ‡็ญพ็ฎก็†็ณป็ปŸใ€Monaco ๅคš่ฏญ่จ€่ฏญๆณ•้ซ˜ไบฎใ€็™ปๅฝ•ไธคๆญฅ้ชŒ่ฏ (2FA)ใ€‚
  • 2026.07.23 (v1.1.23) - Windows GUI ๅฎ‰่ฃ…ๅŒ…ไธŽๅŽๅฐ็ณป็ปŸๆ‰˜็›˜ๅฎˆๆŠค็จ‹ๅบใ€‚
  • 2026.07.20 (v1.1.22) - Windows ๅนณๅฐๆทฑๅบฆ้€‚้…ใ€็ฝ‘้กต็ปˆ็ซฏ Ctrl+C ็ปˆ็ป“ใ€PTY ๅดฉๆบƒไฟฎๅคใ€‚
  • 2026.07.13 (v1.1.21) - ZSTD ๆ—ฅๅฟ—ๅŽ‹็ผฉใ€ไพ่ต–่‡ชๅŠจ่กฅๅ…จ็ปˆ็ซฏใ€ๅˆ—่กจ่ง†ๅ›พ่”ๅŠจๆŽ’ๅบใ€‚
  • 2026.06.28 (v1.1.20) - ่Š‚็‚นไบ’่”ๆžถๆž„ (ๅ˜้‡ๅŒๆญฅไธŽ OpenConnect)ใ€็ปˆ็ซฏ OOM ้˜ฒๆŠคใ€‚

ๆŸฅ็œ‹ๅฎŒๆ•ดๅކๅฒๆ›ดๆ–ฐๆ—ฅๅฟ— (ๅœจ็บฟๆ–‡ๆกฃ)

้กน็›ฎๆฅ็”ฑ

ๅคšๅฐ‘ๅ’Œ้’้พ™้ขๆฟๆœ‰็‚นๅ…ณ็ณป๏ผŒๆˆ‘่‡ชๅทฑไนŸๆ˜ฏ้’้พ™้ขๆฟ็š„ไฝฟ็”จ่€…๏ผŒไฝ†ๆ˜ฏ็Žฐๅœจ็š„้’้พ™้ขๆฟๆ€ง่ƒฝๆˆ‘่ง‰ๅพ—ๆœ‰็‚น้šพไปฅๆŽฅๅ—ใ€‚ไปฅๆˆ‘่‡ชๅทฑ็š„ไฝฟ็”จ๏ผˆๆœบๅ™จ1C2G๏ผ‰ไธบไพ‹๏ผŒไธ€ไธชpython็š„requests่„šๆœฌๆฏ้š”30sๆ‰ง่กŒไธ€ๆฌก๏ผŒๆœ‰ๆ—ถๅ€™cpuๆ‰ง่กŒ็š„ๆ—ถๅ€™่ƒฝ่ทณๅ˜ๅˆฐ50%ไปฅไธŠใ€‚ๅฏไปฅ็œ‹็œ‹ไธ‹้ขgifๅ›พ็‰‡๏ผˆๅฆ‚ๆžœไธๅŠจ๏ผŒ็‚นๅ‡ปๅ›พ็‰‡ๆŸฅ็œ‹๏ผ‰

!qinglong.gif

ๆˆ‘่ง‰ๅพ—ไธ€ไธชๅ†…ๅญ˜ๅ’Œๆ€ง่ƒฝๅ ็”จไฝŽ็š„้ขๆฟๆ›ดๅˆ้€‚่‡ชๅทฑ๏ผŒๆ‰€ไปฅๅšไบ†่ฟ™ไธช้กน็›ฎใ€‚

ๅฆ‚ๆžœไฝ ๅ’Œๆˆ‘ไธ€ๆ ท้œ€่ฆไธ€ไธชๆ€ง่ƒฝๅ’Œๅ†…ๅญ˜ๅ ็”จไฝŽ็š„ๅฎšๆ—ถ้ขๆฟ๏ผŒ่ฟ™ไธช้กน็›ฎไฝ ๅฏไปฅไฝ“้ชŒไธ‹ใ€‚

ๅŒๆ ท็š„ๅฎšๆ—ถๅœบๆ™ฏๅ’Œไปฃ็ ๏ผŒ่ฟ™ไธช้กน็›ฎ็š„ๆƒ…ๅ†ตๅฆ‚ไธ‹๏ผˆcpuๆ‰ง่กŒๅฎšๆ—ถ่ทณๅ˜ไธ่ถ…่ฟ‡20%๏ผ‰๏ผš

!baihu.gif

ๅฆ‚ๆžœ้กน็›ฎๆœ‰็”จ๏ผŒ่ฏทๅธฎๅฟ™็‚นไธชstarใ€‚

็‰น่‰ฒ

  • ่ฝป้‡็บง๏ผš docker/compose้ƒจ็ฝฒ๏ผŒๆ— ้œ€ๅคๆ‚้…็ฝฎ๏ผŒๅผ€็ฎฑๅณ็”จ
  • ไปปๅŠก่ฐƒๅบฆ๏ผš ๆ”ฏๆŒๆ ‡ๅ‡† Cron ่กจ่พพๅผ๏ผŒๅธธ็”จๆ—ถ้—ด่ง„ๅˆ™ๅฟซๆท้€‰ๆ‹ฉใ€‚ๆ—ฅๅฟ—ไธ่ฝๆ–‡ไปถ๏ผŒๆฒกๆœ‰็ฃ็›˜้ข‘็นio็š„้—ฎ้ข˜
  • ่„šๆœฌ็ฎก็†๏ผš ๅœจ็บฟไปฃ็ ็ผ–่พ‘ๅ™จ๏ผŒๆ”ฏๆŒๆ–‡ไปถไธŠไผ ใ€ๅŽ‹็ผฉๅŒ…่งฃๅŽ‹
  • ๅœจ็บฟ็ปˆ็ซฏ๏ผš WebSocket ๅฎžๆ—ถ็ปˆ็ซฏ๏ผŒๅ‘ฝไปคๆ‰ง่กŒ็ป“ๆžœๅฎžๆ—ถ่พ“ๅ‡บ
  • ๆถˆๆฏๆŽจ้€๏ผš ๅ†…็ฝฎๅผบๅคงๆถˆๆฏๆŽจ้€ไธŽ้€š็Ÿฅๅผ•ๆ“Ž๏ผŒๆ— ็ผๅ…ผๅฎนไธปๆตๆธ ้“๏ผŒๆ”ฏๆŒ็ณป็ปŸ็บงไบ‹ไปถๅ‘Š่ญฆ
  • ๆœบๅฏ†็ฎก็†๏ผš (New) ็ฑปไผผ GitHub Secrets ็š„ๅฎ‰ๅ…จๅญ˜ๅ‚จ๏ผŒๆ”ฏๆŒ AES-GCM ๅŠ ๅฏ†๏ผŒๆ—ฅๅฟ—่‡ชๅŠจๆ‰“็ ๏ผŒไป…ๅœจ่ฐƒๅบฆๆ—ถๆณจๅ…ฅ
  • ็Žฏๅขƒๅ˜้‡๏ผš ๅญ˜ๅ‚จๆ™ฎ้€š้…็ฝฎ๏ผŒไปปๅŠกๆ‰ง่กŒๆ—ถ่‡ชๅŠจๆณจๅ…ฅ
  • ็ŽฐไปฃUI๏ผš ๅ“ๅบ”ๅผ่ฎพ่ฎก๏ผŒๆทฑ่‰ฒ/ๆต…่‰ฒไธป้ข˜ๅˆ‡ๆข
  • ็งปๅŠจ็ซฏ๏ผš ้€‚้…็งปๅŠจๅฐๅฑๆ ทๅผ
  • ่ฟœ็จ‹ๆ‰ง่กŒ๏ผš ๆ”ฏๆŒ่ฟœ็จ‹agentๆ‰ง่กŒไปปๅŠก๏ผŒๅฑ•็คบๆ‰ง่กŒ็ป“ๆžœ
  • ๅคš่ฏญ่จ€ๆ”ฏๆŒ๏ผš ๆทฑๅบฆ้›†ๆˆ Mise๏ผŒๆ”ฏๆŒๅ‡ ไนŽๆ‰€ๆœ‰ไธปๆต็ผ–็จ‹่ฏญ่จ€็š„ๅŠจๆ€ๅฎ‰่ฃ…ใ€ๅคš็‰ˆๆœฌๅˆ‡ๆขๅŠไพ่ต–็ฎก็†
  • ๅ†…ๅปบๅŠฉๆ‰‹ๅบ“๏ผš (New) ไธบ Python/Node.js ๆไพ›้›ถ้…็ฝฎๅŠฉๆ‰‹ๅบ“๏ผŒ็ฎ€ๅ• import ๅณๅฏๅฎž็Žฐไธ€้”ฎๆŽจไฟก๏ผŒๆ— ้œ€ๆ‰‹ๅŠจ็ฎก็† API Token ๅ’Œ URL

ๅŠŸ่ƒฝ็‰นๆ€ง

็‚นๅ‡ปๅฑ•ๅผ€ๆŸฅ็œ‹่ฏฆ็ป†ๅŠŸ่ƒฝ

ๅฎšๆ—ถไปปๅŠก็ฎก็†

  • ๆ”ฏๆŒๆ ‡ๅ‡† Cron ่กจ่พพๅผ่ฐƒๅบฆ
  • ๅธธ็”จๆ—ถ้—ด่ง„ๅˆ™ๅฟซๆท้€‰ๆ‹ฉ
  • ไปปๅŠกๅฏ็”จ/็ฆ็”จ็Šถๆ€ๅˆ‡ๆข
  • ๆ‰‹ๅŠจ่งฆๅ‘ๆ‰ง่กŒ
  • ไปปๅŠก่ถ…ๆ—ถๆŽงๅˆถ

่„šๆœฌๆ–‡ไปถ็ฎก็†

  • ๅœจ็บฟไปฃ็ ็ผ–่พ‘ๅ™จ
  • ๆ–‡ไปถๆ ‘ๅฝข็ป“ๆž„ๅฑ•็คบ
  • ๆ”ฏๆŒๅˆ›ๅปบใ€้‡ๅ‘ฝๅใ€ๅˆ ้™คๆ–‡ไปถ/ๆ–‡ไปถๅคน
  • ๆ”ฏๆŒๅŽ‹็ผฉๅŒ…ไธŠไผ ่งฃๅŽ‹
  • ๆ”ฏๆŒๅคšๆ–‡ไปถๆ‰น้‡ไธŠไผ 

ๅœจ็บฟ็ปˆ็ซฏ

  • WebSocket ๅฎžๆ—ถ็ปˆ็ซฏ
  • ๆ”ฏๆŒๅธธ็”จ Shell ๅ‘ฝไปค
  • ๅ‘ฝไปคๆ‰ง่กŒ็ป“ๆžœๅฎžๆ—ถ่พ“ๅ‡บ

ๆ‰ง่กŒๆ—ฅๅฟ—

  • ไปปๅŠกๆ‰ง่กŒๅކๅฒ่ฎฐๅฝ•
  • ๆ‰ง่กŒ็Šถๆ€่ฟฝ่ธช๏ผˆๆˆๅŠŸ/ๅคฑ่ดฅ/่ถ…ๆ—ถ๏ผ‰
  • ๆ‰ง่กŒ่€—ๆ—ถ็ปŸ่ฎก
  • ๆ—ฅๅฟ—ๅ†…ๅฎนๅŽ‹็ผฉๅญ˜ๅ‚จ
  • ๆ—ฅๅฟ—่‡ชๅŠจๆธ…็†

ๆถˆๆฏๆŽจ้€ไธŽ็ณป็ปŸ้€š็Ÿฅ

  • ๅŽŸ็”Ÿๅ†…็ฝฎๅ„ๅคงไธปๆตๅนณๅฐๆธ ้“๏ผˆ้’‰้’‰ใ€ไผไธšๅพฎไฟกใ€Telegramใ€Server้…ฑ็ญ‰๏ผ‰
  • ๆ”ฏๆŒ็ณป็ปŸ็บงไบ‹ไปถๆกไปถ่งฆๅ‘้€š็Ÿฅ๏ผˆไพ‹ๅฆ‚ไปปๅŠกๅคฑ่ดฅๆŠฅ่ญฆใ€ๆœๅŠกไธ‹็บฟๆ้†’๏ผ‰
  • ่‡ชๅŠจ็”Ÿๆˆ่ทจ่ฏญ่จ€่ฐƒ็”จ API ็คบไพ‹ไปฃ็ ไพ›่„šๆœฌ้›†ๆˆ

ๅ˜้‡ไธŽๆœบๅฏ†

  • ๆ”ฏๆŒๆ™ฎ้€š็Žฏๅขƒๅ˜้‡ไธŽๅฎ‰ๅ…จๆœบๅฏ†๏ผˆSecret๏ผ‰ๅˆ†็ฑป็ฎก็†
  • ๆœบๅฏ†ไฝฟ็”จ AES-GCM ๅŠ ๅฏ†ๅญ˜ๅ‚จ๏ผŒๆ•ฐๆฎๅบ“ไธๅญ˜ๆ˜Žๆ–‡
  • ็ง˜้’ฅไป…ๅœจๅ†…ๅญ˜ไธญ็•™ๅญ˜๏ผŒๅฏๅŠจ่ฏปๅ–ๅŽ็ซ‹ๅณ้”€ๆฏ๏ผˆUnset๏ผ‰
  • ๆ‰ง่กŒๆ—ฅๅฟ—่‡ชๅŠจๆœ็ดขๅนถๅฑ่”ฝ()**ๆ•ๆ„Ÿๆœบๅฏ†ๅ†…ๅฎน
  • ไธฅๆ ผๆƒ้™้š”็ฆป๏ผšๆœบๅฏ†ไป…ๅœจๅฎšๆ—ถไปปๅŠก่ฐƒๅบฆๆ—ถๆณจๅ…ฅ๏ผŒ็ปˆ็ซฏ/ๆต‹่ฏ•็Žฏๅขƒไธๅฏ่ง

่Š‚็‚นไบ’่”ไฝ“็ณป (New)

  • ๆ”ฏๆŒ OpenConnect ๅ่ฎฎ๏ผŒ่ฝปๆพๅฎž็Žฐๅคšๅฐ็™ฝ่™Ž้ขๆฟไน‹้—ด็š„ไบ’่”ไบ’้€š
  • ๆ”ฏๆŒ่Š‚็‚น้—ด็š„็Žฏๅขƒๅ˜้‡ๆ— ็ผๅŒๆญฅ๏ผˆไฟ็•™ๅŽŸๆœ‰็ป“ๆž„ไธŽ ID๏ผ‰
  • ้›†ๆˆๅŒๆญฅ็ฎก็†ๆŽงๅˆถๅฐ๏ผŒ็ปŸไธ€ๆŸฅ็œ‹ไธŽๆŽงๅˆถๅ„่Š‚็‚น็Šถๆ€ไธŽ่ดŸ่ฝฝๆŒ‡ๆ ‡
  • ๅบ•ๅฑ‚่ทฏ็”ฑๆทฑๅบฆ้€‚้…็ฉฟ้€้šง้“๏ผŒๅฎŒ็พŽๆ”ฏๆŒๅˆ†ๅธƒๅผๅ‰็ซฏไปฃ็†่ฎฟ้—ฎ

ไป“ๅบ“ไปปๅŠกๅŒๆญฅ (New)

  • ๆ”ฏๆŒ ้’้พ™ ไป“ๅบ“ๅ‘ฝไปคๆ ผๅผๅฟซๆทๅฏผๅ…ฅ
  • ่‡ชๅŠจ่งฃๆž่„šๆœฌๆณจ้‡Šไธญ็š„ Cron ่กจ่พพๅผๅ’Œ็Žฏๅขƒๅ˜้‡ๅ
  • ๆ”ฏๆŒๅŸบไบŽๆญฃๅˆ™่กจ่พพๅผ็š„็™ฝๅๅ•ใ€้ป‘ๅๅ•ๆ–‡ไปถ็ญ›้€‰
  • ๆ”ฏๆŒ่„šๆœฌไพ่ต–ๆ–‡ไปถ็š„่ฏ†ๅˆซไธŽไฟ็•™
  • ่‡ชๅŠจๅŒๆญฅ่ฟœ็จ‹ Git ไป“ๅบ“ๅ˜ๆ›ด๏ผŒๅขž้‡ๆ›ดๆ–ฐ้ขๆฟไปปๅŠก

็ณป็ปŸ่ฎพ็ฝฎ

  • ็ซ™็‚นๆ ‡้ข˜ใ€ๆ ‡่ฏญใ€ๅ›พๆ ‡่‡ชๅฎšไน‰
  • ๅˆ†้กตๅคงๅฐใ€Cookie ๆœ‰ๆ•ˆๆœŸ้…็ฝฎ
  • ่ฐƒๅบฆๅ‚ๆ•ฐ็ƒญ้‡่ฝฝ
  • ๆ•ฐๆฎๅค‡ไปฝไธŽๆขๅค

ๆ”ฏๆŒ่ฏญ่จ€่„šๆœฌๅ’Œไพ่ต–

็‚นๅ‡ปๅฑ•ๅผ€ๆŸฅ็œ‹ๅทฒๆ”ฏๆŒ็š„่ฏญ่จ€ๅŠไพ่ต–็ฎก็†่ฏฆๆƒ…

่„šๆœฌ่ฟ่กŒ็Žฏๅขƒ

็™ฝ่™Ž้ขๆฟๅŽŸ็”Ÿๆ”ฏๆŒไปฅไธ‹่„šๆœฌ็š„ๅฎšๆ—ถๆ‰ง่กŒ๏ผš
  • Python3, Node.js, Bash (ๆ ‡ๅ‡†็‰ˆ้•œๅƒๅ†…็ฝฎ็Žฏๅขƒ)
  • ้€š่ฟ‡ Mise ๆ‰ฉๅฑ•๏ผšๆ”ฏๆŒๅ‡ ไนŽๆ‰€ๆœ‰ไธปๆต็ผ–็จ‹่ฏญ่จ€็š„ๅŠจๆ€ๅฎ‰่ฃ…ไธŽๅˆ‡ๆขใ€‚
  • Minimal ็‰ˆ๏ผšไธ้ข„็ฝฎ Python/Node๏ผŒไป…ๅ†…็ฝฎ Mise ๅบ•ๅบง๏ผŒ็”ฑ็”จๆˆทๆŒ‰้œ€ๅฎ‰่ฃ…ใ€‚

ไพ่ต–็ฎก็†ๆ”ฏๆŒ

็ณป็ปŸๅ†…็ฝฎไบ†้ซ˜ๅบฆ้›†ๆˆ็š„่ทจ่ฏญ่จ€ไพ่ต–็ฎก็†ๅ™จ๏ผŒๆ”ฏๆŒ่‡ชๅŠจๅŒ–ๅฎ‰่ฃ…ๅ’Œ็ฎก็†ไปฅไธ‹่ฏญ่จ€็š„ไพ่ต–้กน๏ผŒๅนถ็กฎไฟๅœจๅฎนๅ™จๅ†…ๅ…จๅฑ€ๅฏ็”จ๏ผš

| ่ฏญ่จ€ | ๅŒ…็ฎก็†ๅ™จ | ๅŠŸ่ƒฝ่ฏดๆ˜Ž | | :--- | :--- | :--- | | Python | pip | ่‡ชๅŠจไฝฟ็”จๅ†…็ฝฎ่™šๆ‹Ÿ็Žฏๅขƒ๏ผŒๆ”ฏๆŒๆธ…ๅŽๆบ | | Node.js | npm | ๅ…จๅฑ€ๅฎ‰่ฃ…ๆจกๅผ๏ผŒ่‡ชๅŠจ้…็ฝฎ npmmirror ้•œๅƒ | | Go | go install | ้€š่ฟ‡ go install ๅฎ‰่ฃ…ไบŒ่ฟ›ๅˆถๅทฅๅ…ท | | Rust | cargo | ้€š่ฟ‡ cargo install ๅฎ‰่ฃ… Rust ไพ่ต– | | Ruby | gem | ๆ”ฏๆŒ gem install ๆœฌๅœฐๅฎ‰่ฃ… | | Bun | bun | ๆ”ฏๆŒ bun add -g ๅ…จๅฑ€ๆจกๅผ | | PHP | composer | ๆ”ฏๆŒ composer global require | | Deno | deno | ๆ”ฏๆŒ deno install -g | | .NET | dotnet | ๆ”ฏๆŒ dotnet tool install -g | | Elixir/Erlang | mix | ๆ”ฏๆŒ mix archive.install | | Lua | luarocks | ้€š่ฟ‡ luarocks ็ฎก็† Lua ๅŒ… | | Nim | nimble | ๆ”ฏๆŒ nimble install | | Dart/Flutter | pub | ๆ”ฏๆŒ pub global activate | | Perl | cpanm | ็ฎ€ๅ•็š„ cpanm ๅฎ‰่ฃ…ๆ”ฏๆŒ | | Crystal | shards | shards ้กน็›ฎ็บงๅˆซๆˆ–ๅทฅๅ…ทๅฎ‰่ฃ… |

ไฝฟ็”จๆ–นๆณ•

  1. ๅฎ‰่ฃ…็Žฏๅขƒ๏ผš่ฟ›ๅ…ฅใ€Œ็ผ–็จ‹่ฏญ่จ€ใ€้กต้ข๏ผŒไฝฟ็”จ mise ไธ€้”ฎๅฎ‰่ฃ…ๆ‰€้œ€็š„่ฏญ่จ€ๅŠ็‰ˆๆœฌใ€‚
  2. ไพ่ต–็ฎก็†๏ผšๅœจๅทฒๅฎ‰่ฃ…ๅˆ—่กจ็‚นๅ‡ปใ€Œไพ่ต–็ฎก็†ใ€๏ผŒ่พ“ๅ…ฅๅ็งฐ๏ผˆๅฏ้€‰็‰ˆๆœฌ๏ผ‰ๅณๅฏ่‡ชๅŠจๅœจๅฏนๅบ”็Žฏๅขƒๅ†…ๅฎŒๆˆๅฎ‰่ฃ…ใ€‚
  3. ้š”็ฆปๆœบๅˆถ๏ผš็ณป็ปŸๅŸบไบŽ mise exec ๅฎž็Žฐไบ†ๅฎŒๅ–„็š„็Žฏๅขƒ้š”็ฆป๏ผŒไธๅŒ็‰ˆๆœฌ็š„ไพ่ต–ๅŒ…ไบ’ไธๅ†ฒ็ชใ€‚

ๆ•ˆๆžœๅ›พ

!baihu-display.gif

ๅฟซ้€Ÿ้ƒจ็ฝฒ

้กน็›ฎๆไพ›ๅคš็งๅŸบ็ก€้•œๅƒ๏ผŒๅฏๆ นๆฎๅ…ทไฝ“็Žฏๅขƒ้€‰ๆ‹ฉ๏ผš

| ๆ ‡็ญพ (Tag) | ๅŸบ็ก€้•œๅƒ | ่ฏดๆ˜Ž | | :--- | :--- | :--- | | latest | Debian 12 | ้ป˜่ฎคๆŽจ่๏ผš้›†ๆˆ Python 3.13 ไธŽ Node.js 23๏ผŒๅผ€็ฎฑๅณ็”จ | | latest-debian13 | Debian 13 | ๅฐ้ฒœ็‰ˆๆœฌ๏ผŒๅŸบไบŽ Debian Trixie | | latest-minimal | Debian 13 | ๆœ€ๅฐๅŒ–็‰ˆ๏ผšไธ้ข„็ฝฎ่ฏญ่จ€็Žฏๅขƒ๏ผŒ็”ฑ็”จๆˆท้€š่ฟ‡้ขๆฟ่‡ชไธปๆŒ‰้œ€ๅฎ‰่ฃ… |

[!TIP]
ไธ‹ๆ–น้ƒจ็ฝฒ็คบไพ‹้ป˜่ฎคไฝฟ็”จ latest ๆ ‡็ญพ๏ผŒๅฆ‚้œ€ๆข็”จ Debian 13 ็‰ˆ๏ผŒๅช้œ€ๅฐ† latest ๆ›ฟๆขไธบ latest-debian13 ๅณๅฏใ€‚
[!WARNING]
ๆžถๆž„ๅ‡็บง็ ดๅๆ€งๅ˜ๆ›ด
ๆœฌ็‰ˆๆœฌ๏ผˆ2026.02.13+๏ผ‰ๅฏนๅบ•ๅฑ‚่ฟ่กŒๆ—ถ็Žฏๅขƒ่ฟ›่กŒไบ†ๅฝปๅบ•้‡ๆž„๏ผŒๅผƒ็”จไบ†ๅŽŸๆœ‰็š„้™ๆ€ Python/Node ็Žฏๅขƒ๏ผŒ่ฝฌไธบไฝฟ็”จ Mise ่ฟ›่กŒๅŠจๆ€็‰ˆๆœฌ็ฎก็†ใ€‚
1. ไธๅ†ๆไพ› Alpine ้•œๅƒ๏ผš็”ฑไบŽ glibc ๅ…ผๅฎนๆ€ง้—ฎ้ข˜๏ผŒMise ๆ— ๆณ•ๅœจ Alpine ไธŠๅฎŒ็พŽ่ฟ่กŒ๏ผŒๅ› ๆญคๆš‚ๆ—ถๅ–ๆถˆ Alpine ้•œๅƒๆ”ฏๆŒใ€‚
2. ็Žฏๅขƒๆ•ฐๆฎไธๅ…ผๅฎน๏ผšๅฆ‚ๆžœๆ‚จๆ˜ฏไปŽๆ—ง็‰ˆๆœฌๅ‡็บงไธŠๆฅ๏ผŒๅŽŸๆœ‰็š„ Python/Node ็Žฏๅขƒๆ•ฐๆฎๅฐ†ๆ— ๆณ•่ฟ็งปใ€‚ๅ‡็บงๅŽๆ‚จ้œ€่ฆ๏ผš
- ๆธ…็ฉบๆˆ–ๅค‡ไปฝๅŽŸๆœ‰็š„ envs/ ๆŒ‚่ฝฝ็›ฎๅฝ•
- ๅฏๅŠจๆ–ฐๅฎนๅ™จ๏ผŒ่ฎฉ็ณป็ปŸ่‡ชๅŠจๅˆๅง‹ๅŒ–ๆ–ฐ็š„ Mise ็Žฏๅขƒ
- ๅœจ้ขๆฟไธญ้‡ๆ–ฐๅฎ‰่ฃ…ๆ‰€้œ€็š„่ฏญ่จ€ๅ’Œไพ่ต–

ๆ–นๅผไธ€๏ผš็Žฏๅขƒๅ˜้‡้ƒจ็ฝฒ๏ผˆๆŽจ่๏ผ‰

้€š่ฟ‡็Žฏๅขƒๅ˜้‡ๆŒ‡ๅฎš้…็ฝฎ๏ผŒ็ฎ€ๅ•็ตๆดป๏ผŒ้€‚ๅˆๅฎนๅ™จ็ผ–ๆŽ’ๅœบๆ™ฏใ€‚

ไฝฟ็”จ SQLite๏ผˆ้ป˜่ฎค๏ผ‰๏ผš

docker run -d \
  --name baihu \
  -p 8052:8052 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/envs:/app/envs \
  -e TZ=Asia/Shanghai \
  -e BH_SERVER_PORT=8052 \
  -e BH_SERVER_HOST=0.0.0.0 \
  -e BH_DB_TYPE=sqlite \
  -e BH_DB_PATH=/app/data/baihu.db \
  -e BH_DB_TABLE_PREFIX=baihu_ \
  -e BAIHU_SECRET_KEY=your_secret_key_here \
  --restart unless-stopped \
  ghcr.io/engigu/baihu:latest
ๆ็คบ๏ผšๅฆ‚้œ€้€š่ฟ‡ๅๅ‘ไปฃ็†้ƒจ็ฝฒๅœจๅญ่ทฏๅพ„๏ผˆๅฆ‚ /baihu๏ผ‰๏ผŒๆทปๅŠ ็Žฏๅขƒๅ˜้‡๏ผš
> -e BH_SERVER_URL_PREFIX=/baihu
>
้…็ฝฎๅŽ่ฎฟ้—ฎๅœฐๅ€ไธบ http://your-domain.com/baihu/๏ผŒ่ฏฆ่งไธ‹ๆ–นใ€ŒURL ๅ‰็ผ€้…็ฝฎใ€่ฏดๆ˜Žใ€‚

Docker Compose๏ผˆSQLite๏ผ‰๏ผš

services:
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BH_SERVER_PORT=8052
      - BH_SERVER_HOST=0.0.0.0
      - BH_DB_TYPE=sqlite
      - BH_DB_PATH=/app/data/baihu.db
      - BH_DB_TABLE_PREFIX=baihu_
      - BAIHU_SECRET_KEY=your_secret_key_here
      # - BH_SERVER_URL_PREFIX=/baihu  # ๅฏ้€‰๏ผš้…็ฝฎ URL ๅ‰็ผ€็”จไบŽๅๅ‘ไปฃ็†
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped

ไฝฟ็”จ MySQL๏ผš

docker run -d \
  --name baihu \
  -p 8052:8052 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/envs:/app/envs \
  -e TZ=Asia/Shanghai \
  -e BH_SERVER_PORT=8052 \
  -e BH_SERVER_HOST=0.0.0.0 \
  -e BH_DB_TYPE=mysql \
  -e BH_DB_HOST=mysql-server \
  -e BH_DB_PORT=3306 \
  -e BH_DB_USER=root \
  -e BH_DB_PASSWORD=your_password \
  -e BH_DB_NAME=baihu \
  -e BH_DB_TABLE_PREFIX=baihu_ \
  -e BAIHU_SECRET_KEY=your_secret_key_here \
  --restart unless-stopped \
  ghcr.io/engigu/baihu:latest
ๆ็คบ๏ผšๅฆ‚้œ€้…็ฝฎ URL ๅ‰็ผ€๏ผŒๆทปๅŠ  -e BH_SERVER_URL_PREFIX=/baihu

Docker Compose๏ผˆMySQL๏ผ‰๏ผš

services:
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BH_SERVER_PORT=8052
      - BH_SERVER_HOST=0.0.0.0
      # - BH_SERVER_URL_PREFIX=/baihu  # ๅฏ้€‰๏ผš้…็ฝฎ URL ๅ‰็ผ€
      - BH_DB_TYPE=mysql
      - BH_DB_HOST=mysql-server
      - BH_DB_PORT=3306
      - BH_DB_USER=root
      - BH_DB_PASSWORD=your_password
      - BH_DB_NAME=baihu
      - BH_DB_TABLE_PREFIX=baihu_
      - BAIHU_SECRET_KEY=your_secret_key_here
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped

ๆ–นๅผไบŒ๏ผš้…็ฝฎๆ–‡ไปถ้ƒจ็ฝฒ

้€š่ฟ‡ๆŒ‚่ฝฝ config.ini ้…็ฝฎๆ–‡ไปถๆฅ็ฎก็†้…็ฝฎ๏ผŒ้€‚ๅˆ้œ€่ฆๆŒไน…ๅŒ–้…็ฝฎ็š„ๅœบๆ™ฏใ€‚

Docker ๅ‘ฝไปค๏ผš

docker run -d \
  --name baihu \
  -p 8052:8052 \
  -v $(pwd)/data:/app/data \
  -v $(pwd)/configs:/app/configs \
  -v $(pwd)/envs:/app/envs \
  -e TZ=Asia/Shanghai \
  -e BAIHU_SECRET_KEY=your_secret_key_here \
  --restart unless-stopped \
  ghcr.io/engigu/baihu:latest

Docker Compose๏ผš

services:
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./configs:/app/configs
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BAIHU_SECRET_KEY=your_secret_key_here
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped

้ฆ–ๆฌกไฝฟ็”จ้œ€่ฆๅคๅˆถ configs/config.example.ini ไธบ configs/config.ini๏ผŒ็„ถๅŽๆ นๆฎ้œ€่ฆไฟฎๆ”น้…็ฝฎใ€‚

้…็ฝฎๆ–‡ไปถ็คบไพ‹๏ผˆconfigs/config.ini๏ผ‰๏ผš

[server]
port = 8052
host = 0.0.0.0

ๅฏ้€‰๏ผš้…็ฝฎ URL ๅ‰็ผ€็”จไบŽๅๅ‘ไปฃ็†๏ผŒไพ‹ๅฆ‚ /baihu

url_prefix =

ๅ…จๅฑ€ไผš่ฏ Cookie ๅ็งฐ

cookie_name = BHToken

[database] type = sqlite path = ./data/baihu.db table_prefix = baihu_

ๆ–นๅผไธ‰๏ผš้…ๅˆ็‹ฌ็ซ‹ไธญๅฟƒๅŒ–ๆถˆๆฏๆœๅŠก้ƒจ็ฝฒ๏ผˆ้žๅฟ…้œ€/ไป…ไพ›ๅ‚่€ƒ๏ผ‰

[!TIP]
ๅŽŸ็”Ÿๅ†…็ฝฎๆŽจ้€๏ผš่‡ช็™ฝ่™Ž้ขๆฟๆœ€ๆ–ฐ็‰ˆๆœฌ่ตท๏ผŒ็ณป็ปŸๅทฒๅŽŸ็”Ÿๅ†…็ฝฎไบ†ๅฎŒๆ•ดๅผบๅคง็š„ๆถˆๆฏๆŽจ้€ๅŠŸ่ƒฝ๏ผๆ‚จๅฏ็›ดๆŽฅๅœจ้ขๆฟใ€ŒๆถˆๆฏๆŽจ้€ใ€่œๅ•ๅ†…็ป‘ๅฎšๅไฝ™็งไธปๆตๆธ ้“ๅ’Œ็ณป็ปŸ้€š็Ÿฅไบ‹ไปถ๏ผŒๅŽŸ้…ๅˆๅค–็ฝฎ็š„ Message-Push-Nest ้ƒจ็ฝฒๆ–นๅผๅทฒไธๅ†ๆ˜ฏไฝฟ็”จ้ขๆฟ็š„ๅŸบ็ก€่ฆๆฑ‚ใ€‚ๆ‚จๅฏ้šๆ—ถ็›ดๆŽฅไฝฟ็”จไธŠๆ–น็š„็ฌฌไธ€็ง็ฎ€ๅ•ๅ‘ฝไปคๅผ€็ฎฑๅณ็”จไฝ“้ชŒใ€‚
ไปฅไธ‹ใ€Œ็™ฝ่™Ž + ๆถˆๆฏ่šๅˆๆœๅŠกใ€็š„่”ๅˆ้ƒจ็ฝฒๅ†…ๅฎน่ขซไบˆไปฅไฟ็•™๏ผŒไธ“ไธบไป็„ถ้œ€่ฆใ€ŒไธญๅฟƒๅŒ–้€š็Ÿฅ็ฝ‘ๅ…ณใ€็š„้‡ๅบฆไผไธš่งฃ่€ฆ็”จๆˆทไฝœไธบๅ‚่€ƒ๏ผš

็™ฝ่™Ž้ขๆฟ้€š่ฟ‡็ณป็ปŸ้›†ๆˆไนŸๅฏ่ฝปๆพ่ฟžๆŽฅ็‹ฌ็ซ‹็š„ๆถˆๆฏ่šๅˆๆœๅŠกใ€‚่ฟ™้‡ŒๆŽจ่ไฝฟ็”จ Message-Push-Nest ไฝœไธบๅˆ†ๅธƒๅผ็š„็ปŸไธ€ๆถˆๆฏๆŽจ้€ไธญๅฟƒใ€‚

ไฝฟ็”จ SQLite

ๅˆ›ๅปบ docker-compose.yml ๆ–‡ไปถ๏ผš

services:
  # ็™ฝ่™Ž้ขๆฟ
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BH_SERVER_PORT=8052
      - BH_SERVER_HOST=0.0.0.0
      - BH_DB_TYPE=sqlite
      - BH_DB_PATH=/app/data/baihu.db
      - BH_DB_TABLE_PREFIX=baihu_
      - BAIHU_SECRET_KEY=your_secret_key_here
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped
    depends_on:
      - message-nest

# ๆถˆๆฏๆŽจ้€ๆœๅŠก message-nest: image: ghcr.io/engigu/message-nest:latest # ๆˆ–ไฝฟ็”จ Docker Hub ้•œๅƒ # image: engigu/message-nest:latest container_name: message-nest ports: - "8053:8000" environment: - TZ=Asia/Shanghai - DB_TYPE=sqlite volumes: - ./message-nest-data:/app/data logging: driver: json-file options: max-size: "10m" max-file: "3" restart: unless-stopped

ไฝฟ็”จ MySQL๏ผˆ้€‚ๅˆ็”Ÿไบง็Žฏๅขƒ๏ผŒ้œ€่ฆๅทฒๆœ‰ MySQL ๆœๅŠก๏ผ‰

ๅˆ›ๅปบ docker-compose.yml ๆ–‡ไปถ๏ผš

services:
  # ็™ฝ่™Ž้ขๆฟ
  baihu:
    image: ghcr.io/engigu/baihu:latest
    container_name: baihu
    ports:
      - "8052:8052"
    volumes:
      - ./data:/app/data
      - ./envs:/app/envs
    environment:
      - TZ=Asia/Shanghai
      - BH_SERVER_PORT=8052
      - BH_SERVER_HOST=0.0.0.0
      - BH_DB_TYPE=mysql
      - BH_DB_HOST=192.168.1.100  # ไฟฎๆ”นไธบไฝ ็š„ MySQL ๅœฐๅ€
      - BH_DB_PORT=3306
      - BH_DB_USER=root
      - BH_DB_PASSWORD=your_password  # ไฟฎๆ”นไธบไฝ ็š„ MySQL ๅฏ†็ 
      - BH_DB_NAME=baihu
      - BH_DB_TABLE_PREFIX=baihu_
      - BAIHU_SECRET_KEY=your_secret_key_here
    logging:
      driver: json-file
      options:
        max-size: "10m"
        max-file: "3"
    restart: unless-stopped
    depends_on:
      - message-nest

# ๆถˆๆฏๆŽจ้€ๆœๅŠก message-nest: image: ghcr.io/engigu/message-nest:latest # ๆˆ–ไฝฟ็”จ Docker Hub ้•œๅƒ # image: engigu/message-nest:latest container_name: message-nest ports: - "8053:8000" environment: - TZ=Asia/Shanghai - DB_TYPE=mysql - MYSQL_HOST=192.168.1.100 # ไฟฎๆ”นไธบไฝ ็š„ MySQL ๅœฐๅ€ - MYSQL_PORT=3306 - MYSQL_USER=root - MYSQL_PASSWORD=your_password # ไฟฎๆ”นไธบไฝ ็š„ MySQL ๅฏ†็  - MYSQL_DB=message_nest - MYSQL_TABLE_PREFIX=message_ logging: driver: json-file options: max-size: "10m" max-file: "3" restart: unless-stopped

ๅฏๅŠจๆœๅŠก๏ผš

docker-compose up -d

่ฎฟ้—ฎๅœฐๅ€๏ผš

  • ็™ฝ่™Ž้ขๆฟ๏ผšhttp://localhost:8052
  • ๆถˆๆฏๆŽจ้€ๆœๅŠก๏ผšhttp://localhost:8053
ๆณจๆ„๏ผšไฝฟ็”จ MySQL ๆ–นๅผๆ—ถ๏ผŒ่ฏทๅ…ˆๅœจ MySQL ไธญๅˆ›ๅปบ baihu ๅ’Œ message_nest ไธคไธชๆ•ฐๆฎๅบ“๏ผŒๅนถไฟฎๆ”น้…็ฝฎไธญ็š„ MySQL ๅœฐๅ€ๅ’Œๅฏ†็ ใ€‚ไนŸๅฏไปฅไฝฟ็”จๅŒไธ€ไธชๆ•ฐๆฎๅบ“ใ€‚

ๅœจไปปๅŠกไธญไฝฟ็”จๆŽจ้€

ๅฆ‚ไปŠไฝ ๆ— ้œ€ไพ่ต–ไปปไฝ•ๅค–้ƒจๆœๅŠก๏ผŒๅฏไปฅ้€š่ฟ‡้ขๆฟ่‡ช่บซๅฎŒๆˆ๏ผš

  1. ่ฟ›ๅ…ฅ็™ฝ่™Ž้ขๆฟใ€ŒๆถˆๆฏๆŽจ้€ใ€ๆจกๅ—๏ผŒๆ–ฐๅปบไฝ ้œ€่ฆ้€š็Ÿฅ็š„ๆธ ้“ใ€‚
  2. ๅฏไปฅๅœจใ€Œไบ‹ไปถ็ป‘ๅฎšใ€ไธญ็›ดๆŽฅ่ฎพๅฎš่‡ชๅŠจๅŒ–็ณป็ปŸ้€š็Ÿฅ๏ผˆๅฆ‚็›‘ๆŽงไปปๅŠกๅคฑ่ดฅๆˆ–่„šๆœฌๅผ‚ๅธธไธญๆญขๆ—ถ่ฟ›่กŒ่‡ชๅŠจๆ้†’๏ผ‰ใ€‚
  3. ๅฆ‚้œ€ๅœจ่‡ชๅทฑ็š„่„šๆœฌ้€ป่พ‘ๅ†…ๅŠจๆ€ๆŽจ้€๏ผŒๅฏไปฅ็‚นๅ‡ปใ€Œ่„šๆœฌ่ฐƒ็”จใ€้กต้ข๏ผŒ็ซ‹ๅˆป่Žทๅ–ไธ€้”ฎ่ฐƒ็”จ็š„ Shell / API ไปฃ็ ๏ผŒๅ†…ๅตŒ่ฟ›ไฝ ็š„ไธšๅŠก้€ป่พ‘ไธญๅณๅฏๅฎŒๆˆๆŽจไฟก๏ผ
(ๅฆ‚็ปง็ปญไฝฟ็”จ Message-Push-Nest๏ผŒไฝ ๅฏไปฅ้€š่ฟ‡ๅ…ถ็ฎก็†็•Œ้ขไธญใ€Œๆถˆๆฏๆจกๆฟใ€็š„ใ€ŒๅคๅˆถๆŽจ้€ไปฃ็ ใ€ๆๅ–ๆ—งๆœ‰็‰ˆ้›†ๆˆๆ ทไพ‹ใ€‚)

!1768143124572.png

ๆ็คบ๏ผšๅœจ Docker Compose ้ƒจ็ฝฒ็š„็Žฏๅขƒไธญ๏ผŒๆŽจ้€ๆœๅŠกๅœฐๅ€ไฝฟ็”จ http://message-nest:8000๏ผˆๅฎนๅ™จๅ†…้ƒจ้€šไฟก๏ผ‰ใ€‚ๅฆ‚ๆžœๆ˜ฏ็‹ฌ็ซ‹้ƒจ็ฝฒ๏ผŒ่ฏทไฝฟ็”จๅฎž้™…็š„ๆœๅŠกๅœฐๅ€ใ€‚

็Žฏๅขƒๅ˜้‡ไผ˜ๅ…ˆ็บง้ซ˜ไบŽ้…็ฝฎๆ–‡ไปถ๏ผŒไธค็งๆ–นๅผๅฏไปฅๆททๅˆไฝฟ็”จใ€‚

ๆ–นๅผๅ››๏ผšNginx ๅๅ‘ไปฃ็†้ƒจ็ฝฒ๏ผˆHTTPS๏ผ‰

ๅฆ‚ๆžœ้œ€่ฆ้€š่ฟ‡ๅŸŸๅๅ’Œ HTTPS ่ฎฟ้—ฎ็™ฝ่™Ž้ขๆฟ๏ผŒๅฏไปฅไฝฟ็”จ Nginx ไฝœไธบๅๅ‘ไปฃ็†ใ€‚

Nginx ้…็ฝฎ็คบไพ‹๏ผš

# ๅœจ http ๅ—ไธญๆทปๅŠ  WebSocket ๅ‡็บง้…็ฝฎ
map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}

server { listen 443 ssl http2; server_name example.com; ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; access_log /var/log/nginx/example.access.log; error_log /var/log/nginx/example.error.log warn; location / { proxy_pass http://172.17.0.1:8052; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto https; # WebSocket ๆ”ฏๆŒ๏ผˆ็ปˆ็ซฏๅŠŸ่ƒฝ้œ€่ฆ๏ผ‰ proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; proxy_buffering off; proxy_read_timeout 60s; } }

HTTP ่‡ชๅŠจ่ทณ่ฝฌ HTTPS๏ผˆๅฏ้€‰๏ผ‰

server { listen 80; server_name example.com; return 301 https://$server_name$request_uri; }

้…็ฝฎ่ฏดๆ˜Ž๏ผš

  1. ๅฐ† example.com ๆ›ฟๆขไธบไฝ ็š„ๅŸŸๅ
  2. ไฟฎๆ”น SSL ่ฏไนฆ่ทฏๅพ„ไธบไฝ ็š„ๅฎž้™…่ทฏๅพ„
  3. 172.17.0.1:8052 ๆ˜ฏ Docker ๅฎนๅ™จ็š„ๅฎฟไธปๆœบๅœฐๅ€ๅ’Œ็ซฏๅฃ๏ผŒๆ นๆฎๅฎž้™…ๆƒ…ๅ†ตไฟฎๆ”น
  4. WebSocket ้…็ฝฎๆ˜ฏๅฟ…้œ€็š„๏ผŒๅฆๅˆ™ๅœจ็บฟ็ปˆ็ซฏๅŠŸ่ƒฝๆ— ๆณ•ไฝฟ็”จ

้‡่ฝฝ Nginx ้…็ฝฎ๏ผš

nginx -t && nginx -s reload

่ฎฟ้—ฎ้ขๆฟ

ๅฏๅŠจๅŽ่ฎฟ้—ฎ๏ผšhttp://localhost:8052

้ป˜่ฎค่ดฆๅท๏ผš ็”จๆˆทๅ admin๏ผŒๅฏ†็ ่งๅฏๅŠจๆ—ฅๅฟ—๏ผˆ้ฆ–ๆฌกๅฏๅŠจไผš่‡ชๅŠจ็”Ÿๆˆ 12 ไฝ้šๆœบๅฏ†็ ๅนถๆ‰“ๅฐๅœจๆ—ฅๅฟ—ไธญ๏ผ‰

[!IMPORTANT]
ๅ‡บไบŽๅฎ‰ๅ…จๆ€ง่€ƒ่™‘๏ผŒ็ณป็ปŸไธๅ†ไฝฟ็”จๅ›บๅฎš้ป˜่ฎคๅฏ†็ ใ€‚่ฏทๅœจๅฎนๅ™จๅฏๅŠจๆ—ฅๅฟ—ไธญๆœ็ดข ็ฎก็†ๅ‘˜่ดฆๅทๅˆ›ๅปบๆˆๅŠŸ ๆ‰พๅˆฐๆ‚จ็š„้šๆœบๅฏ†็ ๏ผŒๅนถ็™ปๅฝ•ๅŽๅŠๆ—ถไฟฎๆ”นใ€‚

ๅ‘ฝไปค่กŒๅทฅๅ…ท (CLI)

็™ฝ่™Ž้ขๆฟๅœจ็Žฏๅขƒๅ†…ๅ†…็ฝฎไบ†ๅŒๅ็š„ baihu ๅ‘ฝไปค่กŒๅทฅๅ…ทใ€‚ๅฆ‚ๆžœๆ‚จๅœจ็ปˆ็ซฏๅ†…้œ€่ฆๆ‰ง่กŒ็ณป็ปŸ็บงๅˆซ็š„ๆ“ไฝœ๏ผŒๅฏไปฅไฝฟ็”จไปฅไธ‹ๅ‘ฝไปค๏ผš

baihu server             # ไปฅๅ‰ๅฐๆ–นๅผๅฏๅŠจ้ขๆฟ็š„ๅŽๅฐ่ฟ›็จ‹ๆœๅŠก๏ผˆ้ขๆฟๅฏๅŠจๆŒ‡ไปค๏ผ‰
baihu reposync           # ไพ›ๅฎšๆ—ถไปปๅŠก่ฐƒ็”จ๏ผŒๅฐ†่ฟœ็จ‹ Git ไป“ๅบ“็š„้ซ˜็บง็‰นๆ€งๅŒๆญฅๅˆฐๆœฌๅœฐ็›ฎๅฝ•ไธญ
baihu resetpwd           # ไบคไบ’ๅผ้‡็ฝฎ็ณป็ปŸ admin ่ดฆๅทๅฏ†็ ๏ผˆๅฏ†็ ไธขๅคฑๆ—ถๅฏ้€š่ฟ‡่ฟ›ๅ…ฅ็ปˆ็ซฏ้‡็ฝฎ๏ผ‰
baihu restore <file>     # ไฝฟ็”จๆœฌๅœฐ็š„ .zip ๅค‡ไปฝๅŽ‹็ผฉๅŒ…ๆ–‡ไปถ๏ผŒไธ€ๆกๅ‘ฝไปค็›ดๆŽฅๅ…จ้‡ๆขๅค็ณป็ปŸๆ•ฐๆฎ

็ปˆ็ซฏๆ‰ง่กŒ baihu ไผš็›ดๆŽฅๆ‰“ๅฐๅ†…็ฝฎๆ”ฏๆŒ็š„้ซ˜็บงๅ‘ฝไปคๅธฎๅŠฉๅˆ—่กจใ€‚

ๆ•ฐๆฎ็›ฎๅฝ•

./
โ”œโ”€โ”€ baihu                 # ๅฏๆ‰ง่กŒๆ–‡ไปถ
โ”œโ”€โ”€ data/                 # ๆ•ฐๆฎ็›ฎๅฝ•๏ผˆ่‡ชๅŠจๅˆ›ๅปบ๏ผ‰
โ”‚   โ”œโ”€โ”€ baihu.db          # SQLite ๆ•ฐๆฎๅบ“
โ”‚   โ””โ”€โ”€ scripts/          # ่„šๆœฌๆ–‡ไปถๅญ˜ๅ‚จ
โ”œโ”€โ”€ configs/
โ”‚   โ””โ”€โ”€ config.ini        # ้…็ฝฎๆ–‡ไปถ๏ผˆ่‡ชๅŠจๅˆ›ๅปบ๏ผ‰
โ””โ”€โ”€ envs/                 # ่ฟ่กŒ็ŽฏๅขƒๆŒ‚่ฝฝ็›ฎๅฝ•๏ผˆ่‡ชๅŠจๅˆ›ๅปบ๏ผ‰
    โ””โ”€โ”€ mise/             # Mise ่ฟ่กŒๆ—ถๆ ธๅฟƒ็›ฎๅฝ• (ๅŒ…ๅซๆ‰€ๆœ‰่ฏญ่จ€็ŽฏๅขƒๅŠไพ่ต–)

Docker ๅฏๅŠจๆต็จ‹

ๅฎนๅ™จๅฏๅŠจๆ—ถ docker-entrypoint.sh ไผšๆ‰ง่กŒไปฅไธ‹ๆ“ไฝœ๏ผš

  1. ็›ฎๅฝ•ๅฐฑ็ปช๏ผšๆฃ€ๆŸฅๅนถๅˆ›ๅปบ /app/dataใ€/app/configsใ€/app/envs ็ญ‰ๆ ธๅฟƒ็›ฎๅฝ•ใ€‚
  2. Mise ็ŽฏๅขƒๅŒๆญฅ๏ผš่‡ชๅŠจไปŽ้•œๅƒๅ†…็ฝฎๅŸบ็ก€็ŽฏๅขƒๅŒๆญฅๅˆๅง‹ๅŒ–ๆ–‡ไปถ่‡ณ /app/envs/mise๏ผŒ็กฎไฟๆŒไน…ๅŒ–ๆŒ‚่ฝฝๅŽ่ฟ่กŒๆ—ถไพ็„ถๅฏ็”จใ€‚
  3. ่ฟ่กŒๆ—ถๆฟ€ๆดป๏ผš
- ่‡ชๅŠจๆณจๅ…ฅ MISE_DATA_DIR ็ญ‰็Žฏๅขƒๅ˜้‡๏ผŒ็กฎไฟ่ฟ่กŒๆ—ถๆ•ฐๆฎๆŒ‡ๅ‘ๆŒไน…ๅŒ–็›ฎๅฝ•ใ€‚ - ๅฐ† mise shims ่ทฏๅพ„ๅŠ ๅ…ฅ็ณป็ปŸ PATH๏ผŒๅฎž็Žฐ Pythonใ€Node.js ็ญ‰ๅคš็‰ˆๆœฌ็Žฏๅขƒ็š„ๅ…จๅฑ€ๆ— ๆ„Ÿ่ฐƒ็”จใ€‚
  1. ไพ่ต–็ฎก็†้ข„่ฎพ๏ผš้ป˜่ฎค้…็ฝฎ Python ๆธ…ๅŽๆบ๏ผˆPIP๏ผ‰้•œๅƒ๏ผŒไผ˜ๅŒ– Node.js ้ป˜่ฎคๅ†…ๅญ˜ไธŠ้™ใ€‚
  2. ๅฏๅŠจๅบ”็”จ๏ผš่ฟ่กŒ baihu ้ขๆฟไธป่ฟ›็จ‹ใ€‚
ๆ็คบ๏ผš้€š่ฟ‡ๆŒ‚่ฝฝ ./envs:/app/envs๏ผŒๆ‚จ้€š่ฟ‡้ขๆฟๅฎ‰่ฃ…็š„ๆ‰€ๆœ‰็ผ–็จ‹่ฏญ่จ€่ฟ่กŒๆ—ถไปฅๅŠ้€š่ฟ‡ใ€Œไพ่ต–็ฎก็†ใ€ๅฎ‰่ฃ…็š„ๆ‰€ๆœ‰็ฌฌไธ‰ๆ–นๅบ“้ƒฝไผšๆฐธไน…ไฟ็•™๏ผŒๅฎนๅ™จๅ‡็บงๆˆ–้‡ๅฏๅŽๆ— ้œ€้‡ๆ–ฐๅฎ‰่ฃ…ใ€‚

้…็ฝฎ่ฏดๆ˜Ž

็‚นๅ‡ปๅฑ•ๅผ€ๆŸฅ็œ‹้…็ฝฎ่ฏฆๆƒ…

้…็ฝฎๆ–‡ไปถ

้…็ฝฎๆ–‡ไปถ่ทฏๅพ„๏ผšconfigs/config.ini

[server]
port = 8052
host = 0.0.0.0
url_prefix =

[database] type = sqlite host = localhost port = 3306 user = root password = dbname = bh_panel table_prefix = baihu_

็Žฏๅขƒๅ˜้‡

ๆ‰€ๆœ‰้…็ฝฎ้กน้ƒฝๆ”ฏๆŒ้€š่ฟ‡็Žฏๅขƒๅ˜้‡่ฆ†็›–๏ผŒ็Žฏๅขƒๅ˜้‡ไผ˜ๅ…ˆ็บง้ซ˜ไบŽ้…็ฝฎๆ–‡ไปถ๏ผš

| ็Žฏๅขƒๅ˜้‡ | ๅฏนๅบ”้…็ฝฎ | ่ฏดๆ˜Ž | ้ป˜่ฎคๅ€ผ | |----------|----------|------|--------| | BH_SERVER_PORT | server.port | ๆœๅŠก็ซฏๅฃ | 8052 | | BH_SERVER_HOST | server.host | ็›‘ๅฌๅœฐๅ€ | 0.0.0.0 | | BH_SERVER_URL_PREFIX | server.url_prefix | URL ๅ‰็ผ€๏ผŒ็”จไบŽๅๅ‘ไปฃ็†ๅญ่ทฏๅพ„้ƒจ็ฝฒ | - | | BH_COOKIE_NAME | server.cookie_name | ๅ…จๅฑ€ไผš่ฏ Cookie ๅ็งฐ | BHToken | | BH_DB_TYPE | database.type | ๆ•ฐๆฎๅบ“็ฑปๅž‹ (sqlite/mysql) | sqlite | | BH_DB_HOST | database.host | ๆ•ฐๆฎๅบ“ๅœฐๅ€ | localhost | | BH_DB_PORT | database.port | ๆ•ฐๆฎๅบ“็ซฏๅฃ | 3306 | | BH_DB_USER | database.user | ๆ•ฐๆฎๅบ“็”จๆˆท | root | | BH_DB_PASSWORD | database.password | ๆ•ฐๆฎๅบ“ๅฏ†็  | - | | BH_DB_NAME | database.dbname | ๆ•ฐๆฎๅบ“ๅ็งฐ | bh_panel | | BH_DB_PATH | database.path | SQLite ๆ–‡ไปถ่ทฏๅพ„ | ./data/baihu.db | | BH_DB_TABLE_PREFIX | database.table_prefix | ่กจๅ‰็ผ€ | baihu_ | | BAIHU_SECRET_KEY | - | ็ณป็ปŸๅŠ ๅฏ†็ง˜้’ฅ๏ผŒ็”จไบŽๆœบๅฏ†ๅŠŸ่ƒฝ๏ผˆๆณจ๏ผšไป…ๆ”ฏๆŒ็Žฏๅขƒๅ˜้‡่ฎพ็ฝฎ๏ผŒไธๆ”ฏๆŒ้…็ฝฎๆ–‡ไปถ๏ผ‰ | - |

URL ๅ‰็ผ€้…็ฝฎ

ๅฆ‚ๆžœ้œ€่ฆ้€š่ฟ‡ๅๅ‘ไปฃ็†๏ผˆๅฆ‚ Nginx๏ผ‰ๅฐ†็™ฝ่™Ž้ขๆฟ้ƒจ็ฝฒๅœจๅญ่ทฏๅพ„ไธ‹๏ผŒๅฏไปฅ้…็ฝฎ URL ๅ‰็ผ€ใ€‚

้…็ฝฎๆ–นๅผ๏ผš

# ๆ–นๅผไธ€๏ผš้…็ฝฎๆ–‡ไปถ
[server]
url_prefix = /baihu

ๆ–นๅผไบŒ๏ผš็Žฏๅขƒๅ˜้‡

-e BH_SERVER_URL_PREFIX=/baihu

้…็ฝฎๆ•ˆๆžœ๏ผš

้…็ฝฎ url_prefix = /baihu ๅŽ๏ผŒ่ฎฟ้—ฎ่ทฏๅพ„ๅ˜ไธบ๏ผš

| ็ฑปๅž‹ | ่ทฏๅพ„็คบไพ‹ | |------|---------| | ๅ‰็ซฏ้กต้ข | http://your-domain.com/baihu/ | | ็™ปๅฝ•้กต้ข | http://your-domain.com/baihu/login | | ไปปๅŠก็ฎก็† | http://your-domain.com/baihu/tasks | | API ๆŽฅๅฃ | http://your-domain.com/baihu/api/v1/* | | WebSocket | ws://your-domain.com/baihu/api/v1/terminal/ws |

Nginx ๅๅ‘ไปฃ็†้…็ฝฎ็คบไพ‹๏ผš

location /baihu/ {
    proxy_pass http://localhost:8052/baihu/;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
}

MySQL ็คบไพ‹๏ผš

ๅ‚่€ƒไธŠๆ–นใ€Œๆ–นๅผไธ€๏ผš็Žฏๅขƒๅ˜้‡้ƒจ็ฝฒใ€ไธญ็š„ MySQL ้…็ฝฎ็คบไพ‹ใ€‚

่ฐƒๅบฆ่ฎพ็ฝฎ

็ณป็ปŸ้‡‡็”จ Worker Pool + ไปปๅŠก้˜Ÿๅˆ—็š„ๆžถๆž„ๆฅๆŽงๅˆถไปปๅŠกๆ‰ง่กŒ๏ผŒๅฏๅœจใ€Œ็ณป็ปŸ่ฎพ็ฝฎ > ่ฐƒๅบฆ่ฎพ็ฝฎใ€ไธญ้…็ฝฎ๏ผš

| ่ฎพ็ฝฎ้กน | ่ฏดๆ˜Ž | ้ป˜่ฎคๅ€ผ | |--------|------|--------| | Worker ๆ•ฐ้‡ | ๅนถๅ‘ๆ‰ง่กŒไปปๅŠก็š„ worker ๆ•ฐ้‡ | 4 | | ้˜Ÿๅˆ—ๅคงๅฐ | ไปปๅŠก้˜Ÿๅˆ—็ผ“ๅ†ฒๅŒบๅคงๅฐ | 100 | | ้€Ÿ็އ้—ด้š” | ไปปๅŠกๅฏๅŠจ้—ด้š”๏ผˆๆฏซ็ง’๏ผ‰ | 200 |

ไฟฎๆ”น่ฐƒๅบฆ่ฎพ็ฝฎๅŽ็ซ‹ๅณ็”Ÿๆ•ˆ๏ผŒๆ— ้œ€้‡ๅฏๆœๅŠกใ€‚

ๅ…่ดฃๅฃฐๆ˜Ž

[!CAUTION]
้‡่ฆๅ…่ดฃๆกๆฌพ๏ผš
็™ฝ่™Ž้ขๆฟ๏ผˆBaihu Panel๏ผ‰ไป…ไฝœไธบไธ€ไธช่ฝป้‡็บง็š„ไปปๅŠกๆ‰˜็ฎกไธŽ่ฐƒๅบฆๅนณๅฐ๏ผŒๆœฌ้กน็›ฎๅŠ็›ธๅ…ณไปฃ็ ไธๆไพ›ใ€ไธๅ†…็ฝฎไปปไฝ•ๅ…ทๆœ‰ๅฎž้™…ไธšๅŠก้€ป่พ‘็š„็ฌฌไธ‰ๆ–น่„šๆœฌใ€‚
ๅœจไฝฟ็”จๆœฌ้กน็›ฎๆ—ถ๏ผŒ่ฏทๆ‚จๅŠกๅฟ…็Ÿฅๆ‚‰ๅนถๅŒๆ„ไปฅไธ‹ๆกๆฌพ๏ผš
1. ่„šๆœฌๆฅๆบๅฎกๆ ธ๏ผš่ฏทๅ‹ฟ่ฝปๆ˜“ๆ‰ง่กŒไปปไฝ•ๆฅๆบไธๆ˜Žๆˆ–ไธๅฏไฟก็š„ๅค–้ƒจ่„šๆœฌใ€‚ๆ‰€ๆœ‰ๅœจๅนณๅฐไธŠ่ฟ่กŒ็š„่„šๆœฌๅŠไปฃ็ ๅ‡้œ€็”ฑ็”จๆˆท่‡ช่กŒๆทปๅŠ ๆˆ–้…็ฝฎ๏ผŒ็”จๆˆทๅฟ…้กปๅœจๆ‰ง่กŒๅ‰ไป”็ป†้˜…่ฏปๅนถๅฎกๆ ธๅ…ถๆบไปฃ็ ๏ผŒ็กฎไฟๅ…ถๅฎ‰ๅ…จๆ€งใ€‚
2. ๅฎ‰ๅ…จ่ดฃไปป่‡ช่ดŸ๏ผšๆœฌ้กน็›ฎไฝœไธบๅŸบ็ก€่ฐƒๅบฆๅทฅๅ…ท๏ผŒๆ— ๆณ•ไธ”ไธไฟ่ฏไปปไฝ•่ขซๆ‰ง่กŒไปปๅŠก็š„ๅฎ‰ๅ…จๆ€งใ€‚ๅ› ่ฟ่กŒไธๅฎ‰ๅ…จใ€่ฟ่ง„่„šๆœฌๅธฆๆฅ็š„ไธ€ๅˆ‡ๆ•ฐๆฎๆณ„้œฒใ€็ณป็ปŸๆŸๅใ€่ดขไบงๆŸๅคฑๅŠๆณ•ๅพ‹่ดฃไปป็ญ‰ๅŽๆžœ๏ผŒๅ‡็”ฑไฝฟ็”จ่€…่‡ช่กŒๆ‰ฟๆ‹…๏ผŒไธŽๆœฌ้กน็›ฎๅŠๅผ€ๅ‘่€…ๆ— ๅ…ณใ€‚
3. ่ฝฏไปถๆŒ‰โ€œๅŽŸๆ ทโ€ๆไพ›๏ผšๆœฌ้กน็›ฎไธบไธšไฝ™ๅผ€ๆบๅผ€ๅ‘๏ผŒๆŒ‰โ€œๅŽŸๆ ทโ€ๆไพ›๏ผŒไธไฟ่ฏไธๅญ˜ๅœจ Bug ๆˆ–ๆผๆดžใ€‚ๅผ€ๅ‘่€…ไธๅฏนๅ› ไฝฟ็”จๆœฌ้กน็›ฎ่€Œๅผ•่ตท็š„ไปปไฝ•็›ดๆŽฅๆˆ–้—ดๆŽฅๆŸๅคฑ่ดŸ่ดฃใ€‚

่ดก็Œฎ่€…

ๆ„Ÿ่ฐขๆ‰€ๆœ‰ไธบ็™ฝ่™Ž้ขๆฟๅšๅ‡บ่ดก็Œฎ็š„ๅผ€ๅ‘่€…ไปฌ๏ผๅคงๅฎถ็š„ Star ๅ’Œ Pull Request ๆ˜ฏ้กน็›ฎๆŒ็ปญ่ฟญไปฃ็š„ๅŠจๅŠ›๏ผ

Contributors

็คพๅŒบไบคๆต

ๆฌข่ฟŽๅŠ ๅ…ฅ็™ฝ่™Ž้ขๆฟไบคๆต็คพๅŒบ๏ผŒไธŽๅผ€ๅ‘่€…ๅ’Œ็”จๆˆทๅ…ฑๅŒๆŽข่ฎจใ€ไบคๆต็ป้ชŒไธŽๅ้ฆˆๅปบ่ฎฎ๏ผ

| ็คพๅŒบๅ้ฆˆไธŽๆŒ‡ๅผ• | QQ ไบคๆต็พค | | :--- | :---: | |

  • ้—ฎ้ข˜ๅ้ฆˆ (Bug Report)๏ผšๅฆ‚ๆžœๅœจไฝฟ็”จไธญ้‡ๅˆฐ้—ฎ้ข˜๏ผŒๆฌข่ฟŽๆไบค GitHub Issues
  • ๅŠŸ่ƒฝๅปบ่ฎฎ (Feature Request)๏ผšๆœ‰ๆ–ฐ็š„ๆƒณๆณ•ๆˆ–้œ€ๆฑ‚๏ผŒ้šๆ—ถๅ‘่ตท่ฎจ่ฎบ
  • ไปฃ็ ่ดก็Œฎ (Pull Request)๏ผš้žๅธธๆฌข่ฟŽๆไบค PR ๅ‚ไธŽๅ…ฑๅปบ
  • ไฝฟ็”จๆ–‡ๆกฃ (Documentation)๏ผš้‡ๅˆฐ้…็ฝฎไธŽไฝฟ็”จ็–‘้—ฎๅฏๆŸฅ้˜… ๅฎ˜ๆ–นๆ–‡ๆกฃไธญๅฟƒ
| baihuPanelไบคๆต็พค
QQ ็พคๅท๏ผš468870216 |

้ธฃ่ฐข

่ฎธๅฏ่ฏ

ๆœฌ้กน็›ฎ้‡‡็”จ Apache License 2.0 ๅ่ฎฎๅ‘ๅธƒ๏ผŒๅนถๅŒ…ๅซ้ขๅค–็š„ NOTICE ่ฏดๆ˜Žใ€‚

ๅผบๅˆถ่ฆๆฑ‚๏ผš ๅœจไปปไฝ•ๅˆ†ๅ‘ใ€ไฟฎๆ”นๆˆ–ไบŒๆฌกๅผ€ๅ‘ไธญ๏ผŒๅฟ…้กปๅฎŒๆ•ดไฟ็•™ๅŽŸไฝœ่€…็ฝฒๅๅŠ้กน็›ฎๅ็งฐ๏ผˆ่ฏฆ่ง NOTICE ๆ–‡ไปถ๏ผ‰ใ€‚

Chat with me