UE4でLAMP(Nginx)にアカウントを作ってログインし、データを保存してGETする

UE4でサーバーにログインする場合、そのままではできないのでC++でノードを作ってHTTP/HTTPSで通信するんですが、フリーのプラグインでこれを実現するものがあったのでこれを使って実装してみる。

VaRestって言うプラグイン。標準では入ってないのでこちらからDLする。

DLはEpicのランチャーが起動し、これからDLしてインストールする。インストールし終わったらEnabledにチェックを入れてUE4を再起動ボタンを押す

説明(英語)を読むとC++で構築する必要はなく、これだけでHTTP/HTTPS通信ができるとのこと。

それではこれでHTTP/HTTPS通信のテストをしてみます。

まず、サーバー側に次のphpファイルを用意します。

<?php
$user = "user";
$pass = "pass";
//this script path
$script_php=$_SERVER['SCRIPT_NAME'];
if ($_SERVER["REQUEST_METHOD"]=="POST"){
    if ($_POST['user']==$user && $_POST['pass']==$pass){
        echo $user."で、パスワード".$pass."にてログインしました\n";
    }
}else{
//テーブルタグ
echo ("
    <form method=\"POST\" action=\" $script_php \">
    <table cellpadding=\"4\" cellspacing=\"1\" border=\"0\" width=\"800\"
        align=\"center\" bgcolor=\"#336666\">
        <tbody>
            <tr>
            <td height=\"100\" valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\">
            USERを入力してください。<br><br>
            USER:<input type=\"text\" name=\"user\">
            <br><br>
            パスワード:<input type=\"password\" name=\"pass\">
            <br><input type=\"submit\" value=\"ログイン\">
            </td>
            </tr>
       </tbody>
    </table>
</form>
");
}

GETは簡単なので割愛します。まず、POSTが行われたらPOSTを検知してUSER名とパスワードを確認して正しければPOSTされたユーザー名とパスワードを出力します。
POSTされてないとフォームを出力しますがこれは動作確認用です。設置したらまずPCから動作確認しましょう。

post.phpという名前で設置しました。こんな感じで出力されます。

ではUE4側の処理です。Zキーを押すとPOSTされて出力をUE4で受け取る処理です。

まず、適当にProjectを作ってレベルBPで構築します。

こんな感じです。UE4.24.3+VaRestです。

解説

まず、VaRestプラグインをEnableにします。で、キーボードイベントでZキーイベントを置きます。で、ConstractJsonRequestを配置し、VerbをPOSTにして、ContentTypeをRequestBodyにしてRequestをサーバーに投げるようにします。

VaRestRequestJson型の変数を作ってそこにRequestを格納します。

OnRequestCompleteにイベントをバインドして変数からRequestObujectを取り出しアカウント情報をセットします。

最後にphpスクリプトにPOSTして呼びます。

Zキーを押すとサーバーにログインしてデータを受け取ります。

次はこれでログインしてアカウントの作成とアカウントがある場合はログインしてSQLからデータを得るものを作成しますね

Download CounterをWPプラグイン、PHP:Mysql、ファイル 形式で作成する[第七回]完結編

wordpressプラグイン化しようかと思い、設計していたらいろいろと問題が見えてきた。

  1. プラグイン本体はできる。
  2. DLディレクトリ先を現在はカレントの任意のディレクトリを指定しているがWPの場合メディアディレクトリの中が望ましい
  3. このメディアディレクトリは年月日によって可変する仕様になっているのでWPで管理しているMysqlレコードからパスを検索しないといけないと思う
  4. 面倒なのでwordpressディレクトリ内全てから検索してみるかとも考えたが処理が重そう。また、ファイル名が重複してたらどうしよう
  5. なので使用方法によってセキュリティの問題がおこりそうな気がする

などといろいろ問題がありそう。なので一旦プラグイン化は留保しようかと思っています。

今のこれでもwordpressでも十分使えるし(WPじゃなくても使えるし)

なのでテーブルをCSV化してDLする機能だけ入れるようにして完結とさせていただきます。
※要望があれば追加します。ということでおしまい。

ちなみに追加しようとしていた機能

カレントにシンボリックリンクを作ってこれに引数を渡すとカウントできるようにしようかと思っていた。

//まず、シンボリックリンクがカレントにあるか確認する
if($drc=dir("../../")){
    //wordpressディレクトリ内のファイルを検索
    while($fl=$drc->read()) {
        //対象のファイルが存在していた場合
        if($fl=="downioad_counter"){
            $dlf=1;
            break;
        }
        //対象のファイルがなかった場合
        else{
            $dlf=0;
        }
    }
}else{
    echo "カレントディレクトリに移動できません...";
    exit;
}
//ディレクトリは閉じておく
$drc->close();
//シンボリックリンクがなかったら作る
if(!$dlf){
    symlink("./wp-content/plugins/download_counter/downioad_counter.php", "downioad_counter");
}

Download CounterをWPプラグイン、PHP:Mysql、ファイル 形式で作成する[第六回]

第五回でほぼ全て実装しましたので今回はSql命令文を使って集計させます

(怒)動作を試すならここでやらないで!ソースを確認しましょう!変なログが記録されて迷惑!INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time)を見ればわかると思いますが先にINSERTする項目を作ってあとで配列で置き換えているのでここにSql文入れてもfilenameにそのまま代入されちゃうのでSql文入れてもDBにそのままINSERTされると思いますよ。よく見て!


(Angry) Don’t do it here if you want to try it! Check the source! A strange log is recorded and annoying!If you look at INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time), you can see it, but since I made the item to be INSERTed first and replaced it with an array later, insert the Sql statement here However, since it will be assigned to filename as it is, I think that even if you enter a Sql statement, it will be inserted as it is in the DB. Look closely!

おばけが付近にいるか検索するAndroidアプリ「おばけスキャン」
↑別サーバーにジャンプさせてカウントを取るサンプル

<html>
<head>
	<title>JivaGooAR</title>
	<meta http-equiv="content-type" content="text/html; charset=Shift_JIS">
	<script>
		location.href = "https://play.google.com/store/apps/details?id=jp.dip.wspri.jivagoo ";
	</script>
</head>
<body>
</body>

SAKURA(楽曲:mp3)
↑カウントテスト用(mp3ファイルをDL)

sql_counterのスクリプト圧縮ファイル
↑からmysqlDLカウンターPHPがDLできます。ダウンロード状況は以下で確認できます。:パスワードはwspri

DL状況

セキュリティの関係でスクリプトが設置されたカレントから上位へ移動できてしまっていたのでファイル名にディレクトリパスを含められない&ディレクトリで上位に移動できないように修正しました。使用にあたっては設置カレントにDLディレクトリを作成してその中にファイルを設置するかもしくはその中にディレクトリを作成してご利用ください。

解説

ダウンロードされたファイルを集計して棒グラフで表示させるために以下のSql命令文を追加して実行させています
                        $count_files = "SELECT filename, COUNT( filename ) FROM $tb_name GROUP BY filename";
                        $count_files=$db->query($count_files);
                        $all="select count(id) from $tb_name";
                        $all=$db->query($all);
                        foreach($all as $all_row){$all = $all_row[0];}

SELECT filename, COUNT( filename ) FROM $tb_name GROUP BY filenameでダウンロードされたファイル名とそのカウント数を得ています。

select count(id) from $tb_nameは全体のカウントを得ています。で、実行結果はオブジェクトで返ってきますのでループでカウントを抜き出しています。オブジェクトなのでそのままでは使えません。
全体のカウントを得たらDLファイル毎のカウントを割って全体の割合を出してグラフに反映させています。このやり方ならDL数が大きくなってもはみ出るようなことはありませんね。

                        //ファイル毎の集計を表示で出力
                        //テーブルタグHEADER
                        echo ("
                            <table cellpadding=\"4\" cellspacing=\"1\" border=\"0\" width=\"800\"
                            align=\"center\" bgcolor=\"#336666\">
                            <tbody>
                            <tr id=\"count_f\" style=\"display:''\">
                            <td valign=\"middle\" align=\"center\" bgcolor=\"#2f4f4f\"><div style=\"font-size:10pt;color:#ffffff;\">ダウウンロードファイル名</div></td>
                            <td valign=\"middle\" align=\"center\" bgcolor=\"#2f4f4f\"><div style=\"font-size:10pt;color:#ffffff;\">DL数</div></td>
                            <td valign=\"middle\" align=\"center\" bgcolor=\"#2f4f4f\"><div style=\"font-size:10pt;color:#ffffff;\">グラフ(全体の割合)</div></td></tr>
                        ");
                        foreach($count_files as $count_row){
                            echo("
                            <tr id=\"count_f\" style=\"display:''\">
                            <td valign=\"middle\" align=\"left\" bgcolor=\"#ffffff\" width=\"200px\"><div style=\"font-size:10pt;\">".$count_row[0]."</div></td>
                            <td valign=\"middle\" align=\"left\" bgcolor=\"#ffffff\" width=\"50px\"><div style=\"font-size:10pt;\">".$count_row[1]."</div></td>
                            <td valign=\"middle\" align=\"left\" bgcolor=\"#ffffff\"><div style=\"background-color: blue; width: ".($count_row[1]/$all*100)."%; font-size: 10px;\">&nbsp;</div></td></tr>
                            ");
                        }
                        echo ("</tbody>
                        </table>");

で、出力ですが、集計結果は消す必要がないのでそのまま一番上に出力しています。ファイル数が何百とかになるならその下の処理同様にCSSで送ることができますね。こんなもんでどうですか。次は最終回、WPプラグイン化しますね。

Download CounterをWPプラグイン、PHP:Mysql、ファイル 形式で作成する[第五回]

では、第四回でSQLサーバに記録できるようになりましたので応用して記録して読み出すものを作成します。
今回は集計せずSQLデータベースにあるレコードを読み込んで一覧表示させます。

sql_counterのスクリプト圧縮ファイル

↑からmysqlDLカウンターPHPがDLできる。ダウンロード状況は以下で確認できます。:パスワードはwspri

DL状況

使い方は以前と同様に以下のようにタグを埋め込む。

<a href="http://plusload.dip.jp/sql_counter.php?fname=sql_counter.zip&dir=DL">sql_counterのスクリプト圧縮ファイル</a>

解説

mysqlなどのsqlサーバがインストールされていてユーザー名とパスワードが設定されていて、データベースの作成権限がある事が前提です。

sql_counter.zipがDownloadファイル名。
DLがディレクトリ名(省略するとカレントからファイルを検索します)

第四回にdlcount.phpみ実装したファイルのダウンロードと新たにレコードの読み込みを追加しただけです。

新たに追加したレコードの読み込み表示部

//Sql DataBase が存在するか確認する
try{
    //Sql connect
    $db = new PDO($host,$user,$pass);

    //view databases
    $sql = 'SHOW DATABASES';
    $results = $db->query($sql);

    //array loop
    while ($result = $results->fetch(PDO::FETCH_NUM)){
        //Does the database exist
        if($result[0]==$db_name){
            $exist=true;
        }
    }
    if($exist){
        $sql = 'use '.$db_name;
        if($db->query($sql)){
            $sql = "SELECT * FROM count_table";
            $sql=$db->query($sql);
            foreach($sql as $row){
                echo "<tr><td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['id']."</div></td>
                      <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['ip']."</div></td>
                      <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['filename']."</div></td>
                      <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".date("Y年m月d日 H時i分s秒",$row['dt'])."</div></td></tr>\n";
            }
        }
    }else{
        //テーブルタグ
        echo ("
                </tbody>
            </table>
            <table cellpadding=\"4\" cellspacing=\"1\" border=\"0\" width=\"800\"
                align=\"center\" bgcolor=\"#ff0000\">
            <tbody>
            <tr>
                <td height=\"100\" valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\">
                    <div style=\"font-size:24pt;color:#ff0000;\">Sql DataBase が存在しません!</div>
                </td>
            </tr>
            </tbody>
            </table>
        ");


    }
    //connect close
    $db = null;
}catch(PDOException $e){
    echo "DB connect failure..." . PHP_EOL;
    echo $e->getMessage();
    exit;
}

sqlへの書き込み時にUNIXタイムスタンプを得てそのまま書き込むようにしましたので読み込み時に成型しています。

ダウンロードされた回数だけtrを一旦出力してCSSで表示数を制御する方法を実装しています。

//pageview
$pageview = 5;

$pageviewに設定した値で表示数が変わります。ここでは5に設定してますが、実際には20-50位が妥当かな。

if($exist){
    $sql = 'use '.$db_name;
    if($db->query($sql)){
        $sql = "SELECT * FROM count_table";
        $sql=$db->query($sql);
        $i=0;
        foreach($sql as $row){
            $rows[$i]="<tr id=".$i." style=\"display:none\"><td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['id']."</div></td>
                <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['ip']."</div></td>
                <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".$row['filename']."</div></td>
                <td valign=\"middle\" align=\"center\" bgcolor=\"#ffffff\"><div style=\"font-size:10pt;\">".date("Y年m月d日 H時i分s秒",$row['dt'])."</div></td></tr>\n";
             $i++;
        }
    }
    $page = $i / $pageview;
    if($page<1){
        foreach($rows as $table){
            echo $table;
        }
        echo ("<script>
            for(i=0;i<".$pageview.";i++){
                obj = document.getElementById(i);
                obj.style.display = (obj.style.display == 'none') ? '' : 'none';
            }
        </script>");
    }else{
        echo ("
            <script>
            var obj;
            var i=0;
            var ol=0;
            function first(ii){
                //表示したものは消しときます
                for(i=ol;i<ii;i++){
                    obj = document.getElementById(i);
                    obj.style.display = 'none';
                }

                //表示します
                for(i=ii;i<".$pageview."+ii;i++){
                    obj = document.getElementById(i);
                    obj.style.display = (obj.style.display == 'none') ? '' : 'none';
                }
                ol=ii;
            }

            </script>
            <center><p><button onclick=\"first(i);\">next</button>&nbsp;|&nbsp;<button onclick=\"first(0);\">reset</button></p></center>\n
        ");
        foreach($rows as $table){
             echo $table;
        }
        echo "<script>i=0;first(i);</script>";
    }
}

表示・非表示はCSSのdisplayで行っています。最初にすべてのtrタグの中身をdisplay=’none’にしておいてすべて出力して、$pageview数だけ”にしています。また、表示した$pageviewのtrは次の表示の前に’none’にしています。
まあ、CSSなので表示が早いのが特徴です。なんせすべて最初に出力してますから…

また、集計結果もみられるように次はしようかと思いますが、それはphp側の処理ですので次の第六回にしようと思います。

 

Download CounterをWPプラグイン、PHP:Mysql、ファイル 形式で作成する[第四回]

第三回で作った(改造した)DLカウンターをMySql(Sql)対応にしてみます。
DLしたIPとDLファイル名、時間を記録してPHPで集計表示します。

まずはPHPでMySqlに接続してDATABASE一覧を得ます。

<?php
$host = 'mysql:host=localhost';
$user = 'root';
$pass = 'yourpassword';

try{
    //Sql connect
    $db = new PDO($host,$user,$pass);

    //view databases
    $sql = 'SHOW DATABASES';
    $results = $db->query($sql);

    //$results array echos
    while ($result = $results->fetch(PDO::FETCH_NUM)){
        echo $result[0]."<br>";
    }

    //connect close
    $db = null;
}catch(PDOException $e){
    echo "DB connect failure..." . PHP_EOL;
    echo $e->getMessage();
    exit;
}

ちなみにMySqlがインストールされている事が前提です。
これでDB一覧が得られます。

次にこれの応用で一覧の中に設定したDBが既にあるか判定します。
これは一覧を得るところに指定のものがあったらフラグを立てるという仕様にします

    //array loop
    while ($result = $results->fetch(PDO::FETCH_NUM)){
        //Does the database exist
        if($result[0]==$db_name){
            $exist=true;
        }
    }

これで判定できました。
ではDBが見つかった場合は追記。なかった場合はDBを追加し、テーブルを作ります。
ただ、ここでポイントはINSERT文などに直接変数を入れて実行させることができないのでひと手間必要です。
次のコードを見てください。

    //main
    if($exist){
        $sql = 'use '.$db_name;
        if($db->query($sql)){
            $sql = 'INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time)';
            $sql = $db->prepare($sql);
            $param = array(':ip'=>$get_ip,':file'=>$get_filename,':time'=>$get_timestamp);
            $sql->execute($param);	
        }else{
            echo "Donot use detabase....";
        }
    }else{
        //create database
        $sql = 'CREATE DATABASE '.$db_name;
        if($db->query($sql)){
            $sql = 'use '.$db_name;
                if($db->query($sql)){
                    $sql = 'create table '.$tb_name.' (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,ip varchar(32),filename varchar(2048),dt int(10))';
                    if($db->query($sql)){
                        $sql = 'INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time)';
                        $sql = $db->prepare($sql);
                        $param = array(':ip'=>$get_ip,':file'=>$get_filename,':time'=>$get_timestamp);
                        $sql->execute($param);
                    }else{
                        echo "Donot create table...";
                    }
                }else{
                    echo "Donot use detabase....";
                }
            }else{
                echo 'Donot create database....';
            }
        }

‘INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time)’を見てください。
INSERT文を作っているのですが何か変ですよね?:ipって何だ?
これは変数を入れる位置を示した空の値をここでは代入してINSERT文を作ります。
で、array(‘:ip’=>$get_ip,’:file’=>$get_filename,’:time’=>$get_timestamp);で配列を作って後から変数を代入しないとダメなんです。
う~ん。難しい。

ここまでのコード

<?php
////////////////////////////////////////////////
//File DownLoad Counter
//(c)2020 WSPRI J.Amano
//
//https://wspri.dip.jp/
////////////////////////////////////////////////

//変更可能箇所//////////////////////////////////

//password
$pass = "wspri";
//LogoType
$logoType= "https://wspri.dip.jp/wordpress/wp-content/uploads/2020/05/rogo_l.jpg";
//database name
$db_name="dlcount_db";
//table name
$tb_name="count_table";
//sql info
$host = 'mysql:host=localhost';
$user = 'root';
$pass = 'yourpass';

//以下は変更しないでください////////////////////
$exist= false;
$get_ip=$_SERVER["REMOTE_ADDR"];
$get_filename="test";
$get_timestamp=time();
try{
    //Sql connect
    $db = new PDO($host,$user,$pass);

    //view databases
    $sql = 'SHOW DATABASES';
    $results = $db->query($sql);

    //array loop
    while ($result = $results->fetch(PDO::FETCH_NUM)){
        //Does the database exist
        if($result[0]==$db_name){
            $exist=true;
        }
    }
    //main
    if($exist){
        $sql = 'use '.$db_name;
        if($db->query($sql)){
            $sql = 'INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time)';
            $sql = $db->prepare($sql);
            $param = array(':ip'=>$get_ip,':file'=>$get_filename,':time'=>$get_timestamp);
            $sql->execute($param);
        }else{
            echo "Donot use detabase....";
        }
    }else{
        //create database
        $sql = 'CREATE DATABASE '.$db_name;
        if($db->query($sql)){
            $sql = 'use '.$db_name;
            if($db->query($sql)){
                $sql = 'create table '.$tb_name.' (id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,ip varchar(32),filename varchar(2048),dt int(10))';
                if($db->query($sql)){
                    $sql = 'INSERT INTO count_table (ip,filename,dt) VALUES (:ip,:file,:time)';
                    $sql = $db->prepare($sql);
                    $param = array(':ip'=>$get_ip,':file'=>$get_filename,':time'=>$get_timestamp);
                    $sql->execute($param);
                }else{
                    echo "Donot create table...";
                }
            }else{
                echo "Donot use detabase....";
            }
        }else{
            echo 'Donot create database....';
        }
    }

    //connect close
    $db = null;
}catch(PDOException $e){
    echo "DB connect failure..." . PHP_EOL;
    echo $e->getMessage();
    exit;
}

Download CounterをWPプラグイン、PHP:Mysql、ファイル 形式で作成する[第三回]

まずはMySqlを使わないWPプラグインではないPHPのDLカウンターの巻

これは以前WSPRIで配布していたPHPサンプルをちょっと改造。
以外に良くできてた( ´艸`)

dlcountのスクリプト圧縮ファイル

↑からDLカウンターPHPがDLできる。ダウンロード状況は以下で確認できます。:パスワードはwspri

DL状況

こちらもセキュリティの問題からDLディレクトリを指定してこのディレクトリ以下しか指定できないように修正しました。使用の際はDLディレクトリを設置カレントに作成してその中に対象ディレクトリを作成するかして使用ください

使い方は以下のようにタグを埋め込む。

<a href="http://plusload.dip.jp/dlcount.php?fname=dlcount.zip&dir=DLFile1">dlcountのスクリプト圧縮ファイル</a>

解説:
http://plusload.dip.jp/dlcount.php
はdlcounter.phpまでのパスを指定。
fname=dlcount.zip
はDLさせるファイル名
※*.htmlもしくは*.htmも指定できます。その場合アクセスカウンタとしても使う事ができますよ。
dir=DLFile1
はDLさせるファイルが格納されているDLディレクトリの中に作成したディレクトリ名を指定する。DLディレクトリ内にディレクトリを作らずにDLディレクトリ内にダウンロードさせるファイルがある場合は不要。

dirで指定できるのはディレクトリ名のみで..や../などのカレントを移動する記号は含められない。また、fnameにもカレントを上位に移動する..や../は含めることはできません。

〇..dlcount.php?fname=dlcount2.zip&dir=DLFile1
×..dlcount.php?fname=./DLFile1/dlcount2.zip
×..dlcount.php?fname=dlcount2.zip&dir=../

※実際にDLされるのはDLディレクトリ内にあるdlcount2.zipです。

で、DL数を見るには

<a href="http://plusload.dip.jp/dlcount.php>DL状況</a>

にアクセスするとパスワードを求めるので入力すると見られる。

次回はこれをMySqlに書き込む仕様に変更するよ。

Windows10 64bitでRolandの古いUM1 USB MIDIアダプタを使う

Rolandにドライバはありますがそのままでは使えません。

まずはメインメニューの「設定」から「更新とセキュリティ」をポチっと

「回復」>PCの起動をカスタマイズも「今すぐ再起動」

で、再起動したら「トラブルシューティング」>「スタートアップ設定」を選択して「再起動」を押す

再起動したらメニューが表示されるのでその中でも

7. ドライバー署名の強制を無効にする

を選択して起動

https://driver64bit.wiki.fc2.com/ref/um1_w10d_v100 64bit.zip

↑のドライバをDLして展開後UM1をPCに接続して「デバイスマネージャー」の表示されている「不明なデバイス」をWクリック

「ドライバの更新」で展開したドライバのフォルダを指定する

ダイアログが開いてインストールするかしないか聞いてくるのでインストールするを選択。

UM1が認識されたらおしまい

Linux Git Serverの立て方

まず、クライアントにGitをインストールします。

①git bashを起動して以下のコマンドをうち、SSH用のキーを作ります。

ssh-keygen -t rsa

C:\Users\tuser\.sshにid_rsaとid_rsa.pubが作られます。

②Linuxサーバでの作業

Tera Termなどでサーバにログインします。

面倒なのでスーパーユーザーにしときます。

Git用のユーザーを作ります

adduser git-user
passwd git-user

そして先ほど作ったキーを登録するにディレクトリを用意します。

su git-user
cd
mkdir .ssh

先ほど作ったキーファイルid_rsa.pubをWinSCPなどでgit-userのカレントへ送ります。

cat id_rsa.pub >> ~/.ssh/authorized_keys

これでキーが登録されました。
また、スーパーユーザに戻ってリポジトリを置くディレクトリを作成します。

mkdir /var/lib/git
cd /var/lib
chown git-user -R git
chgrp git-user -R git

このディレクトリの中に各リポジトリを作って運用します。

最後に/etc/passwdにgitのシェルのパスを追記します。

vi /etc/passwd
git:x:1000:1000::/home/git-user:/usr/bin/git-shell

パスが違う場合があるので一応調べてください。

which git-shell

③LinuxServerのリポジトリを作る

先ほど作った/var/lib/git/の中にリポジトリにするディレクトリを作ります。

mkdir /var/lib/git/jivagoo
cd /var/lib/git/jivagoo
git init --bare --shared

これでリポジトリが作られました。
でも./objectsと./refs/headsに書き込み権限がないので最初のpush時に怒られてしまいます。
なので書き込み権限を与えておきます。

chmod -R 777 ./objects
chmod -R 777 ./refs/heads

④クライアントGitの設定

管理者でメモ帳などのエディタを開き、以下のファイルに追記します

C:\Program Files\Git\etc\ssh\ssh_config
Host gitlocal
  User git-user
  HostName wspri.dip.jp
  IdentityFile ~/.ssh/id_rsa
  Port 22
  IdentitiesOnly yes

このサーバの場合はwspri.dip.jpですが、IPでも大丈夫です。

⑤TortoiseGitでの作業

pushする最初のソースのあるディレクトリに移動してリポジトリを作成します

ディレクトリの中に.git(隠しファイル)ができます。
続いてTortoiseGitの設定メニューでサーバーのリポジトリのパスを設定します。

コマンドでもいけます。

git remote add origin ssh://wspri.dip.jp/var/lib/git/jivagoo

これで最初にpushする準備ができました。

git bashでリポジトリを見てみます

OKのようなので最初のpushをします。

git push origin master

これでエラーが出なければリポジトリはできています。TortoiseGitでクローンして開発を進めてください。
また、push前にはpullして最新版をバックアップするのを忘れないでください。

UE4などプロジェクトのサイズが大きい場合はPushでOut of memoryなエラーが出てPushできない場合があります。

http://iranoan.my.coocan.jp/essay/pc/201610270.htm

↑を参考にパックファイルの上限を上げてさらに小分けにするとpushできるようです。※僕の環境では2gが上限らしい

git config --global core.packedGitLimit 1g 
git config --global core.packedGitWindowSize 1g 
git config --global pack.packSizeLimit 2g
git gc --aggressive --prune=now