忽略 Github pages,这也许是我的第一个 Personal page

前端使用 Vue-cli2.x webpack2.x 搭架子,上线了 Linode 的服务器,代码托管在 Github,本地运行容器化的 Jenkins 持续集成

下一步,创建后台资源管理系统,省去频繁替换主页展示内容的代码工作量,继续完善主页的内容以及添加各个二级页面,加油!


主页地址:kosilence’s homepage

前端框架

前端框架选择上没有什么纠结的,个人主页定位在轻量、灵活、图片动画展示,所以重型机械 Angular 以及自由战士 React 就被 Pass 了,Vue 在这个方向上太合适了,并且个人想深度了解一下 Vue 在组件化上的实现,连学代练。

Vue-cli

因为之前已经有过 Vue 粗糙的开发经验了,所以这次直接使用官方脚手架,快速上手搭个好架子。

1
2
3
$ npm install -g vue-cli

$ vue init webpack my-vue

一路选项下来,hot reloadESlinttest,一个工程所需要搭建的基础都有了。

我觉得像这种个人项目就别给自己找不自在了,ESlint 见仁见智,保持良好的代码规范即可,没必要搞太多的条条框框,疯狂报错影响心情,Test 以后有机会可以搞一下,这个阶段就先不上了

热加载,Vue 单文件组件开发,配合 node-sassautoprefixer 写CSS,而且又不想兼容低版本 IE,本地开发舒服美滋滋!

服务器部署

玩了这么久 VPS,到现在仍然只开一个的原因不言而喻,穷。

服务器中部署应用,计划采用容器化的应用部署,这样做屏蔽了复杂多变的环境影响,不仅稳定性提高,而且管理上也更加方便。

本站的定位是轻量级应用,所以 Docker的基础镜像选择体积较小,必要功能ok的即可,关键词:alpine-nginx-nodejs,配置容器内部的环境就不多赘述了。

前端代码 git clone 进容器,打包压缩哈希完成之后,顺手把下载下来的源代码清除,只留下静态文件,最小化镜像体积。代码集成到容器内部,不使用外挂卷,这样做的好处在于,一个容器就是一个应用,同外面的唯一联系就是端口,清楚明了。

Docker 容器内需要配置 nginx 指定 root 地址到前端静态文件根目录。然后设置服务器的 nginx 端口,监听 80 server_name,指向 Docker 容器绑定的端口。

我们每次更新代码都需要重新配置服务器的应用容器,是对劳动力的极大浪费,所以下一步,持续部署!

持续部署

没有写测试,你好意思叫持续集成吗?

持续部署常用的轮子如下:

  • Jenkins 开源软件,棒棒的
  • Travis 对开源项目免费,私人项目收费,与 Github 高度关联

本次项目选择用 Jenkins 来做持续部署,具体的安装配置过程不多说,主要记录一下项目的部署回滚过程。

Jenkins 暂时运行在本地机器上,安装一些必要的插件 SSHgit 等等。

部署过程

  1. ssh 进入服务器
  2. git clone 指定 repobranch 的代码
  3. docker build 镜像,Dockerfile 中把前端代码的打包压缩过程完成
  4. 停止上一版本容器并移除旧版本的容器和镜像,保存并运行本次构建的镜像
  5. 完成

回滚过程

  1. ssh 进入服务器
  2. 停止线上容器镜像
  3. 根据配置指定的回滚版本,运行之前保存过的指定版本的镜像
  4. 完成