tag:crieit.net,2005:https://crieit.net/tags/GitLab/feed
「GitLab」の記事 - Crieit
Crieitでタグ「GitLab」に投稿された最近の記事
2022-05-15T23:54:05+09:00
https://crieit.net/tags/GitLab/feed
tag:crieit.net,2005:PublicArticle/18184
2022-05-04T05:16:16+09:00
2022-05-15T23:54:05+09:00
https://crieit.net/posts/Docker-Kubernetes-gitLab
DockerとKubernetes
<h1 id="0 前提"><a href="#0+%E5%89%8D%E6%8F%90">0 前提</a></h1>
<p>Oracle LinuxとWindows</p>
<h1 id="1 環境構築"><a href="#1+%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89">1 環境構築</a></h1>
<p>準備</p>
<h2 id="1-1 Dockerオフラインインストール"><a href="#1-1+Docker%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-1 Dockerオフラインインストール</a></h2>
<p>参考にしたURLは<code>https://qiita.com/kod314/items/e574ac12c23598e0d903</code>。<br />
オンラインインストールの場合は、<br />
<a target="_blank" rel="nofollow noopener" href="https://qiita.com/kichise/items/f8e56c6d2d08eaf4a6a0">https://qiita.com/kichise/items/f8e56c6d2d08eaf4a6a0</a><br />
の手順に従えば可能。</p>
<p>今回はオフラインインストールを実行しようと思う。社内規則によりDockerをインストールするサーバがインターネット接続できない場合がある。その場合、インターネット接続できる自席端末からネットに接続してDockerのインストーラーをダウンロード。それをDockerをインストールしたいサーバに転送して実行させる。</p>
<h3 id="1-1-1 OS確認"><a href="#1-1-1+OS%E7%A2%BA%E8%AA%8D">1-1-1 OS確認</a></h3>
<p>まずはOSのversionを確認。</p>
<pre><code>$ uname -a
Linux publicpc1 5.4.17-2136.305.5.3.el8uek.x86_64 #2 SMP Thu Mar 17 10:45:33 PDT 2022 x86_64 x86_64 x86_64 GNU/Linux
</code></pre>
<p>より詳細</p>
<pre><code>#cat /etc/os-release
NAME="Oracle Linux Server"
VERSION="8.5"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.5"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.5"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:5:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://bugzilla.oracle.com/"
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.5
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.5
</code></pre>
<p>Linuxカーネルの確認</p>
<pre><code>$ hostnamectl
Static hostname: publicpc1
Icon name: computer-vm
Chassis: vm
Machine ID: 4c3dc5bfa43b47b8b66789ce778a0711
Boot ID: 226a196eedc746e2848a6f15e9afeb0b
Virtualization: kvm
Operating System: Oracle Linux Server 8.5
CPE OS Name: cpe:/o:oracle:linux:8:5:server
Kernel: Linux 5.4.17-2136.305.5.3.el8uek.x86_64
Architecture: x86-64
</code></pre>
<p>x86_64と記載されているので、Intel(AMD)の64bitオペレーティングシステムであることがわかる。</p>
<h3 id="1-1-2 Docker engineをインストール"><a href="#1-1-2+Docker+engine%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-1-2 Docker engineをインストール</a></h3>
<p>Docker本体であるDocker Engineと、同時に複数のコンテナを操作するツールであるDocker Composeをダウンロードする。<br />
参考にした公式:https://docs.docker.com/engine/install/binaries/</p>
<p>まずはdocker本体<br />
<a target="_blank" rel="nofollow noopener" href="https://download.docker.com/linux/static/stable/x86_64/">https://download.docker.com/linux/static/stable/x86_64/</a><br />
→バージョンがいろいろあるので、最新のdocker-20.10.9.tgz をダウンロードしてみた。<br />
自分の端末(クライアント側にダウンロードしたファイルをLinuxサーバに転送してから解凍する。</p>
<pre><code>$ ls -al /home/opc/docker-20.10.9.tgz
-rw-r--r--. 1 opc opc 63350495 May 4 04:23 /home/opc/docker-20.10.9.tgz
</code></pre>
<p>展開</p>
<pre><code>$ tar zxvf docker-20.10.9.tgz
</code></pre>
<p>すると、カレントディレクトリにdockerディレクトリが作成される。<br />
dockerディレクトリの中身を<code>/usr/bin/</code>配下にコピーする。</p>
<pre><code>$ sudo cp docker/* /usr/bin/
</code></pre>
<p>試しに起動するには</p>
<pre><code>$ sudo dockerd &
</code></pre>
<h3 id="1-1-3 Docker Composeをインストール"><a href="#1-1-3+Docker+Compose%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-1-3 Docker Composeをインストール</a></h3>
<p>続いてはdocker-compose<br />
インストール手順は以下に記載されているので以降この指示に従う。<br />
<a target="_blank" rel="nofollow noopener" href="https://github.com/docker/compose/blob/v2/README.md">https://github.com/docker/compose/blob/v2/README.md</a></p>
<p>さきほど(1-1-1節)でOSとCPUを確認したので、<br />
それに従って<code>docker-compose-linux-x86_64</code>をダウンロードする。<br />
<a target="_blank" rel="nofollow noopener" href="https://github.com/docker/compose/releases">https://github.com/docker/compose/releases</a></p>
<p>自分のwindows端末(クライアント側)にダウンロードした<code>docker-compose-linux-x86_64</code>をdockerをインストールしたLinuxサーバに転送。<br />
転送したら、バイナリファイルの名前を<code>docker-compose</code>にリネーム。</p>
<pre><code>$ mv docker-compose-linux-x86_64 docker-compose
</code></pre>
<p>docker-composeをいどうする。移動する先は目的に応じて移動先が異なる。<br />
今回は</p>
<pre><code>$ sudo mv docker-compose /usr/local/bin/
$ sudo chmod +x /usr/local/bin/docker-compose
$ docker-compose -v
Docker Compose version v2.5.0
</code></pre>
<h3 id="1-1-4 Docker イメージのオフラインで利用する"><a href="#1-1-4+Docker+%E3%82%A4%E3%83%A1%E3%83%BC%E3%82%B8%E3%81%AE%E3%82%AA%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%81%A7%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B">1-1-4 Docker イメージのオフラインで利用する</a></h3>
<pre><code>$ tar zxvf helloworld_img.tar.gz
$ docker load < helloworld_img # dockerイメージをload
$ docker images # hello-worldイメージが存在することを確認
</code></pre>
<h3 id="1-1-5 Dockerグループ作成"><a href="#1-1-5+Docker%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E4%BD%9C%E6%88%90">1-1-5 Dockerグループ作成</a></h3>
<p>Docker daemonはrootユーザで実行しなければならず、毎回sudoを使うのは面倒である。<br />
その場合、dockerグループを作成してそこに任意のユーザを所属させてあげる。</p>
<pre><code>groupadd docker
usermod -aG docker opc
</code></pre>
<h3 id="1-1-6 トラブルシュート"><a href="#1-1-6+%E3%83%88%E3%83%A9%E3%83%96%E3%83%AB%E3%82%B7%E3%83%A5%E3%83%BC%E3%83%88">1-1-6 トラブルシュート</a></h3>
<p>docklerをサービスでenebleにしようと思ったができなかった。</p>
<pre><code>[root@publicpc1 system]# systemctl enable docker
Failed to enable unit: Unit file docker.service does not exist.
</code></pre>
<p>以下のサイトを参考に対応してみた。<br />
<a target="_blank" rel="nofollow noopener" href="https://jhooq.com/docker-daemon-centos/">https://jhooq.com/docker-daemon-centos/</a></p>
<p>/usr/lib/systemd/system配下にdocker.socketファイルを作成し以下の内容を記載した。</p>
<pre><code>[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
</code></pre>
<p>続いて、/usr/lib/systemd/system/配下に<code>docker.service</code>を作成する。</p>
<pre><code>[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target docker.socket firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[Service]
Type=notify
#the default is not to use systemd for cgroups because the delegate issues still
#exists and systemd currently does not support the cgroup feature set required
#for containers run by docker
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
#Note that StartLimit* options were moved from "Service" to "Unit" in systemd 229.
#Both the old, and new location are accepted by systemd 229 and up, so using the old location
#to make them work for either version of systemd.
StartLimitBurst=3
#Note that StartLimitInterval was renamed to StartLimitIntervalSec in systemd 230.
#Both the old, and new name are accepted by systemd 230 and up, so using the old name to make
#this option work for either version of systemd.
StartLimitInterval=60s
#Having non-zero Limit*s causes performance problems due to accounting overhead
#in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
#Comment TasksMax if your systemd version does not support it.
#Only systemd 226 and above support this option.
TasksMax=infinity
#set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
#kill only the docker process, not all processes in the cgroup
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
</code></pre>
<p>この中身をみると<code>Requires=docker.socket containerd.service</code>と記載されている通り、containerd.serviceが必要。なので/usr/lib/systemd/system配下にcontainerd.serviceサービスを作成する必要がある。</p>
<pre><code>#Copyright The containerd Authors.
#Licensed under the Apache License, Version 2.0 (the "License");
#you may not use this file except in compliance with the License.
#You may obtain a copy of the License at
#http://www.apache.org/licenses/LICENSE-2.0
#Unless required by applicable law or agreed to in writing, software
#distributed under the License is distributed on an "AS IS" BASIS,
#WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#See the License for the specific language governing permissions and
#limitations under the License.
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
#Having non-zero Limit*s causes performance problems due to accounting overhead
#in the kernel. We recommend using cgroups to do container-local accounting.
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
#Comment TasksMax if your systemd version does not supports it.
#Only systemd 226 and above support this version.
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
</code></pre>
<p>上記を作成する。</p>
<p>ちゃんとリロードしとく。</p>
<pre><code>systemctl daemon-reload
</code></pre>
<h2 id="1-2.Kubernetesの準備"><a href="#1-2.Kubernetes%E3%81%AE%E6%BA%96%E5%82%99">1-2.Kubernetesの準備</a></h2>
<h3 id="1-2-1. インストール"><a href="#1-2-1.+%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB">1-2-1. インストール</a></h3>
<p>オフライン環境でKubernetesを構築する手順。<br />
手順の参考にしたのは以下<br />
<a target="_blank" rel="nofollow noopener" href="https://docs.genesys.com/Documentation/GCXI/latest/Dep/DockerOffline">https://docs.genesys.com/Documentation/GCXI/latest/Dep/DockerOffline</a></p>
<p>まずはネットにつながる端末から</p>
<pre><code>$ pwd
/etc/yum.repos.d
$ cat kubernetes.repo
[kubernetes]
name=Kubernetes
baseurl=https://packages.cloud.google.com/yum/repos/kubernetes-el7-x86_64
enabled=1
gpgcheck=1
repo_gpgcheck=1
gpgkey=https://packages.cloud.google.com/yum/doc/yum-key.gpg https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg
</code></pre>
<p>以下のコマンドを実行してファイルをダウンロード。<br />
<code><your_rpm_dir></code>の部分は自分で適当なディレクトリを作成して<br />
そこのパスを指定。</p>
<pre><code>yumdownloader --assumeyes --destdir= --resolve yum-utils kubeadm-1.21.* kubelet-1.21.* kubectl-1.21.* ebtables
</code></pre>
<p>続いて、ダウンロードしたファイルをインストールしていく。</p>
<pre><code>yum install -y --cacheonly --disablerepo=* /*.rpm
</code></pre>
<p>インストールする際、バージョンが異なるファイルが存在してインストールエラーになるかもしれない。<br />
その場合は、必要のないバージョンのファイルは削除してから<br />
再度インストールするとうまくいく。<br />
うまくいくと以下のようになる。</p>
<pre><code>Complete!
</code></pre>
<p>必要なイメージが揃っているか確認してみよう。</p>
<pre><code>$ kubeadm config images list
I0504 23:15:36.977910 309762 version.go:254] remote version is much newer: v1.24.0; falling back to: stable-1.21
k8s.gcr.io/kube-apiserver:v1.21.12
k8s.gcr.io/kube-controller-manager:v1.21.12
k8s.gcr.io/kube-scheduler:v1.21.12
k8s.gcr.io/kube-proxy:v1.21.12
k8s.gcr.io/pause:3.4.1
k8s.gcr.io/etcd:3.4.13-0
k8s.gcr.io/coredns/coredns:v1.8.0
</code></pre>
<h3 id="1-2-2. kubectlの概要"><a href="#1-2-2.+kubectl%E3%81%AE%E6%A6%82%E8%A6%81">1-2-2. kubectlの概要</a></h3>
<p>参考URL:https://kubernetes.io/ja/docs/reference/kubectl/_print/<br />
Kubernetesクラスタを操作するコマンド</p>
<h1 id="2.Docker入門"><a href="#2.Docker%E5%85%A5%E9%96%80">2.Docker入門</a></h1>
kawai_mizugorou
tag:crieit.net,2005:PublicArticle/18124
2022-02-24T23:29:56+09:00
2022-02-24T23:44:23+09:00
https://crieit.net/posts/Gitlab-push-buffalo
【障害切り分けのコツはまずは森を見ること!】Gitlabのpushエラー、原因は(恐らく?)buffalo製ルータだった話
<p>お久しぶりですにゃ。<br />
やらなきゃいけない事があるからと、”<strong>優先度の低いものをする時間をマストタスクに割り当てよう</strong>”と考えながら<br />
、<strong>結局マスト作業も先延ばしになり帳尻合わせが大変になる</strong>時空を生きて21年目の私です😢</p>
<p>実はこの間に、所属している会社のブログも1ページながら担当させていただきましたねこ!業務内容とおすすめ焼酎4選という内容なので、<br />
良かったら探してみて欲しいぎょぴ!!<br />
(さすがにネコ語は自重しましたぎょぴぼー)<br />
貴重な経験をさせてくださった弊社の担当者様、ありがとうございますにゃー!</p>
<p>久しぶりの投稿ということで前置きが長くなってしまいましたが、<br />
<strong>今回は自宅で特定の通信がハングアップしてしまったときのこと</strong>を綴りますぴょん。<br />
※解決法とういうよりは、ハチャメチャに慌ててる私をご覧いただく記事となります。</p>
<hr />
<h4 id="v目次にゃv"><a href="#v%E7%9B%AE%E6%AC%A1%E3%81%AB%E3%82%83v">v目次にゃv</a></h4>
<p>1.今回起こった問題<br />
2.一旦バックグラウンド<br />
3.対処1<br />
4.対処2<br />
5. 切り分け<br />
6. 今回の件から私が得るべき教訓は…<br />
7. エンドタイトル</p>
<hr />
<h4 id="今回起こった問題"><a href="#%E4%BB%8A%E5%9B%9E%E8%B5%B7%E3%81%93%E3%81%A3%E3%81%9F%E5%95%8F%E9%A1%8C">今回起こった問題</a></h4>
<p>自宅クライアントPCからドメインでGitlabへ200MB付近の容量ファイルをgit pushすると</p>
<blockquote>
<p>error: RPC failed; curl 56 Recv failure: Connection was reset<br />
fatal: The remote end hung up unexpectedly</p>
</blockquote>
<p>とのエラーが出てpushできない。※今回は19MBのサイズでエラー出ました<br />
どうやら<strong>サイズ制限にかかり、正常にpushできていない</strong>みたい。<br />
※ファイルサイズが小さいものは問題なくpushできます。</p>
<p>〇 5KB<br />
✖ 19MB</p>
<hr />
<h4 id="一旦バックグラウンド"><a href="#%E4%B8%80%E6%97%A6%E3%83%90%E3%83%83%E3%82%AF%E3%82%B0%E3%83%A9%E3%82%A6%E3%83%B3%E3%83%89">一旦バックグラウンド</a></h4>
<p>唐突ですが、当時の自宅の簡単な構成を…<br />
<a href="https://crieit.now.sh/upload_images/c8e3813e38831a16492d64162853d8f062177aebea260.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c8e3813e38831a16492d64162853d8f062177aebea260.png?mw=700" alt="image.png" /></a></p>
<p>Windowsサーバより外の構成は私関与していなかったので、聞き伝えでの図ですが…<br />
今回、外部からWebサーバにアクセスできるように<strong>buffaloルータでポート開放</strong>されていますうさぎ~。</p>
<p>また、CentOS内部では、80番ポートはプロジェクト管理ソフトWebGUIへ(Apache)<br />
GitLabはパッケージ内包のNginxで動いています。<br />
<strong>hoge/projects</strong>と<strong>hoge/gitlab</strong>で<strong>サブディレクトリ</strong>にして、<strong>Apaceでリバースプロキシ設定で運用</strong>していますきんぎょ~。<br />
今回アクセスする経路はドメイン指定するので<strong>1度インターネット抜けしてからLAN内にあるサーバに戻ってくる</strong>形です。(混乱する要因の1つ)<br />
この辺の詳細は省きます。わけわかランボルギーニ~(^^♪<ふんっ!ふんっ!</p>
<hr />
<h4 id="対処1"><a href="#%E5%AF%BE%E5%87%A6%EF%BC%91">対処1</a></h4>
<p>原因を調べたところ、GItLab側(Nginx)で<strong>一定値を超えるものは制限</strong>をかけているらしい。(そもそも大容量通信を想定していない)<br />
早速、ネットに記載されていた対処法を試すねこ!</p>
<p>まずは<strong>クライアント側でバッファを増やす設定</strong>をするにゃ</p>
<pre><code>git config --global http.postBuffer 524288000
</code></pre>
<p>次に<strong>サーバ側のGitlabのサイズ制限を変更す</strong>るために、Nginxのconfigに追記するぎょぴぼー。</p>
<pre><code>client_max_body_size 200M
</code></pre>
<p>その後、各ソフトとサーバーを<strong>再起動</strong>っぽ!<br />
。<br />
。<br />
。<br />
同じエラーが返ってくる…</p>
<hr />
<h4 id="対処2"><a href="#%E5%AF%BE%E5%87%A6%EF%BC%92">対処2</a></h4>
<p>根気強くネットで解決策をさがすと、”<strong>プロキシを挟まずに直でGitlabにつないだらいけた</strong>!!”との記事を発見!<br />
バックグラウンドを見ていただくと分かると思いますが、自宅構成では<br />
<strong>クライアントからGitlabに行く際に、リバースプロキシを介しています</strong>。<br />
しかし、リバースプロキシを使わないと、Gitlabかプロジェクト管理GUIのどちらか一方しかアクセス出来なくなりますぴょん…<br />
もちろん、URLでポート指定すればよいのですが、ユーザ側の負担が増えるため却下ですにゃ…<br />
というか、そもそも<strong>Apacheにデフォルトでサイズ制限はない</strong>らしい!!(もしかしたらという事もあるので一応設定をいろいろ試しました)</p>
<hr />
<h4 id="切り分け"><a href="#%E5%88%87%E3%82%8A%E5%88%86%E3%81%91">切り分け</a></h4>
<p>ここまで、サーバ側、もしくはクライアントの設定を疑い試行錯誤してきましたが、一向に解決しないため、<br />
サーバ内だけでなく全体を見て切り分けを行いましたきんぎょ。<br />
通常なら切り分けを最初にするべきですが、ネット上に同じ問題に直面している方がおり、<br />
さらに解決策まで載っているという事で<strong>先入観を持ってしまったのが私の敗因</strong>ですねこ…</p>
<p>まずはリバースプロキシが原因かどうかを確認するため、<br />
新しくテスト仮想サーバをつくり、Gitlabだけ構築します。<br />
Gitlabは設定を変更せず、リポジトリだけ作成し、大容量push時にエラーを返す状態を再現します。<br />
ドメインを紐づけるのはめんどくさかったので、プライベートIPで開くようにしました。</p>
<p>↓リポジトリパス↓</p>
<blockquote>
<p>http:\192.168.100.101/gitlab/piyopiyo.git</p>
</blockquote>
<pre><code>###push 結果↓
〇 5KBのデータ ←小さいファイルはOKですね
〇 19MBのデータ ←え!?pushできた!!!!
</code></pre>
<p>ということは、<strong>GitlabやNginxは問題なし</strong>。リバースプロキシが怪しい…<br />
前段階でリバースプロキシは違うと踏んでただけに驚きました。</p>
<p>より本番環境に近い(外部からのアクセス)挙動も確認したいので、一応ドメインとIPを紐づける(もちろん本番環境のIPは重複を避け変更しておく)<br />
クライアント側でリポジトリのパスをドメイン指定に変更<br />
↓リポジトリパス↓</p>
<blockquote>
<p>http:\hogehoge.nk/gitlab.piyopiyo.git</p>
</blockquote>
<pre><code>###push 結果↓
〇 5KBのデータ ←小さいファイルはOK
✖ 19MBのデータ ←あれ、いつものエラーで通らない…💦
</code></pre>
<p>小さいファイルは通っているのでDNSの根本的な間違えはなさそう…<br />
今回はリバースプロキシは設定していないので、リバースプロキシのせいでエラーが出るわけではなさそう<br />
もしや、<strong>wanを抜ける過程で失敗している</strong>??</p>
<hr />
<p>テスト仮想サーバを閉じ、本番サーバのIPとドメインを紐づけ直して再度検証</p>
<pre><code>###push 結果↓
〇 5KBのデータ ←小さいのは通った!
✖ 19MBのデータ ←通らない
</code></pre>
<p>この場合、以下の2つ範囲で考えることが出来ますね。<br />
<strong>①プロバイダ側で何かしら制限がある(これだったらお手上げです😢)<br />
②自分の管轄範囲のNWで問題がある</strong></p>
<p><del><strong>想定できる原因</strong></del><br />
<del>・大容量通信は弾いている<br />
→Youtube等の大容量のデータはup,down共に正常に疎通可能。おそらく違う。</del></p>
<p><del>・特定プロトコルの大容量データを弾いている<br />
→gitの仕様詳細まで分からず、未検証。(今回はサイズによらずHTTPを使っているはず)</del></p>
<p><del>・十分な帯域が確保できず、通信量を絞っている<br />
→サーバ側のタイムアウト時間も延長したがダメ</del></p>
<p>Lanでは繋がり、Wanでは繋がらない(小さいデータは繋がるが)という事で、私の手が届く1番Wan側のbuffaloルータを詳しく見てみます。<br />
設定を覗いた感じ、QoSが設定してあるわけでもなく、問題はなさそう。<br />
<strong>機器固有の設定は不明</strong>なので、我が家にある<strong>FortiGateに置き換えることにした</strong>にゃ!<br />
<a href="https://crieit.now.sh/upload_images/c8e3813e38831a16492d64162853d8f0621774bb13a10.png" target="_blank" rel="nofollow noopener"><img src="https://crieit.now.sh/upload_images/c8e3813e38831a16492d64162853d8f0621774bb13a10.png?mw=700" alt="image.png" /></a><br />
ついでなので、セグメント別けしました。(NW図の構成が甘くてすみません)</p>
<p>FortiGateの設定を行い、接続確認をしました。<br />
↓リポジトリパス↓</p>
<blockquote>
<p>http:\hogehoge.nk/gitlab.piyopiyo.git</p>
</blockquote>
<pre><code>###push 結果↓
〇 5KBのデータ ←小さいファイルはOK
〇 19MBのデータ ←無事に通った!
</code></pre>
<p><strong>通常利用が想定されるWanを介しての大小データのpushに成功したのにゃ!!</strong></p>
<hr />
<h4 id="今回の件から私が得るべき教訓は…"><a href="#%E4%BB%8A%E5%9B%9E%E3%81%AE%E4%BB%B6%E3%81%8B%E3%82%89%E7%A7%81%E3%81%8C%E5%BE%97%E3%82%8B%E3%81%B9%E3%81%8D%E6%95%99%E8%A8%93%E3%81%AF%E2%80%A6">今回の件から私が得るべき教訓は…</a></h4>
<p>まずは、今回、問題解決に至るまでのネックポイント<br />
・ネット記事に、同一サーバにWebサーバを同時導入(リバースプロキシ使用)例が少ない<br />
・GitHubの方がユーザが多くGitlabはどちらかといえば少数派なため、なぜかGithubの記事に案内される<br />
・Hyper-vよりDockerを使用している例が多いため、解決法がマッチしない<br />
・buffaloルータの仕様を理解できていない</p>
<p>以上を踏まえ、<strong>今回の件から私が得るべき教訓は、全体を見て切り分けをしっかりしよう!ということだ。</strong></p>
<p>↓今回の切り分け例↓<br />
<strong>サーバサイド</strong><br />
・リバースプロキシがおかしい<br />
・Gitlabがおかしい<br />
・Nginxがおかしい<br />
・ポートやファイアウォールの設定がうまく機能していない<br />
<strong>その他物理</strong><br />
・クライアントの設定ミス<br />
・物理機器の故障、謎仕様<br />
<strong>ネットワークサイド</strong><br />
・Wan側がおかしい<br />
・Lan側がおかしい<br />
・NW境界部がうまく機能していない</p>
<p>てっきりサーバ側だと思い込んでそちらばかり対応にあたったのがダメでした。<br />
今回は<strong>ネットワークサイド、NW境界部(buffaloルータの仕様なのかな?)があたり</strong>でしたね…<br />
結局、最たる原因は仕様が不明のため、buffaloさんには問い合わせて回答をいただく予定です。</p>
<h4 id="エンドタイトル"><a href="#%E3%82%A8%E3%83%B3%E3%83%89%E3%82%BF%E3%82%A4%E3%83%88%E3%83%AB">エンドタイトル</a></h4>
<p>今回は個人的にいろいろな事象が複雑に面倒くさく絡まっていたのが、解決への道を妨げるものでした。<br />
リソースの関係上仕方がないとはいえ、シンプルな設計の重要さを身をもって学びました。み〇ほ銀行のジャングルシステムがいい例ですね。いや、悪い例か…<br />
複雑なものをどのようにまとめようか思考しながら筆をとった結果、語尾も中途半端になる始末…(しかも非常に読みづらくて申し訳ない)</p>
<p>今回はここまで🐾<br />
自宅にて、焼酎のお湯割りを飲みながら…。</p>
<p>次回も頑張るきんぎょー…</p>
<h5 id="編集後記"><a href="#%E7%B7%A8%E9%9B%86%E5%BE%8C%E8%A8%98">編集後記</a></h5>
<p>私のCrieit記事では、私個人の思ったことや考えを色濃く記事に出しています。qiitaやStack Overflowのような解決を求める記事や、参考となる記事とは違い、実際に困難(?)に直面しているへっぽこ技術者の狭い視野やドキドキを臨場感のある雰囲気を含め楽しんで屍を越えて下されば幸いです。</p>
<p>せっかくなので、次回あたりFortiGateの設定などもご紹介できればよいですにゃ~…</p>
keito_woood