Home > Windows にまつわる e.t.c.

IIS コンテンツを Bitbucket にバックアップする


Web コンテンツをロストする事故をやらかしたので、コンテンツテータの多重バックアップを仕掛けたのですが、オフサイト バックアップを実装していなかったので、クラウドへのバックアップを実装することにしました。

Windows Server のクラウドバックアップと言えば、Azure Backup が常套手段なのですが、コンテンツだけですし履歴も管理したいので Bitbucket へ git push することにしました。(GitHub ではなく、Bitbucket をチョイスした理由は、使い慣れているからです w)

ちなみに、Bitbucket は5ユーザーまでなら無料で使えるので、個人で使う分には事実上無料のサービスです。

Bitbucket(GitHub も同様)に push するには、いくつか事前準備が必要です。

・OpenSSH キーペア作成
・Git for Windows のインストール
・環境設定
・Bitbucket サインアップと公開鍵の登録
・リポジトリ作成
・リモートリポジトリ設定

 

OpenSSH キーペア作成

コンテンツを 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

 

Git for Windows のインストール

バックアップを実施する 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

 

Bitbucket サインアップと公開鍵の登録

これで 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

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 コマンド

初期化とリモートリポジトリからローカルリポジトリを作成 git init
git pull リポジトリ
リモートリポジトリからローカルリポジトリを作成(初期化不要) git clone リポジトリ
ローカルリポジトリを最新へ更新 git pull
コンテンツを格納するリモートリポジトリを指定 git remote add origin リポジトリ
追加/更新したコンテンツをローカルリポジトリに追加 git add .
ローカルリポジトリのコミット git commit -m メッセージ
ローカルリポジトリをリモートリポジトリへプッシュ git push -u origin master

 

 

back.gif (1980 バイト)

home.gif (1907 バイト)

Copyright © MURA All rights reserved.