WordPress + Heroku + PostgreSQL + Amazon S3 = ¥0 / 免费网站运营


我已更新博客。原始文章在这里。


我曾经尝试使用Heroku在WordPress上运营,发现真的非常方便。而且还是免费的。
但实际上,确实遇到了一些困难。如果不写下来,我一定会忘记的。

起初我打算自己努力去做,但是中途遇到了困难,所以决定借用其他人的力量。截至2015年1月,WordPress版本已经升级到4.1。关于WordPress在Heroku上的使用。

Screen Shot 2015-01-30 at 3.34.45 PM

本地开发环境

首先,我们要搭建本地开发环境。
虽然有点麻烦,但是只要做一次,之后部署就应该很简单了。
由于Rails + Heroku的组合很常见,所以能够以同样的方式进行部署是令人高兴的。

    • Vagrant ( CentOS6 + Apache )

 

    • PostgreSQL

 

    WordPress

下载并将文件夹名称更改。

$ git clone git://github.com/mhoofman/wordpress-heroku.git
$ mv wordpress-heroku my-wordpress

创建一个Git仓库,并注册远程仓库。
关于Git的流程,我之前在Rails版本中已经写过了,请参考那里。
逐步详细说明如何在Heroku上发布Rails应用程序。

PostgreSQL (数据库管理系统)

WordPress通常使用MySQL作为数据库,但是刚刚从存储库中下载的版本已经安装了插件,使得可以使用PostgreSQL。
插件在这里。
WordPress › PostgreSQL for WordPress (PG4WP) « WordPress Plugins
※这不是像通常的插件那样可以通过WordPress管理界面操作的。

所以我要创建一个PostgreSQL数据库。

$ sudo -u postgres psql
DB作成
postgres=# create database my-wordpress owner yourname;
確認
postgres=# \l
終了
postgres=# \q

Apache的配置和环境变量

最終的にHerokuにデプロイするので、DBの接続情報を環境変数に登録しておく。
1つのIPで複数のプロジェクトを開発してるから、VirtualHostで切り替える。

Apache設定ファイルの編集
$ sudo vi /etc/httpd/conf/httpd.conf

↓

<VirtualHost *:80>
    ServerName     dev.yoursite.com
    DocumentRoot   "/var/www/html/my-wordpress"
    setEnv WP_DB_NAME xxxxxxxxx
    setEnv WP_DB_USER xxxxxxxxx
    setEnv WP_DB_PASSWORD xxxxxxxxx
</VirtualHost>

可以在setEnv中注册环境变量,
然后在PHP中使用getenv(‘WP_DB_NAME’)。

Apache启动

$ 服务httpd启动
$ 如果已经启动,则重启服务httpd。

hoster

请配置WordPress。

将先前添加的环境变量反映到配置文件中。
在本地,WP_DB_HOST的值通常为localhost,在Heroku中,可以在添加数据库时获取该值。

wp-config.php => wp-config.php 文件

<?php

define('DB_NAME', getenv('WP_DB_NAME'));

/** MySQL database username */
define('DB_USER', getenv('WP_DB_USER'));

/** MySQL database password */
define('DB_PASSWORD', getenv('WP_DB_PASSWORD'));

/** MySQL hostname */
define('DB_HOST', getenv('WP_DB_HOST'));

?>

省略しますが、こちらも環境変数にしましょう。
便利なジェネレータはこちら。
php
define(‘AUTH_KEY’, ‘xxxxxx’);
define(‘SECURE_AUTH_KEY’, ‘xxxxxxxx’);
define(‘LOGGED_IN_KEY’, ‘xxxxxxxx’);
define(‘NONCE_KEY’, ‘xxxxxxxx’);
define(‘AUTH_SALT’, ‘xxxxxxxx’);
define(‘SECURE_AUTH_SALT’, ‘xxxxxxxx’);
define(‘LOGGED_IN_SALT’, ‘xxxxxxxx’);
define(‘NONCE_SALT’, ‘xxxxxxxx’);

当您通过浏览器访问时,应该会显示WordPress的初始设置界面。在这个例子中,是dev.my-wordpress.com。(由托管服务商配置)

亚马逊 S3

由于使用了Heroku作为前提条件,所以需要另外设置一个图像存储位置。我们想要像在Rails中一样将图像保存到Amazon S3中。

请在Amason S3中创建一个具有适当名称的Bucket。
同时进行Bucket Policy的设置。
Policy示例可参考以下页面:
https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html
我认为让匿名用户拥有只读权限应该就可以了。

由于需要赋予WordPress上传图片的权限,
请前往IAM创建一个适当的用户,并赋予与S3相关的权限。
一旦获取到Key和Secret,请保存好,以备在WordPress内使用。

在wordpress-heroku中预装有可使用S3的插件。
(默认情况下未激活,需前往Plugins / Installed Plugins进行激活。)
插件下载链接如下:
WordPress › WP Read-Only « WordPress Plugins

如果您在Settings / WPRO Setting中输入了之前的Key和Secret,则完成了。
我遇到了一个小问题,就是选择Region。
如果由于某种原因您正在使用Sydney的Region之类的选项,则WPRO的Region选择选项中不存在。

WPRO Plugin Settings ‹ Washoku Lovers — WordPress

所以我自己添加了进去。
Amazon的官方提供了Region列表。
http://docs.aws.amazon.com/general/latest/gr/rande.html#s3_region

wpro.php 350行目あたり

<select name="wpro-aws-endpoint" id="wpro-aws-endpoint">
<?php
    $aws_regions = array(
        's3.amazonaws.com' => 'US East Region (Standard)',
        's3-us-west-2.amazonaws.com' => 'US West (Oregon) Region',
        's3-us-west-1.amazonaws.com' => 'US West (Northern California) Region',
        's3-eu-west-1.amazonaws.com' => 'EU (Ireland) Region',
        's3-ap-southeast-1.amazonaws.com' => 'Asia Pacific (Singapore) Region',
        's3-ap-southeast-2.amazonaws.com' => 'Asia Pacific (Sydney) Region', //追加した
        's3-ap-northeast-1.amazonaws.com' => 'Asia Pacific (Tokyo) Region',
        's3-sa-east-1.amazonaws.com' => 'South America (Sao Paulo) Region'
    );
    // Endpoints comes from http://docs.amazonwebservices.com/general/latest/gr/rande.html

    foreach ($aws_regions as $endpoint => $endpoint_name) {
        echo ('<option value="' . $endpoint . '"');
        if ($endpoint == get_option('wpro-aws-endpoint')) {
            echo(' selected="selected"');
        }
        echo ('>' . $endpoint_name . '</option>');
    }
?>
</select> 

Herokuの設定

ローカル環境でWordpressが動きだしたので、次はHeroku。
普通にアプリ作成して、Addonを追加。
PostgreSQLとSendGridを使います。

将PostgreSQL的信息设置到Heroku环境配置中。

$ heroku config:set DB_NAME=xxxxxxx
$ heroku config:set DB_USER=xxxxxxx
$ heroku config:set DB_PASSWORD=xxxxxxx
$ heroku config:set DB_HOST=xxxxxxx

也要获取Sendgrid的ID和密码。

$ heroku config
↓
SENDGRID_PASSWORD:           xxxxxxxx
SENDGRID_USERNAME:           xxxxxxxxxx@heroku.com

取得できたらローカルのWordpressに戻って、Settings / SendGrid Settings に保存しておきます。

今回はやってないけどMandrillでやる方法も見つけた。
http://www.andrewgertig.com/2013/05/set-up-wordpress-on-heroku
Mandrillの方が無料で送れるメールの数は多いはず。

作曲家 (zuò qǔ jiā)

虽然部署这个应用程序的话,确实可以运行,但是当上传图片时,缩略图并没有生成。只保存了原始图片,而且插入到文章中的时候会显得很大。
这是因为没有GD库。

WordPressのルートに composer.json をつくってデプロイする必要がある。
HerokuのPHP拡張リストはこちら。
https://devcenter.heroku.com/articles/php-support

据说在内部标识符后加上”ext-“是规定的。

composer.json -> composer配置文件

{
  "require": {
    "php": "~5.6.0",
    "ext-gd": "*",
    "ext-mbstring": "*"
  }
}

Composer在这里 https://getcomposer.org/

在Heroku文档中提到要在本地安装,然后进行各种操作,但实际上只需将composer.json放在根目录并部署即可。

あんまり関係ないけど、
Resize images before upload というWordpressのプラグインは結構良かったりする。アップロードする前に画像をリサイズしてくれるので、待ち時間が早くなる。6MBの画像をサーバーに送る必要なんてないもんね。

部署

好吧。終於要把它推送到Heroku上了。
在本地先提交Git,

$ git push heroku master

因為檔案很多,所以一開始可能要花一些時間。
這樣Wordpress應該就能在Heroku上執行了。

S3初年度免费,而Heroku的PostgreSQL也免费达到10000行。如果使用自定义域名运营,可能会有一些Route53的费用,但都不算太高。

以下是关于在Heroku上设置自定义域名的信息。我已经考虑了在使用Heroku的自定义域名时的最佳解决方案。

最重要的是不需要太过关注服务器,这真好。

请你提供中文母语的同义词。

用PostgreSQL在Heroku上搭建WordPress,为什么要在Heroku上启动WordPress博客? 有什么好处吗? | mah365

→ http://workabroad.jp/posts/2130
→ http://workabroad.jp/posts/2130这个链接

广告
将在 10 秒后关闭
bannerAds