xdays

基于OpenResty自动签发Let's Encrypt证书

安装OpenResty

yum-config-manager --add-repo https://openresty.org/yum/centos/OpenResty.repo
yum install -y openresty

OpenResty所有的文件以及依赖包都安装在 /usr/local/openresty 目录下

安装配置lua-resty-auto-ssl

安装Luarocks

Luarocks是Lua的包管理工具,很多OpenResty的包都可以通过luarocks来安装。

yum install -y unzip openssl gcc make
wget http://luarocks.github.io/luarocks/releases/luarocks-2.4.2.tar.gz
tar xzf luarocks-2.4.2.tar.gz
cd ...

基于GitLab的Pages服务构建静态博客

背景

之前我有一篇博客讨论过基于Pelican, Github以及Nginx+Lua实现的自动发布静态博客。最近重新思考这个方案感觉不够精简,也许当时是出于学习的目的引入了Ngnix+Lua这块。正好今年上半年GitLab宣布支持Pages服务了,而且支持的远比Github彻底,所以决定将我的博客托管在GitLab的Pages上。

流程

本地只需要往Git仓库里添加或者编辑markdown文件,当源文件被push到Gitlab服务端,触发GitLab的Pipeline,Pipeline完成由markdown源码到html文件的构建,最后由GitLab的Pages服务来托管html文件。

配置

迁移仓库

在GitLab上新建一个仓库,按照规范我这里将其命名为 xdays.gitlab.io ,然后将Github上的源码pull下来推到GitLab上:

git clone git@github.com:xdays/xdays.me.git
git remote add gitlab git@gitlab.com:xdays/xdays.gitlab.io.git
git ...

Puppet之API操作

背景

最近在做一个自动部署实例的项目,大致流程是首先调用AWS的API来生成实例,然后用Puppet来部署相关服务。但是由于AWS的EIP是可回收的,也就是说新起的实例可能会被分配到一个之前已经使用过EIP,由于证书名称是根据EIP来的,就会导致有对应的证书名称已经在Puppet上记录了,这样就会导致Puppet这个环节失败。鉴于如此,需要在给实例绑定上EIP之后远程清除下Puppet上对应的证书,这样就用到了Puppet的API操作。

基础

Puppet支持RESTful的API:master端主要涉及catalog,certificate,report, resource, file, node, status,和fact;agent端主要涉及fact和run。关于这些资源的详细操作参考这里

关于API的另一方面就是安全方面,Puppet用一个单独的文件(文件名由rest_authconfig)来配置API的ACL,具体ACL的语法如下:

path [~] {/path/to/resource|regex}
[environment {list of environments}]
[method {list of methods}]
[auth[enthicated] {yes|no|on|off|any ...

Pelican和Github构建静态博客

缘起

最近因为要换工作了,时间比较空闲,所以打算好好整理下自己的博客。想来博客写的越来越少也挺惭愧,好多东西都只停留在笔记的草稿阶段,没有写成博客,后续慢慢整理出来。回到正题,我开博客伊始一直用wordpress(下文简称WP),有点自然不必多说,成熟稳定,功能全面,主题丰富;但是我最近渐渐在思考我真的需要它么,我的日常操作不过是当我的笔记草稿足以成型为一篇博客,我把它粘贴到WP的编辑框,选择下分类,打上标签,点击发布,仅此而已;为此还安装插件让WP支持直接在编辑器里贴markdown;所以我需要的只不过是能够渲染markdown,生成静态html即可,不需要php,也不需要数据库;此外,博客自动发布也是我需要的一个功能。

计划

首先,选择静态博客生成器。目前jekyll的风头最大,但我没有选择他有两个原因:一是学习成本比较高,我只是想用你生成html你却让我学习那么多东西,不值得;二是我是Python党,我希望我用的工具能提升我的Python技能,嗯,这个也很重要。所以我选择用Pelican,它足够简单,拿到就可以使用。

然后,迁移。基本所有的静态博客项目都提供了导入的功能,尤其从WP这样如此流行的项目,但是 ...

Ansible状态管理

简介

就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件,叫做playbook。所有这些类似的概念的东西都是让你用一种更简单的语言(而不是用脚本)来描述你的服务应该是什么样子的,然后这些工具根据你的描述将服务器变成你希望的样子。有了这么一层抽象后,服务部署和配置就变得更加的跨平台了,也提高了可复用性。但请注意,playbook不是万能的,因为playbook底层是在用模块来完成任务,因为模块有限,所以很多时候还是需要写shell脚本(ansible提供了script模块)来完成。

提前说明下要使用ansible的状态管理你需要学习哪些东西:

  • YAML语法,playbook用到的语法很少,这部分学习成本很低;
  • playbook的基本指令,这是基础;
  • 模块的用法,这种重点;
  • jinja2语法,无论是在playbook还是在template里都支持jinja2语法,这是另一个重要的基础,关于jina2的语法不在本文范围内,具体参考官方文档

概念

  • yaml,数据交换格式,类似json和xml,但是比它们更具有可读性,通常用于作为程序的配置文件。ansible的playbook配置使用yaml格式来表达。
  • task,由模块来完成的一个单位任务,如修改文件或者启动服务
  • play,一组task的集合,ansible会自上而下执行
  • handler,task可以触发一定的事件 ...

虚拟机管理工具vagrant

简介

vagrant是一个基于业界成熟的虚拟化技术打造可配置,可重新生成和可移植的工作环境的工具,一个配置文件完成所有状态定义。

特性

  • 简单,一个配置文件搞定
  • 可通过多种方式自定义虚拟机配置,如shell脚本,ansible等
  • 网络配置,支持私有,共有网络配置
  • 目录同步,保持guest和host文件同步,默认将当前目录映射到虚拟机的/vagrant下
  • 多虚拟机支持,构建自己的集群测试环境
  • 多中虚拟技术支持,如virtualbox,vmware,AWS和docker
  • 插件机制,扩展灵活

概念

  • box就是已经制作好的虚拟机,倒入后保存在\~/vagrang.d目录下,和标准的虚拟机区别就是加入了一些为支持vagrant管理的配置,如公钥
  • Vagrantfile描述和配置要创建的虚拟机的配置

安装

sudo apt-get install vagrant

注意 最新的版本要到其官网下载

配置

添加box

vagrant box add name url

其中,name为box的名字,url为box的路径可远程可本地 ...

Ansible初探

简介

ansible是一个自动化管理工具,它足够简单且足够强大来管理大批量设备。可用于配置系统,部署软件以及组合复杂任务。关于其来由可参考中文FAQ

特性

  • 无agent模式,push模式,这一点与fabric有几分类似
  • 并发执行
  • 可用任何语言写扩展模块
  • 有类似Puppet(RAL)或者SaltStack(state)的playbook
  • 灵活的匹配规则,通配符,正则

执行模型

如图所示: ansible architecture

​* 首先,你需要定义设备列表,即任务执行的范围 * 然后,Ansible能通过调用模块来在这些设备上执行任务 * 此外,可以通过用playbook描述要执行的任务的逻辑,完成任务组合

ansible命令

语法

ansible <pattern_goes_here ...

OAuth2.0

前言

OAuth在展过程中变化非常大,1.0的基础概念在2.0中完全不同了,整个模型也发生了翻天覆地的变化,这也给学习这门技术带来了困扰。好在OAuth2.0已经成为标准的RFC6749,我就跟着时代走学习2.0吧!以下内容来自我学习过程对各种文档的总结,仅为个人理解。另外,1.0的相关资料见参考链接。

简介

OAuth是一种开放的授权标准,它解决的问题是如何更安全地让第三方应用访问用户的资源。随着开放平台等其他云计算形式的发展,OAuth也成了做平台或者平台开发很重要的一项技能。

概念

  • 角色
    • 资源所有者(resource owner) 就是终端用户
    • 资源服务器(resource server) 资源托管的平台,如微博等
    • 客户端(client) 第三方应用,想要获取用户资源
    • 授权服务器(authorization server) 颁发授权信息的服务器
  • 授权许可 获取访问令牌的方式,2.0版本定义了四种授权方式(授权码,隐式授权,资源所有者密码凭据和客户端凭据)
  • 访问令牌 代表应用程序可以获取资源的一个凭证 ...

fabric初探

简介

Fabric是一个用于应用部署和系统管理的工具,它让基于ssh的的操作更灵活;你可以在本地或者远程批量执行一些命令,上传下载文件等。

优势

  • 简单,没有架构,不需要理解master/agent(puppet)啦,master/minion(saltstack)啦相关的概念,当然任何一个工具都有自己的逻辑规则,相比其他工具fabric的学习成本要低很多;
  • Pythonic,最小的执行单位---任务,就是基本的python函数,灵活性强;
  • 并行执行,尽管如此性能仍不及M/S模式的其他工具;
  • 可扩展,这是我认为最大的优势,你可以很轻松的在fabric之上构建自己的平台,如监控和部署等。

安装

由于fabric尚不完善,我个人建议直接从github获取最新的代码安装:

git clone https://github.com/fabric/fabric.git cd fabric/fabric python setup.py install 

也可以通过pip安装

pip install ...