fuelphp をxamppで動作させてbitbucketからさくらサーバーへ自動デプロイ

xammppの設定、bitbucketの会員登録は完了済の前提となります。

xammpp上で作っていたfuelphpのプロジェクトを、さくらレンタルサーバーにデプロイしたところ、500エラーとなり、原因がよくわからないので、１から再度作ってみたのが背景です（汗　
メモを兼ねています。

非公開プロジェクトにしたいのでgitはbitbucketにつないでいます。

今回の手順としては、下記となります。
1.fuelphpをインストール
2.gitを登録
3.bitbucketへリポジトリを作成
4.bitbucket sync で自動デプロイ
5.環境変数を修正
6.composerの更新

#まずは、Fuelphpのインストール

xamppのC:\xampp\htdocs 配下に、任意のプロジェクト（今回はocmsプロジェクトとする）を作成する。

こんな感じ。ここにfuelphpをインストールしていきます。
C:\xampp\htdocs\ocms\(fuelソースコード)

コマンドプロンプトを起動して、
`$ cd C:\xampp\htdocs\`

git から最新のfuelphpのソースコードをダウンロード。　一番最後に作成するフォルダ名を指定。
`git clone --recursive git://github.com/fuel/fuel.git ocms`


composerを最新化します。
composerとは、phphのパッケージ管理ツール。色んなライブラリが入ってます。
`
$ php composer.phar self-update
$ php composer.phar update
`

xamppが立ち上がっている状態で、URLを叩いてみます。

`http://localhost/ocms/public/`
*xammp内の設定によってurlは異なります。
![0.png](https://qiita-image-store.s3.amazonaws.com/0/104424/8df311d3-60e3-dcb7-05c3-7056b548aad2.png)

表示されたらok!

#修正をする前に、gitの登録
色々設定周りを修正していくのでgitに登録しておきます。

コマンドプロンプトを起動して、

`$ cd  C:\xampp\htdocs\ocms`
git init でリポジトリの作成
`$ git init`
git addとcommitを行う
`$ git commit -a -m "初回登録"`


#bitbucketへのリポジトリ登録
bitbucketはgitの管理を行います。
githubとの違いの一つとして、無料で非公開リポジトリを作ることができることです。
（githubで非公開にしたい場合は有料）

bitbucketへ登録後、新規リポジトリを作成
![a.png](https://qiita-image-store.s3.amazonaws.com/0/104424/db0b7169-6d9b-399d-796e-fda9d074833a.png)

リモートリポジトリを追加します。

`$ cd  C:\xampp\htdocs\ocms
$ git remote add origin git@bitbucket.org:xxxxxx.git
$ git push origin --tags `

![b.png](https://qiita-image-store.s3.amazonaws.com/0/104424/de5dc733-6202-e65e-0777-c8e041ce3160.png)

ソースコードが登録されていたらok

![c.png](https://qiita-image-store.s3.amazonaws.com/0/104424/9b9393e2-5da1-4832-cf9d-3ddce97671f9.png)

#bitbucketから自動デプロイを行うための登録
*既に自分は設定済みのため、不足ありましたら教えて下さい。
　参考にさせていただいたのははこちらです。
>[bitbucket-syncを使ってサーバ自動化をしてみた](http://qiita.com/redamoon/items/7ac784b3eb53d09b6e93)
>[BitbucketにGit PUSHしてサーバーに自動でデプロイしちゃうよ！](http://thesaibase.com/server/bitbucket-git-push-deploy)

bitbucketから、今回はさくらレンタルサーバーに自動デプロイを設定します。
ローカルでpushした後、数十秒から数分ぐらいで反映されます。

##bitbucket-syncをダウンロード
alixandruさんという方が作った、[「bitbucket-sync」](https://bitbucket.org/alixandru/bitbucket-sync/downloads)というPHPで作られたプログラムがあります。これを利用して、レンタルサーバーにgitの自動デプロイを行います。

ダウンロードしたzipを解凍して、フォルダ名をbitbucketに変更

フォルダの中のファイルを修正します。

```lang:config.php
/**
 * The default branch to use for getting the changed files, if no specific
 * per-project branch was configured below.
 */
'deployBranch' => 'リポジトリ名を入力',
 
/** The ID of an user with read access to project files */
'apiUser' => 'Bitbucketのユーザー名を入力',
 
/** The password of {apiUser} account */
'apiPassword' => 'Bitbucketのパスワードを入力',

　　～～

'requireAuthentication' => true, // trueにして、AuthKeyを設定しましょう
'deployAuthKey' => '',
'gatewayAuthKey' => 'ここに適当な文字列でキーを入力します',

　　～～

$DEPLOY = array(

    'Bitbucketのリポジトリ名' => 'コピー先のディレクトリを指定',
);
```
##さくらレンタルサーバーへ配置と動作確認
configの設定が完了したら、さくらサーバーに接続してwwwの下にアップロード
（配置箇所はここでなくても大丈夫です。）

![r.png](https://qiita-image-store.s3.amazonaws.com/0/104424/d098a487-3828-668a-0bf6-516861877076.png)

動作を確認します。
以下をurlに入力して実行。
（exampleはさくらで使用しているアカウント名）
`http://example.sakura.ne.jp/bitbucket/deploy.php?setup=Bitbucketのリポジトリ名`

![t.png](https://qiita-image-store.s3.amazonaws.com/0/104424/cdbb8650-691f-415a-17dc-c416bd7042ba.png)
finishedが確認できたらokです。

エラーが出る場合は、パーミッション（bitbucketフォルダ内のcommitsフォルダを「777」に設定 ）、setupにgatewayAuthKeyを入力していないか（自分の場合・・。）等を確認してみてください。

##bitbucketの設定
bitbucketへ行きます。
該当のリポジトリから、左にある歯車ボタンの設定、webhooksを選択します。
webhooksで 新規作成。

![e.png](https://qiita-image-store.s3.amazonaws.com/0/104424/bb8f71f9-989d-4663-642c-148b6262b176.png)

titleは自由（ocmsさくらdeploy用とか）
urlに先ほど設定したurlを入力
（keyにはconfig.phpで設定したgatewayAuthKeyを入力）
（exampleはさくらで使用しているアカウント名）
`http://example.sakura.ne.jp/bitbucket/gateway.php?key=xxxxx`

![f.png](https://qiita-image-store.s3.amazonaws.com/0/104424/a00d3a46-8ff4-3be9-dd79-efdc2028dddd.png)



#fuelphpの設定をさくらレンタルサーバー用に書き換える
このままデプロイをしてもさくらレンタルサーバーでは動きません。

ここがかなりつまりまして、下記記事等を参考にさせていただきました。

> FuelPHPではpublic/.htaccessの上部にあるSetEnv FUEL_ENV productionとして、productionモードに切り替えますが、さくらのレンサバではなぜかこれが聞きません。
なので、普通にやってるとfuel/app/config/production/db.rbでのDB設定が効きません。
[さくらのレンタルサーバーでFuelPHPを動かすときに気をつけること](http://inter-arteq.com/2014/09/07/%E3%81%95%E3%81%8F%E3%82%89%E3%81%AE%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A7fuelphp%E3%82%92%E5%8B%95%E3%81%8B%E3%81%99%E3%81%A8%E3%81%8D%E3%81%AB%E6%B0%97/)


##.htaccessを変更

さくらレンタルサーバーではこの設定が有効になっていると500エラーで動きません。
.htaccessを書き換えます。
C:\xampp\htdocs\ocms\public\.htaccess

\#をつけてOptions +FollowSymLinks -Indexesを無効化

もう一つ、RewriteEngine がonであることを確認して、rewritebaseを追記します。

```lang:.htaccess

	RewriteEngine on
	RewriteBase /ocms/public/

	# NOTICE: If you get a 404 play with combinations of the following commented out lines
	#AllowOverride All
	#RewriteBase /wherever/fuel/is

    # Make sure directory listing is disabled
	#Options +FollowSymLinks -Indexes

# Options +FollowSymLinks -Indexes 

```

##DBの接続先をPRODUTIONにする
どうもさくらサーバーでは.htaccessのSetEnv FUEL_ENV productionが正しく読み込めないようです。
なので、bootstrap.phpを修正して、PRODUCTIONを見るように変更。C:\xampp\htdocs\ocms\fuel\app\bootstrap.php

```lang:bootstrap.php
\Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::PRODUCTION);
```

##configの修正
最初にfuelphpをインストールした際に設定することのが多いですが、今回はこのタイミングで修正。

```lang:config.php
'language' => 'ja',
'language_fallback' => 'en',
'locale' => 'ja_JP.UTF-8',

 ～～

'server_gmt_offset'  => 9,
'default_timezone'   => 'Asia/Tokyo',
```

##さくらサーバーの本番環境へ配置

コマンドプロンプトを起動して、

`$ cd  C:\xampp\htdocs\ocms`
git addとcommitを行う
`$ git commit -a -m "環境変数変更"`


#本番環境のDBの修正
config\productionの中にdb.phpがあるのでこちらを変更
C:\xampp\htdocs\ocms\fuel\app\config\production

```lang:db.php
<?php
/**
 * The production database settings. These get merged with the global settings.
 */

return array(
	'default' => array(
		'connection'  => array(
			'dsn'        => 'mysql:host=さくらサーバのホスト;dbname=使用するDB名',
			'username'   => 'さくらのDBへのユーザー名',
			'password'   => 'さくらのDBへのパスワード',
		),
	),
);
```


#composerのアップデート
そのままurlにアクセスすると、ここまで正しく反映されていれば、こんなエラーが出るかと思います。500 internal server errorは出ないはず！

![aa.png](https://qiita-image-store.s3.amazonaws.com/0/104424/df8a21f7-10c0-68c7-2f58-fd9c66c30a7c.png)

.gitignoreが記載されているため、一部pushされていないためとなります。
なので、さくらレンタルサーバーにsshアクセスして、composerを更新します。
`
$ ssh さくらのユーザー名@さくらのユーザー名.sakura.ne.jp
$ パスワード
$ php composer.phar self-update
$ php composer.phar update
`

![bb.png](https://qiita-image-store.s3.amazonaws.com/0/104424/1170ad53-c2ff-e77a-da1d-778abe273d21.png)

##接続確認
さくらサーバー上で見れるか確認

http://ユーザー名.sakura.ne.jp/ocms/public/