EC-CUBE4をgit pushだけでレンタルサーバーにデプロイする方法

## 概要

`git push`コマンドのみでソースコードを本番サーバーにアップロードする手順について書いていきます。
EC-CUBE3系、または2系でも同様の手順で可能です。

![gitpush.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/166768/d77cedc2-369f-e692-0e40-a3e795eafebc.png)

画像はイメージです。

## EC-CUBEをレンタルサーバーにアップロードする手順について

Google検索で`EC-CUBE4 サーバー　アップロード`で検索すると、記事のほとんどが、EC-CUBE公式ページからEC-CUBEのパッケージをダウンロードし、それをFileZilla等のFTPツールでソースコードをアップロード利用した記事がヒットするのですが、
EC-CUBEでECサイトを運用していく場合には、ほぼ間違いなくソースコードをgit管理したいんじゃないかなーと思うのです。
（※ EC-CUBEを実際に運用した経験がないため本当のところはわかっていません）
ローカル環境で開発し動作確認出来たソースコードを、gitだけで本番サーバーにアップロードする手順があれば良いなと思い、記事を書いてみました!

## FTPクライアントツールを利用した場合のデメリット

FTPでファイルをアップする手順は直感的で簡単ですが、アップロード時に誤った操作をしてしまう可能性があります。

また、誤った操作を行うと本番ソースと同期が取れず、改修作業に時間がかかるといったことも予想されます。

人的ミスは必ず起こるので、ミスしないような仕組みを整えることが大事です。


## 改善策

ローカル環境で、git pushコマンドを実行するだけで、本番環境にソースをアップロードできる環境を整えます。

ソースコードのアップロードは、ローカル環境で1コマンド叩くだけなので、アップロードする際のミスを減らす事ができ作業時間も大きく削減します。

本番とローカル環境でソースコードの同期がとれ、

さらに、ローカル環境でソースコードのバージョン管理を行うため、万が一のときも安心です。

## 前提条件

- git
- ssh

が使用できるレンタルサーバーである必要があります。

2019年現在、主要なレンタルサーバー屋さんは対応しているかと思います。

今回はさくらレンタルサーバースタンダードプランの環境で行いました。
他のレンタルサーバーの方は、適宜読み替えてください。

また、コマンド内の`user_name`はご自身のユーザー名に置き換えるようにしてください。

コマンドプロンプトが`$`の場合はローカル、`%`の場合は本番サーバーでの作業となっています。

## 環境構築手順

sshでレンタルサーバーにログインします。
Windowsの方はputtyなどのターミナルツールを利用するようにしてください。

#### sshでログインし、サーバーのディレクトリを確認する

```
$ ssh user_name@user_name.sakura.ne.jp
$ user_name@user_name.sakura.ne.jp's password:*********

### さくらレンタルサーバの場合ホームディレクトリは/home/アカウント名/
% cd /home/user_name/
% pwd
/home/user_name

### ウェブ公開ディレクトリは/home/アカウント名/www/
% cd /home/user_name/www
% pwd
/home/user_name/www
```

#### ベアリポジトリの作成

eccube4.gitという名前のベアリポジトリを作成します。

```
% cd /home/user_name/
% mkdir -p git/eccube4.git
% cd git/eccube4.git/
% git init --bare
```

#### フックの設定を追加する

ベアリポジトリにpushされたとき、公開ディレクトリのリポジトリに対して、`git pull`を実行するための設定を記述します。

```　
% vim /home/user_name/git/eccube4.git/hooks/post-receive
```

post-receiveに書き込む内容は以下です。

```
#!/bin/sh

cd /home/user_name/www/eccube4
git --git-dir=.git pull origin sakura-server
```
ブランチ名を`sakura-server`としていますが、任意の名前で構いません。

また、post-receiveに実行権限を与えておきます。

```
% chmod +x post-receive
```

#### ウェブ公開ルートでgitリポジトリを作成する

hookの設定によりgit pullされるリポジトリを作成します。

```
% cd /home/user_name/www
% git clone /home/user_name/git/eccube4.git
% ll eccube4/
total 4
drwxr-xr-x  6 user_name  users  512 Dec 20 14:55 .git
```

#### ローカル環境でgitのリモート設定を行う

EC-CUBEのリポジトリ内で、`sakura-server`（任意の名前/hookの設定したものと合わせる必要あり）という名前のブランチを作成し、リモートに追加します。

今回はEC-CUBE4最新バージョンを4.0.3のタグでチェックアウトしたいと思います。

```
$ git clone https://github.com/EC-CUBE/ec-cube.git
$ git checkout -b sakura-server refs/tags/4.0.3
$ git remote add sakura-server user_name@user_name.sakura.ne.jp:/home/user_name/git/eccube4.git
```

#### いざ本番環境にデプロイ

確認のため、README.mdを削除してコミットします。

```
$ rm README.md
$ git add README.md
$ git commit -m "README.mdを削除"
$ git push sakura-server sakura-server
$ user_name@user_name.sakura.ne.jp's password:
Enumerating objects: 1, done.
（省略）
remote:  README.md
To user_name.sakura.ne.jp:/home/user_name/git/eccube4.git
   8470a8d5c9..4c362102f9  sakura-server -> sakura-server
```

ターミナルのログにremote:　README.mdと表示されます。

本番のウェブ公開ルート内のリポジトリからREADME.mdが削除されることを確認してみてください。

## おわりに

`git push`コマンドを実行するだけで、FTPツールを利用せずにリモート環境のソースコードのバージョン管理が可能になり、アップロード手順が単純になりました。

本番反映時の時短、ミスの軽減、gitによる履歴管理が可能になる等メリットが多いと思いますので、ぜひお試しいただければと思います。

私自身は実際に本番運用した経験が無く、実際にされている方はどういったやり方でやっているのかはすごく気になっています。もし、こんなやり方あるよとかあれば是非コメント等で教えていただけるととてもウレシイです！

## 参考

- https://nullnote.com/web/git/git-auto-pull/
- https://git-scm.com/book/ja/v2/Git-%E3%81%AE%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%9E%E3%82%A4%E3%82%BA-Git-%E3%83%95%E3%83%83%E3%82%AF
- https://qiita.com/tukiyo3/items/efd0132a5baec8326969