部署方法

Jekyll 生成的网站是静态的,因此有很多种部署方法。下面列出了一些常见的部署方法。

网站托管服务商 (FTP)

传统的网络托管服务商允许你使用 FTP 上传文件到他们的服务器。想通过 FTP 上传一个 Jekyll 站点,只需要运行 jekyll 命令然后复制生成的 _site 目录到你的托管账号根目录。多数托管服务商的跟目录会是 httpdocs 或 public_html 目录。

使用 Glynn 进行 FTP 上传

有一个叫 Glynn 的项目,可以帮助你简单的生成 Jekyll 站点并通过 FTP 发送到你的主机。

自己的网络服务器

如果你能够直接连接到部署的网络服务器,你可能有其它的方法传输文件 (如 scp,或者直接操作文件系统),而其它过程都一样。要记住保证生成的 _site 目录放到网络服务器正确的根目录下。

自动化部署

也有一些自动化部署 Jekyll 站点的方法。下面列出了几种,如果你还有其它的,欢迎 贡献,这样其它人就也能知道它了。

Git post-update 钩子

如果你使用 Git 管理你的 jekyll 站点,自动化部署非常简单,只需要给你的 Git 仓库设置一个 post-update 钩子,就像这样

Git post-receive 钩子

要让一个远程服务器在你每次用 Git 推送修改时进行部署,可以创建一个拥有所有要部署机器公钥的账号,然后设置 post-receive 钩子,其余的跟上面方法一样。

laptop$ ssh deployer@myserver.com
server$ mkdir myrepo.git
server$ cd myrepo.git
server$ git --bare init
server$ cp hooks/post-receive.sample hooks/post-receive
server$ mkdir /var/www/myrepo

接着, 添加下面的代码到 hooks/post-receive ,并保证服务器上已安装 Jekyll:

GIT_REPO=$HOME/myrepo.git
TMP_GIT_CLONE=$HOME/tmp/myrepo
PUBLIC_WWW=/var/www/myrepo

git clone $GIT_REPO $TMP_GIT_CLONE
jekyll build -s $TMP_GIT_CLONE -d $PUBLIC_WWW
rm -Rf $TMP_GIT_CLONE
exit

最后, 在任意可以通过此钩子部署的用户机器上运行下面的命令:

laptops$ git remote add deploy deployer@myserver.com:~/myrepo.git

剩下的就是告诉 nginx 或 Apache 监听 /var/www/myrepo 目录,然后运行下面的命令:

laptops$ git push deploy master

Static Publisher

Static Publisher 是另一种使用监听网络钩子提交服务器的自动化部署方式, 虽然并没有特别与Github绑定。提供一键部署到 Heroku 功能,可以监控一个服务器上的各种项目, 还提供了简便的用户管理接口,并且可以发布到 S3 或者 Git 仓库(如: gh-pages )。

Rake

另一个部署 Jekyll 站点的方法是使用 Rake,HighLine,和 Net::SSH。一个比较复杂的使用 Rake 部署多个分支的例子可以参考 Git Ready。

scp

一旦生成了 _site 目录,你可以使用一个 tasks/deploy shell脚本来部署网站, 如:这个部署脚本。 当然你需要根据你的网站信息修改脚本的相关配置值。这些一般的TextMate匹配命令可以帮助你执行这个脚本。

rsync

假如你已经生成了 _site 目录,就可以使用一个像 部署脚本 这样的 shell 脚本 tasks/deploy rsync 到服务器了。当然需要修改你的站点相应的值。

基于证书的验证是简化发布流程的另一种方式,限制 rsync 仅能访问你想要同步的目录也更合理, 这可以使用 rrsync 来实现。

第一步:在 home 目录安装 rrsync (服务端)

如果你的主机上没有安装 rrsync ,你可以自行安装:

  • 下载 rrsync
  • 放在你的 home 目录的 bin 子目录里 (~/bin)
  • 使之可执行( chmod +x )

第二步:设置基于证书的 SSH 访问权限(服务端)

这个流程网上随处可见, 与典型方法不同的是需要在 ~/.ssh/authorized_keys 文件中加入基于证书验证的限制。 然后,启动 rrsync 并提供其应该具有读写权限的目录:

command="$HOME/bin/rrsync <folder>",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-rsa <cert>

<folder> 是指你的网站目录,比如: ~/public_html/you.org/blog-html/。

第三步:Rsync(客户端)

在网站源码目录中添加 deploy 脚本:

#!/bin/sh

rsync -crvz --rsh='ssh -p2222' --delete-after --delete-excluded   <folder> <user>@<site>:

命令行参数如下:

  • --rsh=ssh -p2222 — SSH 访问的端口,如果你的主机用了一个非默认的端口则需要设置这个值(如: HostGator )
  • <folder> — 本地输出目录的名称(默认是 _site )
  • <user> — 主机账户的用户名
  • <site> — 服务器名称

使用这个设置,你可以执行下面的命令:

rsync -crvz --rsh='ssh -p2222' --delete-after --delete-excluded _site/ hostuser@example.org:

不要忘了服务器名称后的一栏 : !

第四步(可选):排除迁移脚本防止被拷贝到输出目录

如果你使用这个教程部署你的网站的话建议你执行这一步,如果你把 deploy 脚本放在项目的根目录, Jekyll 会把它拷贝到输出目录,可以通过设置 _config.yml 来改变这一行为。

加入以下行即可:

# 不会拷贝到输出目录的文件
exclude: ["deploy"]

此外,你可以使用 rsync-exclude.txt 文件来控制哪个文件会被发送到你的服务器上。

完成!

现在你可以通过执行 deploy 脚本来发布你的网站啦~ 如果你的 SSH 证书是受密码短语保护的, 在执行脚本时你会被要求输入密码。

Rack-Jekyll

Rack-Jekyll 是一个部署站点到任意 Rack 服务的简单方法,如 Amazon EC2, Slicehost, Heroku 等。它也可以 shotgun, rackup, mongrel, unicorn, and others 一起运行。

可以阅读 这篇文章 了解如何使用 Rack-Jekyll 部署到 Heroku 。

Jekyll-Admin for Rails

如果想在 Rails 中维护 Jekyll 站点,Jekyll-Admin 包含了实现此功能直接可用的代码。详细可查看 Jekyll-Admin 的 README 。

Amazon S3

如果要在 Amazon S3 上托管你的站点,可以使用 s3_website 。它会推送你的站点到 Amazon S3 上,Amazon S3 跟任意网络服务器一样,却能够动态扩容到几乎无限流量。这种方式适用小流量博客站点,因为你只需要为你使用的流量付费。

OpenShift

如果你想要在 OpenShift 设备上部署你的网站,可以参考这篇文档。

ProTip™: 使用 GitHub Pages 零麻烦托管

GitHub Pages 内部由 Jekyll 驱动, 所以如果你想找个零麻烦、零花费解决方案,Github Pages 是托管 Jekyll 驱动站点的首选。

Kickster

当使用了 Github Pages 不支持的插件时, 可以通过 Kickster 轻松(自动)部署到 Github Pages。

Kickster 提供了一个具有网络最佳实践的基础 Jekyll 项目设置,并且包含了许都可以提升项目整体质量的优化工具。 Kickster 为 Github Pages 提供了全自动、零担忧的部署脚本。

安装 Kickster 非常简单, 只要安装了 gem 包就万事大吉了, 更多详情参见这里。 如果你不想使用 gem 包或者新建一个新项目,你可以只是拷贝部署脚本到 Travis CI 或 Circle CI。

Aerobatic

Aerobatic 是一个将 Github Pages 功能移植给 Bitbucket 用户的 Bitbucket 扩展。 包括持续部署,通配SSL证书的自定义域名,CDN,基本认证和阶段分支功能。

自动构建和部署 Jekyll 网站和在 Github Pages 上一样简单——将你的修改推送到仓库(除了 _site 目录), 然后数秒内自动触发构建,在其高可用、遍布全球的主机服务商部署你构建的网站。 构建过程会均衡安装和执行自定义插件,详情见我们的Jekyll文档。

PubStorm

PubStorm 是由 Nitrous 建立的免费前端和静态网站发布平台。 PubStorm 被发布为 node 包,可以通过执行命令 npm install -g pubstorm 来安装。 你可以通过 storm signup 命令来创建一个免费账户。

发布网站需要在项目根目录下执行 storm init 然后在提示时输入项目路径时输入 _site 作为项目路径, 接着可以执行 jekyll build 构建网站并执行 storm deploy 来发布你的网站。

Pubstorm 提供一个预设的 CDN、免费自定义域名、SSL证书、回滚、协同合作等功能,欲体验更多功能,参见 Pubstorm 帮助网站。

你还可以使用 Nitrous Jekyll Template 来开发你的 Jekyll 项目并直接部署网站到 Pubstorm, 这是在 Windows 上进行Jekyll开发的不错选择。

此网站由 @xcatliu 维护,由 开源爱好者们 共同翻译。若发现错误或想贡献翻译,请访问: xcatliu/jekyllCN