惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Threat Research - Cisco Blogs
V
V2EX
爱范儿
爱范儿
Martin Fowler
Martin Fowler
T
The Blog of Author Tim Ferriss
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
Check Point Blog
罗磊的独立博客
A
About on SuperTechFans
MyScale Blog
MyScale Blog
S
Security @ Cisco Blogs
博客园 - 聂微东
Simon Willison's Weblog
Simon Willison's Weblog
Cyberwarzone
Cyberwarzone
云风的 BLOG
云风的 BLOG
U
Unit 42
Latest news
Latest news
Apple Machine Learning Research
Apple Machine Learning Research
Security Latest
Security Latest
Y
Y Combinator Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
The Hacker News
The Hacker News
C
Cyber Attacks, Cyber Crime and Cyber Security
Cisco Talos Blog
Cisco Talos Blog
AWS News Blog
AWS News Blog
NISL@THU
NISL@THU
美团技术团队
S
Securelist
P
Privacy International News Feed
T
Tenable Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Hugging Face - Blog
Hugging Face - Blog
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
K
Kaspersky official blog
Google Online Security Blog
Google Online Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
www.infosecurity-magazine.com
www.infosecurity-magazine.com
D
Darknet – Hacking Tools, Hacker News & Cyber Security
B
Blog RSS Feed
W
WeLiveSecurity
A
Arctic Wolf
Hacker News - Newest:
Hacker News - Newest: "LLM"
Google DeepMind News
Google DeepMind News
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Commits to openclaw:main
Recent Commits to openclaw:main
N
Netflix TechBlog - Medium
有赞技术团队
有赞技术团队
V2EX - 技术
V2EX - 技术

NBlog

NBlog - 软件工程和工程师们的未来在何方? NBlog - Gitlab EE 破解手册 NBlog - Gitlab EE 破解手册 NBlog - 又是一年高考季 NBlog - 又是一年高考季 NBlog - 心浮气躁的AI时代 NBlog - 心浮气躁的AI时代 NBlog - 我的2025 NBlog - 我的2025 NBlog - 一位高考数学73的学生证明了黎曼猜想 NBlog - 一位高考数学73的学生证明了黎曼猜想 NBlog - 2017 夏 NBlog - 2017 夏 NBlog - OPanel: 较大型开源个人项目初尝试 NBlog - [博客更新] 博客添加AI生成内容标识 NBlog - [博客更新] 博客添加AI生成内容标识 NBlog - 为什么我感觉Minecraft越来越无聊了? NBlog - 为什么我感觉Minecraft越来越无聊了? NBlog - 对Abc曲谱标记语言的探索 NBlog - 对Abc曲谱标记语言的探索 NBlog - 域名弃用公告 NBlog - 域名弃用公告 NBlog - [博客更新] 转移至next.js,并重新设计整个网站 NBlog - [博客更新] 转移至next.js,并重新设计整个网站 NBlog - 我的歌单 NBlog - 我的歌单 NBlog - 证明简谐运动的周期公式 NBlog - 证明简谐运动的周期公式 NBlog - [聽后有感] 二 NBlog - [聽后有感] 二 NBlog - The Connells 歌词翻译 NBlog - The Connells 歌词翻译 NBlog - [聽后有感] 一 NBlog - [聽后有感] 一 NBlog - [博客更新] 域名已全面迁移至nocp.space NBlog - [博客更新] 域名已全面迁移至nocp.space NBlog - 证明皮克定理 NBlog - 证明皮克定理 NBlog - 英语选词填空中的数学问题 NBlog - 英语选词填空中的数学问题 NBlog - 如何在家制作食盐(NaCl)晶体? NBlog - 如何在家制作食盐(NaCl)晶体? NBlog - 拒绝“学习方法论”视频 NBlog - 拒绝“学习方法论”视频 NBlog - [博客更新] 现已支持RSS Feed NBlog - [博客更新] 现已支持RSS Feed NBlog - [代码日记] 编译运行VSCode源码 NBlog - [代码日记] 编译运行VSCode源码 NBlog - 证明一些导数结论 NBlog - 证明一些导数结论 NBlog - [代码日记] Calcium源码仓库喜提20stars NBlog - [代码日记] Calcium源码仓库喜提20stars NBlog - C大调卡农(摇滚版) NBlog - 陈升新单《望鄉》发布 NBlog - 陈升新单《望鄉》发布 NBlog - [博客更新] 全面重写整个网站 NBlog - [博客更新] 全面重写整个网站 NBlog - 我开发了一款计算器 (Calcium 使用手册) NBlog - 论如何免费的游玩离线Minecraft NBlog - 论如何免费的游玩离线Minecraft NBlog - Ferrum文件管理器荣获软件创新大赛二等奖 NBlog - Ferrum文件管理器荣获软件创新大赛二等奖 NBlog - 自己推导的三角函数二级结论 NBlog - 自己推导的三角函数二级结论 NBlog - 证明海伦公式 NBlog - 证明海伦公式 NBlog - Ferrum文件管理器参加了一个软件创新比赛活动! NBlog - Ferrum文件管理器参加了一个软件创新比赛活动! NBlog - NBlog, 2023新年好! NBlog - NBlog, 2023新年好! NBlog - [代码日记] 手写多功能计算器! (未完工+难题) NBlog - [代码日记] 手写多功能计算器! (未完工+难题) NBlog - 中考结束, 我回来了! NBlog - 中考结束, 我回来了! NBlog - [代码日记] 上手实践webpack、babel NBlog - [代码日记] 上手实践webpack、babel NBlog - [代码日记] 在游戏中为实体写一个AI NBlog - [代码日记] 在游戏中为实体写一个AI NBlog - 为什么铜傀儡比轻灵更好? NBlog - 为什么铜傀儡比轻灵更好? NBlog - [代码日记] PR经历记录 NBlog - [代码日记] PR经历记录 NBlog - [代码日记] 为nodejs.org网站源码提PR NBlog - [代码日记] 为nodejs.org网站源码提PR NBlog - [博客更新] 博客已更换主题至经典landscape NBlog - [博客更新] 博客已更换主题至经典landscape NBlog - ICraft开发日志-3 NBlog - ICraft开发日志-3 NBlog - 发现某反mc网站的bug NBlog - 发现某反mc网站的bug NBlog - ICraft开发日志-2 NBlog - ICraft开发日志-2 NBlog - ICraft开发日志-1 NBlog - ICraft开发日志-1 NBlog - 在旧手机上部署MC服务器 NBlog - 在旧手机上部署MC服务器 NBlog - 函数图像生成器 一个控制台小游戏 Nocp-startpage NBlog - 新博客正式开启
NBlog - OPanel: 较大型开源个人项目初尝试
NriotHrreion · 2025-09-30 · via NBlog

OPanel: 较大型开源个人项目初尝试

By NriotHrreion2025-09-30

高考之前,我就开始计划暑假要做的项目了。当时是计划做一个小游戏服务器,但奈何项目的饼画得太大,看着满满的计划表,我无力实施,因此,在暑假刚开始时就放弃了这个想法。然而人总是闲不住的,因此我还是把废案中的其中一项单独拉出来做一个项目,这就是OPanel的来历。

经过了两个月的开发,我基本把计划的功能做好了,而且适配了Bukkit、Fabric、Forge的1.21.x。看着日渐庞大的项目仓库,我萌生了一个做开源社区项目的想法,于是我叫来我的老友Deed,让他帮忙设计了一个Logo,然后在暑假的最后几天,我录制了一个宣传片,发到了B站。从发布视频的那一天开始,OPanel的流量就一直保持增长,仓库的star数也在不断增加————我第一次得到了自己的项目被关注的感觉。

项目结构的设计

多模块结构

OPanel作为一个服务器管理面板,势必要同时支持多个平台多个版本,不能只专做一个服务端平台,而且还需要考虑前端网页的部分,因此项目的结构设计至关重要。我并不认为目前的设计就是最优解,但我觉得目前的设计确实是当下较为合适的选择了。

然而我以前并没有做过类似的多平台多版本Minecraft插件项目,因此我一开始就去借鉴了网页地图插件dynmap的项目结构设计。

OPanel使用Gradle来管理项目,并且利用了项目子模块的特性来管理不同平台不同版本的实现代码。这样的设计下,项目被分为一堆模块,其中,core模块存放了网页面板的后端API和供其他模块实现的接口;而其他模块存放的是不同版本的具体实现代码,它们全部依赖于core模块,实现了core模块的接口,以供core模块对不同服务端进行统一的调用和操作。每一个模块都有自己的build.gradle,因此每一个模块都可以单独构建出插件 / 模组jar包。

面板前端

由于我希望把OPanel做成一体式开箱即用的插件,所以我必须将前端网页打进jar包,那么前端网页就不能使用SSR,而只能使用SSG。OPanel的前端使用next.js作为开发框架,但并没有用到任何SSR功能,而且每次修改完前端都必须执行一次npm run build,将前端打包成静态网页文件,并放入java resources文件夹。

个人感受

毕竟是第一次做这样的开源项目、第一次组建和带领开发组(虽然没几个人)、第一次受到这么多关注,激动和开心之余,当然也有紧张与压力。步入大学,平衡生活、学习与项目,并且让项目保持正向发展,这也是对我各方面能力的一种磨砺与考验。当然,OPanel也让我认识了很多服主,服主们反馈了很多bug,提了很多建议,也只有他们才能帮我测出那些实际环境才可能产生的bug。

总之,这个项目对我意义重大,是我的第一次较大型开源项目的实践。