github上hexo静态博客自动部署配置笔记

前言

越来越觉得时间不够用,千头万绪,容我喝口水。。

写blog的频率还赶不上wordpress的安全更新的推送频率,思考了一下还是决定把博客迁移到github上来,动机:

  1. wordpress的强大对于我等懒人实在是太折腾了。
  2. https+全静态,后续维护不想再折腾太多。
  3. 不怕忘了续费,哪怕百年之后也算留点痕迹。(但愿github在10年之内能继续服务下去,至少感觉比国内的服务靠谱一点,关站的几率较小)

方案

目前来说看了一眼 https://www.staticgen.com/

jekyll最火,ruby的,环境配置方面感觉有点担心 hugo其次, golang的,虽然最快,最强大,但从写博客的角度出发而言,功能不多,而且貌似教程不多。 hexo再次,node的,教程挺多,还有比较成熟的主题,就他了。

  • 建站工具: hexo + NexT 主题模板
  • github公共主页静态页面网站
  • bitbucket后端项目源码
  • codeship持续集成自动发布

预备

  1. git本地配置+ssh公钥配置
  2. github账号
  3. bitbucket账号
  4. codeship账号

安装

  • 安装hexo
1
npm install -g hexo-cli
  • 生成并初始化博客
1
hexo init myblog
  • 安装NexT主题 (下载最新版本的主题并mv到myblog/themes/next路径)
1
2
3
4
5
cd myblog
wget https://github.com/iissnan/hexo-theme-next/archive/v5.1.1.tar.gz
tar zxf v5.1.1.tar.gz
mv hexo-theme-next-5.1.1 themes/next
rm -rf v5.1.1.tar.gz

参考链接:

使用

基本页面

  • 关于 页面
1
hexo new page about

内容自己填写

  • tags 页面
1
hexo new page tags

内容:

1
2
3
4
5
6
---
title: tags
date: 2017-07-25 15:06:12
type: "tags"
comments: false
---
  • categories 页面
1
hexo new page categories

内容:

1
2
3
4
5
6
7
---
title: categories
date: 2017-07-25 16:21:02
type: "categories"
comments: false
---

新建文章

1
hexo new "hello world"

文章源文件存储在source/_posts/

不用的文章删掉文件重新发布即可。

本地测试

1
hexo s -g

访问 http://localhost:4000 预览效果。

清理

1
hexo clean

手工发布

1
hexo d -g

自动发布配置

  • 在bitbucket上新建私有项目(部分配置key需要保密)
  • 在codeship中导入此私有项目
  • 在codeship中查看deploy-keys发布公钥,并在github的对应静态站点中配置此发布公钥并允许write写入权限
  • 配置codeship基础setup初始化指令:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10

nvm install 6.11.1
npm install hexo-cli -g
npm install
# or, if you prefer to use yarn
#yarn install

git config --global user.email "[email protected]"
git config --global user.name "yourname"

注意记得指令中配置git的全局配置,不然部署流程可能失败

  • 删掉test的commands的pipeline 指令,不需要
  • 配置deploy部署指令的分支为master
  • 配置部署指令的脚本为custom scripts:
1
2
hexo clean
hexo d -g

注意:如果你使用了algolia的三方服务组件的情况下: 你的codeship配置中环境变量要加上HEXO_ALGOLIA_INDEXING_KEY的变量 并且在algolia 新建对应的索引用的apikey,设置流程参考:hexo-algolia

部署脚本的指令也要改为:

1
2
3
4
hexo clean
hexo g
hexo algolia
hexo d
  • 写点内容到你的博客中,并提交push到bitbucket的项目中去(source/_posts/中新建xxx.md的日志文件)

等着发布完成的通知

查看你的静态博客站点看效果吧。

当前这篇文章就是在bitbucket的在线创建文件编辑器(支持markdown)中编写的。

TODO

在线图床可以用imgur或者七牛的服务,如果写文字为主也可以本地存图,

完整的想好好的像medium、简书之类的服务在线码字贴图的话,

一种方案就是写个前后端编辑器处理上传文件服务和提交/获取bitbucket项目文件。 再牛一点就是纯h5方案前端集成图床的api接口+bitbucket的服务接口。

windows下基础开发环境搭建2016

工作需要在windows环境下搭建一个基础开发环境,在此记录一下:

一、注意事项

  1. 以下的安装配置方法仅支持win7/8/10之类的系统,xp可以洗洗睡了。
  2. 装了cmder-full(With git-for-windows)版或者babun就没有必要安装git-for-windows了,不过从兼容性角度出发,建议还是使用cmder-full的版本,至少纯windows的环境下也能直接使用git指令,也支持外部ide调用。
  3. babun(cygwin)是调整过的cygwin环境,cmder默认是windows环境(可以安装chocolatey做包管理)两个环境面对的场景不同,choco安装的软件基本都是port到win环境下的版本,和babun的cygwin环境下的版本配置方式不一样,看各人喜好,可以分别使用,也可以只使用一个。
  4. linux的家HOME目录用~字符来标识,windows下通常对应的就是C:\Users\Administrator目录

二、终端环境

推荐使用cmder(With git-for-windows) + babun(cygwin)预配置环境的方式,既有普通cmd终端的linux化,又支持cygwin环境安装使用你所需要的linux环境安装包

  1. cmder-full(With git-for-windows)下载后解压缩到磁盘,(推荐c:\opt\cmder)
  2. 加入系统环境变量PATH环境变量中追加c:\opt\cmder路径。
  3. 注册右键菜单:以管理员身份启动命令行提示符(cmd),然后进入c:\opt\cmder路径后执行:
1
    Cmder.exe /REGISTER ALL
  1. 提示符配置:修改cmder目录下的config\cmder.lua的第2行把λ替换为$,更符合日常linux下用户prompt的习惯。
1
2
3
    function lambda_prompt_filter()
        clink.prompt.value = string.gsub(clink.prompt.value, "{lamb}", "$")
    end
  1. 常用别名配置:修改cmder目录下的config\alias文件,在最后加入常用的alias,比如:
1
2
3
    l=ls --show-control-chars
    la=ls -aF --show-control-chars 
    ll=ls -alF --show-control-chars
  1. 中文字间距问题,启动cmder后win+alt+p呼出设置面板去掉 monospace 选项(点两下让勾选框留空),然后save settings保存设置。

  2. 可选(安装chocolatey windows包管理器),打开cmder/cmd终端,执行以下命令:

1
    @powershell -NoProfile -ExecutionPolicy Bypass -Command "iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))" && SET PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin
  1. 安装babun的环境:下载babun官网上的安装包,解压后执行其中的install.bat批处理文件
  2. 配置整合babun环境到cmder工具中:启动cmder后win+alt+p呼出设置面板(Settings),然后打开 Startup>Tasks面板点+号添加一个task,名称输入babun, Task parameters中输入:
1
    /icon "%userprofile%\.babun\cygwin\bin\mintty.exe" /dir "%userprofile%"

下面的Commands大输入文本框中输入:

1
%userprofile%\.babun\cygwin\bin\mintty.exe /bin/env CHERE_INVOKING=1 /bin/zsh.exe

save settings保存设置,然后你可以按up或down的按钮把{babun}的顺序调到{cmd}的前后,也可以勾选Default task for new console和Default Shell选项来把它作为默认console。注意,如果新开窗口想默认用{babun},需要修改Startup面板中的Specified named task不选{cmd}而是新的这个{babun}

  1. 修改babun的环境配置:cmder启动后打开{babun}的终端后编辑~/.zshrc文件:
1
vim ~/.zshrc

修改ZSH_THEME="babun"为ZSH_THEME="ys”,后保存退出,然后关闭终端后再启动{babun}终端即可。

  1. 如果你还是习惯mingw的git-bash环境也可以在cmder工具中添加配置:启动cmder后win+alt+p呼出设置面板(Settings),然后打开 Startup>Tasks面板点+号添加一个task,名称输入gitbash,Task parameters中留空下面的Commands大输入文本框中输入:
1
%ConEmuDir%\..\git-for-windows\git-cmd.exe --cd-to-home --command=usr/bin/bash.exe -l -i

save settings保存设置即可,后续的就可以启动{gitbash}终端使用了。

至此你已经完成了windows下终端环境的配置,启动cmder后,{cmd}的task为windows上下文命令行:使用choco作为包管理器 同时也支持一些基本的linux命令比如ls,curl之类的,软件包管理可以使用chocolatey的choco指令,

1
    choco install -y notepadplusplus

{babun}的task为cygwin上下文命令行:使用pact作为包管理器

1
2
    pact find php
    pact install -y php

注意{babun}的cygwin环境上下文中的安装的包不能在windows上下文环境中使用,(比如这里安装的php指令在windows环境下则会报招不到php指令),但windows上下文环境中安装的软件可以在cygwin环境下最后被搜索到则调用,注意是调用,效率比较低,而且也无法控制执行,所以通常情况下的windows指令还是推荐在{cmd}终端中执行。

  1. 命令行生成私钥公钥对:
1
    ssh-keygen -t rsa -C "[email protected]"

默认生成的文件在~/.ssh路径下的id_rsa(私钥)和id_rsa.pub(公钥),id_rsa.pub可以添加到代码托管环境的个人公钥列表中去

  1. 设置个人基础的git信息:
1
2
    git config --global user.name "你的名字或昵称"
    git config --global user.email "你的邮箱"

其他推荐软件

以下软件都可以用 chocolatey windows下的命令行包管理器 来安装,安装/卸载软件并不需要用到那些什么软件管理专家了。

  1. wox windows下类似于mac的alfred的快速启动工具,有了它记得软件、目录名字就可以了,忘了开始菜单吧。
  2. everything windows下的文件搜索工具,这个就不用多说了吧。

基于Laravel Envoy的部署脚本

如题,找了半天貌似都没有符合laravel的天朝网络环境的的部署脚本, 于是乎结合参考了多个部署脚本和工具的理念又造了个新轮子:

https://github.com/nickfan/envoy-deployscript

使用说明见:https://github.com/nickfan/envoy-deployscript/blob/master/README.zh-CN.md

欢迎大家测试吐槽。

主要特点:

支持本地构建打包部署

1
envoy run deploy_localrepo_install --branch=master --env=production

支持工作拷贝本地构建依赖模块(vendor目录)

1
envoy run deploy_mix_pack

原理/设计规划

你的 $deploybasepath 远程部署基础路径将会看起来像如下这样(如果你有多个子应用在同一个部署基路径里).

1
2
3
4
    mysite/
    mysite2/
    mysite3/

你的 $deploybasepath/$appname 远程部署应用路径将会看起来如下.

1
2
3
4
5
6
7
    releases/release_20150717032737/
    releases/release_20150717034646/
    current -> ./releases/release_20150717034646
    shared/storage/
    tmp/
    .env

正如你所见的, current 目录是软链到最近一次的部署目录的

在你的部署目录中文件列表看起来像下面这样(只列举了部分文件做例子):

1
2
3
4
5
6
7
8
9
    app/
    artisan
    boostrap/
    public/index.php
    composer.json
    .env -> ../../.env
    storage -> ../../shared/storage
    vendor/

部署目录中的.env文件和storage文件夹都软链接到了上级应用目录中的公共文件/文件夹了,这样部署本身只部署源代码和vendor等依赖环境, storage等公共数据在shared文件夹中并不随代码部署,节省了空间也保留延续了日志/应用cache等相关基础数据在应用中的使用