基于AWS EC2 & WordPress搭建个人Blog笔记

随着coud computing的发展,越来越多人将自己的平台搬到了云主机上来,尤其是中小、个人站点。对于中小团队以及个人站长而言,对一个云平台的考量,除去价格因素,考虑最多的应该是该云平台的其他配套服务,如海量存储服务、缓存服务、负载均衡服务、邮件服务等。如果只从这两个维度来看,业界的翘楚当推Amazon Web Services (AWS) 「因为总所周知的原因,只能为Google App Engine感到遗憾……」。

两年前就听闻AWS要在天朝建IDC了,可是到现在,也仅仅是上线了中文网站罢了。IDC建在墙内的好处当然是更好快速的访问速度,但是同时也面临着匪夷所思的监管制度。但是这并不影响我们体验AWS提供的优质的服务,从可用性来看,用户过亿的Instagram在墙内使用也是没有什么问题的;从价格上来看,AWS现在注册以后绑定信用卡就可以免费使用一年费使用套餐介绍」,虽然是温水煮青蛙的策略,但是就事情本身来看,还是挺不错的。

下面简单说一下在AWS上使用其EC2建立个人Blog的过程。

1. 建立主机实例

  • 登录管理控制台,进入EC2
  • 选择Launch Instance,我这里选的是亚马逊推荐的Amazon Linux AMI 2013.09.2:

    The Amazon Linux AMI is an EBS-backed, PV-GRUB image. It includes Linux 3.4, AWS tools, and repository access to multiple versions of MySQL, PostgreSQL, Python, Ruby, and Tomcat.

  • 默认是公/私钥认证登录。记得保存好自己下载的私钥。启动主机后,使用默认用户名ec2-user/私钥登录主机:

    ssh -i your_private_key.pem ec2-user@1.1.1.1

    • 亚马逊的控制台自动生成的命令有一个bug,就是他给出的Example连接命令会把你私钥名称中的「空格」直接附上,如果是复制粘贴党,注意自己去除空格。
    • 如果想要通过口令访问主机,可以在通过证书登录后:
      1. 设置ec2-user的密码:sudo passed ect-user
      2. /etc/ssh/sshd_config中将PasswordAuthentication no–>yes
      3. 由于AMI不允许直接使用root登录。如果想允许的话(不推荐这样做,存在安全隐患)可以通过将/root/.ssh/authorized_keys中的如下内容删去:

        command=“echo ‘Please login as the ec2-user user rather than root user.’;echo;sleep 10

      4. 重启ssh服务:service sshd restart

2. 安装apache mysql php

AMI通过yum安装:

yum -y install httpd php mysql mysql-server php-mysql

默认情况下apache和mysql服务不会开机启动。可以通过chkconfig命令设置一下:

chkconfig httpd on
chkconfig mysqld on

3. 设置主机实例的固定IP

最开始使用EC2主机的童鞋可能会觉得亚马逊的“主机每启动一次,主机IP就变化一次”非常坑爹。这个问题可以通过设置Elastic IP与主机实例绑定解决。从细粒度管理角度看,亚马逊这点非但不是缺点,反而提供了良好的带宽接入选择空间和扩展余地。

4. 安装WordPress

WordPress本身的安装非常简单。但是新版的WordPress插件是通过ftp的方式安装的,也就是说你的主机实例需要跑一个ftp server。这里推荐使用vsftp:

yum -y install vsftpd

然后注意设置用户默认ftp目录为WordPress安装目录的顶层目录。编辑/etc/vsftpd/vsftpd.conf,修改local_root=your_path.

WordPress安装插件的时候,如果填写自己的域名无法,那么就填写127.0.0.1。
如果插件下载下来安装失败,那么可能是wp-content/plugins没有写权限,尝试:

chmod -R 777 path_to_your/wp-content/plugins

最后,上线自己的Blog之前别忘了启用gzip压缩提高访问速度,节省带宽。apache可以通过deflate模块实现压缩。向httpd.conf中添加该模块配置信息即可。参考配置:

<IfModule deflate_module>
SetOutputFilter DEFLATE
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
</IfModule>

启用gzip压缩后,记得重启apache服务。

可以通过Google的网页在线测试工具对比一下启用压缩前后的变化。怎么样,效果还是挺明显的吧?

 3月1日更新

服务器跑了几天以后,发现服务器每隔一天就崩溃一次。后来发现是因为AWS Linux AMI默认swap大小为0造成的(好奇怪的默认值……)。知道原因以后解决方法就简单了,只需要建立一个swap交换空间即可,大小一般为物理内存两倍。