IT · 2022年3月1日 1

手把手教你怎样在AWS上搭一个属于自己的博客网站

有电脑吗?✅ 能上网吗?✅ 会打字吗?✅ 好了,现在你可以搭一个自己的博客网站了。

你觉得前面这句话像是个段子吗?其实不是,现在如果你想要搭一个自己的博客网站,真的只需要满足上述三个条件就行,今天我要给大家送上一个建站的奶妈级教程,从AWS注册到Docker环境搭建到WordPress部署再到域名解析,总之你只要全流程无脑照做,你就能领一个真正属于自己的个人博客网站回家,其实这篇教程也是一篇约稿,送给一位准博士,希望她可以早日拥有一个自己的网站。

首先聊一下个人网站可以给自己带来什么好处,当你拥有一个个人网站以后,你可以更自由地发布你想要发布的内容,不受各种奇葩审核的限制;你可以利用你的网站打造个人IP,发布技术博客可以让你当前的或者下一任雇主更容易了解你的技术特点,也可以在技术社区结识志同道合的人;发布学术文章、笔记或学术成果可以让你的导师和同行对你的学术水平和兴趣方向更加了解,发布日常照片和游记可以记录自己生活的或游历的点滴供未来的自己回味和吹牛逼。而当你把内容运营得足够好,拥有充足的流量的时候,你也可以放置广告来进行流量变现。何乐而不为呢?


预告一下,由于本教程所针对的是那些对云服务、网络都0基础的朋友,所以文章会展示很多操作细节,因此这篇文章可能会比较长。

我们搭建个人网站大的步骤是:注册AWS账号,创建满足12个月免费的实例,在服务器上配置好Docker环境,使用docker-compose无脑拉取WordPress和MySQL镜像并进行部署,在网页上初始化WordPress配置,在AWS上购买自己的域名并进行域名解析配置,使网站拥有自己的域名。

这里先做几点简要说明,WordPress是一个用PHP开发的成熟且开源的个人网站框架,之所以在这里使用WordPress架构主要是因为它对非程序员群体比较友好,WordPress拥有一个相对完整的生态,有丰富的插件市场和主题库,几乎可以满足你的任何功能或个性化需求,自由度高,可以在无代码的环境下构建高度定制化的精美页面,后台管理功能完善,其功能甚至强大到可以让你在把它搭建完成之后就再也不需要接触命令行或代码的程度,对非程序员群体非常友好,适合普通人使用。

WordPress框架的官网是wordpress.org,这是一个非盈利的网站,另外还有一个盈利性质的WordPress博客搭建网站是wordpress.com,这个网站需要你去注册一个账号,然后可以拥有一个功能受限的WordPress系统,如果想要使用诸如插件或者主题皮肤之类的功能,就需要花钱买更高档位的套餐,价格一点也不便宜,并且它会在你的网站中嵌入广告,你写文章发照片吸引来的流量,都会给它的广告带来收益,在我看来就是在赚黑心钱,非常的恶心。而如果是我们自己搭建WordPress站点,不仅可以不受限制地使用所有WordPress功能,而且如果做得好还可以通过Google的广告联盟嵌入自己的广告链接,网站流量所获得的收益也都属于我们自己。希望大家鉴别wordpress与wordpress.com的区别,不要上当受骗,也不要被他人薅了羊毛。

下面再简单介绍一下AWS,AWS是亚马逊的云服务,亚马逊是全球最大的云服务器供应商,贝索斯也是依靠着这项业务而荣登世界首富的,在中国最早复制其模式的阿里巴巴的阿里云,后来腾讯、网易、百度都建设了自己的云服务生态(下文会将这些国内的云服务商简称为“阿里云们”),我们之所以在这里选用AWS,是出于以下几点原因:

  1. 如果你是新用户,那么你可以使用一个为期12个月的免费实例(也就是服务器),而阿里云它们的策略是对于新用户可以用白菜价(通常几十块钱)租一个为期一年的低配服务器,相比之下,我们还是更倾向于白嫖。
  2. 在AWS上购买域名托管网站,是不需要备案的,如果你在国内购买阿里云的域名,想要解析到你的服务器上,需要进行ICP备案,上传手持身份证的照片,描述网站内容等等一系列繁琐的程序,如没有备案,域名就无法正常使用。当然使用AWS建立网站也是一把双刃剑,创建境外网站不会直接受到监管,在不违规的情况下也不会被墙,但是请自觉遵纪守法。
  3. AWS实例的启动或销毁比较自由,当你过了免费期以后,它的计费模式也是按实际使用计费,你关闭实例就可以停止计费,而阿里云们是预付费模式,中途不能停止,并不灵活。
  4. AWS的实例拥有更好的网络速度,当你创建一个位于美国的实例时,你的docker镜像的拉取、yum更新以及wordpress插件安装等一系列操作都可以在不使用任何镜像的情况下尽享丝滑。另外如果你想使用Google的Analytics(流量统计)和AdSense(广告联盟),国内的服务器网络是用不了的,使用AWS可以享受便利,也就是说如果你想利用流量赚点零花钱,那么选用AWS会比阿里云们简单很多(国内的广告联盟要么门槛太高,要么广告太Low,要么不靠谱,还是首选Google吧)。

综合易用性和性价比来说,我们选择使用AWS来搭建我们的网站。由于我们在这里使用国际版的AWS,所以需要你准备一个可以结算美元的信用卡,Visa或者Master卡都行,不管你是否消费,都需要给你的AWS绑定一个信用卡才能正常使用其服务(即使是免费资源)。

另外,如果你要给自己的网站配一个域名,是需要花钱进行注册的,具体花多少钱,就要看你的域名有多抢手了,一般来说在AWS上购买比较冷门的域名价格都在$12左右,换算下来通常也不超过100块钱人民币。

好了,物质准备和心理建设工作完成以后,下面我们开始实操吧。

注册AWS账户

首先我们登录AWS的官方网站:https://aws.amazon.com/cn/

注意,上面这个网址是亚马逊AWS官网的中文页面,另外你可能还听说过一个网站叫“亚马逊云科技”(https://www.amazonaws.cn/),这个是亚马逊云服务在中国创立的本土化子公司,在中国的北京和宁夏建立了数据中心,它主要是针对企业用户,似乎并没有个人开发者的业务,甚至都不开放个人注册(比阿里云们还严格)。

在上图所示的网页中,点击“创建新AWS账户”,然后按照提示一步一步填入信息,

当我们遇到注册用途选择时,请选择“个人”

注册过程中会遇到各种验证码验证,如实验证即可,到了填写信用卡信息的步骤时,会显示以下内容:

这里我说明一下这几个信息都对应着信用卡的哪几部分,以Visa卡为例,卡号就是卡面中央最长的那一串数字这个大家都知道,然后卡号下面会有一个以“/”分割的两个数组,它就代表着过期日期,“/”前面代表的是月份,后面代表的是年份,例如“12/24”代表的过期日期为2024年12月。卡面的左下角一般是持卡人姓名,你需要把卡面显示的你的英文姓名填入注册信息,而不是你的中文名。

注意,当你填完这一系列信息并提交以后,你的亚马逊账户就和该信用卡完成了绑定,亚马逊就有权直接从你的信用卡里扣钱了,而且这张信用卡不能直接解绑,除非绑定新的信用卡以后才能解绑旧卡,如果对这一点非常介意的话,请在这一步完成之前就停止。

信用卡信息提交以后,亚马逊会对信用卡的有效性进行验证,如果发现这是一张无效信用卡,可能会影响你在AWS后续使用的服务。

如果根据提示完成了所有的步骤,那么恭喜你,你现在拥有了一个全新的AWS账户,同时拥有了一个白嫖12个月服务器的权利。

创建AWS实例

我们不管是在使用AWS还是在阿里云们时,都会遇到“实例”的概念,这个东西是什么意思?它其实是云服务商根据你的配置创建的虚拟机,但是因为你在使用实例的时候与真实物理服务器的体验完全一样,所以我们也可以把“实例”约等于“服务器”。

我们要创建网站,必须要有服务器做为载体,现在我们就先创建一个符合建站要求的免费实例。

首先登录控制台,选择一个区域,这里建议选择美国,限制少,网速快。

进入该区域的控制台以后,点击“启动实例”,进入实例预配置页面。

在镜像市场中搜索centos,并选择centos7作为启动镜像,这里最好跟我保持一致,因为如果你选择其他的镜像,后面的操作命令可能会不一样。

后面进入到实例类型选择时,请选择t2.micro,因为只有它是免费实例。

选择完成以后直接跳到“添加存储”页面,将存储大小改为30G(因为免费实例的上限就是30G)

完成之后直接跳到“配置安全组”页面,放开80端口的防火墙,这样浏览器才能访问我们的网站,具体操作是点击“添加规则”,然后在新弹出的配置框中把“端口范围”改为80。

最后启动审核,启动实例。

这个时候会弹出秘钥对配置的窗口,这一步是让你初始化ssh免密登录的秘钥的,你选择“创建新的秘钥对”,然后在“秘钥对名称”中给秘钥起一个好识别的名字,比如aws-id-rsa,然后点击“下载秘钥”。这个秘钥文件非常重要,且只有这一次下载的机会,一定要保管好,如果秘钥对丢失,将无法登录服务器,且没有办法重新下载,只能把实例销毁重建

当你完成秘钥对的下载以后,“启动新实例”的按钮才会被点亮,你才能继续下面的步骤。当实例创建成功以后,会出现下面的页面:

我们返回控制台,可以发现已经出现了一个实例。

当我们勾选该实例以后,还可以查看实例的详情,其中公网IP就是我们登录服务器时需要使用的IP地址。

登陆服务器

对于MacOS或者Linux系统的小伙伴来说,登录AWS服务器非常简单。首先把下载下来的秘钥文件拷贝到~/.ssh/目录下,假如我们下载的aws-id-rsa.cer文件存储在了桌面上,我们就可以执行:

$ sudo cp ~/Desktop/aws-id-rsa.cer ~/.ssh/

然后将秘钥文件的权限改为400,执行

$ sudo chmod 400 ~/.ssh/aws-id-rsa.cer

之后我们就可以通过ssh登录服务器了,执行

$ ssh -i ~/.ssh/aws-id-rsa.cer centos@54.193.158.142

即可登录到服务器,注意把公网IP换成你自己实例的公网IP

对于Windows的小伙伴来说,情况就有一些复杂了,因为Windows无法直接使用ssh协议进行远程通信,需要借助客户端,这里我们就介绍一下使用Xshell登录服务器的方法。当然了你需要预先安装好Xshell,你可以去Xshell官方下载一个免费的家庭版客户端,这里不做赘述。

当你安装好了Xshell以后,可以按照下面图示的方法添加连接。 

设置用户身份验证方法,取消Password模式并选用Public Key模式。

创建连接以后开始连接,并根据提示输入用户名,centos镜像的默认用户名为centos 

当它提示验证秘钥时,选择“接受并保存” 

当它提示你要提供秘钥时,点击“浏览”->“用户秘钥”->“导入”,然后选取你刚才从AWS下载的aws-id-rsa.cer文件打开,然后选中该秘钥,点击确定按钮。 

这样就配置完成了,但是有时候我们点击确定以后终端会显示我们超时连接失败,没关系,重新连接一次就好。

搭建docker环境

当你可以登录服务器以后,就需要在服务器上部署你的网站服务了,其实网上有很多关于WordPress的裸机部署方案,需要自己安装并部署MySQL数据库,过程比较繁琐。我不想这么累,只想无脑部署怎么办?很简单,用docker。

可能有些人对docker没有概念,我先来简单解释一下docker是什么,docker是目前非常流行的一种容器化技术,它可以把软件系统连同环境一起打包,以最大程度地保持开发与部署的环境一致性,降低部署、移植以及运维的难度。

举个例子,比如说你买一个盆栽,如果商家卖你盆栽的时候是把它从花盆里刨出来,然后你带回家再重新种到土里,这个过程就有可能导致植物的死亡,所以更好的办法是买的时候连植物和花盆一起带走,而docker就相当于是这个种着盆栽的花盆。

当我们使用docker配合docker-compose进行部署的时候,就可以简化一切繁琐的部署步骤,实现一键无脑部署。

这里再解释一下什么是docker-compose,通常情况下,如果我们只是简单地启动一个docker容器,那么启动的命令不会很长,但是如果docker容器的配置参数比较复杂,比如有很多个路径需要映射,或者要注入大量的环境变量,那么我们可能就需要输入一个巨长无比的docker命令,在可读性和可维护性上都大打折扣,有没有一种更优雅的方式来解决这个问题呢?有,那就是docker-compose,它是一种轻量级的容器编排工具,你可以使用yaml格式预定义一个容器的配置文件,按照你预先定义好的配置信息一键启动一个或多个容器,它可以让你的复杂配置的容器启动变得更优雅和易于维护。

由于我们部署WordPress需要至少两个独立的服务:一个MySQL和一个WordPress,需要启动两个容器,且涉及到较多的配置信息,所以我们将会使用docker-compose来启动它们。

安装docker和docker-compose很简单,首先安装docker,在centos中执行:

$ sudo yum install -y docker

出现类似上图的结果即为安装成功。

这里有个小插曲,在我完成上述步骤以后,AWS的终端出现了卡死,然后重新打开终端就连ssh也无法登录了,只能重启试试,登录控制台,选中实例然后点击“实例状态”->“停止实例”,等实例停止以后再点击“启动现有实例”以完成重启,注意标签页里的“重启实例”是不起作用的。

但是这样重启实例以后,我们的公网IP会发生变化,所以你的登录配置也需要随着一起改变。当然,你如果想让公网IP固定不变,可以使用AWS的“弹性IP”服务,但需要额外花一点钱,我觉得没必要,所以就没用。细心的你们可能会发现我后面的截图的公网IP会和前面的不一样,知道原因就好。

重新登录服务器,我们需要启动docker服务,执行两条命令:

$ sudo systemctl start docker 
$ sudo docker ps

当它出现类似下图的输出时,表示docker启动成功。

安装完docker以后,我们需要安装docker-compose,根据官方文档的安装指南来说,在不借助pip的情况下,我们至少需要执行以下3条命令以完成安装:

$ sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

无脑执行就好。

部署WordPress

好了准备工作都做完了,现在要开始真正地部署我们的网站了,可能你要问了,我连一行代码都没看到,网站在哪呢?答案是在DockerHub里,DockerHub是一个镜像仓库,它有点类似于GitHub这种代码仓库,只不过存的不是代码,而是docker镜像,我们部署所需要的WordPress和MySQL镜像都已经被预存在这里了,我们需要部署的时候,直接通过网络把镜像拉下来就可以使用了。

当然,我们需要一个yaml格式的容器编排文件,请在服务器上用vi命令打开一个文本编辑器(关于vi的使用方法可以去网上查找相关资料,在这里不做赘述),然后将下列代码块拷贝进去并保存为一个名为docker-compose.yaml的文件:

version: "3"

services:
  wordpress:
    image: wordpress:5.7-php7.4
    restart: unless-stopped
    ports:
      - 80:80
    environment:
      WORDPRESS_DB_HOST: mysql
      WORDPRESS_DB_USER: username
      WORDPRESS_DB_PASSWORD: password
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress:/var/www/html
  mysql:
    image: mysql:5.7
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: username
      MYSQL_PASSWORD: password
      MYSQL_RANDOM_ROOT_PASSWORD: "1"
    volumes:
      - mysql:/var/lib/mysql

volumes:
  wordpress:
  mysql:

然后在docker-compose.yaml文件的同级目录下执行:

$ sudo docker-compose up -d

出现类似下图的提示则为部署成功:

至此,我们的网站部署就完成了,是不是很惊讶,就这么简单?是的就是这么简单,并且对于讨厌终端界面的小伙伴来说还有一个好消息,那就是从这一步往后,你就无需再和命令行打交道了。

初始化配置

现在我们抛开终端,打开我们熟悉的浏览器,在地址栏里输入你实例的公网IP,例如我在地址栏里输入的就是:http://52.53.158.191/,然后你就会看到WordPress的一个初始化页面,让你选择语言,有点类似于买回来的电脑第一次开机提示你选择语言一样,在这里我们选择简体中文。

之后页面会跳转到另一个初始化的页面,你需要在这里设置你的站点名称(后期可以改)并创建一个管理员账户,这里它可能会给你一个建议密码,但是我建议你不要用它建议的密码,而是使用一个你熟悉的密码

设置完以后,它会跳转到登录页面,你就可以使用你刚才初始化创建的用户进行登录了。

现在你可以看到你的网站后台了。

我们点击左上角的站点名称,然后点击“查看站点”,就可以看到你网站的默认前端效果了。

这些都是你的,是不是已经有点小成就感了。

购买域名并进行DNS解析

虽然我们已经成功地把网站搭建起来了,但是现在访问它还是需要输入丑陋的IP地址,如果我们想要使用一个优雅的域名来访问自己的网站要怎么操作呢?这个时候就需要使用AWS的Route 53服务了,走,我们先去买个域名。

注意,购买域名及域名解析是需要支付费用的,不同域名的价格差异很大,而单个域名维护的成本大约每月$0.5,如果不想解析域名请不要进行下列步骤

我们进入AWS的控制台,选择Service -> Route 53

点击左侧的“注册域”,再在页面顶部点击“注册域”,进入域名搜索页面,我们可以搜索我们感兴趣的域名拼写,看看有没有被人注册,右侧的下拉框是我们可选的一级域名列表。简单说明一下,我们通常见到的.com.org的后缀是一级域名(顶级域名),一级域名左侧的是二级域名,二级域名的左侧是三级域名,例如https://baike.baidu.com/中,baike就是三级域名,baidu是二级域名,com是一级域名。通常情况下,不同的一级域名的价位也不同,.com比较抢手也比较贵。.com下的二级域名资源不容乐观,现在几乎所有有意义的英文单词都已经被抢注了,而且有些人专门做域名的转卖生意,屯下大量优质域名然后待价而沽,你可以随便搜几个试一下看看价格,一般比较冷门的一级域名相对来说还比较容易注册,也比较便宜。

在这里我就注册了一个clarmy.link,因为它确实够便宜。

注册域名需要填写一些基本信息,然后AWS会根据你的注册信息给你发邮件验证,然后稍等片刻(可能十几分钟,可能半个小时)即可注册成功,注册成功以后,它会给你的邮箱发送信息,这时候你再刷新Route 53的控制面板,就可以看到已经有一个域名在等待着你的宠幸了。

接下来,我们可以按照下面几张示意图的指示,将clarmy.link域名解析到我们实例的公网IP上。

这一系列操作完成以后,我们再在浏览器的地址栏里输入clarmy.link就会发现它已经指向了我们刚才建立的网站。

这个时候对于域名解析这一块我们还有最后一步需要做,那就是对网站后台的域名解析设置。虽然我们刚才已经成功地将网站前端的解析到了域名上,但是当我们通过http://clarmy.link/admin访问后端(登陆)以后,它在地址栏上显示的还是公网IP地址,这里需要我们在WordPress的后台进行域名设置。

进入后台管理页面,点击“设置”,然后将“WordPress地址(URL)”和“站点地址(URL)”更换为我们的域名地址,然后确认保存。之后我们再次访问http://clarmy.link/admin,然后重新登录一下,就会发现地址栏的域名已经改为clarmy.link

至此,我们的域名解析工作也大功告成。

相信大家从上面的描述已经注意到了,网站的后台登陆是在域名后加入/admin路由进行登陆,也就是说今后你想要进入网站的后台,就可以访问http://<你自己的域名或公网IP>/admin来进行登陆,把它加入你的收藏夹吧。

请尽情探索

WordPress是一个内容管理框架,你可以用它写文章,也可以当做相册,它包含有丰富的插件和主题市场,有大量的工具和个性化皮肤可供选择,它还支持对页面布局的自定义调整,以及各种各样的小工具。这里是一个无代码的生态,你可以尽情地探索它里面各种好玩的东西。

加油吧,期待你们的作品。