部署方法
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 钩子,其余的跟上面方法一样。
接着, 添加下面的代码到 hooks/post-receive ,并保证服务器上已安装 Jekyll:
最后, 在任意可以通过此钩子部署的用户机器上运行下面的命令:
剩下的就是告诉 nginx 或 Apache 监听 /var/www/myrepo
目录,然后运行下面的命令:
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开发的不错选择。