IT備忘録 サーバ構築

gitで本番と開発環境の連携 初めてのデプロイ

投稿日:2018年5月24日 更新日:

これは自分用の備忘録です。職場での操作なので画像はありません。他のサイトの説明が難しすぎて、文字だけでもヒントが欲しいという私と同じレベルの人はどうぞ。何があっても責任は取れませんがご参考までに。

 

 

 

今までXAMPPやCentOSなどでホームページやWordPressやアプリなどを作ったことはあったが、カッチリと本番化したことはなかった。

 

本番化するとなると当然会社のみんなが使うわけだし、テスト環境で作ったアプリを本番のサーバに載せるだけでは済まない。

 

改修することもあるだろう。しかし直接本番のソースを触るわけにもいかない。皆さんが使っているときに、改修の影響でストップしても困るからな。

 

また、XAMPPで改修して本番にアップするといっても、いちいちFTPでそのファイルをアップするのも漏れがあったら怖いし、全とっかえというわけにもいかない。

 

今回外注の業者にECサイトをお願いすることになり、噂のGitを使って開発環境を構築するやり方を教えてもらったので、備忘録として残しておく。

 

 

要件

 

まず機械は、CentOS7のサーバ(Linux/Apache/DB2/PHP)、私のパソコン(Windows10)の2つだけ。

 

今回出てくるユーザはhogeユーザ。

 

CentOSのサーバは、Apacheを使い/home/hoge/cmsをドキュメントルートとしてウェブサーバとして動作させる。ドキュメントルートはhogeユーザのディレクトリの直下にしている。

私のパソコンはXAMPP、これで開発する。ドキュメントルートはC:\xampp\htdocsだ。ツールはSSHでTeraterm、GitはSourceTreeを使用する。

 

直接本番サーバのソースコードをメンテすることはしない。私のPCのXAMPPで開発して、OKならばCentOSのサーバ(本番)にアップロードする。開発中もCentOSの本番サーバは常に誰かがアクセスしている恐れがある状況。こんな感じ。

 

尚この作業は、両方のドキュメントルートは空の状態からスタートする。なので事前に避難しておくこと。

 

CentOSサーバでの作業

 

まず、CentOSのサーバにGitを入れるところから。SSHでhogeユーザでログインする。

 

そして、Gitを入れるためルートに変身する

 

Gitをインストールする

但しこのやり方だと最新版は入らない。最新版は追加機能もあるらしいのでそちらの方が良いという人はググってみてください。私はそんなに使いこなせそうにないので安定板1.8で我慢します。

 

次に共有リポジトリを作るために、そのディレクトリを作成する。

 

/opt直下にディレクトリを作成する。今回の名前はgitとする

このコマンドは/optディレクトリの下にgitディレクトリを作れという命令だが、-pをつけていると、/optがもし存在しなかったとしても、/optディレクトリごとgitディレクトリを作ってくれるというもの。-pがなければ、/optなんてありませんよ!って怒られてしまう。まぁ、/optが存在したとしても-pを付けても怒られないので、手順書としては-pを付けておいたほうが無難かな。

 

作った/opt/gitはこのままではrootユーザが所有者なので、hogeユーザにする。rootが読み書きできてもいいことない。

 

もとのhogeユーザに戻る

 

作ったgitディレクトリに移動する。

 

ベアリポジトリ用のディレクトリを作成する(ディレクトリ名は、名前.gitにする慣例があるそうだ)

この名前は本番のドキュメントルート/home/hoge/cmsのcmsと同じ名前にしておく。今は手順通りやっていたらhogeユーザだが、ディレクトリを作ろうとしている/opt/gitはhogeユーザ所有なので特に怒られることはないということ。さっきまでの作業はこれだな。

 

作ったベアリポジトリ用のディレクトリに移動する

 

ベアリポジトリを作成

これを実行すると、Initialized empty Git repository in /opt/git/cms.gitなどと表示されるかもしれないが、これで成功。/opt/git/cms.git内になにやらファイルやディレクトリがたくさんできているはず。–bareはベアリポジトリを作るという意味。共有リポジトリはベアリポジトリでないといけないみたい。詳しくは調べてください。あと–shareにしておかないと、私以外の人が別のPCでメンテしたい場合にアクセスできないみたい。これも定かではないが–shareをつけておく。

 

次はPCの設定をするけど、またこちらの操作もするので、SSHは閉じないでおく。

 

PCからSourceTreeを操作する

 

次は、WindowPCからGitのクライアントツールであるSourceTreeの設定をする。

 

ソースツリーは慣れてないのでよく解らないのだが、Windowsでは管理をタブでやってるみたいだから、画面上にある+でタブを作る。

 

Cloneのアイコンをクリックする。

 

そしたら3つくらい入力するところが出てくるが、上がリモートリポジトリ(CentOSでさきほど作った/opt/git/cms.gitのこと)、下がローカルのドキュメントルート(C:\xampp\htdocs)を指定する。

 

上に入力する文字は、ssh://ユーザ名@IPアドレス:22/先程作ったベアリポジトリのパス、になる。SSHで通信するということ。:22というのはSSHの標準ポート番号だ。

 

今回の場合は、ssh://hoge@192.168.0.1:22/opt/git/cms.gitを入力する。タブキーで移動すると、何やらグルグル回って、これはGitリポジトリですと表示される。されなければ入力が間違っているなどの理由のため、再度確認する。先程のCentOSの設定でSSHを使っていたのなら、SSHが使えないということはないので、入力が間違っているのかも。そんな感じで問題を切り分けて進んでほしい。

 

OKなら次に、保存先のパスを入力する。保存先のパスはXAMPPでコードを置いている場所。私の場合はC:\xampp\htdocsになる。

 

それを入力したら下にあるクローンのアイコンをクリックする。

 

これで、CentOSと自分のPCがSourceTree経由でなんとなく連結する。連携するというよりクローンだからCentOSでつくった/opt/git/cms.gitの複製をローカルPCに作った感じだな。

 

ここで疑問点

 

ここで一つ疑問があるのだが、今までの一連の作業でPCとCentOSのサーバがつながったようだが、本番で動かすと言ったドキュメントルートである肝心要の/home/hoge/cmsは今まで何も触れていない。

 

なんで/opt/git/cms.gitなんて全然関係のないものを作って、ローカルとつなげる意味があったのだ?と思うのだが、実は意味があるらしい。

 

それはある意味決まりらしく、みんなで突き合う場所は本番ソースが置いてある場所とは別にして、共有リポジトリというものを作ってそこに皆がアクセスしなければいけないらしい。

 

仮に3人でソースを突き合うとして、A氏PC、B氏PC,C氏PC、本番サーバの4つしか登場人物がいなくても、もう一つ共有リポジトリという場所を作って、そこを噛まさないといけない掟らしい。

 

ということは、作った共有リポジトリ(/opt/git/cms.git)と、本番のドキュメントルートである/home/hoge/cmsとをつなげてあげないといけない。三角関係ということだな。その設定次にをする。

 

またCentOSサーバの設定

 

次はさきほどの共有リポジトリと、CentOSの本番ドキュメントルートとをつなげる作業をする。

 

hogeのホームディレクトリに移動する

 

クローンを作成する

すると、/home/hogeの中に、cmsというディレクトリができる。ゆえに、/home/hoge/cmsということだ。このcmsというのをドキュメントルートとする。これはcloneコマンドの名前どおり共有リポジトリのクローンになる。なぜgit cloneでcmsというネーミングで出来たのかは、cms.gitというディレクトリ名のせいだろう。だから.gitで終わるディレクトリ名が通例なんだろう。

 

一応中身を確認しておく(cmsディレクトリに移動し、ファイル一覧を表示する)

おそらく.gitというディレクトリがcmsの中に出来ているはず。それでOK。

 

しかし、これだけでは不十分。なぜなら、ローカルからCentOSにある共有リポジトリにアップ(実際の名前はPush)したときに、いちいち手動で共有リポジトリから本番のドキュメントルートに、引っ張ってあげないといけないからだ。でないと本番にソースが反映しない。これを自動化して初めて設定終了となる。

 

その自動化の仕組みをフックと言うみたい。引っ掛けるという意味なのかな。

 

共有リポジトリ(ベアリポジトリ)のフックに移動

共有リポジトリの中にhooksというディレクトリがあるのでそこに移動します。

 

そこにファイルを作成する。これをフックと言うみたい。

このpost-receiveという名前でファイルを作ると、ローカルのSourceTreeからPushしたときに、このファイルが実行されるらしい。post-receiveの他にもいろいろ種類があるらしいが、それぞれ実行タイミングが違うらしい。

 

post-receiveの中身は・・

とする。最後は改行してもしなくてもどちらでもOK。

 

中身の解説は、本番ソースのドキュメントルートに行き、共有リポジトリから引っ張る(pull)するという意味だ。これをpost-receiveというタイミングである、SourceTreeからPushした後に実行する。これが自動化の仕組みのようだ。

 

post-receiveの権限を変更

忘れてはいけないのは、スクリプトファイルは他のユーザから実行できるように、実行のパーミッションを設定してあげないと動かないのだ。

 

設定は以上。

 

またパソコンに戻ってSourceTreeで確認する

 

設定は以上だが、ちゃんとパソコン側でコミットした内容が本番に移動できるかを確認する。

 

ローカルのC:\xampp\htdocsに何かテスト的にファイルを作り(今回はtest.txtとした)

 

SourceTreeでステージング&コミットを行う(ステージングやコミットが解らない人は勉強してください)

 

次にプッシュ先を選択するため、一旦フェッチをしてリモート側を覗く。一見何の変哲もないが意味があるみたい。気のせいかも。

 

そしてPushをクリック相変わらず空っぽのようだが、対象のチェックを入れると、ローカルブランチmaster、リモートブランチmasterが表示される。・・はず。

 

あとはプッシュするだけ。右下にあるプッシュボタンを押す。

 

最後にCentOS側で本番ソースに反映されているか確認

 

 最後に本番ソースのドキュメントルートにファイルが追加されているか(変更が利いているか)確認する。

これで先程Pushしたtest.txtが確認できればOK。

 

 

おつかれさまでした。後は避難していたコードをローカルのドキュメントルートに入れて、ステージング+コミット+プッシュすればOKです。

 

一応全手順を2回繰り返しやりましたが、うまくいったので大丈夫だと思います。これは開発会社に教えていただいたやり方とは若干逸脱してますが、まぁこれで大丈夫でしょうと思います。

スポンサーリンク




スポンサーリンク




-IT備忘録, サーバ構築
-, , ,

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

AS400シフト文字を含めてバイト数を計算する

AS400いわゆるIBM system i では、シフト文字という意味不明な文字がある。 普通「アイウエオ」なら10バイトのはずだが、AS400では、12バイトになる。これは先頭と最後が2バイト文字の …

XAMPPのShellを開けない。0xc0000142

Windows10パソコンにXAMPPを入れて、Shellを起動したら下記のようなエラーが出た。   アプリケーションエラー。0xc0000142。 解決法は、ググっても日本語では出てきやし …

AS400 長いカラムを途中で折り返しで表示する

長いカラムを画面表示で端で折り返すのは自動的にAS400がやってくれる。同じ長さのカラムをDDS に用意すればいい。 ただ、このやり方では一番右端まで表示してから折り返すことになる。これを途中で折り返 …

gitでプッシュしたのに効かない件

ブログなので皆さまのお役にたてば幸いですが、あくまで自分の忘備録なので、昔話も含めて書いております。ご了承ください。 環境は、 開発環境は自席PC(ローカル) Windows10PC XAMPP7.2 …

Laravel エラー集 未完成

POSTが失敗する The page has expired die to inactivity.Please refresh and try agein. というエラーメッセージでPOSTが失敗する …