【社内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アドレス(☆)
- Amazon Route 53を例に取ると以下の通り。
1.LightsailのUbuntu基本設定
#パッケージの更新
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の組み合わせは非常にコスパの高い選択肢でした。「小規模チームでのソースコード管理を手軽にやってみたい!」という方の参考になれば嬉しいです!ぜひ「♡」もお待ちしています!