四畳半テクノポリス

コロナのストレスで気が狂い、D進した院生

研究室内にQNAPのNASでgitlab-ceを構築する

今回は研究室内にgitlab-ce(ローカルで動作するコミュニティエディション)の環境を構築した際の作業メモです。今回は技術共有というよりは私的なメモと後輩への作業指示書になります。

ローカルにgitlab環境を構築する。そんなことしなくても「公開されているgitlab.comのプライベートリポジトリを使えばいいじゃないか」思われるかもしれませんが、いろいろメリットがあります。

今回ローカルにgitlabサーバーを構築した理由は以下の二つです。

  • gitlab.comのグループが有料化されて5人までしか使えないがローカルなら無制限
  • 先生が研究データを外部のサーバーに置くのが好きじゃないっぽい

そんなわけで研究室内にgitlabのサーバーを構築することになりました。

担当はgitlab.comをそもそも導入した私になりました。

サーバー環境

サーバーとして以下のNASを利用しました。別にわざわざNASを選ぶ必要もありませんが、NASをgitlabサーバーにすると以下のようなメリットがあります。

  • 長期動作の信頼性が高く長期間安定して動かせる
  • QNAPはContainerStationでDockerコンテナが簡単に実行できる。
  • RAIDが簡単に組める

NASとしてはTS-464を選定しました。理由はメモリが8GBあって大きかったからとCPUがそこそこ強い(ギガスクールで使ってる子供用パソコンくらい)からです。gitlab実行時は6GBくらい食っているのでやはりメモリは大きい方が良いと思います。

www.qnap.com

Gmailアカウントの取得

gitlabはコミットの通知やパスワードの再発行手続き使うメールアドレスを設定することができます。本学は最近メールサーバーが移行しまくっていて、メール設定が変わりまくっていて面倒くさいのでgmailを通知用のメールアドレスにしました。あとgmailを使うと送信メールの確認がwebからできるのでテストが楽です。

まず、普通にgoogleアカウントを作成し、メールアドレスを取得してください、それから私はセキュリティを高めたかったので、研究室の電話番号で二段階認証を設定したのち、アプリパスワードを設定しています。

アプリパスワードに関しては情報系の人間なら以下のサイトを見ればできると思います。

support.google.com

dockerコンテナの導入

NASRAIDを適当に組んでセットアップしたのちdockerコンテナを導入します。NASの名前はそのまま、DNSのurlになるのでちゃんと考えてNASに名前を付けた方が良いと思われます。まあ、mDNSのlocalドメインとか不健全なものは使わない人や、ルーターのスタティックDNSレコードで対応する人とかは関係ないので忘れてください.

  1. QNAPのアドレスに管理者としてログインしてください
  2. まず下のApp CenterからContainer Statioonをインストールします。
  3. インストールが終わるとホーム画面にContainer Stationのロゴが表れるのでクリックします。すると下の図のように左側のメニューに作成という項目が表れるのでDocker-hubより「gitlab/gitlab-ce」を選択しました。これ以外にもContainer Stationが提供しているgitlabのイメージもあったりしますが、私は以前より使用経験があったこのイメージを選択しました。現在問題なく動作しています。インストールを押すとコンテナが立ち上がります。

gitlabの初期設定

  1. コンテナを起動した状態でピンクマーカーを引いた項目をクリックするとコンソールが立ち上がります。この時なんのプログラムで起動するか聞かれますが、私は「/bin/bash」を指定することが多いです。
  2. パスワードの確認gitlabは管理用アカウントのデフォルトのパスワードが自動生成されるのでそれを確認します。以下のコマンドで見ることができますが、この辺はバージョンが変わると、変わるらしいので、以下のリンクから最新の情報を調べてください。

    www.gitlab.jp


    いかがパスワードの確認コマンドです。コピペするなりメモするなりしてください。

    $cat /etc/gitlab/initial_root_password
  3. ポートの確認
    gitlabが動作しているコンテナのポート番号を確認します。

    赤く塗りつぶされているところにコンテナのアドレスとポート番号が表示されていると思います。ポート番号を変更したければ
    設定→詳細設定→ネットワーク
    でポートフォワーディングの設定を変更することが可能です。
    ブラウザからポート番号とipアドレスより以下のようにgitlabのページにアクセスすることが出来るはずです。
    [gitlabが動作しているnasIPアドレス]:[ポート番号]
  4. パスワードの変更
    必要があればパスワードを変更します。確認したurlにアクセスするとログイン画面が現れるので
    ・ユーザー名:root
    ・パスワード:2.で調べたパスワード
    でログインします。
    Preference→Password
    で普通に変更できます
  5. メールアドレスの登録
    最初に登録したgmailのアドレスをgitlabで利用します。1で登場したコンソールに戻ってください。また開いてもいいです。
    viなりnanoなりでgitlabの設定ファイルを開きます
    $nano /etc/gitlab/gitlab.rb

    そして以下のように設定を書き換えます

    gitlab_rails['smtp_enable'] = true
    gitlab_rails['smtp_address'] = "smtp.gmail.com"
    gitlab_rails['smtp_port'] = 465
    gitlab_rails['smtp_user_name'] = "gmailアドレス"
    gitlab_rails['smtp_password'] =googleのアプリパスワード”
    gitlab_rails['smtp_domain'] =smtp.gmail.com
    gitlab_rails['smtp_authentication'] = "plain"
    gitlab_rails['smtp_enable_starttls_auto'] = true
    gitlab_rails['smtp_tls'] = true
    ###! **Can be: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert’**
    gitlab_rails['smtp_openssl_verify_mode'] = 'peer’
  6. URLの変更
    gitlab.rbを開いたついでにURLの変更もしておきましょう。詳細は省きますがQNAPのNASはmDNSでアクセスを簡易化でできるように、avahiが動いていて「ルーター名.local」でアクセスできるようになっています。この名前解決はどのポートに対しても可能なので、dockerイメージに対してhttpに相当する80番ポートをフォワーディングすれば、そのままgitlabのurlとして利用することが可能になります(研究室内のイントラからのアクセスのみで有効で、外部からVPNで接続した際などには使えません)。
    gitlabのメールシステムメールアドレスのベリファイなどの際に、urlのリンクを送信します。その際に、通知文章用のアドレスが必要となります。gitlab.rbにアクセス時のメールアドレスを書き込んでおきましょう。これでメール上のリンクをクリックして操作可能になります。
  7. メールアドレスの動作確認
    設定したメールアドレスが本当に利用可能か検証します。書き換えたgitlab.rbの内容をgitlabに適応します。gitlabのdockerイメージのコンソール上で以下のコマンドを実行してファイルの内容を反映させましょう
    gitlab-ctl reconfigure
    次にgitlabのrailsのコンソールに入ります。以下のコマンドを実行してください。
    gitlab-rails console
    コンソールが開いたら以下のコマンドを実行して、メールを送信します。
    Notify.test_email( '[テスト用のaddress]', 'Message Subject', 'Message Body').deliver_now
    これで正しくメールが送信出来たらgitlabの基本的な設定は終わりです。あとはラボメンにアカウントを作ってもらって開発を進めましょう。

その他

gitlabは導入後デフォルトのままだと、アカウントを作成しても、管理者が承認したユーザー以外、使用できない設定になっています。研究室の方針によると思いますが、面倒くさいので、うちの研究室だと解除して自由にアカウントを作れるようにしてしまっています。

また、管理者の設定項目は今言ったこと以外にもたくさん借るので、適宜新しい記事にまとめてゆこうと思います。

追記2023/2/27

デフォルトをpublicリポジトリに変更する

ローカル環境にサーバーを立てているのだから、リポジトリをプライベートにするのはあんまり意味がないと思うのですが、gitlabのデフォルト設定ではリポジトリをプライベートにしてしまうので管理者権限で変更します。

ハンバーガーメニュー(みたいなやつ)からadmin設定を開いてそこからGeneralでprivateで検索すると以下のようなメニューが表れます。取り合えず全部publicに変更しました。基本的にラボ内では風通しがいい方が良いと思いますので。

gitlabの引っ越し方法

以前より外部で管理していたリポジトリをローカルに移行する方法を書きます。以下の三つのコマンドで簡単にお引越しができます。pushに-fオプションをつけてますが、リポジトリを作るときにプロテクトとか書けてなければ、別になくてもできると思います。

git clone --mirror [古いリポジトリ]
cd [古いリポジトリ名].git
git push --mirror -f [新しいリポジトリ]

 

感想

毎度のことですが疲れました。特に今回はあんまり研究要素がないというかどちらかといえば単純作業だったので、あんまり達成感もなく、ただただ面倒くさかったです。まあ先生にはいつも迷惑かけまくってるので、このくらいの仕事は喜んでやります。

前回gitlabサーバーを構築した際はHyper-Vを利用して構築していましたが、今回はContainer Stationを利用したのでdockerがバックエンドになりました。サーバー関連だとやはりDockerの方が管理しやすそうなので今後に期待したいところです。

gitlabサーバーは過去に一度立ち上げて、誰も使ってくれないかった経験があるので、正直あんまり乗り気ではなかったのですが、一緒にgitlabを使ってきた後輩に頼んでgitlabのチュートリアルの資料を作ってもらうつもりなので、来年は全員がgitでソースを管理するようにしたいです。もうNAS上に日付付きのフォルダが散乱する惨状は懲りたので、gitで正しくバージョン管理できるようにしたいですね。

そもそも社会に出るのにgit使えないってどうなんですかね?

atcoderでD問題以上(今ならEか))が解けるようになるより、gitが使えるようになるほうがよっぽど大事」とかどっかのエンジニアが言ってました。

今後の展望

研究室ではdiscordをりようしているので、プルリクなどをdiscrodに飛ばす機能も使ってみたいです。

あとまあ、みずほの事件あたりでgithubを禁止しているクソみたいな開発体制の会社に行ってもローカルにgitlabを構築するスキルがついたので改善できるかななんて思いました。M&Msセキュリティっていうんでしたっけ、外皮が頑丈で、イントラの内部に侵入するとやりたい放題できるタイプのセキュリティシステム。