GithubHelp home page GithubHelp logo

0zu-cc / renfeid Goto Github PK

View Code? Open in Web Editor NEW

This project forked from renfei/renfeid-old

0.0 0.0 0.0 9.68 MB

任霏的个人网站与博客2022年版

Home Page: https://www.renfei.net

License: Apache License 2.0

Java 74.14% JavaScript 1.65% FreeMarker 23.29% Dockerfile 0.11% Shell 0.20% HTML 0.09% CSS 0.48% Python 0.03%

renfeid's Introduction

renfeid

License Actions Status codecov Coverage Status Codacy Badge

简介

这是任霏的个人网站(www.renfei.net),一直保持一年一次大更新,所以这个版本是为2022年准备的。

代号 renfeid 是因为参考了一部分 DDD 领域设计,从之前的贫血模型到现在的充血模型的应用;并且 Linux 中的服务都已 d 结尾来表示 daemon,伴随着系统的启动而启动,系统的关闭而结束,在后台等待执行的进程。

历史版本

随着知识不断的累积,每年都看不上去年自己的设计和代码,总想推翻重来,慢慢形成了一年一次大更新的习惯。同时这也是我的试验场,新技术和理念在这里尝试和学习,掌握后用于公司内的商用项目中。

技术栈

依赖 类型 版本 说明
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 完全满足需求,但毕竟新的东西会优化很多旧的问题。

DevOps 和 CI/CD 的探索

之前使用 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

Url地址划分

  • /** : 默认全部是前台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

虽然我这点代码在开源生态里就是芝麻渣渣,但是出于对各路大佬的尊重和敬仰,我同样遵守开源圈的 License 协议,我选用 Apache-2.0 License。

由于 MySQL 是 GPL License,所以已经移除所有 MySQL 的依赖,全部使用 MariaDB 来兼容 MySQL。

FOSSA Status

renfeid's People

Contributors

renfei avatar dependabot[bot] avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.