Git Laravelで引っ越しの備忘録

IT関連

自分の備忘録です。正直自分にわかるようにしか書いていません。

真似て事故っても責任は持てませんのでご了承ください。でも何かの参考になれば幸いです。

 

開発環境は自席WindowsPCのXAMPP

本番環境は本番サーバ機Linux/Apache/DB2/PHP/Laravel

 

バージョン管理はGitを使って、本番サーバ機の/opt直下にベアリポジトリを作り、/var/www直下にApacheのドキュメントルートがある。

hookを使ってWindowsPCからPUSHしたときに、/var/www直下の本番からPULLするように仕掛ける。

 

これで問題なく動いていたが、作っていたアプリをAdminLTEというのを使っていたせいか、ちょっと自由度が低くて気になっていた。

このたびフロントはBootstrap4だけを使って画面を作ろうと改良した。

 

その道のりは大変で、かなりの箇所を直すことになるだろう。

さらに、開発側はnothing to commit状態なのに、本番機のドキュメントルートでgit statusをすると変なファイルがいっぱい未コミット状態で残っている。

それも前々から気になっていた。

 

こうなると、私の性格上は一度リフレッシュしたい気分。気持ち悪いし。

バックアップを取ったうえで、新しいソースだけを残して、ベアリポジトリも、リポジトリも全部ぶっ壊すことにした。

 

 

XAMPPのバーチャルホストで新アプリを開発

とりあえずAdminLTEから脱却してBootstrap4のみに載せ替える。

最悪失敗したときのことを考えて元の環境はそのまま、XAMPPのバーチャルホストを使って別テスト環境を使って作り直す。

旧環境はC:\xampp\htdocsで、新環境はC:\xampp\htdocs2にした。

やはりかなりのフォルダを削除することになった。

 

バックアップをとる

とりあえずXAMPPのアプリデータの旧と新をまるまるバックアップを取っておく。

本番とテストとではデータベース等のconfig設定が少し違って.gitignoreで無視するようにしてるので、本番にあるそれ系のデータも避難しておく。

 

案内する

本番側のデータをぶっ壊すので、今日一日使えないぞと案内する。

 

開発側をお引越し

C:\xampp\htdocsのデータを完全クリアして、htdocs2のデータを移行した。

この中にはgitリポジトリは入れていない。gitの呪縛は.gitフォルダがあるかだけの違いなので、.gitを引っ越ししないか削除すればいい。

これで完全にまっさらからスタート。

後は新開発環境で動けばOK。

 

本番側をリフレッシュする

ドキュメントルート、ベアリポジトリ、gitユーザ全てを無かったことにする。

 

ルートに変身

ルートでないと何もできないので変身する

$ su -

 

ドキュメントルートを空にする

ドキュメントルートはapp。それごと抹殺する。ソースは開発側のものを使うので、既存のものは用済み。全て電子のチリにする。

# cd /var/www
# rm -fr app

 

ベアリポジトリを削除

これも抹殺。

# cd /opt
# rm -fr server.git

 

git用のユーザを削除

この際なのでユーザも削除してリフレッシュ。-rはホームディレクトリごと削除。

# userdel -r git_user

 

git用のユーザを再作成して、パスワードを設定する

ユーザを作る。以前の名前は気にくわなかったのでね。使わないけど-mでホームディレクトリも作る。パスワードも設定する。

# useradd -m git_repo
# passwd git_repo

 

ベアリポジトリを再作成

現在は/opt直下にいる。ここでベアリポジトリ用のディレクトリを再作成する。ベアリポジトリ用のディレクトリは.gitで終わる名前にする必要がある。

# mkdir repo.git

 

ベアリポジトリ用のディレクトリをgit_repoユーザ所有にする

ベアリポジトリはgit_repoユーザで扱えるようにする。exitでログアウト。

# chown git_repo:git_repo repo.git
# exit

 

repo.gitディレクトリをベアリポジトリにする

もちろんgit_repoユーザでログインしなおしてから作業する。最初にcdでディレクトリの中に入ってからinitする。

$ cd repo.git
$ git init --bare --shared

 

 

開発側からプッシュ

 

新ソースにリポジトリを作る。

まずはcdで移動してから。git initコマンドでhtdocsはgitの管理下に置く

> cd c:\xampp\htdocs
> git init

 

新ソースをコミットする

まずはコミットをしないと始まらない。初回だからかなりの量だけど気長に待つ。コミットメッセージは定番のfirst commitにした。

> git add .
> git commit -m "first commit"

 

新ソースから本番サーバのベアリポジトリにプッシュする

git remoteでリモートリポジトリを登録して、プッシュする。これで本番サーバのベアリポジトリに開発ソースが入る。パスワードを聞かれるかもしれないが、それはさきほどpasswdで決めたパスワード。

> git remote add origin ssh://git_repo@192.168.0.10:22/opt/repo.git
> git push origin master

 

本番機から再度操作

今度はドキュメントルートからベアリポジトリに登録されたデータを引き取る。

 

ドキュメントルートからクローン

まずはドキュメントルートを置くディレクトリに移動。次にcloneを行う。これでappディレクトリが出来て、その中に開発側で作ってベアリポジトリに送ったデータが一式登録される。

$ cd /var/www
$ git clone /opt/repo.git app

 

このとき

git clone /opt/repo.git

のようにappを指定せずにすると、repo.gitというベアリポジトリのrepoを引っ張ってきて、勝手にその名前でディレクトリが作られるので注意。

なので、mkdirで/var/www/appを作った上で、cd /var/www/appに移動し、git clone /opt/repo.gitとすると、/var/www/app/repo/本番ソースという構造のディレクトリになってしまう。

 

ブラウザでアクセス

さて本番ドキュメントルートにソースが設置されたのでブラウザからアクセスしてみる。

すると意味不明なエラー。これはLaravelだけの話かもです。

 

エラーその1

The stream of file “/var/www/app/storage/logs/laravel.log” could not be opened: failed to open stream: Permission denied

これはlogs直下のlaravel.logを開けないよと怒られている。といってもlogsディレクトリの中には何も入っていないので、logsを誰でもアクセスできるようにしよう。

 

$ su -
$ cd /var/www/app/storage
$ chmod 777 logs/

管理者になり、storageに移動し、logsのパーミッション変更し、外部ユーザでも書き込み可能に変更する。

ところでこのファイルにアクセスしようとしているユーザは、apacheユーザになるのか。ならばファイルは全てapacheユーザにしてあげてもよいが、ちょっとその辺よく解らない。

外注の人はgitユーザを作ってその所有権に設定していたので、それでいいと思う。

後で見るとこのディレクトリの中にlaravel.logができていた。

 

エラーその2

The /var/www/app/bootstrap/cache directory must be present and writable.

これまた書き込みできないと怒られているようだ。

 

# cd /var/www/app/
# chmod -R 777 bootstrap/cache

でcacheディレクトリへのパーミッションを変更した。

 

エラーその3

エラーメッセージ忘れた。IBM ODBCドライバーがおかしいとのこと。

調べてみたら/var/www/app/config内にあるdatabase.phpが消えていた。

これは.gitignoreで管理していたせいか、開発側からコピーされなかったようだ。

やれやれバックアップを取っておいてよかった。本番側にこれだけをftpでコピーして、本番用の項目をバックアップを見て直す。

 

 

一応開通

これで一応開通したみたい。

 

 

 

エラーその4

unserialise(): error at offset 0 of 40bytes

composer updateをすれば直るみたい。

 

# exit
$ cd /var/www/app
$ composer update

 

エラーその5

.gitignoreが効かない

これはキャッシュが残っていることが原因らしい。

 

$ git rm -r --cached .

これで解決したみたい。

 

エラー6

相変わらず本番ドキュメントルート側でgit statusすると変なファイルが未コミットで存在して消えない

開発側から見ると特にコミットするべきものはなく、開発側からPUSHして、本番側からPULLしても変わらない。

これは本番側で、

  • git rm -r cached(キャッシュクリア)
  • composer update(コンポーザのアップデート)
  • エラー1と2のようなアクセスエラー

時にできたファイルの残骸か、何かだと思う。deleteとあったので自動的に削除したものなのかもしれない。

といはいえこれもステージング&コミットすれば問題ないかと思ったが、私のgitバージョン1.8環境だと、git add .してもステージングできなかった。

 

そんなときはgit add –allとすればいいみたい。

$ /var/www/app
$ git add --all
$ git commit -m "all commit"
$ git push origin master

 

コミットとプッシュをしてベアリポジトリに上げておく。

$ git status

これでgit statusをしてもクリーンになった。

開発側からプルしておく。

> cd c:\xampp\htdocs
> git pull origin master

これで取得か削除か解らないが、ベアリポジトリと同期された。

 

 

最後にhookの設定をしておく

サーバ側で操作を行う。hooksディレクトリに移動してファイルを作る

$ cd /opt/repo.git/hooks
$ vi post-receive

 

中身は

cd /var/www/app
git --git-dir=.git pull

とする。

 

こうすることにより、開発側でプッシュしたら、本番側に取り込まれる手はずになる。

しかし実際に開発側でプッシュしても反映しない。

本番側でプルするとしっかり反映される。これはいったいどういうことだ。

 

エラーその7

hooks内に作成したpost-receiveファイルの実行権がない

ベアリポジトリはgit_repoユーザでinitしたので、所有権はgit_repoユーザ。

開発からPUSHすると受けるベアリポジトリ側が自動実行するのがhooksという役割。

これはおそらくgit_repoユーザ権限で行うはず。

だけど、このpost-receiveファイルのパーミッションは644になっている。

6といえば読みこみと書き込みのはず。これでは実行ができない。

なのでパーミッションを替えてあげる。

 

$ su -
# cd /opt/repo.git/hooks
chmod 755 post-receive

これで上手くいく。ちなみに読みこみと実行だけでいいのだから、555でもいいはず。

まぁ555だとrootユーザでないと内容変更できないので755で良いと思う。

 

 

その他

Laravel-Excelがおかしくなった

私の環境はIBMi/AS400なので文字コードの関係上、Laravel-Excelデフォだと使えない。

なので簡単な文字変換の命令を一行追加している。

だが、さきほど行ったcomposer updateでLaravel-Excelがキレイに上書きされたみたいだ。

なのでその文字変換の命令を再度追加してあげたら治った。

 

 

 

コメント

タイトルとURLをコピーしました