初級エンジニアとしての関門 gitでデプロイ。。
これができなきゃエンジニアとして話にならないし、Laravelを使ってWEBアプリの開発するなんて全然遠い話。
検索しまくって、さまざまな方のブログ記事などを読んだが、自分の理解力が足りないためさっぱりわからない。
ターミナル、Laravel、soucetree、git、github、bitbucket、レンタルサーバーなどなど、人によって開発環境も違うし利用するツールも違う。
自分の実現したいことと、ブログ記事で紹介しているやり方、ツールや目的が微妙に違ったりして
その通りやってはみるんだけど、ターミナルでエラーが頻発したり、いまいち望んでない結果になったり。
そして、エラーになる度に調べると、また知らない言葉が出てきて、それを調べるとまた違う言葉がでてきて
どんどん知りたいことから離れていって、またエラーがでて・・・・
なんてことを繰り返して疲れ果てて、やっぱりFTPソフトでちまちまやっていくかとあきらめかけた時に出会ったブログ記事。
★Git 本番と開発環境の連携 初めてのデプロイ ←この通りにやったら初デプロイ成功!
https://qryheavy.com/2018/05/24/git_deploy/
非常に助かりました。
備忘録も兼ねて自分用に要点を書き出してみます。
※本ブログ記事では、あくまで初学のエンジニアが、自分の開発環境で作ったファイルをgitを使ってレンタルサーバーに初めてデプロイするまでの内容になります。
様々なやり方や、実際のチームでの開発環境とは大いに異なると思いますが、ご容赦ください。
自分のPC環境でファイル編集をして、sourcetreeでステージングアップ→コミット→プッシュをすると、自動的にエックスサーバーに編集した内容がデプロイされるまで。
使用PC : mac
git管理 : sourcetree
サーバー : エックスサーバー
前提
※レンタルサーバーにsshログインができる
※sourcetreeでgithubやbitbucketまではコミットできるぐらいの知識がある
※FTPを使ってレンタルサーバーにファイルをアップすることができる
エックスサーバーにsshログインするやり方はこちら
https://haleid.jp/archives/82
ログイン後すぐの状態は
[myname@sv10011 ~]$
$ pwd
と叩くと
/home/myname/
となるはずです
ここでベアリポジトリを設置するフォルダを作成します。
$ mkdir -p /git/project1.git
project1というのはなんでもいいです。
今後このgit配下にプロジェクトごとにフォルダを作っていくと思うので、わかりやすいプロジェクト名などにする
作ったproject1.gitに移動
$ cd /git/project1.git
ベアリポジトリを作成
$ git init --bare --shared
リモートリポジトリは複数人で管理することになるので、念の為共有リポジトリにするために–sharedをつける
sourcetree を立ち上げて、新規 > URLからクローン を選択
ソースURLにはエックスサーバーでsshログインする時のパスと、先ほど設置したベアリポジトリまでのパスを書く
例
ssh://yourname-xserver/home/yourname/git/project1/
赤字の部分はエックスサーバーのログインを簡略化するためにおこなった時の自分の文字列です。
詳しくは https://haleid.jp/archives/82
それ以外はエックスサーバーでログイン後、上記でベアリポジトリを設置したフォルダまでのフルパスです。
ソースURLが間違っていると以下のように有効なパスURLではないとメッセージが出ます。
入力し直すと、直ちに接続しに行くので、反応しなかったら、一旦カーソルをssh://あたりに持っていき、文字を打ち直してみたりしてください。
問題なければ「◆ これはgitリポジトリです」という文字に変わり、右側の「クローン」ボタンがアクティブになります。
保存先のパスは、自分の作業フォルダを指定します。
自分の場合は、MAMP配下でLaravelを開発したいので
/Applications/MAMP/htdocs/project1
としました。
クローンを押して以下の画面が立ち上がれば成功です。
これでとりあえずエックスサーバーと自分の手元の開発環境が接続されました。
しかしエックスサーバーに接続されたからとはいえ、自分の希望するドメインで更新したファイルの情報が表示されるわけではありません。
上記で設定したのは「共有リポジトリ」であり、ここを介さないことには本番環境への反映はできません。
はい、まずここの理屈がよくわからなかったです。
上記で行った共有リポジトリというのは、コミットした情報をサーバーのある箇所に一旦集約して、その情報を本番のドキュメントルート(ドメイン)が読みにいくということなのだそうです。
自分以外のエンジニアが自身のPCで編集したファイルをコミットした情報は、そこ(共有リポジトリ)で一旦集約されます。
これがベアリポジトリの役割です。
それでは、次は肝心の本番公開するためのドキュメントルート(ドメイン)配下に移動します。
まず
$ cd
として、エックスサーバーログイン直後のスタート地点にいることを確認(/home/yourname/)
$ cd mydomain.com
などとして、目的のドメインまでファイルを移動します。
$ git clone /home/yourname/git/project1.git project1
とし、共有リポジトリを、本番ドキュメントのproject1フォルダ内にクローンします。
$ cd project1
と移動し
$ ls -a
とすると .git フォルダがあると思います。
上記で共有リポジトリを本番環境にクローンしただけでは、ファイル編集してコミットと同時にファイルは公開されません。
このためにgitのフックを利用します。
共有リポジトリにプッシュされたことを検知して、「本番サーバーのgit」から「共有サーバーのgit」へ情報を自動的に「引っ張ってくる」ことをフックと言います。
→はい、ここが理解できてなかったポイントの一つです。
共有リポジトリ(ベアリポジトリ)のフックに移動
$ cd /home/youename/git/project1.git/hooks
viコマンドでvimというエディタを開きつつpost-receiveという名前でファイルを作成します。
$ vi post-receive
ターミナルがエディタに変わります。
キーボードの i を押すと編集可能状態になります。
以下のように打ちます。
#!/bin/sh
cd /home/yourname/yourdomain.com/project1/
git --git-dir=.git pull
うち終わったら esc キーを押し :w で保存して :p で編集を終わります。
中身の内容は、
(SourceTreeからPushされたら)
本番ドキュメントルート(/home/yourname/yourdomain.com/project1/)に行き、
共有リポジトリからファイルの更新情報を引っ張る(pull)するという意味です。
共有が情報を本番に送るんじゃなくて、本番が共有から引っ張ってくるんですね。
そして最後にpost-receiveの権限を変更します。
$ chmod 755 post-receive
他のユーザからも実行できるように、実行のパーミッションを設定する必要があります。
これで設定は以上。
そこでgit pull
を行えばproject1フォルダ内に編集後のファイルが反映されます。
実際に/Applications/MAMP/htdocs/project1
にて何かindex.htmlでもなんでもいいのでUPします。
その後エックスサーバーにsshログインし、本番ディレクトに移動し作成したprojecrt1フォルダまで
移動してみると index.html があることがわかると思います。
これで無事「デプロイ」ができるようになるはずです。
あまりに理屈がわからず、もうFTPソフトでちまちまやっていこうかなと思っていた矢先だったので
うまくいった時は感動ものでした。
自分でもそうなのですが、初学の状態では、右も左もわからない状態で、専門的なものを読んで実行しようとしても、自分が何をしようとしているのか、何に躓いているのかさえ理解できません。
多くのエンジニア向けのブログ記事は、本人だけのための備忘録レベルだったり、技術がわかっていること前提での内容がほとんどなので、初心者がそれをみて実行しようとしても思ったようにできません。
まずは、自分にとってシンプルな方法をとにかく根気強く探し出して、一旦「できた!」という状態になれば、なんとなく全体像が見えてきて、次に何を知らなくてはいけないかがわかってきます。
初学者でデプロイをどうやればいいか困っている方は是非トライしてみてください。
gitでシンプルなデプロイ環境を作る
https://qiita.com/zaburo/items/8886be1a733aaf581045
Gitで基本的なデプロイ(push、pullで本番公開)環境を作る手順解説
https://blog.s-giken.net/343.html
「Gitって何?」という初心者向けにLaravelをエックスサーバーで公開する方法を分かりやすく解説
https://biz.addisteria.com/category/laravel_deploy/
コメント