这是任霏的个人网站(www.renfei.net),一直保持一年一次大更新,所以这个版本是为2022年准备的。
代号 renfeid 是因为参考了一部分 DDD 领域设计,从之前的贫血模型到现在的充血模型的应用;并且 Linux 中的服务都已 d 结尾来表示 daemon,伴随着系统的启动而启动,系统的关闭而结束,在后台等待执行的进程。
随着知识不断的累积,每年都看不上去年自己的设计和代码,总想推翻重来,慢慢形成了一年一次大更新的习惯。同时这也是我的试验场,新技术和理念在这里尝试和学习,掌握后用于公司内的商用项目中。
- 2021年:https://github.com/renfei/renfeid (当前版本)
- 2020年:https://github.com/renfei/www.renfei.net (Java)
- 2019年:https://github.com/renfei/RenFei.Net (Java)
- 2017年:https://github.com/renfei/NEILREN4J (Java)
- 2015年:https://github.com/renfei/NeilNT (ASP.NET)
- 2012~2014年:WordPress (PHP)
依赖 | 类型 | 版本 | 说明 |
---|---|---|---|
Java | 基础设施 | JDK1.8 | 任他版本怎么发,我用Java8(考虑升到JDK11) |
SpringBoot | Framework | 2.6.2 | 我会保持最新版本 |
Druid | 数据库连接池 | 1.2.8 | 来自 Alibaba 的开源数据库连接池 |
MyBatis | ORM | 2.2.1 | 选用 MyBatis 写 SQL 更自由 |
Feign | HttpClient | 3.1.0 | 虽然它来自SpringCloud,但我很喜欢用它 |
MariaDB | DataBase | 10.6.5 | MySQL 的最佳替代者,我使用最新版本 |
JWT | Token | - | 我使用JWT支持无状态接口,支持分布式部署 |
Redis | NoSQL | 6.2.6 | 用于缓存加速,数据变化不频繁的扔到内存里 |
ElasticSearch | 搜索引擎 | 7.16.3 | 站内搜索就是依赖 ES 搜索引擎实现的 |
Freemarker | 视图引擎 | 2.3.31 | 我是放弃 Thymeleaf 又换回来的,不解释 |
Quartz | 定时任务 | 2.3.2 | 为了支持分布式部署,本地定时任务不能用 |
SpringSecurity | 安全框架 | 5.6.1 | Spring全家桶,各种权限判断和拦截就是基于它的 |
Leaf | 全局发号器 | - | 美团技术团队的开源分布式ID生成,参考雪花算法 |
GraphQL | Graph查询语言 | - | 初步尝试探索GraphQL www.renfei.net/Graphiql |
- 已移除 Lombok,一旦使用整个团队其他人也必须安装插件,强X队友; 同时在慢慢使用中发现除非真的非常了解 Lombok 的注解会生成什么,否则会出现奇怪的各种问题,当然只使用简单的
@Data
没什么问题。 - 计划升级到 Java11,虽然 Java8 完全满足需求,但毕竟新的东西会优化很多旧的问题。
之前使用 GitHub 的 Actions Workflow,但因为是境外所以和境内的相关服务器网络延迟高失败率高,一直没什么太大用处, 直到 2021年底 GitLab 在国内成立了分公司并上线了 极狐(GitLab) SaaS 平台,一群开源大佬布道**的 DevOps, 我正好参与了内测,开始接触并尝试探索大佬们的理念。
项目中的 .gitlab-ci.yml 就是 GitLab 的 Pipeline 文件,主要由这几个阶段 (stage) 组成:
- initialize:初始化准备环境,包括下载测试环境配置文件、IP2Location 数据 BIN 文件,将 artifact 向下面的阶段传递。
- compile:编译,先执行编译确保没有基础的语法错误,如果编译都过不了下面的就不用执行了。
- test:测试,执行单元测试,验证各个接口和服务可以正常运行。
- package:打包,将 SpringBoot 应用打包成 Jar 包。
- release:发布,构建 Docker 镜像,发布到制品仓库中
自动部署方面,我还没探索,后面等着尝试探索一下。
如果您也使用 GitLab Pipeline,注意项目可访问性,或者设置 CI/CD 的可访问性,如果都是公开的状态, 那么每个阶段 (stage) 的制品 (artifact) 将会公开下载!其中一旦包含配置文件或相关敏感文件将被公开。
由于我不是前端专业,所以前端写的可能不是很好,但没有前端页面还不行,所以只能献丑了。
前台由于有 SEO 的需求,所以不能使用 SPA 单页应用,我选择继承旧项目的方案,使用 Freemarker 在服务器端渲染页面。Node.js 我不熟。
使用的是 Bootstrap V4,然后自己再 DIY 修改,本来计划升级到 V5,但 v2.0.0 为了修复远程代码执行漏洞,还没做完,只能先用 V4 了。
后台前端就可以前后端分离了,我选择了现成的 Ant Design Pro 来构建。
项目地址是:https://github.com/renfei/renfeidesign
- /** : 默认全部是前台Html页面
- /api/** : OpenAPI 开放接口,向外提供接口能力,无需登陆并允许 CORS 跨域请求
- /-/api/** : 前台接口,有可能需要登陆,禁止跨域请求,不开放接口,例如评论接口
- /_/api/** : 后台接口,必须登陆,禁止跨域请求,系统管理类的后台接口在这里
在这个 Repo 中修复了 https://github.com/renfei/renfeid/issues/32 远程代码执行漏洞,此漏洞从2020年1月14日存在至今,是我自己干的, 也是我自己发现的,这么多次代码扫描,都没扫描出来,漏洞存在于以下 Repo:
所以 v2.0.0 版本还没写完,就连滚带爬的强行上线了,原本不想这么早上线的。
虽然我这点代码在开源生态里就是芝麻渣渣,但是出于对各路大佬的尊重和敬仰,我同样遵守开源圈的 License 协议,我选用 Apache-2.0 License。
由于 MySQL 是 GPL License,所以已经移除所有 MySQL 的依赖,全部使用 MariaDB 来兼容 MySQL。