1
/
5

【社内DX】GiteaをAmazon Lightsailに構築してみた 〜軽量Gitサーバーを約20分で〜

当社の主要な業務は、官公庁系の大規模システム開発です。

安定した技術を駆使する機会が多いため、「技術的な成長ができない」と退職者には、口コミで悪口を書かれたりもします。でも、実際のところは、社内開発では、結構、モダンな技術を駆使した開発をやっていて、社内DXとは言わないまでも、内勤スタッフの作業効率化に寄与するツールがいくつか存在します。

現在、5月に開催される社員総会の受付を無人化するために、QRコード読み取りのアプリケーションTauriで開発し、バックエンドもAWSにおけるサーバーレスアーキテクチャに構築しています。また、採用業務を自動化するための「ヒミツ道具」も、Github Actionsでせっせと働いてくれています。

こうした社内開発のソースを管理するために、なるべく動作の軽いソースコード管理ツールを探していたところ、3月に中途入社したUさんが「Gitea」を勧めてくれたので、さっそく、Lightsailに構築してみました。

過去にGitlabをLightsailに構築したときは、メモリを4GBくらい設定しないと動作が「もっさり」していましたが、Giteaにしたところ、メモリ1GBの設定でも快適に動作しています!小規模の開発チームが、コストをかけずに、ソースコードを管理したいときにはおススメです!

前置きが長くなりましたが、構築手順を記します。約20分で構築可能です。

目次

  • 0.作業前提

  • 1.LightsailのUbuntu基本設定

  • 2.Docker Composeの設定 [Gitea × PostgreSQL]

  • 3.Docker有効化+グループ設定

  • 4.Dockerの起動と確認

  • 5.nginxのリバースプロキシ設定

  • 6.SSL証明書を取得(Let's Encrypt)

  • 7.Giteaの初期設定

0.作業前提

下記が完了していることを前提とした手順書です。

  • Lightsailでインスタンスの作成済み
    • OSはUbuntu
    • メモリは1GB ※512MBでは動作が重く、実用には厳しいです。
    • 静的IPをアタッチ済(☆)
    • ファイアウォールの設定で以下が解放済みであること
      22 (SSH) / 80 (HTTP) / 443 (HTTPS) / 2222 (GiteaのSSH接続用)
  • ドメインレジストラの管理画面でAレコードの設定
    • Amazon Route 53を例に取ると以下の通り。
      レコード名: gitea (例)
      タイプ:A
      値:Lightsailの固定IPアドレス(☆)

1.LightsailのUbuntu基本設定

Dockernginxなどをインストールしていきます。

#パッケージの更新
sudo apt update && sudo apt upgrade -y

# Dockerのインストール
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

# Docker Composeのインストール
sudo apt install docker-compose-plugin -y

# nginxやhttps関連インストール
sudo apt install nginx certbot python3-certbot-nginx -y

2.Docker Composeの設定 [Gitea × PostgreSQL]

GiteaとPostgreSQLを構成するdocker-compose.ymlを準備します。

mkdir ~/gitea && cd ~/gitea
nano docker-compose.yml

docker-compose.ymlの内容は以下の通り。

version: "3"

services:
  db:
    image: postgres:16
    container_name: gitea-db
    restart: always
    environment:
      POSTGRES_DB: gitea
      POSTGRES_USER: gitea
      POSTGRES_PASSWORD: changeme
    volumes:
      - ./postgres:/var/lib/postgresql/data

  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    depends_on:
      - db
    environment:
      - DB_TYPE=postgres
      - DB_HOST=db:5432
      - DB_NAME=gitea
      - DB_USER=gitea
      - DB_PASSWD=changeme
      - USER_UID=1000
      - USER_GID=1000
    volumes:
      - ./gitea:/data
    ports:
      - "3000:3000"
      - "2222:22"
    restart: always

設定値は適宜変更してお使いください(特にパスワード)。

3.Docker有効化+グループ設定

Dockerサービスを有効化し、sudo なしでdockerを使えるようにグループ設定します。

# Docker有効化
sudo systemctl enable docker

# グループ設定
sudo usermod -aG docker $USER
newgrp docker

4.Dockerの起動と確認

docker composeコマンドで起動し、無事、起動できているかを確認します。

# 起動​
docker compose up -d

# 確認
docker compose ps

Docker Compose v2 以降では 「docker-compose」は非推奨となり「docker compose」が推奨されるようになっています。また、実行時に「PermissionError: [Errno 13] Permission denied」が表示される場合は、グループ設定がうまくいっていない可能性があります。

5.nginxのリバースプロキシ設定

下記条件を前提にnginxの設定ファイルを作成していきます、

  • "https"で運用
  • 「robot.txt」による検索避け対策
    • 社内利用を前提としているため、検索エンジンにインデックスされないよう robots.txt を設定しています。
  • 運用するドメインは"gitea.example.com"
sudo nano /etc/nginx/sites-available/gitea

設定ファイルの内容は以下の通りです。
gitea.example.comは、運用予定のドメインに書き換えましょう。

server {
    listen 443 ssl; # managed by Certbot
    server_name gitea.example.com;

    # robots.txt を明示的に返す
    location = /robots.txt {
        return 200 "User-agent: *\nDisallow: /\n";
        add_header Content-Type text/plain;
    }

    # Gitea のリバースプロキシ
    location / {
        proxy_pass http://localhost:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    ssl_certificate /etc/letsencrypt/live/gitea.example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/gitea.example.com/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}

server {
    if ($host = gitea.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot
    listen 80;
    server_name gitea.example.com;
    return 404; # managed by Certbot
}

シンボリックリンクを貼ってから、設定ファイルを読み直します。

sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

6.SSL証明書を取得(Let's Encrypt)

gitea.example.comは、運用予定のドメインに書き換えましょう。

sudo certbot --nginx -d gitea.example.com

7.Giteaの初期設定

Giteaを使えるようにしていきます。

  • https://gitea.example.com にアクセス
  • 初期画面で以下を設定します。
【DB種類】       PostgreSQL
【DBホスト】     db:5432
【DB名】         gitea
【DBユーザ】     gitea
【パスワード】   changeme
【サイトURL】    https://gitea.example.com
【SSLモード】    disable
【SSHポート】    2222
【管理ユーザ】   任意で作成

SSLモードをdisableにしないとこんなエラーが出力されるので要注意です。

データベース設定が無効です: pq: SSL is not enabled on the server

設定手順は以上です!

小規模な社内開発において、GiteaとAmazon Lightsailの組み合わせは非常にコスパの高い選択肢でした。「小規模チームでのソースコード管理を手軽にやってみたい!」という方の参考になれば嬉しいです!ぜひ「♡」もお待ちしています!

2 いいね!
2 いいね!
久田 一徳さんにいいねを伝えよう
久田 一徳さんや会社があなたに興味を持つかも