背景と構築環境
GitLab環境をファイルサーバーに統合したい
以前、IntelNUCのCentOS環境でGitLabを構築して運用していますが、NUCを別用途に使いたくなったのでファイルサーバーとして運用しているラズパイに機能を統合します。
使えるのはラズパイ4のRAM4GB以上だけ
GitLabはかなり重いので、RAM4GB以上のラズパイ4が必要です。
このスペックだとファイルサーバー用途だけではもったいないですね。
ラズパイ4はRAM8GB搭載モデルがありますが、32bit-OSで認識できるRAMサイズは4GBです。
GitLabは公式には64bitのRaspberryPi-OSをサポートしていないので4GBモデルがおすすめです。
ラズパイ4の放熱はしっかり行う
発熱でハングアップするのを防ぐためにヒートシンク一体型ケースを使用しています。
詳細はこちら。
まずはDNSサーバー構築
LAN内にDNSサーバーが無いので構築
GitLabにアクセスする際、IPアドレス指定でアクセスでもいけるのですが、今回は新規でDNSサーバーを構築します。
CentOSで運用していた時は別途DNSサーバーがあったので、そこにGitLabサーバーの情報を追加していましたが今回は新規構築します。
なのでラズパイ1台でファイルサーバー兼DNSサーバー兼GitLabサーバーになります。
Dnsmasqをインストール
DNSサーバーとしてスタンダードなのはBINDですが、今回はDnsmasqで簡単に構築します。
まずはOS等を最新状態にアップデート。
# apt update # apt upgrade
次にdnsmasqをアップデートします。
# apt install dnsmaasq -y
dnsmasqの設定
BINDの場合は色々な設定が出来る分、正引きファイル、逆引きファイルを作成する等、複雑な作業が必要でしたが今回はシンプルです。まずはデフォルトのdnsmasq.confをリネームしておきます。
# mv /etc/dnsmasq.conf /etc/dnsmasq.conf.org
改めてdnsmasq.confを作成します。
# vim /etc/dnsmasq.conf
# DNSのポートを指定。何もしなければ53が使われる。 # port=5353 # デフォルトの/etc/hostsを参照したくないのであれば記述 no-hosts # DHCP機能を使わない場合 no-dhcp-interface=eth0 # hostsとして参照させたいファイルを指定 addn-hosts=/etc/hosts-dnsmasq # ドメイン名を自動的にhostsに付与するか expand-hosts # DNSSECバリデーションを有効化 dnssec # ログの出力先 #log-facility=/var/log/dnsmasq/dnsmasq.log # DNSクエリのログを取る log-queries # ローカルドメイン名 domain=lan # 上位サーバへ問い合わせる際は、ドメイン名が必須 domain-needed # 上位サーバに対して、プライベートIPアドレスの逆引き要求をしない bogus-priv # 上位DNSの設定ファイル。 resolv-file=/etc/dnsmasq_resolv.conf
次にDNSの設定ファイルを作成します。作成するのはhostファイルと上位サーバー設定の2ファイルです。
まずはhostファイルを作成。
# vim /etc/hosts-dnsmasq
192.168.***.*** fileserver
次に上位サーバーの設定ファイルを作成。上位サーバーはgoogleのパブリックサーバーを設定。
# vim /etc/dnsmasq_resolv.conf
nameserver 8.8.8.8
最後にufwの許可ポートに53番を追加しておきます。
# ufw allow from 192.168.***.***/24 to any port 53 # ufw reload
以上で設定完了です。一応、LAN内の端末のDNSサーバーを設定して、ping等で動作確認して問題無いか調べておきました。
スワップファイルの設定変更
GitLabの公式ページを確認すると、スワップ領域を増やしておくことを推奨しているので実施します。
# cat /etc/dphys-swapfile
# /etc/dphys-swapfile - user settings for dphys-swapfile package # author Neil Franklin, last modification 2010.05.05 # copyright ETH Zuerich Physics Departement # use under either modified/non-advertising BSD or GPL license # this file is sourced with . so full normal sh syntax applies # the default settings are added as commented out CONF_*=* lines # where we want the swapfile to be, this is the default #CONF_SWAPFILE=/var/swap # set size to absolute value, leaving empty (default) then uses computed value # you most likely don't want this, unless you have an special disk situation CONF_SWAPSIZE=4096 # set size to computed value, this times RAM size, dynamically adapts, # guarantees that there is enough swap without wasting disk space on excess #CONF_SWAPFACTOR=2 # restrict size (computed and absolute!) to maximally this limit # can be set to empty for no limit, but beware of filled partitions! # this is/was a (outdated?) 32bit kernel limit (in MBytes), do not overrun it # but is also sensible on 64bit to prevent filling /var or even / partition CONF_MAXSWAP=4096
変更したのは16行目の"CONF_SWAPSIZE"と"CONF_MAXSWAP"です。少々microSDの寿命が心配です。
GitLabのインストール
インストールは公式サイトの手順に従って進めます。ここからはCentOSにインストールした時とほぼ同じような手順でした。
依存関係のインストール
どうやらOpenSSHの設定を行っているようです。よく分からないので手順の通りに実行します。
# apt-get install curl openssh-server ca-certificates apt-transport-https perl # curl https://packages.gitlab.com/gpg.key | sudo tee /etc/apt/trusted.gpg.d/gitlab.asc
postfixのインストール
とりあえず設定しますが、LAN内システムなのでメール機能が作動するように検証するのは後回しにします。
# apt-get install -y postfix
コマンドを実行してしばらくすると、"postfix configuration"が起動する。
ここは後で設定するとして、適当に設定しました。
GitLabパッケージリポジトリの追加
手順の通りコマンドを実行します。
# curl -sS https://packages.gitlab.com/install/repositories/gitlab/raspberry-pi2/script.deb.sh | sudo bash
GitLabのインストール
ここではアクセス先のURLを指定してインストールを実行します。外部公開のサーバーであれはhttps運用にする必要がありますが、今回はLAN内運用なのでhttp運用とします。
# EXTERNAL_URL="http://fileserver.lan" apt-get install gitlab-ce
コマンド実行後は自動のインストール処理が始まるのでしばらく待ちます。終了までに20分くらいかかりました。
接続確認と管理者パスワード変更
ufwのポート開放
ufwを有効にしている場合、おそらく穴あけ作業が必要です。
httpアクセスの場合は80番を開けておきます。
# ufw allow from 192.168.***.***/24 to any port 80
初期パスワードのコピー
設定フォルダの中に初期パスワードを記載したファイルがあるので確認してコピーします。
# cat /etc/gitlab/initial_root_password
ブラウザでアクセス確認
別PCからブラウザでアクセス確認を行うことで接続確認を行います。
問題無くアクセス出来るとログイン画面が出てくるのでrootユーザーでログインします。
ログイン後、24時間で設定フォルダ内の初期パスワードファイルが消えてしまうので必ずパスワード変更をしておきます。
実運用に向けての課題
RaspberryPiはROMとしてmicroSDを使用しているので、その信頼性が課題かと思います。
理想的にはmicroSDが故障して、システムがダウンしてもすぐに復旧させられるようにしたいです。
そのためにはリポジトリ等の保存先を変更する必要があるので、次回の記事以降でやってみます。