来SAE搭一个WordPress博客吧~

想法

在 SAE 搭建一个 blog 的想法由来已久,但是一直都没有实施,直到今年五月份开始在办公室研究 WordPress,最后决定在 SAE 上面自己来搭建一套博客系统。把自己的一些文字和关于技术的成长经历放在上面,供自己,或者如果其他可以从这儿得到有用信息的人来逛一逛。

这一篇,就用来回顾一下搭建 WordPress 时候遇到的各种问题和解决办法吧,也可以作为一篇在 SAE 上搭建 WordPress 的教程吧。

先说一下为什么决定采用 WP 吧。首先是因为它的简单吸引了我,下载源码–>改变一下数据库配置–>网页上简单设置一下–>开始使用。许多完全不懂代码的同学看了相关的文档也一定可以玩转起来的。再者,WP 是开源的系统,我学习 PHP 有一段时间了,对它的代码比较熟悉,自己改动起来也十分方便。第三呢,就是界面非常的 Modern,一向看脸的我一下子就被吸引过去了。但是,为什么就不自己来写一套博客系统呢?这个问题其实很纠结,很久之前,在北邮人团队培训的时候 H 酱的确在台上带着我们用了三个晚上写过一套论坛系统,我也尝试做了一些,但是当时技术水平很差,bug 比较多,安全性也是问题,所以倒不如直接用 WP 图个方便,而且本来 WP 的可定制性就很高,自己也可以看着改一改,不如先写一套 UI(也是一直没有开工)。日后有很闲时间再想着写一套自己的吧。

环境搭建

SAE Begin

SAE 是新浪推出的一款云服务,全名叫 Sina App Engine,主要是用来跑一些 Web Service,对 PHP 的支持尤其的好,而且如果计算量和访问量不大是免费的(如果量大的话,转移到阿里云和 Azure 上面也比较方便)。也作为国内第一款 PAAS 的产品,有了一些与 GAE 感觉(如果不是被墙,肯定首选 GAE 了)。除了速度略慢,没有什么大的缺点了。 废话不多说了。先来说说怎么开始使用吧。登录 http://sae.sina.com.cn/ ,使用新浪微博账号登陆(没有微博账号的点击注册很轻松就可以注册一个)。登录之后,从控制台中选择”云应用 SAE),进入到 SAE 控制台页面。点击创建新应用,设置应用的二级域名,名称,输入验证码,选择开发语言(php7 或者 php5.6 的空应用)即可。

管理环境

SAE 的管理环境非常友好,在总览里面可以看见访问 PV,消耗的云豆和防火墙拦截情况,还能邀请其他人和你一起编辑这个应用(前提是新浪微博),还可以绑定独立域名。

首先点击代码管理,因为只是自己在维护,所以 SVN 是一个不错的选择,所以选择 svn 进行代码管理。点击创建版本,将创建版本号为 1 的版本。(可能需要输入密码)。 现在,就可以使用 SVN 管理代码了,关于 SVN 在 windows 下的使用,可以参考http://www.sinacloud.com/doc/sae/tutorial/code-deploy.html#svn

因为 WP 还需要 MySql 数据库的支持,所以现在打开 MySQL 数据库的支持。点击数据库服务中的 MySQL,选择免费的共享型 MySQL,选择 MyISAM,Mysql 功能已经开启。

接下来再存储与 CDN 服务中打开 Storage 业务,点击新建 Domain,输入 wordpress 作为名字,剩下默认(注意不要设为私有),再打开 Memcache,使用默认容量即可。

至此,环境搭建全部完成。

开始使用 WordPress

下载 WordPress

打开网址 https://cn.wordpress.org/ ,下载最新版本的 WordPress(国内可能因为访问不了 google 造成加载过慢),并且解压。

上传代码

使用 SVN 将代码上传到 SAE 中。

调整配置文件

将 wordpress 目录中的 wp-config-sample.php 文件复制为 wp-config.php,并且编辑之。 修改内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/** WordPress 数据库的名称 */

define('DB_NAME', SAE_MYSQL_DB);

/** MySQL 数据库用户名 */

define('DB_USER', SAE_MYSQL_USER);

/** MySQL 数据库密码 */

define('DB_PASSWORD', SAE_MYSQL_PASS);

/** MySQL 主机 */

define('DB_HOST', SAE_MYSQL_HOST_M.':'.SAE_MYSQL_PORT)

设置账户

访问接下来 Wordpress,设置用户名密码,就可以进入到 WordPress 中。

注意事项

SAE 中 PHP 没有写入目录文件的权限,所以 1.安装插件需要先下载到本地,然后使用 SVN 上传,在进行配置 2.上传照片需要交给 storage 来进行

在 SAE 中使用 Storage

创建文件 sae.php

在代码版本的根目录(注:不是应用目录)下创建文件 sae.php,源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

/* 在SAE的Storage中新建的Domain名,比如"wordpress" */

define ( 'SAE_STORAGE', wordpress );

/* 设置文件上传的路径和文件路径的URL,不要更改 */

define ( 'SAE_DIR', 'saestor://' . SAE_STORAGE . '/uploads' );

define ( 'SAE_URL', 'http://' . $_SERVER ['HTTP_APPNAME'] . '-' . SAE_STORAGE . '.stor.sinaapp.com/uploads' );

?>

修改 wp-includes/functions.php 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/**_ Step 1: include sae.php  _**/

include( ABSPATH . '/sae.php' ); //添加这一行。调用 SAE 的 Storage 文件域名设置

require( ABSPATH . WPINC . '/option.php' );

前添加

/**_ Step 2: 替换代码 _**/

/*

$wrapper = null;

// Strip the protocol.

if (wp_is_stream ( $target )) {

list ( $wrapper, $target ) = explode ( '://', $target, 2 );

}

// From php.net/mkdir user contributed notes.

$target = str_replace ( '//', '/', $target );

// Put the wrapper back on the target.

if ($wrapper !== null) {

$target = $wrapper . '://' . $target;

}

*/

//替换为以下代码

// from php.net/mkdir user contributed notes

if (substr ( $target, 0, 10 ) == 'saestor://') {

return true;

}

$target = str_replace ( '//', '/', $target );

/**_ Step 3: 添加代码 _**/

$dir = SAE_DIR; //添加这一行

$url = SAE_URL; //添加这一行

$basedir = $dir;

/**_ Step 4: 添加代码 _**/

//添加如下代码块

if ( !function_exists('utf8_encode') ) {

function utf8_encode($str) {

$encoding_in = mb_detect_encoding($str);

return mb_convert_encoding($str, 'UTF-8', $encoding_in);

}

}

//在这前面添加上述代码

/**

- Send a HTTP header to limit rendering of pages to same origin iframes.

-

* @since 3.1.3

*

- @see https://developer.mozilla.org/en/the_x-frame-options_response_header

*/

### 修改 wp-admin/includes/file.php

/**_ 注释如下代码 _**/

// Set correct file permissions.

$stat = stat ( dirname ( $new_file ) );

$perms = $stat ['mode'] & 0000666;

@ chmod ( $new_file, $perms );

下载 uploads 内容

参考 SAE 的官方文档即可 http://www.sinacloud.com/doc/sae/php/storage.html#windowsmac

参考内容: http://sparkandshine.net/build-wordpress-blogs-on-sina-cloud-solve-uploads-directory-permissions/