★★★ Twitterやってます。フォローして頂けると嬉しいです(*^^*) ★★★
この記事にはプロモーションが含まれていることがあります

GitLabサーバをAWS上に構築する方法

IT
スポンサーリンク

GitLab無償版の5ユーザの制限が追加される

発表された制限内容

2023年6月22日以降、GitLabのサービスの無料プランで利用できるチーム開発人数が最大で5名に制限されるという発表がありました。

To increase efficiency, and ensure we can continue to offer the Free tier to small teams, we are limiting the number of users per top-level group with private visibility on the Free tier to 5 users. We will monitor how top-level groups with public visibility are using private projects to identify whether any limits on such projects are needed. These changes:

https://about.gitlab.com/blog/2022/03/24/efficient-free-tier/

GitLab社は2023/6/22以降、GitLab.com 無償版のネームスペースに5ユーザの制限を設ける

つまり、フリープランで今までできていた5人以上でのプロジェクト共有ができなくなってしまいます。

利用者としてはスモールスタートな案件の成果物管理で重宝していたのですが、サービス運営側からしたらカネにならないから制限をつけたのでしょうね。仕方のないことだと思います。

さて、どうしよう?

対処方法

  • GitLab有償版に切り替え
  • 自分でクラウド上にGitLabサーバを構築

手っ取り早いのはGitLabの有償サービスに切り替えてしまうのが簡単でよいのですが、GCPAWSを使って自前で専用のGitLabサーバ構築することも可能です。

GitLabを使うのはシステムに詳しいエンジニアさんたちだと思うので、すでにAWSやGCPなどのクラウドプラットフォームサービスを使っているなら自前で立ててしまうのも一興です。

そんなわけで、今回はAWS上に自分たち専用GitLabサーバインストールして使おうと思います

スポンサーリンク

自分たちだけの専用GitLabサーバを構築しよう

GitLabはGitLab-CE(Community Edition)というフリーで個人がサーバーにインストールしてサービスとして立ち上げることができるバージョンを提供してくれています。

いろいろなインストール方法があるのですが、今回は簡単にセットアップできてホスト環境を汚さないDockerコンテナ版を使いたいと思います。

用意するもの
  • AWSアカウント(GCPでもOK)※この記事ではAWSで説明します
  • LinuxとDockerの知識を少々

Docker版のGitLabを使うとLinuxサーバーが一台だけあればサービスとして立ち上げることができるのでお手軽です。

Linuxサーバーのインスタンスを作成

EC2画面を表示する

まずはAWSのマネジメントコンソールにログインしてEC2の画面を表示します。

EC2の画面が開いたら、①でリージョンを指定して、②のインスタンスを起動ボタンを押して、Linuxのインスタンスを一つ立ち上げます。

リージョンはどこでも良いですが、ランニングコストを下げるならアイオワ、通信速度を優先するなら東京がよいでしょう(日本在住の場合)

インスタンスに名前をつけます。

OSイメージの選択

次に起動するインスタンスの設定をします。

設定が簡単なクイックスタート(①)を選択したら、好きなLinuxの種類を選択します。今回はGCPの場合も想定してどちらにでもあるUbuntuを選択(②)しました。

マシンイメージ(③)はUbuntuの22か20がよいでしょう。私は安定の20にしました。

アーキテクチャ(④)は64ビット一択です。

インスタンスタイプの選択

次はインスタンスタイプを決めます。無料枠のt2.microが初期選択されているのでこのまま無料でいきたいところなのですが、GitLabを動かすには4GBのメモリがないと安定しないので、t2.mediumを選択しました。数人で使う想定でこのサイズですので、もっと大人数で使う場合はこれより大きいインスタンスにしないとスペック足りないかもしれません。

スペックはあとから変更できますので、一旦この最低スペックで作ってスペック不足を感じたら増強すればよいと思います。

キーペアの指定

SSHでインスタンスに接続する際に使用するキーペアです。既に作成済みの場合はそれを選択します。無い場合は新しいキーペアを作成します。

ネットワーク設定

既に適切なセキュリティグループが作成済みの場合は既存のセキュリティグループを選択します。まだない場合は、セキュリティグループを作成します(①)。

SSHトラフィックは許可します(②)。許可しないと外から操作できません。自分のIPを指定すると今設定操作中の環境からのみ接続できる設定をしてくれます。

SSHで接続できるとなんでもできてしまうので、接続元は自宅や会社のIPアドレスを指定してそこからのみ接続を許容するように設定すると安全です。

HTTP/HTTPSトラフィックの許可(③)はどちらかまたは両方のチェックをつけます。ここにチェックつけないとGitLabサーバーを立ち上げても外部からブラウザで画面が開けません。

ストレージの設定

初期設定では、8GiBになっていますが、この設定だとちょっと利用するとすぐにストレージを使い切ってしまいます。数人で少し使う場合は10GiBぐらいにセットすると良いでしょう。

大人数で本格的に使う場合はもっと大きなサイズにしておいたほうが安全ですが、足りなくなってでもあとから簡単に増設できますので10GiBスタートでよいと思います。クラウドって便利ですよね。

インスタンス数を指定して起動

画面右側にインスタンス数を指定するところがあります(①)ので、作成したいインスタンス数を指定したら、インスタンスを起動(②)ボタンを押します。

インスタンス起動を開始しますので、少し待ったら右下のインスタンスを表示ボタンを押します。

インスタンス一覧画面が表示されたら、今作成したインスタンスが一覧に追加されていると思います。作成直後はステータスチェック欄が「初期化しています」と表示されていますので、完了するまで待ちます。

自動では表示が切り替わらなかったような気がするので、リロードボタンを押して確認します。

次のような表示になればインスタンス起動完了です。

インスタンスが生成できたら、SSHで接続して操作していきます。

SSHの接続方法が分からない方はこの記事の「起動したLinuxサーバにSSHでログイン」の章をご覧ください。

ログインしたら、最新状態にアップグレードしておきましょう。

$ sudo apt update
$ sudo apt upgrade -y

Dockerをインストール

必要なソフトを追加します。

$ sudo apt install -y apt-transport-https ca-certificates curl software-properties-common

GPGキーの追加をします。これを実行して問題なければOKが表示されます。

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

リポジトリを登録します。

$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"

Dockerのインストールをします。

$ sudo apt install -y docker-ce

Dockerが正しくインストールできたかバージョンを表示して確認します。

$ sudo docker version | grep Ver

rootユーザ以外でもDockerを実行できるようにdockerグループに現在のユーザを追加します。

$ sudo usermod -aG docker `whoami`

グループに追加したあとは、設定を有効にするため、一度ログアウトして再ログインしてください。

docker-composeをインストール

Dockerコマンドをいちいち叩くのは大変なので、docker-composeを導入して自動化します。

$ sudo apt install -y docker-compose

GitLab環境構築用docker-compose.yaml作成

次にdocker-compose.yamlファイルを作成します。

gitlab:
  container_name: gitlab01
  image: 'gitlab/gitlab-ce:latest'
  restart: always
  hostname: 'localhost'
  environment:
    GITLAB_OMNIBUS_CONFIG: |
      external_url 'http://13.114.235.20'
      gitlab_rails['time_zone'] = 'Asia/Tokyo'
  ports:
  - '80:80'
  - '2022:22'
  volumes:
  - '/docker/gitlab/config:/etc/gitlab'
  - '/docker/gitlab/logs:/var/log/gitlab'
  - '/docker/gitlab/data:/var/opt/gitlab'

external_urlの部分のIPは作成したインスタンスの外部IPアドレスを指定します。

GitLab起動

docker-composeでGitLabのコンテナを起動します。

$ docker-compose up -d

初回はGitLab-CEのコンテナイメージのダウンロードがありますので時間がかかりますが、自動で起動までするのであとは待つだけです。

このようにダウンロードが始まらない場合は、ここまでの設定に何らかの問題があると思いますので再度手順を確認してください。
(2023/06/10時点では問題ないことを確認しました)

これでGitLabのインストールと起動が完了しました。

GitLabログイン画面を表示

ブラウザから、docker-compose.yamlのexternal_urlで指定したURLにアクセスします。

今回の場合は、このアドレスです。http://13.114.235.20

おおお! GitLabが起動しました!

あなたたちだけの専用GitLabサーバの誕生です。

502エラーが表示される場合は、まだGitLab起動中ですので、しばらく待ってから再度ブラウザを更新してみてください。ログイン画面が表示されると思います。

それ以外でブラウザに画面が表示されない場合は、どこかの設定が間違っています。よくあるのはセキュリティグループの設定でHTTP開け忘れ、HTTPSでアクセスしてしまっているケースがあります。

外から接続できない場合は、内部からHTTPリクエストを送って確認します。次のように表示された場合はGitLab自体が正常に起動できていないので、再度手順を確認してください。

ubuntu@ip-172-31-44-117:~$ curl http://localhost
curl: (7) Failed to connect to localhost port 80: Connection refused

これで502以外のHTMLが戻ってくるようならGitLabは正常に起動していますが、インターネット側からうまく接続できない状態だと思われます。次のポイントを確認してみてください。

確認ポイント
  • IPアドレスが間違っていないか確認
  • セキュリティグループでHTTPが通過できるような設定になっているか確認

管理者アカウントでログイン

さて、管理者でログインしてみましょう。

最近のGitLabはセキュリティの関係で管理者パスワードはインストール時に自動生成されてこのファイルに記載されています。

/etc/gitlab/initial_root_password

このファイルはGitLabのコンテナ内にあるのでdockerコマンドでコンテナに接続してパスワードが記載されたファイルを表示します。

$ docker exec gitlab01 cat /etc/gitlab/initial_root_password

この部分がパスワードです。

ちなみにこのファイルは1日経過すると自動で消滅するミッションインポッシブル仕様なので、早めに確認しておきましょう。

GitLabの管理者アカウント名は、rootです。パスワードはさきほど確認したものを指定してログインします。

認証情報が正しければ、このようにGitLabに管理者アカウントでログインできます。

あとは、GitLabを利用するユーザやプロジェクトをガンガン登録していきましょう。

スポンサーリンク

管理者向け基本操作

GitLabコンテナ操作

GitLabのコンテナ状態確認

コンテナの起動状況を確認します。

$ docker-compose ps

実行するとコンテナの起動状況が表示されます。StatusがUpならコンテナ起動中で、Portsを見ると、ホストのどのポートがコンテナのどのポートに転送されているか確認できます。

ubuntu@ip-172-31-44-117:~$ docker-compose ps
  Name         Command          State                              Ports
------------------------------------------------------------------------------------------------
gitlab01   /assets/wrapper   Up (healthy)   0.0.0.0:2022->22/tcp,:::2022->22/tcp, 443/tcp,
                                            0.0.0.0:80->80/tcp,:::80->80/tcp

ちなみにコンテナ停止状態の時はこのように表示されます。

ubuntu@ip-172-31-44-117:~$ docker-compose ps
  Name         Command        State     Ports
---------------------------------------------
gitlab01   /assets/wrapper   Exit 137

GitLabコンテナ起動

GitLabのコンテナが停止している時は、次のコマンドでコンテナを起動できます。

$ docker-compose up -d

起動直後にコンテナの状態を確認すると起動しているような表示がされますが、起動処理中です。完全に起動する前にブラウザでアクセスすると502が表示されますのでその時はしばらく待ちます。

GitLabコンテナ停止・破棄

一時的にGitLabを止めたい場合は、次のコマンドでGitLabのコンテナを停止できます。

$ docker-compose stop
または
$ docker-compose down

docker-comopse downを実行するとコンテナを破棄してしまいますが、GitLabの設定やリポジトリは永続的にするためコンテナ外に外出してありますので、コンテナを破棄してもデータは消えないようにしています。

もう一度新しくGitLabを構築し直す

docker-compose downでコンテナを破棄し、/docker/gitlab01ディレクトリを削除して再度docker-composeし直せばOKです。

インスタンスを停止して課金を止める

GitLabコンテナが動作しているLinuxサーバのインスタンスを停止します。インスタンスは停止すると実行時間としては停止しますので課金がほぼ停止されます。

但し、ストレージは残っていますのでそれを維持コストや固定IPを割当している場合などは別途課金があるかもしれませんので詳細は料金を確認しましょう。

外部IPアドレスを固定していない状態でインスタンスを停止すると次にインスタンスを起動した時に外部IPアドレスが変わってしまいますので、ElasticIPを使って外部IPを固定しておいたほうがよいでしょう。

インスタンスを再起動する

GitLabの動作がおかしくなったり接続できない状態になった際、コンテナ再起動を行っても直らなかった場合はインスタンスを再起動することで改善できます。

OSから再起動するのでコンテナの再起動と比較すると時間がかかりますが、確実です。

GitLabサーバが不要になったのですべて消す

スポンサーリンク

まとめ

いかがでしたか?

自前でGitLabサーバを立ててしまうのもアリだなーと思いました。SaaSのGitLab使ってもAWSでGitLabサーバ立ててもランニングコストかかるので、開発に専念したいorインフラエンジニアいない(または興味ない)ならSaaSの有料プランに切り替え

インフラも興味あるし、自由にGitLabを触りたい、というならAWS上にGitLabサーバ立ててしまうのが面白いかなと思いました。

社内LAN内だけで使うならAWS使う必要もなく、社内に転がってるパソコンでGitLabサーバを立ててしまうのもアリですね。そうするとランニングコストは電気代だけです。外から接続できないので情報漏えいのリスクも抑えることが出来ます。

興味ある方は以前社内サーバー上に仮想Linuxサーバ立ててGitLabインストールしたことがありますのでこちらをご覧ください。

オマケ① HTTPS化

ドメインを取得するか、Let’s EncryptでフリーのSSL証明書を取得すればHTTPS化できます。個人や社内の一部で使うだけならオレオレ証明書でもよいと思います。

オレオレ証明書を使う場合のやり方はこちらで紹介しています。

オマケ② GitLabのバックアップ

GitLab.comのようなクラウドサービスを利用する場合は不要ですが、自前でGitLabサーバーを立ち上げてサービスする場合は、バックアップは必須です。

もしランサムウェアなどによってリポジトリが回復不可能になってしまうとバックアップがないともうどうにもなりません。

やり方はこちらで紹介しています。

おすすめ書籍の紹介コーナー

AWSは機能が多岐にわたり存在し、初心者が足を踏み入れるとほぼ100%迷います。まずはこの教科書で全体を広く浅く知ることが重要です。

AWSを使うメリットとして迅速なサービス運用環境の構築が求められます。失敗できない本番環境を構築する前に読んでおきたい一冊です。

そしていよいよAWS認定試験に挑戦したくなった場合は、こちらで徹底的に学習しましょう。これからはAWSです。

コメント

タイトルとURLをコピーしました