Web コンテンツをロストする事故をやらかしたので、コンテンツテータの多重バックアップを仕掛けたのですが、オフサイト バックアップを実装していなかったので、クラウドへのバックアップを実装することにしました。
Windows Server のクラウドバックアップと言えば、Azure Backup が常套手段なのですが、コンテンツだけですし履歴も管理したいので Bitbucket へ git push することにしました。(GitHub ではなく、Bitbucket をチョイスした理由は、使い慣れているからです w)
ちなみに、Bitbucket は5ユーザーまでなら無料で使えるので、個人で使う分には事実上無料のサービスです。
Bitbucket(GitHub も同様)に push するには、いくつか事前準備が必要です。
・OpenSSH キーペア作成
・Git for Windows のインストール
・環境設定
・Bitbucket サインアップと公開鍵の登録
・リポジトリ作成
・リモートリポジトリ設定
コンテンツを git push するには、OpenSSH キーペアを使って認証するので、まずはキーペアを作成します。
キーペアは、Client PC 環境で作っても構いません。
Windows 用の OpenSSH は以下にあるので、OpenSSH-Win64.zip をダウンロードして適当なフォルダーに展開します。(x86 環境でキーペアを作る場合は OpenSSH-Win32.zip)
Releases - PowerShell/Win32-OpenSSH - GitHub
https://github.com/PowerShell/Win32-OpenSSH/releases
展開したら、「ssh-keygen -t rsa -f id_rsa」コマンドでパスフレーズ無しのキーペアを作成します。
PowerShell プロンプト作成する場合はこんな感じになります。(パスフレーズは設定しません)
PS C:\OpenSSH-Win64> .\ssh-keygen -t rsa -f id_rsa Generating public/private rsa key pair. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in id_rsa. Your public key has been saved in id_rsa.pub. The key fingerprint is: SHA256:e6f86Y8GMm5r6q4re4LJNJxhD4TD/wzMsAingvLTvCk VWNET\mura@Main20160228 The key's randomart image is: +---[RSA 2048]----+ |o | |++. | |=+* | |*= = | |=.=o+ S | | =o.oo o.. | |oo.. o ..o... | |o.E + +o o.o | | .*o=++..o+=.. | +----[SHA256]-----+ PS C:\OpenSSH-Win64> |
カレント フォルダーにキーペアが作成されます。
公開鍵: id_rsa.pub
秘密鍵 id_rsa
バックアップを実施する Server に Git for Windows をインストールします。
インストールは、普通のインストーラーなので困る事は無いと思います。設定は全てデフォルトで構いません。
Git for Windows
https://git-for-windows.github.io/
Git for Windows のインストールが完了したら、Bitbucket へ push するために必要な情報をセットアップします。
まずは、秘密鍵を格納するフォルダーを作成します。
フォルダーの場所は適当でよいのですが、格納フォルダーは .ssh にします。
今回は D:\Git\.ssh に格納することにします。
.ssh というフォルダー名は、エクスプローラーでは作成できないので、コマンドで作成します。
PS C:\> md D:\Git\.ssh ディレクトリ: D:\Git Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2016/12/29 15:11 .ssh |
出来上がったフォルダーに、先ほど作成した OpenSSH の秘密鍵( id_rsa )を置きます。
同じフォルダーに以下内容の config ファイルを作成します
Host bitbucket.org HostName bitbucket.org StrictHostKeyChecking no IdentityFile ~/.ssh/id_rsa |
このフォルダーがホームディレクトリになるので、環境変数 Home にディレクトリを登録します。(システム環境変数に登録するのも OK)
$env:Home = "D:\Git" |
続いて、push するユーザー情報を以下コマンドで登録します。
git config --global user.name "Your name" git config --global user.email MailAddress |
PS C:\> git config --global user.name
"Syuichi Murashima" PS C:\> git config --global user.email s.murashima@gmail.com |
これで Server 側の準備は出来たので、Bitbucket 側の準備です。
まだ Bitbucket
アカウントを持っていない場合は、まずはサインアップします。
Bitbucket
https://bitbucket.org/account/signin/
アカウントの管理で、先ほど作成したキーペアの公開鍵を登録します。
Bitbucket にログインしたら、バックアップを格納するリポジトリ作成です。
必須項目はリポジトリ名だけです。
リポジトリを作成したら、SSH リポジトリを控えておきます。
リポジトリが出来たら、バックアップを実施する Windows Server で push するリポジトリを指定します。
まずは、バックアップするディレクトリに移動します。
PS C:\> cd C:\inetpub\wwwroot PS C:\inetpub\wwwroot> |
git init で初期化します。
PS C:\inetpub\wwwroot> git init Initialized empty Git repository in C:/inetpub/wwwroot/.git/ PS C:\inetpub\wwwroot> |
続いて、git remote add origin で、先ほど控えた push 先のリポジトリを指定します。
PS C:\inetpub\wwwroot> git remote add
origin git@bitbucket.org:SyuichiMurashima/web_backup.git PS C:\inetpub\wwwroot> |
Bitbucket へ push するには、追加/更新されたコンテンツを git add . でインデックス登録し
PS C:\inetpub\wwwroot> git add . PS C:\inetpub\wwwroot> |
git commit -m "message" でローカルリポジトリへコミットします。
PS C:\inetpub\wwwroot> git commit -m "1st
commit" [master (root-commit) ad452ff] 1st commit 2 files changed, 32 insertions(+) create mode 100644 iisstart.htm create mode 100644 iisstart.png PS C:\inetpub\wwwroot> |
コミットしたローカルリポジトリを git push -u origin master で Bitbucket へ push ます。
PS C:\inetpub\wwwroot> git push -u origin
master Warning: Permanently added 'bitbucket.org,2401:1d80:1010::150' (RSA) to the list of known hosts. Counting objects: 4, done. Delta compression using up to 2 threads. Compressing objects: 100% (4/4), done. Writing objects: 100% (4/4), 88.53 KiB | 0 bytes/s, done. Total 4 (delta 0), reused 0 (delta 0) To bitbucket.org:SyuichiMurashima/web_backup.git * [new branch] master -> master Branch master set up to track remote branch master from origin. PS C:\inetpub\wwwroot> |
これで Bitbucket へ push されました。
Bitbucket を見ると、push されているのが確認できます。
手動で push するのも面倒なので、スクリプトにしてスケジュールタスクに登録し、1日一度 push するようにします。
コンテンツが更新されていない時は、push は空振りするので、毎日実行しても問題はありません。
GitBackup.ps1
# Home 指定 $env:Home = "D:\Git" # Path 追加 $env:Path += ";C:\Program Files\Git\cmd" # バックアップ ディレクトリに移動 cd C:\inetpub\wwwroot # インデックス登録 git add . # Commit $Now = Get-Date $Today = "{0:0000}-{1:00}-{2:00} {3:00}:{4:00}:{5:00}" -f $Now.Year, $Now.Month, $Now.Day, $Now.Hour, $Now.Minute, $Now.Second git commit -m $Today # push git push -u origin master |
スケジュール登録はこんな感じ
# タスク名 $FullTaskName = "Backup\GitBackup" # 実行スクリプト $Script = "D:\Git\GitBackup.ps1" # バックアップ時刻 $StartTime = "04:00" SCHTASKS /Create /tn $FullTaskName /tr "C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe $Script" /ru "SYSTEM" /sc daily /st $StartTime /f |
初期化とリモートリポジトリからローカルリポジトリを作成 | git init git pull リポジトリ |
リモートリポジトリからローカルリポジトリを作成(初期化不要) | git clone リポジトリ |
ローカルリポジトリを最新へ更新 | git pull |
コンテンツを格納するリモートリポジトリを指定 | git remote add origin リポジトリ |
追加/更新したコンテンツをローカルリポジトリに追加 | git add . |
ローカルリポジトリのコミット | git commit -m メッセージ |
ローカルリポジトリをリモートリポジトリへプッシュ | git push -u origin master |
Copyright © MURA All rights reserved.