前言
还记得当初入门前端的时候,我就打算做一个属于自己的“网站”(当时的想法也挺傻的,哈哈),然而这个想法也持续了很久。大概直到前两个月(8月初),终于狠下心来决定做一个属于自己个人的博客。
要做一个网站,首先得有域名,服务器,这两个是硬性条件了,接着就是开发,测试,部署上线。大致就是这么一个流程。
然后,我就在阿里云买了一个域名,一台服务器,域名申请备案审核等等,接着就开始规划这个项目。
项目简介
这是一个前后端分离的项目,一共分为三个子项目:博客网站前端应用、博客网站后台管理系统、博客网站后台。其中,前面两者属于前端项目,第三个是一个 Java 后台。
前端项目
博客网站前端应用,就是个人的博客,用户可以在里面阅读笔者写的博客文章,可以评论,点赞等等。这是一个由 vue-cli3 搭建的多页面应用,主要使用的技术有:
-
less作为预编译css -
vue实现大部分的功能 -
vue-router处理每个页面的路由跳转 -
vuex管理应用状态 -
_axios基于axios进行了二次封装,让其更适合REST风格,使用更加简便 -
vue-cli3作为项目构建的脚手架,webpack作为打包工具
博客网站后台管理系统,是笔者个人使用的系统,它负责控制整个博客网站的运营,包括:文章管理,评论管理,用户管理,网站数据统计等等。它是一个由 vue-cli2 搭建的单页面应用。主要使用的技术有:
-
less作为预编译语言 -
iView作为UI组件库 - 同样的使用
vue全家桶来实现绝大部分功能 - 使用自己封装的
axios来与后台通信
后端项目
博客网站后台,是一个 Java 后端项目,主要为博客网站服务。
因为笔者深爱微服务技术,对于这种小型的项目其实直接一个 all-in-one 的方式更加简单,但是为了使用与体验微服务,本项目使用了微服务架构,并由 Spring Cloud 实现。
项目一个分由九个微服务组成,包括:分类微服务,标签微服务,短信微服务,注册中心微服务,评论微服务,统计微服务,用户微服务,文章微服务,通用微服务。
每个微服务大致分为三层主体结构:控制层、业务层、数据持久层。
- 控制层负责处理请求以及返回响应
- 业务层负责业务逻辑与事务管理
- 数据持久层负责与数据库通信。
主要使用的技术有:
-
Spring Boot负责启动与管理项目,项目中的依赖基本上都是基于Spring Boot的starter -
SpringMVC负责控制层 -
Spring负责业务层 -
Spring Data JPA负责操作mysql,mysql主要用于存储项目的主体数据 -
Spring Data Redis负责操作redis,redis主要用于缓存数据 -
Spring Data Mongo负责操作mongodb,mongodb主要用于存储一些杂乱的,没有数据价值的数据 -
Eureka负责管理注册中心 -
Feign负责微服务之间的远程调用 -
hystrix作为服务熔断器,防止雪崩效应 -
rabbitmq作为消息中间件
项目部署
想法:在远程的服务器上安装 docker,将项目中使用的所有技术,比如 mysql、redis、mongodb、rabbitmq 做成一个 image 运行在 docker 容器中, 将所有的微服务打为 jar 包,然后通过 dockerfile 技术将所有的 jar 做成一个个的 docker image,然而这些微服务就可以在 docker 中运行了。
想法很简单,可是现实很残酷。前面提到的 mysql、redis、mongodb、rabbitmq 很简单就部署上了,当部署到第二个微服务时出现了一个奇怪的现象,就是明明运行着,突然就自动停止了,经过一番纠察发现,原因是服务器承受不了,docker 运行着5个容器,此时服务器的 cpu 占有率以接近90%,所以多运行一个服务,就会有一个服务被无情的 kill 掉。
最后,因为经济原因让我选择了放弃,所以在此把项目开源了。
写在最后
附上几张博客的丑照:
git仓库:
后端项目:https://github.com/JonasVon/blog_server
博客后台管理系统:https://github.com/JonasVon/blog_admin
博客前端:https://github.com/JonasVon/my_blog
喜欢的可以点下 star 给点小心心哦。
生活本该多姿多彩,可是贫穷限制了我的人生自由。