将我的博客迁移到亚马逊云端(1)

简介: Octopress已经被公认为Geeker的博客框架。它所拥有的特性都很符合Geeker的癖好:强大的命令行操作方式、简洁的MarkDown语法、灵活的插件配置、美轮美奂的theme(自带响应式设计哦)、完全可定义的部署…… 一般大家都喜欢把博客部署到github pages上,免费速度快,与Octopress无缝结合。

img_622ab8332513b840b5066877ef73c200.png

Octopress已经被公认为Geeker的博客框架。它所拥有的特性都很符合Geeker的癖好:强大的命令行操作方式、简洁的MarkDown语法、灵活的插件配置、美轮美奂的theme(自带响应式设计哦)、完全可定义的部署……

一般大家都喜欢把博客部署到github pages上,免费速度快,与Octopress无缝结合。但是自己最近迷上了AWS,就捉摸着将自己的Octopress博客部署到AWS的S3上,使用CloudFront做CDN,使用Amazon Route 53做域名映射。倒腾了两天,终于搞定了,也学到了很多东西。不敢私藏,拿出来和大家分享。

这篇文章主要讲如何将Octopress博客部署到S3上去。下一篇文章会讲如何将CloudFront做CDN,并与现有域名绑定。

在此之前先普及一些概念。

AWS - Amazon Web Service,亚马逊提供的云服务简称。

S3 - Amazon Simple Storage Service, 亚马逊提供的一种存储静态资源(如css、js、html文件,音视频文件)的服务。

CDN - Content Delivery Network, 内容分发网络。

Amazon CloudFront - 亚马逊提供的一种内容分发服务,提高你的网站访问速度。

Amazon Route 53 - 亚马逊提供的一种稳定高效的域名解析系统。

第一步,注册一个亚马逊的账号,注册地址是https://portal.aws.amazon.com/gp/aws/developer/registration/index.html。注意注册的时候需要提供一张具备外币功能的信用卡。

第二步,登陆到Amazon management console里,单击右上角的名称,选择Security Credentials标签,然后点击左侧标签按照向导创建一个group,一个从属于这个group的user,并为该user生成一个Access key,记录下来Access key Id 及 Secret Access Key。亚马逊的文档还是非常详细的,不懂的可以多看看提示信息和帮助文档。

第三步,在Amazon management console里选择Services -> S3 service,并创建两个bucket。假如你的博客域名为example.com,那么两个bucket的名称分别为example.com,www.example.com。为什么要创建两个那?是因为我们要保证用户无论输入www.example.com还是example.com都可以访问我们的网站。

img_a7d9408f74a22beacd7fd59e5c4581a8.png

第四步,选择www.example.com这个bucket,点击properties标签,在Static Website Hosting中选择Redirect all requests to another host name,并配置‘Redirect all requests to:’为example.com。这样来自www.example.com bucket的访问都会自动转发给example.com这个bucket。我们只需为example.com这个bucket同步我们的博客文件即可。

img_b68f19dfc2cb6c4db0ebd25ed59fae4e.png

第五步,选择example.com这个bucket,在Static Website Hosting中选择‘Enable Website Hosting’,并配置Index Document,我的是index.html。这个Index Document是默认返回的object名称。比如如果用户直接访问bucket的某个目录,系统会检测该目录下是否存在Index Document中配置的文件名,如果有则会自动返回这个object。

img_338477ae59d0277391433efc622ede65.png

第六步,选择’Permissions’标签,点击’add bucket policy‘按钮,加入如下的policy.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
     "Version": "2008-10-17",
     "Statement": [
          {
               "Sid": "AddPerm",
               "Effect": "Allow",
               "Principal": {
                    "AWS": "*"
               },
               "Action": "s3:GetObject",
               "Resource": "arn:aws:s3:::example.com/*"
          }
     ]
}

这个policy其实是给所有匿名用户访问该bucket里面文件的权限。

img_b5c18be65648fa5d50b18cd6af17e945.png

第七步,还是在’Permissions‘标签里,点击’Add CORS configuration‘按钮,加入如下的配置:

1
2
3
4
5
6
7
8
9
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

这个是用来配置跨域访问的权限,即是否允许其他网站访问这个bucket上的资源。由于Octopress博客集成了很多插件,比如google analiycis, github等,都需要跨域加载JavaScript文件,执行JavaScript文件,所以要加入这些配置。

img_b358cf071b06ed8e14efdda90fe1ca69.png

第八步,下载安装s3cmds3cmd是一款操作AWS S3的命令行工具。通过它可以创建或删除bucket,上传或下载object,我们在部署octopress博客时,主要就是通过它来将博客上传到S3上去。如果是mac系统化可以通过HomeBrew直接安装。

1
# brew install s3cmd

如果是windows系统可以从官网下载安装包进行安装。

第九步,配置s3cmd与你的S3的连接。在命令行下输入s3cmd --configure,按照向导来配置与S3的连接。这时候在前面保存的Access key就派上用场了。所有的配置信息其实都存在当前用户名下的.s3cfg文件中。你也可以随后修改这些信息。运行s3cmd ls来检测是否配置成功。

1
2
3
$ s3cmd ls #列出所有的bucket
2013-09-27 05:05  s3://huangbowen.net
2013-09-28 03:24  s3://www.huangbowen.net

第十步,配置Octopress支持向S3的部署。在Octopress目录下找到Rakefile文件,修改或添加下述配置。

1
2
3
4
deploy_default = "s3"   #部署task
s3_bucket = "example.com" # bucket名称

s3_cache_secs = 3600  # header中的cache controll属性,即缓存时间,后面CloudFront要用到

然后添加一个新的task。

1
2
3
4
5
desc "Deploy website via s3cmd"
task :s3 do
  puts "## Deploying website via s3cmd"
  ok_failed system("s3cmd sync --acl-public --reduced-redundancy --add-header \"Cache-Control: max-age=#{s3_cache_secs}\"  public/* s3://#{s3_bucket}/")
end

OK,大功告成,运行rake generate&& rake deploy就可以将生成的静态站点上传到S3中区。然后就可以通过S3的EndPoint来访问新站点了。(EndPoint可以在Amazon management console的S3 dashboard的 ‘Static Website Hosting’ 标签中找到)

当然现在还不能使用自己的域名来访问,你可以通过配置CNAME来启用自己的域名。

下篇文章会讲如何将CloudFront作为内容分发,并且如何将自己的域名与CloudFront绑定。

现在我的博客已经在云端了,地址是<www.huangbowen.net>

相关文章
|
存储 SQL 数据库
PingCAP CTO黄东旭:在全球化和多云环境中看开源软件的商业化探索
PingCAP CTO黄东旭:在全球化和多云环境中看开源软件的商业化探索
PingCAP CTO黄东旭:在全球化和多云环境中看开源软件的商业化探索
|
物联网 开发者
阿里云“银河”来了 支持开发者全球设备分发
全球化大趋势下,越来越多的企业拥有海外业务,然而在各种实际应用场景中,客户会经常遇到以下情况: 1、大陆企业开发的设备,可能会被消费者拿去在欧美区域使用(设备跨地域接入) 2、企业A为企业B订制了一批设备,企业B要求把设备+云端服务做整体交割(设备跨实例、跨账号分发)
253 0
阿里云“银河”来了 支持开发者全球设备分发
|
云计算 程序员
阿里云官网全新改版,加速迈进“云端一体”
在刚刚过去不久的2020年云栖大会上,阿里云智能总裁张建锋宣布,阿里云正式从“云钉一体”走向“云端一体”,进入2.0时代。在这样的背景下,阿里云官网在10月24日程序员节到来之际,进行了全面的改版升级,向程序员致敬,推出了更具数字化、科技感的首页。
阿里云官网全新改版,加速迈进“云端一体”
|
存储 运维 Cloud Native
一款云迁移产品的成长史
从实现多云迁移到实现对Apsara Stack自动化迁移的全面支持,万博智云为自己的产品开启了顶级流量入口,获取客户信任的时间更短。
233 0
一款云迁移产品的成长史
在线揭秘 | 阿里云混合云重磅发布
6月9日,2020阿里云线上峰会在线揭秘,敬请关注!
605 0
在线揭秘 | 阿里云混合云重磅发布
|
NoSQL 数据库 关系型数据库
|
缓存 数据库 运维
从IDC到云端架构迁移之路(GITC2016)
机房迁移是一个很大的动作,
693 0
|
机器学习/深度学习 人工智能 算法
|
存储 安全 异构计算