+86 135 410 16684Mon. - Fri. 10:00-22:00

用亚马逊的云(AWS)免费建立wordpress blog

用亚马逊的云(AWS)免费建立wordpress blog

用亚马逊的云(AWS)免费建立wordpress blog

亚马逊现在提供免费的一年试用,试用包括了云虚拟机和关系数据库,所以可以用来建立一个免费的wordpress 博客,现在就让我们开始吧


建立主机包括以下几个步骤

安装云服务器和关系服务器

安装云服务器

在亚马逊上云服务器称为EC2, 选择你所要的区域(管理页面右上角),国内当然是亚洲了,Tokyo的不错就可以开始建立了,第一页选择服务器类型,从左侧选择免费的micro型主机, 然后选择需要的主机,本例子用的是ubuntu13.10. 第二页机器配置由于是免费的基本默认就可以了,其中有个区域选项,要记住是日本a还是c,关系数据库最好选择一样的。第三页配置硬盘,免费最大可以 30G。然后一路默认就可以了,最好会让你审查一遍,如果没有说超出免费限额就没问题了。 这里需要注意的是,确认前会问你使用的key,如果以前没有建过或上传过(每个区域独立的),就选择建一个新的,下载并保存好,之后登陆要用到后缀 是.pem。千万保存好非常重
要。

登陆云服务器

绑定Elastic IP

确认之后就可以看见建立,很快就可以看见机器建好了,此时你可以看见机器有一个public ip和public DNS,不要着急登陆。在左侧导航可以看到一个Elastic IP,选择建立一个,并将其绑定到你刚建立的服务器上。这样的好处是,当你重建虚机时public IP会变,如果你绑定了域名,由于TTL可能比较长,需要较长时间才能正确解析,有了这个Elastic IP之后只需要绑定ELastic IP到你的新主机就可以了,外部IP不变,不需要改DNS解析。当然如果你用的是收费服务他还可以做load balance.
当绑定之后你会发现主机的Public IP和DNS都有变化。

从windows用putty连接

Elastic IP绑定之后你就可以开始连接了现在以putty为例这里就会用到之前下载的.pem key文件 由于pem文件是openssh的格式putty不认识要用putty自带的puttygen工具转,打开puttygen,选择load,在文件选择时 选all files所以文件,然后选择你的pem文件,然后ok,你可以在comment中添加自己的注释,然后选择保存私有key,会弹出对话框问是否保存未加 密的key选择是,然后选个文件名保存就可以了 打开putty,Host Name 填Elastic IP(绑定后和public IP是一样的)或Public DNS都可以在connection->data 用户名填ubuntu,在connection->ssh->auth key文件选择你刚保存的key文件然后连接就可以了,建议保存该配置。以后可以命令行putty -load config_name来快速打开

从linux或openssh兼容工具登陆(如Ming)

ssh -i pemfile.pem ubuntu@PUBLICDNS

或者在~/.ssh/下建立config文件内容如下

Host YouSpecifiedNAME (eg. host1)
Hostname EC2PublicDNS
User ubuntu
IdentityFile /path/to/your/pem/pemfile.pem (建议放到.ssh下)
#PreferredAuthentications publickey

然后 ssh YouSpecifiedNAME就可以了

这样你就可以登陆看到你的云主机了

安装数据库服务器

安装数据库相对比较简单 切换到数据库->关系数据库 然后选择建立数据库,选择非产品或免费的那个选项,一路默认,注意网段选择和主机一样的,填好数据库instance名称用户名,密码,默认数据库可以不 建,然后选不自动备份,就可以了,容量选择最大20G,然后建立,稍等片刻就好了,保存好你的public DNS

 

安装设置PHP/NGINX

准备: 建立swap分区(仅当安装mysql server是需要)

由于micro型主机只有630M的内存,而亚马逊并没有在主机上建立swap分区,所以我们自己建一个,以保证运行的平稳,本文后面所有命令都假设在root权限下运行,也就是在登陆之后运行

sudo su

获得root权限之后,建立swap命令如下

dd if=/dev/zero of=/swapfile bs=1M count=1024 
mkswap /swapfile 
swapon /swapfile 
编辑 /etc/fstab 添加行 
/swapfile swap swap defaults 0 0 
#查看内存和swap状态 free -h
#查看特定进程的内存使用 pmap pid

准备: 更新软件安装必备的工具

亚马逊给我们装备的系统并没有更新到最新,我们更新一下,并安装必要的工具方便使用

apt-get update
apt-get upgrade
apt-get install vim curl git subversion zip unzip

配置php/mysql/nginx安装源

ubuntu中自带的php等安装源并没有升级到最新版本,所以建议自己配置私有安装源来安装最新的版本以减少错误和安全威胁,尤其是nginx,自带的版本有严重错误配置gzip-types会导致nginx崩溃,所以一定要选取最新的.执行会用到 add-apt-repository命令add-apt-repository执行后会获取源的信息并询问是否添加,回车即可,成功后显示ok

MySQL 5.6 (https://deb.sury.org/)

add-apt-repository ppa:ondrej/mysql-5.6

PHP5 5.5 (https://deb.sury.org/)

add-apt-repository ppa:ondrej/php5

Nginx stable(http://nginx.org/en/linux_packages.html#stable)

cd /tmp
wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
编辑 /etc/apt/sources.list
添加
    deb http://nginx.org/packages/ubuntu/ codename nginx
    deb-src http://nginx.org/packages/ubuntu/ codename nginx

其中codename在ubuntu13.10中是saucy,14.04是trusty,如果使用的其他版本的ubuntu可以参考这个配置文件中其他行的设置

安装php/mysql-client和nginx

配置完成之后安装就很容易了

apt-get update
apt-get install mysql-client-5.6   / mysql-server-5.6 # for server
apt-get install nginx
apt-get install php5-fpm   

由于我们的sql server使用的是亚马逊的RDS所以只需安装client就可以了,注意我们选择了5.6,因为在RDS建立时我们也安装的5.6的sql server。 注意 如果你执行 apt-cache search nginx 你会发现有很多如nginx-full,nginx-extras这样的这些都是ubuntu自带的,是旧版,千万不要安装,安装nginx这个是从我们 之前配置的源更新的。php我们将使用fastcgi与nginx连接,所以安装php5-fpm 接下来安装 php的常用模块

apt-get install php5-mysql php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-ming php5-ps php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl php-apc

至此,安装完成要启动或重启php5-fpm和nginx可以执行

service php5-fpm start
service php5-fpm restart
service nginx start
service nginx restart

当nginx启动之后,你可以 curl locahost 如果显示nginx的默认主页那么恭喜,你的环境已经安装成功了

 

安装wordpress

配置nginx fastcgi

配置nginx的sites设置

cd /etc/nginx
mkdir sites-available
mkdir sites-enabled
mv conf.d/* sites-available/
编辑 nginx.conf
找到  include /etc/nginx/conf.d/*.conf;
下一行添加 include /etc/nginx/sites-enabled/*.conf; 

这样做的好处是你可以在 sites-available 中添加很多配置,当你需要启用某项配置时只需要如下就可以了,不要是也只要删除这个link就可以了方便使用

ln -s /etc/nginx/sites-available/somesite /etc/nginx/sites-enabled/somesite

配置fastcgi

现在我们来配置fastcgi首先查看你的 /etc/nginx/fastcgi_params 文件看其中有没有 SCRIPT_FILENAME 这个参数的配置,如果没有添加如下,建议选择第一个

fastcgi_param SCRIPT_FILENAME $request_filename;
#或者 
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

其次查看你的 nginx.conf 确认user是www-data或者其他你要用的user 接下来我们以sites-available/default为例子

server {
server_name www.awsgood.com;
rewrite ^ http://awsgood.com$request_uri? permanent;
}
server {
server_name www.awsgood.com;
listen 80;
root /sites/www.awsgood.com;
index index.php;
client_max_body_size 4M;
client_body_buffer_size 128k;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml)$ {
access_log off;
log_not_found off;
expires 360d;
}
location ~ \.php$ {
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php5-www.awsgood.com.sock;
fastcgi_index index.php;
include fastcgi_params;
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
}
#location = /robots.txt {
# allow all;
# log_not_found off;
# access_log off;
#}
location ~ /\. {
access_log off;
log_not_found off;
deny all;
}
#gzip on;
#gzip_http_version 1.1;
#gzip_comp_level 6;
#gzip_min_length 1100;
#gzip_buffers 4 8k;
#gzip_types text/plain application/xhtml+xml text/css application/xml application/xml+rss text/javascript application/javascript application/x-javascript
#gzip_proxied any;
#gzip_disable MSIE [1-6];
}

需要注意的如下

  1. root路径为你放置文件的路径,保证该路径www-data有相应的权限,不要将root放在/配置下,在当前的php配置下那样会导致fastcgi错误,如果一定要可以参考网上其他教程,例如将php配置放在location配置中,改变权限使用如下命令 chown -Rh www-data:www-data /sites/default
  2. 注意php的配置fastcgi_pass现在用的是unix,你也可以指定端口如127.0.0.1:9002当nginx和php不在一台机器上的时候比较适用,记住这个配置值,在php5-fpm配置中会用到

这样配置就基本完成了。你可以在root下放置info.php

<?php
    phpinfo();
>

php5-fpm

配置php5-fpm中 /etc/php5/fpm/pool.d/www.conf 配置listen和nginx中配置相同。你也可以建立pool的其他pool来分离site。

listen = /var/run/php5-default.sock

及权限,否则错误描述为nginx error connect to php5-fpm.sock failed (13: Permission
denied)

listen.owner = www-data
listen.group = www-data
listen.mode = 0660

通过以上步骤将nginx的site和php5-fpm相连接。
重启php5-fpm和nginx来启用site,命令如下

service php5-fpm restart
service nginx restart

nginx的配置文件是否正确可以用命令 service nginx configtest
curl localhost/info.php 来测试,如果正确输出那么你的site配置就成功了

调试

nginx的fastcgi配置比较容易出错而且很难查找原因,所以建议初学者照以上步骤使用,等成功之后再调整相应的配置。当访问页面错误是可以查看nginx和php5-fpm的日志,其位置在

/var/log/nginx/error.log
/var/log/nginx/access.log
/var/log/php5-fpm.log

优化

当site可以正常运行之后,可以对其进行优化设置

Nginx

nginx.conf

worker_processes 1; # 设成cpu的个数
    # 查看cpu Id,0,1,2,3即有4个
    cat /proc/cpuinfo |grep processor
worker_connections 1024; # or 768
server_tokens off; #隐藏nginx 版本信息
#这3项和下面的fastcgi_buffer设置都是为了wordpress.com提供的插件jetpack所需,不设置会在log中有upstream sent too big header while reading response header from upstream的错误,详见[此处](http://stackoverflow.com/questions/13894386/upstream-too-big-nginx-codeigniter)
proxy_buffer_size   128k;
proxy_buffers   4 256k;
proxy_busy_buffers_size   256k;

site-enabled/default

#body size
client_max_body_size 20m;
client_body_buffer_size 128k;
#缓存静态文件
location ~* .(jpg|jpeg|gif|png|css|js|ico|xml)$ {
  access_log off;
  log_not_found off;
  expires 360d;
}
#禁止访问以.开头的文件
location ~ /\. {
  access_log off;
  log_not_found off;
  deny all;
}
# Gzip
gzip on;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_min_length 1100;
gzip_buffers 4 8k;
gzip_types text/plain application/xhtml+xml text/css application/xml application/xml+rss text/javascript application/javascript application/x-javascript
gzip_proxied     any;
gzip_disable     &quot;MSIE [1-6].&quot;;
# factcgi buffer
location ~ \.php$ {
    #添加如下
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
}

PHP APC

之前在安装php模块的时候已经安装了php apc此时对他进行配置就可以了

vim /etc/php5/fpm/conf.d/20-apcu.ini   
extension = apc.so
apc.enabled=1
apc.shm_segments=1
apc.shm_size=128M 
# entry time to live
## PHP file cache 1 hour ##
apc.ttl=3600
## User cache 2 hour ##
apc.user_ttl=7200
## Garbage collection 1 hour ##
apc.gc_ttl=3600
## Max File Size on APC Cache
apc.max_file_size=1M

安装wordpress

接下来就是安装wordpress了,将wordpress文件放置在site的root目录下用以下命令改变权限

chown -Rh www-data:www-data /sites/default

用你熟悉的工具在RDS上建立db和user然后用浏览器访问wordpress照提示就可以安装成功了

工具,参考文档及其他VPS推荐

工具,其他相关命令

  • cloudping亚马逊云测速工具,通过访问不同机房的网页获取当地的访问速度,推荐在不同时段运行找出合适的机房
  • linux host file /etc/hosts 格式 ip hostname 设置路径及所有子目录文件的所有者
  • chown -Rh www-data:www-data /sites
  • 解压不显示过程 unzip -q, tar -zxf
  • dd一个文件,可用来建立swap或测试下载速度 dd if=/dev/zero of=10M.dat bs=1M count=10
  • putty指定配置连接 putty -load config_name

其他VPS推荐

  • DigitalOcean优点是提供一个每月5每元的主机,看了国外论坛口碑不错,但要注意此主机和亚马逊的一样内存很少,而digitalocean没有RDS服务,所以要在本机上装数据库的话要注意优化数据库的内存使用
  • Linode的基本主机是20美元/月,比上面的贵不少,但cpu内存都很强劲,而且口碑也很好
  • 亚马逊aws这个不用说了本文写的就是他,亚马逊的云功能很多提供各种云方便使用,而且现在一年免费使用,所以特别推荐,唯一不好的是其收费也很复杂。。。笔者现在还是各种疑惑中。。
    另外这三个主机都包括独立IP的,相较国内的都算是非常良心了