Gitea は Go 言語で書かれた Git サーバです。 Gogs から Fork した OSS です。 今回は AmazonLinux2 に Gitea をインストールする手順をメモしておきます。 DB は選択出来ますが、今回は MariaDB を使うことにします。
環境
今回は以下の環境を構築していきます。
- AmazonLinux2
- フロントエンド
- Nginx
- クライアント通信を Proxy し、バックエンドの Gitea へ転送する
- SSL/TLS を終端する
- バックエンド
- Gitea
- 3000/TCP を Listen
- 内蔵 SSH サーバは 22/TCP を Listen
- DB には MariaDB を使う
Git リポジトリの接続には上述の通り、Gitea 内蔵 SSH サーバを用い、22/TCP を Listen させます。 その為、/etc/ssh/sshd_config
を修正し、予め sshd が Listen するポートを (22 では無い) 別のポートへ変更しています。
Nginx
まず、フロントエンドを担当する Nginx をインストールします。
リポジトリの追加
AmazonLinux 標準リポジトリにある Nginx はややバージョンが古い為、Nginx の Mainline リポジトリからインストールします。 /etc/yum.repos.d/nginx.repo
を以下の内容で新規作成します。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
リポジトリの定義が出来たら Nginx をインストールします。
yum -y install nginx
Gitea 用設定ファイルの用意
Gitea 用の設定ファイルを用意します。 ポイントは大きく以下の 2 つです。
- クライアント通信を Proxy して Gitea へ転送する
- SSL/TLS を終端する
/etc/nginx/conf.d/gitea.conf
を以下の内容で作成します。 FQDN や証明書/秘密鍵のパスなどは環境に合わせて修正します。
upstream gitea {
server localhost:3000;
}
server {
listen 80;
server_name git.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name git.example.com;
ssl_certificate /etc/letsencrypt/certificates/git.example.com.crt;
ssl_certificate_key /etc/letsencrypt/certificates/git.example.com.key;
ssl_protocols TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDH !aNULL !eNULL !SSLv2 !SSLv3';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://gitea;
proxy_redirect http:// https://;
}
}
自動起動&起動の設定
これで Nginx の設定は完了です。 Nginx に自動起動&起動設定を実施しておきます。
systemctl enable nginx
systemctl start nginx
MariaDB
次は MariaDB を構築していきます。
インストール
AmazonLinux 標準リポジトリにあるパッケージをインストールします。
yum -y install mariadb mariadb-server
設定の修正
/etc/my.cnf
の [mysqld]
セクションに文字コードの設定を追加しておきます。
character-set-server=utf8
自動起動&起動の設定
自動起動&起動の設定を実施します。
systemctl enable mariadb
systemctl start mariadb
初期設定
mysql_secure_installation
で対話的に初期設定を実施しておきます。 テスト用の DB 等は削除しておく方が無難です。
mysql_secure_installation
Gitea 用データベースの作成
Gitea 用のデータベースを作成します。 まず、MariaDB へ接続します。
mysql -u root -p
以下の SQL を実行してデータベースやユーザを作成しておきます。 データベース名、ユーザ名、パスワードは適宜、修正します。
CREATE DATABASE `gitea` DEFAULT CHARACTER SET `utf8mb4` COLLATE `utf8mb4_general_ci`;
CREATE USER `gitea`@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON `gitea`.* TO `gitea`@`localhost`;
quit
これで MariaDB の設定修正は完了です。
Gitea
最後に Gitea を構築していきます。
項目 | 値 |
---|---|
パス | /opt/gitea 以下へインストール |
実行ユーザ | root |
実行グループ | root |
git のインストール
Gitea は git
コマンドに依存している為、これをインストールしておきます。
yum -y install git
インストール
GitHub からバイナリを取得し、インストールしていきます。
mkdir -p /opt/gitea/bin/
curl -LO https://github.com/go-gitea/gitea/releases/download/v1.8.3/gitea-1.8.3-linux-amd64
mv gitea-1.8.3-linux-amd64 /opt/gitea/bin/
chmod 755 /opt/gitea/bin/gitea-1.8.3-linux-amd64
ln -s /opt/gitea/bin/gitea-1.8.3-linux-amd64 /opt/gitea/bin/gitea
systemd 用定義ファイルの登録
systemd から Gitea を制御出来るよう、定義ファイルを登録します。 /etc/systemd/system/gitea.service
を以下の内容で新規作成します。
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target
After=network.target
After=mysqld.service
[Service]
# Modify these two values and uncomment them if you have
# repos with lots of files and get an HTTP error 500 because
# of that
###
#LimitMEMLOCK=infinity
#LimitNOFILE=65535
RestartSec=2s
Type=simple
User=root
Group=root
WorkingDirectory=/opt/gitea
ExecStart=/opt/gitea/bin/gitea web
Restart=always
Environment=USER=root HOME=/opt/gitea
[Install]
WantedBy=multi-user.target
自動起動&起動の設定
systemd 用の登録ファイルを追加している為、systemctl daemon-reload
してから自動起動&起動を行います。
systemctl daemon-reload
systemctl enable gitea
systemctl start gitea
初期設定の実施
Gitea が起動したらブラウザで https://git.example.com/install
へアクセスし、初期設定を実施します。 初期値と、設定値サンプルを掲載しておきます。 尚、インストーラは一度起動して設定ファイルが作成すると、再実行出来なくなります。 設定ファイルは /opt/gitea/bin/custom/conf/app.ini
に作成されましたので、以降は直接このファイルを修正するか、もしくは設定ファイルを削除してインストーラを再実行して初期設定をやり直します。 更に重要なポイントですが、インストール時に指定したパラメータは、すぐには反映されないようなので初期設定が完了したら一度、Gitea を再起動 (systemctl restart gitea
) し、設定を再読込しておきます。
項目 | 初期値 | 設定例 |
---|---|---|
データベースのタイプ | MySQL | MySQL |
ホスト | 127.0.0.1:3306 | 127.0.0.1:3306 |
ユーザー名 | gitea | gitea |
パスワード | password | |
データベース名 | gitea | gitea |
サブタイトル | Gitea: Git with a cup of tea | Gitea: Git with a cup of tea |
リポジトリのルートパス | /opt/gitea/gitea-repositories | /opt/gitea/gitea-repositories |
Git LFS ルートパス | /opt/gitea/bin/data/lfs | /opt/gitea/bin/data/lfs |
実行ユーザ名 | root | root |
SSH サーバーのドメイン | localhost | git.example.com |
SSH サーバーのドメインポート | 22 | 22 |
Gitea の HTTP ポート | 3000 | 3000 |
Gitea のベース URL | http://localhost:3000/ | https://git.example.com/ |
ログの保存先パス | /opt/gitea/bin/log | /opt/gitea/bin/log |
SMTP ホスト | ||
メール送信者 | ||
SMTP ユーザー名 | ||
SMTP パスワード | ||
登録にはメールによる確認が必要 | ||
メール通知を有効にする | ||
ローカルモードを有効にする | ||
Gravatar を無効にする | チェック | |
フェデレーテッド・アバターを有効にする | チェック | |
OpenID を使ったサインインを有効にする | チェック | |
セルフ登録を無効にする | チェック | |
外部サービスを使用した登録のみを許可 | ||
OpenID を使ったセルフ登録を有効にする | チェック | チェック |
CAPTCHA を有効にする | ||
ページ閲覧にサインインが必要 | ||
デフォルトでメールアドレスを隠す | ||
デフォルトで組織の作成を許可 | チェック | チェック |
デフォルトでタイムトラッキングを有効 | チェック | チェック |
メールを隠すときのドメイン | noreply.example.org | noreply.example.org |
管理者ユーザー名 | gitea-admin | |
パスワード | password | |
パスワード確認 | password | |
メールアドレス | gitea-admin@example.com |
初期状態では下記のような表示になっていました。
内蔵 SSH サーバを有効化する
少なくても現バージョンの Gitea の Web インストーラには「内蔵 SSH サーバを利用するか?否か?」という選択が無いように見えます。 その為、Web インストーラでの初期設定が完了したら手動で /opt/gitea/bin/custom/conf/app.ini
の [server]
セクションへ下記を追加します。
START_SSH_SERVER = true
追記が完了したら Gitea を再起動し、設定変更を反映します。
systemctl restart gitea
ログイン
これで準備完了です。 ブラウザで https://git.example.com
へアクセスすると下記のような画面が表示されるはずです。 初期設定で「ページ閲覧にサインインが必要」と設定している為、ログインせずに画面上部の エクスプローラ
をクリックしてもユーザやリポジトリ情報が表示される前にログインを要求されます。
参考
/opt/gitea/bin/custom/conf/app.ini (サンプル)
APP_NAME = Gitea
RUN_USER = root
RUN_MODE = prod
[oauth2]
JWT_SECRET = *******************************************
[security]
INTERNAL_TOKEN = *********************************************************************************************************
INSTALL_LOCK = true
SECRET_KEY = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[database]
DB_TYPE = mysql
HOST = 127.0.0.1:3306
NAME = gitea
USER = gitea
PASSWD = password
SSL_MODE = disable
PATH = /opt/gitea/bin/data/gitea.db
[repository]
ROOT = /opt/gitea/gitea-repositories
[server]
SSH_DOMAIN = git.example.com
DOMAIN = git.example.com
HTTP_PORT = 3000
ROOT_URL = https://example.com/
DISABLE_SSH = false
SSH_PORT = 22
LFS_START_SERVER = true
LFS_CONTENT_PATH = /opt/gitea/bin/data/lfs
LFS_JWT_SECRET = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
OFFLINE_MODE = false
[mailer]
ENABLED = false
[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL = false
DISABLE_REGISTRATION = true
ALLOW_ONLY_EXTERNAL_REGISTRATION = false
ENABLE_CAPTCHA = false
REQUIRE_SIGNIN_VIEW = true
DEFAULT_KEEP_EMAIL_PRIVATE = false
DEFAULT_ALLOW_CREATE_ORGANIZATION = false
DEFAULT_ENABLE_TIMETRACKING = true
NO_REPLY_ADDRESS = noreply.example.org
[picture]
DISABLE_GRAVATAR = true
ENABLE_FEDERATED_AVATAR = false
[openid]
ENABLE_OPENID_SIGNIN = false
ENABLE_OPENID_SIGNUP = true
[session]
PROVIDER = file
[log]
MODE = file
LEVEL = Info
ROOT_PATH = /opt/gitea/bin/log
/etc/my.cnf (初期状態)
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
コメント