■GitHub
参考:新規に立てたgithubリポジトリからソースをcloneする http://qiita.com/monhan/items/b467e5f58ebcbc5f5b3c 参考:GitHubでリポジトリを作ってSSHで"git clone"するまで http://blog.suz-lab.com/2012/12/githubsshgit-clone.html 参考:githubから、Action Required - SSH Key Vulnerabilityなるメールが来た http://blog.bornneet.com/Entry/328/ 参考:gitでシンプルなデプロイ環境を作る http://qiita.com/zaburo/items/8886be1a733aaf581045 参考:githubのwebhookを使って、push時に自動でサーバーを更新させる http://blog.manaten.net/entry/573 ■インストール(古いバージョンでダメなら試す) # yum list installed | grep git.x86_64 … gitのインストールを確認 # yum remove git … 古いものがあれば削除 # yum install git … gitをインストール ■動作確認 # git --version … インストールを確認 ■Apacheへログイン # passwd apache … apacheにパスワードを設定(rootを経由するなら不要) # su -s /bin/bash - apache … シェルを指定してログイン ■デプロイ環境を構築 ※apacheユーザで作業 # mkdir /var/www/html/test … デプロイ先を作成 # chmod 775 /var/www/html/test/ … apacheグループのユーザに読み書き実行を許可 # ll /var/www/html/ … デプロイ先の所有者を確認 $ cd /var/www/html/test … デプロイ先に移動 $ git clone git@github.com:refirio/test.git /var/www/html/test … クローン実行 Initialized empty Git repository in /var/www/html/test/.git/ The authenticity of host 'github.com (192.30.252.128)' can't be established. RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'github.com,192.30.252.128' (RSA) to the list of known hosts. Permission denied (publickey). … Permissionで弾かれている(鍵の登録が必要) fatal: The remote end hung up unexpectedly ■鍵 ※apacheユーザで作業 $ cd … apacheのホームディレクトリで作業 $ mkdir /var/www/.ssh $ chown -R apache:apache /var/www/.ssh/ $ ssh-keygen -t rsa … gitへSSH接続するための鍵を作成 Generating public/private rsa key pair. Enter file in which to save the key (/var/www/.ssh/id_rsa): … 空Enter(デフォルトの場所に作成) Enter passphrase (empty for no passphrase): … 空Enter(パスワード無しの鍵を作成) Enter same passphrase again: … 空Enter Your identification has been saved in /var/www/.ssh/id_rsa. Your public key has been saved in /var/www/.ssh/id_rsa.pub. The key fingerprint is: 42:b3:c9:c3:f9:85:e4:be:9a:3e:28:82:cf:48:83:a9 apache@refirio.net The key's randomart image is: +--[ RSA 2048]----+ | | | | | o . | | + B . | | O S . | |.. = . | |+o . o | |=oo . .. . | |Eoo. .+o. | +-----------------+ $ ll /var/www/.ssh/ … 鍵(id_rsa と id_rsa.pub)の作成を確認 合計 8 -rw------- 1 apache apache 1675 10月 18 12:13 2015 id_rsa -rw-r--r-- 1 apache apache 400 10月 18 12:13 2015 id_rsa.pub -rw-r--r-- 1 apache apache 407 10月 18 12:19 2015 known_hosts $ vi /var/www/.ssh/id_rsa … 秘密鍵の内容を確認
-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEA7QltpgTVx5XNpS3sA/qatl/NlFHxGHR55cnZw2zsGpkqadVN 〜略〜 ePtIQN8d07QbxJ/RLzzLfkgs6w0tezCv40tXtCSD7LdeJTaRwIg= -----END RSA PRIVATE KEY-----
$ vi /var/www/.ssh/id_rsa.pub … 公開鍵の内容を確認(アカウントとドメインが記入されているのを確認)
ssh-rsa AAAA〜略〜3PQ== apache@refirio.net
$ vi /var/www/.ssh/known_hosts … gitへのログインを試みたので、known_hostsとして公開鍵が登録されている
github.com,192.30.252.128 ssh-rsa AAAA〜略〜AaQ==
■Protectを解除(この手順は不要かも?) $ ssh-keygen -lf ~/.ssh/id_rsa.pub … フィンガープリントを確認 2048 b4:dd:17:〜略〜:6e:fd:a4 /root/.ssh/id_rsa.pub (RSA) https://github.com/settings/ssh/audit からフィンガープリントを登録 …と思ったけど、https://github.com/settings/ssh/audit でapproveボタンを押せばOKだった。 未承認のアクセスがあったというだけ? ■鍵を登録 https://github.com/settings/ssh から「refirio.net」というタイトルで公開鍵を登録 パスワードはGitHubへのログインパスワードを登録 ■動作確認 ※apacheユーザで作業 $ cd /var/www/html/test … 作業用ディレクトリへ移動 $ git clone git@github.com:refirio/test.git /var/www/html/test … クローン実行 Initialized empty Git repository in /var/www/html/test/.git/ remote: Counting objects: 146, done. remote: Compressing objects: 100% (25/25), done. remote: Total 146 (delta 10), reused 0 (delta 0), pack-reused 121 Receiving objects: 100% (146/146), 18.03 KiB, done. Resolving deltas: 100% (74/74), done. $ ll … 確認 合計 28 -rw-r--r-- 1 apache apache 23 10月 18 12:24 2015 README.md drwxr-xr-x 2 apache apache 4096 10月 18 12:24 2015 css -rw-r--r-- 1 apache apache 615 10月 18 12:24 2015 index.html -rw-r--r-- 1 apache apache 370 10月 18 12:24 2015 page1.html -rw-r--r-- 1 apache apache 343 10月 18 12:24 2015 page2.html -rw-r--r-- 1 apache apache 343 10月 18 12:24 2015 page3.html -rw-r--r-- 1 apache apache 384 10月 18 12:24 2015 test.php $ git pull … プルする場合 Already up-to-date. $ git pull … gitのmasterを更新してから再度プルした場合 remote: Counting objects: 5, done. remote: Compressing objects: 100% (3/3), done. remote: Total 5 (delta 3), reused 2 (delta 2), pack-reused 0 Unpacking objects: 100% (5/5), done. From github.com:refirio/test d3c714b..e12a45e develop -> origin/develop f555d5f..5915266 master -> origin/master * [new branch] text -> origin/text Updating f555d5f..5915266 Fast-forward index.html | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) $ ll … 確認 合計 28 -rw-r--r-- 1 root root 23 10月 12 14:16 2015 README.md drwxr-xr-x 2 root root 4096 10月 12 14:16 2015 css -rw-r--r-- 1 root root 514 10月 12 14:29 2015 index.html … ファイルが更新された -rw-r--r-- 1 root root 343 10月 12 14:16 2015 page1.html -rw-r--r-- 1 root root 343 10月 12 14:16 2015 page2.html -rw-r--r-- 1 root root 343 10月 12 14:16 2015 page3.html -rw-r--r-- 1 root root 343 10月 12 14:16 2015 page4.html ■デプロイ用スクリプト作成 ※apacheユーザで作業 $ mkdir /var/www/html/test-deploy … デプロイツール用ディレクトリを作成 $ chmod 775 /var/www/html/test-deploy/ … apacheグループのユーザに読み書き実行を許可 $ cd /var/www/html/test-deploy/ … 作業用ディレクトリへ移動 $ vi deploy.sh … デプロイ用スクリプトを作成
#!/bin/bash cd /var/www/html/test; git pull;
$ chmod 744 deploy.sh … デプロイ用スクリプトに実行権限を付加 $ /var/www/html/test-deploy/deploy.sh … 実行テスト Already up-to-date. ./deploy.sh を実行するPHPプログラムを作成する /var/www/html/test-deploy/index.php
<?php if ($fp = fopen('logs/' . date('YmdHis') . '.log', 'a')) { fwrite($fp, print_r($_POST['payload'], true)); fwrite($fp, "\n"); fwrite($fp, $_SERVER['HTTP_USER_AGENT']); fclose($fp); } else { exit('NG'); } $payload = $_POST['payload']; $payload = json_decode($payload, true); if ($payload['ref'] == 'refs/heads/master') { echo shell_exec('/var/www/html/test-deploy/deploy.sh'); }
ブラウザから index.php にアクセスして、デプロイできることを確認する ■更新を自動通知 https://github.com/refirio/test/settings/hooks Payload URL: http://refirio.net/test-deploy/ Content type: application/json Which events would you like to trigger this webhook?: Send me everything. everythingにしておかないと、マージのタイミングで知らせてくれない? もしくは「Let me select individual events.」で、任意のタイミングで知らせてもらうのが良さそう ■続き パーミッションをどうするか 開発環境がMacなら、パーミッションも含めてコミットされる? シェルスクリプトに「特定箇所にあるディレクトリのパーミッションを自動設定する」コードを追加する? …と思ったけど、Apache権限でデプロイするので、パーミッションは問題にならなさそう
■Bitbucket
https://bitbucket.org/ 「Get started」から開始 リポジトリを作ると refirio/test のような名前になるので、会社で使う場合は「会社アカウントで」「リポジトリ名は英語で」作成したほうが良さそう もしくは、案件ごとのまとまりごとにプロジェクトを作成した方が良さそう すべて同じプロジェクトで管理するとすぐに上限の5人に達するし、管理も難しそう ユーザ名・パスワード・Eメールを入力し Planは「Personal Account」でサインアップ 会社で使うなら「5 user team」で良さそう (会社アカウントで作って、その後チームアカウントも作る) メールが送信されるので確認しておく リポジトリの作成 名前は「test」英語のみにする?GitHubに合わせるためにも。日本語は「説明」欄に書く? 非公開リポジトリ プライベートフォークのみ許可 リポジトリタイプGit プロジェクト管理は課題管理とWiki プログラミング言語はPHP Hip Chat は有効にしない Setting -> Services -> Issues を追加 …は、はじめから追加されていた 概要 -> SourceTreeにクローン SourceTreeが起動するので、Bitbucketパスワードを入力 リポジトリの場所を選択してクローン 課題 -> 最初の課題を作成 「#1 メッセージ」 のようにコミットすると、課題の番号へリンクされる Setting -> マイルストーン からマイルストーンを設定できる - - - - - HTTPSでクローン git clone https://refirio@bitbucket.org/refirio/test.git SSHでクローン git clone git@bitbucket.org:refirio/test.git ■Apacheへログイン # passwd apache … apacheにパスワードを設定(rootを経由するなら不要) # su -s /bin/bash - apache … シェルを指定してログイン ■デプロイ環境を構築 ※apacheユーザで作業 # mkdir /var/www/html/bitbucket-test … デプロイ先を作成 # chmod 775 /var/www/html/bitbucket-test/ … apacheグループのユーザに読み書き実行を許可 # ll /var/www/html/ … デプロイ先の所有者を確認 $ cd /var/www/html/bitbucket-test … デプロイ先に移動 $ git clone git@bitbucket.org:refirio/test.git /var/www/html/bitbucket-test … クローン実行 Initialized empty Git repository in /var/www/html/bitbucket-test/.git/ The authenticity of host 'bitbucket.org (131.103.20.167)' can't be established. RSA key fingerprint is 97:8c:1b:f2:6f:14:6b:5c:3b:ec:aa:46:46:74:7c:40. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added 'bitbucket.org,131.103.20.167' (RSA) to the list of known hosts. Permission denied (publickey). … Permissionで弾かれている fatal: The remote end hung up unexpectedly ■鍵 ※apacheユーザで作業 $ cd … ホームディレクトリで作業 $ mkdir /var/www/.ssh $ chown -R apache:apache /var/www/.ssh/ $ ssh-keygen -t rsa … BitbucketへSSH接続するための鍵を作成 Generating public/private rsa key pair. Enter file in which to save the key (/var/www/.ssh/id_rsa): … 空Enter(デフォルトの場所に作成) Enter passphrase (empty for no passphrase): … 空Enter(パスワード無しの鍵を作成) Enter same passphrase again: … 空Enter Your identification has been saved in /var/www/.ssh/id_rsa. Your public key has been saved in /var/www/.ssh/id_rsa.pub. The key fingerprint is: 42:b3:c9:c3:f9:85:e4:be:9a:3e:28:82:cf:48:83:a9 apache@refirio.net The key's randomart image is: +--[ RSA 2048]----+ | | | | | o . | | + B . | | O S . | |.. = . | |+o . o | |=oo . .. . | |Eoo. .+o. | +-----------------+ $ ll /var/www/.ssh/ … 鍵(id_rsa と id_rsa.pub)の作成を確認 合計 8 -rw------- 1 apache apache 1675 10月 18 12:13 2015 id_rsa -rw-r--r-- 1 apache apache 400 10月 18 12:13 2015 id_rsa.pub -rw-r--r-- 1 apache apache 407 10月 18 12:19 2015 known_hosts $ vi /var/www/.ssh/id_rsa … 秘密鍵の内容を確認
-----BEGIN RSA PRIVATE KEY----- MIIEogIBAAKCAQEA7QltpgTVx5XNpS3sA/qatl/NlFHxGHR55cnZw2zsGpkqadVN 〜略〜 ePtIQN8d07QbxJ/RLzzLfkgs6w0tezCv40tXtCSD7LdeJTaRwIg= -----END RSA PRIVATE KEY-----
$ vi /var/www/.ssh/id_rsa.pub … 公開鍵の内容を確認(アカウントとドメインが記入されているのを確認)
ssh-rsa AAAA〜略〜3PQ== apache@refirio.net
$ vi /var/www/.ssh/known_hosts … Bitbucketへのログインを試みたので、known_hostsとして公開鍵が登録されている
bitbucket.org,192.30.252.128 ssh-rsa AAAA〜略〜AaQ==
■鍵を登録 https://bitbucket.org/refirio/test/admin/deploy-keys/ から「refirio.net」というタイトルで公開鍵を登録 ■動作確認 ※apacheユーザで作業 $ cd /var/www/html/bitbucket-test … 作業用ディレクトリへ移動 $ git clone git@bitbucket.org:refirio/test.git /var/www/html/bitbucket-test … クローン実行 Initialized empty Git repository in /var/www/html/bitbucket-test/.git/ remote: Counting objects: 22, done. remote: Compressing objects: 100% (21/21), done. remote: Total 22 (delta 10), reused 0 (delta 0) Receiving objects: 100% (22/22), done. Resolving deltas: 100% (10/10), done. $ ll … 確認 合計 24 drwxr-xr-x 2 apache apache 4096 12月 6 21:15 2015 css -rw-r--r-- 1 apache apache 556 12月 6 21:15 2015 index.html -rw-r--r-- 1 apache apache 290 12月 6 21:15 2015 test.php -rw-r--r-- 1 apache apache 293 12月 6 21:15 2015 test1.html -rw-r--r-- 1 apache apache 293 12月 6 21:15 2015 test2.html -rw-r--r-- 1 apache apache 293 12月 6 21:15 2015 test3.html $ git pull … プルする場合 Already up-to-date.
■開発用サーバからコミット&プッシュ
一部の人のみFTPで更新し、その内容をgitに取り込めるかの試行錯誤 参考:gitで定期的にファイルをバックアップする http://qiita.com/irxground/items/80dc6432e7d9d2b8b2a9 参考:Gitを使いこなすための20のコマンド https://mag.osdn.jp/09/03/16/0831212/3 結論から書くと、Bitbucketのキーに書き込み権限はないので不可 GitHubならできるみたいだが要検証 参考:GitHubとBitbucketでのDeploy keyの違い http://nemumu.hateblo.jp/entry/2014/03/12/184610 ■git用にユーザを追加 # useradd git-user # passwd git-user # usermod -a -G apache git-user # cp /home/ec2-user/.ssh/authorized_keys /home/git-user/.ssh/authorized_keys ■git用ユーザから更新できるように 以下はデプロイ時にApacheユーザから find /var/www/html/student/ -type f -print | xargs chmod 664 find /var/www/html/student/ -type d -print | xargs chmod 775 find /var/www/html/html/student/ -type f -print | xargs chmod 664 find /var/www/html/html/student/ -type d -print | xargs chmod 775 find /var/www/html/html/student/test/ -type f -print | xargs chmod 664 find /var/www/html/html/student/test/ -type d -print | xargs chmod 775 ■更新したファイルを表示 $ git status -bs ## develop...origin/develop M html/student/test/test.txt ?? html/student/test/test_add.txt $ git diff diff --git a/html/student/test/test.txt b/html/student/test/test.txt index 4871fd5..7827f81 100644 --- a/html/student/test/test.txt +++ b/html/student/test/test.txt @@ -1 +1,2 @@ test.txt +更新テスト ■コミット&プッシュ $ git add -A $ git commit -m "Commit at $(date "+%Y-%m-%d %T")" || true $ git push -f origin develop:develop conq: repository access denied. access via a deployment key is read-only. … Bitbucketのキーに書き込み権限はない。GitHubなら大丈夫のはず fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
■PHPで現在のgitブランチを取得
参考:PHPで現在のgitブランチを取得する http://co.bsnws.net/article/78
■WordPressをGitで管理
■方針 WordPress自体が自身のプログラムを書き換えるため、最低限のファイル(テーマと.htaccess)のみgitで管理する 自作プラグインなど、他にも管理対象があれば追加する ■Gitへ登録 ローカルにWordPressを普通に設置&動作確認 SourceTreeでリポジトリを作成 「+ → Create」 保存先のパス: (WordPressを設置したフォルダのパス) 名前: (任意の名前) 種類: Git フォルダが存在する旨の警告が表示されるが、そのまま進める 以下のファイルは不要なので削除 license.txt readme.html .gitignoreを作成(以下の場合、sampleテーマと.htaccessのみGit管理する)
Thumbs.db .DS_Store /wp-*/ /index.php /wp-*.php !/wp-content/themes /wp-content/themes/* !/wp-content/themes/sample /xmlrpc.php
サンプルとして以下のテーマを導入(何でもいい) https://wordpress.org/themes/sosimple/ Bitbucket上にリポジトリを作成(リポジトリは空のままにしておく) SourceTreeでローカルリポジトリにリモートリポジトリを追加 「設定 → 追加」 リモート名: (任意の名前) URL/パス: (Gitのパス) 参考:SourceTreeでローカルリポジトリからリモートへプッシュする設定 | studio9 personal http://personal-studio9.com/sourcetree_push/ SourceTreeから普通にコミット&プッシュ(コミット前に、意図したファイルのみが対象になっているか確認する) これで、最低限のファイルのみGitで管理される ■Gitから取得 WordPressを普通に設置&動作確認 WordPressを設置したフォルダ自体の名前を一時的に変更 本来の場所にフォルダを作成し、その中にクローン(ファイルの所有者や権限に注意) 一時的に名前を変更したフォルダから、各ファイルを本来の場所に移動(.htaccess以外は丸ごと上書き、で大丈夫のはず) コミット対象が発生していないことを確認 WordPressを動作確認 WordPressの管理画面からテーマを変更&動作確認 ■複数台構成のサーバで稼働させる マルチAZ環境でWordPressを使う方法は aws.txt を参照
■git操作コマンド
参考:逆引きGit http://www.backlog.jp/git-guide/reference/ 参考:gitでリモートのブランチにローカルを強制一致させたい時 http://qiita.com/ms2sato/items/72b48c1b1923beb1e186 参考:プログラマはGit、デザイナーはFTPでアップロードする場合の例 http://qiita.com/irxground/items/80dc6432e7d9d2b8b2a9 参考:git 管理をやめる https://qiita.com/b4b4r07/items/cac4abd9ae66537e2833 参考:既存のディレクトリに git clone するには http://neos21.hatenablog.com/entry/2016/02/07/000000 参考:既存ディレクトリにGitリモートリポジトリを適用 https://qiita.com/llhrkll/items/9b252348898d14ff90bf ※コミットがあるのでBitbucketでは無理かも 参考:git pushを取り消す http://tweeeety.hateblo.jp/entry/2015/06/10/215753 参考:git reset --hard で指定した時点の履歴に戻る方法 http://blog.roundrop.jp/show/37 参考:git log --oneline のお供に --no-merges http://qiita.com/hattorix@github/items/f18b172aafe1340d87f6 参考:困った時の逆引きGitメモ http://myenigma.hatenablog.com/entry/2016/07/09/190058 参考:GitでリモートにPushした内容を取り消したい!! http://grandbig.github.io/blog/2016/07/16/git-reset/ 参考:Git で コミットを無かったことにする方法 (git revert の使い方) http://akiyoko.hatenablog.jp/entry/2014/08/21/220255 参考:git revertでmerge commitを取り消す http://qiita.com/shizuma/items/313ed581e071f53a4d2e 参考:【派閥別】Gitのコミットを間違えたときの対処法まとめ http://freak-da.hatenablog.com/entry/20111105/p1 参考:SourceTreeでコミットを取り消す | cly7796.net http://cly7796.net/wp/other/cancel-the-commit-sourcetree/ クローン git clone git@bitbucket.org:xxx/yyy.git /var/www/html 現在のブランチ名を表示 git branch --contains=HEAD もしくは git branch --contains ブランチを切り替え(切り替えられなければ、先にプルを行う) git checkout feature/zzz 更新したファイルを表示 git status -bs 履歴を表示(ローカル) git log 履歴を表示(サーバ) git log --oneline --graph --decorate -10 指定した時点の履歴に戻る git log git reset --hard xxxxxxx プル git pull デプロイ済みのファイルをmasterに強制一致 git fetch origin git reset --hard origin/master デプロイ済みのファイルをdevelopに強制一致 git fetch origin git reset --hard origin/develop プッシュを取り消す(完全に無かったことになるが、取り消し履歴も残らないので注意) git log --oneline git reset --hard xxxxxxx git log --oneline git push -f ... 強制プッシュ。ユーザ名とパスワードを入力する - - - - - GitHubでもBitbucketでもSourceTreeでも、コミットのコメント修正はどのようにする? 要検証