CentOS 7 に Gogs(Go 製セルフホスト Git サービス)をインストールして公開する手順

重要: 本手順は CentOS 7 を前提としています。既存サーバのバックアップを作成してから実行してください。
概要
Gogs は Go 言語で書かれたオープンソースの軽量 Git サービスです。GitHub に似たウェブ UI を持ち、MySQL、PostgreSQL、SQLite3、MSSQL、TiDB などをサポートします。ここでは PostgreSQL をデータストア、Nginx をリバースプロキシとして使い、Gogs を systemd サービスとして常時稼働させる手順を紹介します。
用語(1行定義):
- Gogs: Go で書かれたセルフホスト可能な Git サービス。
- PostgreSQL: 高機能なオープンソースのリレーショナルデータベース。
- Nginx: 高性能 Web サーバ兼リバースプロキシ。
前提条件:
- CentOS 7 が稼働するサーバ
- root 権限(sudo が使えること)
主な手順一覧:
- EPEL リポジトリの追加
- PostgreSQL のインストールと設定
- Go と Git のインストール
- Gogs のダウンロードとビルド
- Gogs の設定(app.ini)
- systemd サービス化
- Nginx をリバースプロキシとして設定
- 動作確認と初期セットアップ
重要なポイント
Important: セキュリティのため、PostgreSQL はローカル接続(127.0.0.1)に限定しています。外部アクセスが必要な場合は、接続制御と TLS を厳密に設定してください。
前準備:EPEL リポジトリの追加
EPEL(Extra Packages for Enterprise Linux)を有効にします。
sudo yum -y install epel-release
EPEL が追加されると、Nginx などのパッケージが利用可能になります。
PostgreSQL のインストールと初期設定
Gogs は複数の DB をサポートしますが、この手順では PostgreSQL を使用します。まずパッケージをインストールします。
sudo yum -y install postgresql-server postgresql-contrib
初期化:
sudo postgresql-setup initdb
次に PostgreSQL の設定を編集して、ローカル接続のみを許可し、パスワード認証(md5)を使うようにします。
Postgres ユーザーに切り替えます。
su - postgres
データディレクトリに移動して設定ファイルを編集します(データディレクトリ名は環境によって異なる場合があります。通常は /var/lib/pgsql/data などです)。
cd data/
vim postgresql.conf
listen_addresses をローカルに変更:
listen_addresses = '127.0.0.1'
保存してから pg_hba.conf を編集してローカル接続を md5 に設定します。
vim pg_hba.conf
該当行を以下のように変更します:
host all all 127.0.0.1/32 md5
サービスを起動してブート時起動を有効化します。
sudo systemctl start postgresql
sudo systemctl enable postgresql
netstat 等でポート 5432 が 127.0.0.1 にバインドされているか確認します。
netstat -plntu
画像: PostgreSQL がローカルで稼働しているスクリーンショット
次に Gogs 用データベースとユーザーを作成します。
su - postgres
psql
psql シェル内で:
CREATE USER git CREATEDB;
\password git
CREATE DATABASE gogs_production OWNER git;
\q
これで gogs_production データベースが作成され、所有者は git ユーザーです。
Go と Git のインストール
まず Git をインストールします。
sudo yum -y install git
システムユーザーとして git を追加します。
useradd -m -s /bin/bash git
passwd git
git ユーザーに切り替えてローカルディレクトリを作ります。
su - git
mkdir -p /home/git/local
Go をダウンロードします。以下は例として go1.9.2 を使っています。実運用では最新の安定版を公式サイトから取得してください。
cd ~/local
wget https://dl.google.com/go/go1.9.2.linux-amd64.tar.gz
アーカイブを展開して削除します。
tar -xf go1.9.2.linux-amd64.tar.gz
rm -f go1.9.2.linux-amd64.tar.gz
環境変数を設定します(git ユーザーの .bashrc に書き込み)。
cd ~
echo 'export GOROOT=$HOME/local/go' >> $HOME/.bashrc
echo 'export GOPATH=$HOME/go' >> $HOME/.bashrc
echo 'export PATH=$PATH:$GOROOT/bin:$GOPATH/bin' >> $HOME/.bashrc
source ~/.bashrc
bash がデフォルトシェルであることを確認し、go バージョンをチェックします。
go version
結果例のスクリーンショット:
Gogs のダウンロードとビルド
git ユーザーとして Gogs のソースを取得します。
su - git
go get -u github.com/gogits/gogs
GOPATH にソースが取得されます。ソースディレクトリでビルドします。
cd $GOPATH/src/github.com/gogits/gogs
go build
ビルドが成功したら、Gogs を直接起動して動作確認できます。
./gogs web
この状態では Gogs はデフォルトでポート 3000(全てのインターフェイス)にバインドされます。ブラウザで http://サーバIP:3000 を開くとウェブ UI が見えるはずです。
ブラウザでアクセス例:
確認後、Ctrl + C で一旦停止します。
Gogs の設定(カスタム設定)
Gogs のデフォルト設定をコピーして custom ディレクトリ以下に置き、ローカルバインドと DB 情報を設定します。
cd $GOPATH/src/github.com/gogits/gogs
mkdir -p custom/conf/
cp conf/app.ini custom/conf/app.ini
vim custom/conf/app.ini
[server] セクションを編集して HTTP_ADDR を 127.0.0.1 にします。
[server]
PROTOCOL = http
DOMAIN = localhost
ROOT_URL = %(PROTOCOL)s://%(DOMAIN)s:%(HTTP_PORT)s/
HTTP_ADDR = 127.0.0.1
HTTP_PORT = 3000
[database] セクションに PostgreSQL 情報を設定します(例)。パスワードは運用環境の安全な値に変更してください。
[database]
DB_TYPE = postgres
HOST = 127.0.0.1:5432
NAME = gogs_production
USER = git
PASSWD = aqwe123@
保存して Gogs を起動して設定が正しいことを確認します。
./gogs web
この時点で Gogs は 127.0.0.1:3000 でリクエストを待ち受けています。
systemd サービスとして Gogs を常時稼働させる
Gogs をサービス化して起動・再起動・ログ管理を systemd に任せます。まずユニットファイルを作成します。
cd /etc/systemd/system
vim gogs.service
以下を貼り付けます。WorkingDirectory と ExecStart のパスは環境に合わせて変更してください。
[Unit]
Description=Gogs
After=syslog.target
After=network.target
After=mariadb.service mysqld.service postgresql.service memcached.service redis.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
Type=simple
User=git
Group=git
WorkingDirectory=/home/git/go/src/github.com/gogits/gogs
ExecStart=/home/git/go/src/github.com/gogits/gogs/gogs web
Restart=always
Environment=USER=git HOME=/home/git
[Install]
WantedBy=multi-user.target
ユニット読み込みをリロードし、起動と自動起動を有効にします。
systemctl daemon-reload
systemctl start gogs
systemctl enable gogs
実行確認:
netstat -plntu
systemctl status gogs
Nginx をリバースプロキシとして設定
Gogs を直接公開する代わりに、Nginx を前段で動かしプロキシすることで TLS 終端やホスト名の制御、ロードバランスが可能になります。まず Nginx をインストールします。
yum -y install nginx
仮想ホスト設定を作成します。/etc/nginx/conf.d/gogs.conf に次を記述します(server_name は適宜変更)。
cd /etc/nginx/
vim conf.d/gogs.conf
server {
listen 80;
server_name git.hakase-labs.co;
location / {
proxy_pass http://127.0.0.1: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;
}
}
注: 上記に proxy_set_header 行を追加すると Gogs 側でクライアント IP やホスト名を正しく認識できます。
設定テストと起動:
nginx -t
systemctl restart nginx
systemctl enable nginx
netstat でポート 80 が LISTEN されているか確認します。
netstat -plntu
初回セットアップ画面での設定と動作確認
ブラウザで Gogs の URL(例: http://git.hakase-labs.co/)にアクセスします。トップページでデータベース情報を入力し、管理者アカウントを作成して「Install Gogs」をクリックします。
管理者アカウント設定:
インストールが成功するとダッシュボードに遷移します。
管理画面の例:
Gogs が PostgreSQL と Nginx で動作していることを確認できました。
トラブルシューティング(よくある問題と対処法)
ポート 3000 に接続できない
- systemctl status gogs を確認。Gogs が起動しているか、WorkingDirectory と ExecStart のパスが正しいか確認。
- SELinux を有効にしている場合は一時的に無効化して確認するか、必要なポリシーを設定する。
データベース接続エラー
- pg_hba.conf の設定と postgresql ユーザー/パスワードが一致しているかを確認。
- psql からローカルで接続できるかを確認する。
Nginx 経由でログインできない/画像が表示されない
- proxy_set_header が不足していると正しいホスト情報が渡らないことがあります。上記設定を確認。
管理画面で Internal Server Error(500)
- Gogs のログを確認(systemd ジャーナルや gogs/log など)。ファイル数制限(ulimit)や open file limit を上げることで改善する場合があります。
セキュリティ強化のチェックリスト
- 管理者アカウントは強力なパスワードにする。可能なら 2FA を有効にする。
- Nginx で HTTPS(Let’s Encrypt 等)を導入し TLS を有効化する。
- データベースパスワードを安全に管理し、不要な外部接続をブロックする。
- systemd ユニットに Resource 制限を追加して暴走対策を行う。
- 定期的にバックアップ(レポジトリと DB)を確実に取得する。
運用時のロール別チェックリスト
システム管理者
- OS パッケージの更新とセキュリティアップデートを定期実施
- バックアップとリストアの定期テスト
- TLS 証明書の更新スクリプトを準備
Gogs 管理者
- ユーザー管理と権限設定のレビュー
- リポジトリの利用状況監視と容量管理
開発者
- SSH キーの登録と利用方法を周知
- プライベート/パブリックリポジトリのポリシー管理
テストケース(受け入れチェック)
- ブラウザから http://<ドメイン>/ にアクセスしてインストール画面が表示されること。
- 管理者アカウントを作成してログインできること。
- レポジトリを作成し、push/pull ができること(SSH または HTTP)。
- Nginx を経由したアクセスでページが表示され、ヘッダに X-Forwarded-Proto が含まれること。
- DB 接続情報を間違えた場合、エラーが表示され適切にログが残ること。
代替アプローチと移行上の注意点
- SQLite を利用すると設定が簡単で小規模用途に向きますが、同時接続数や性能で制約があります。
- MySQL / MariaDB を選ぶ場合は接続文字列や権限管理が PostgreSQL と異なります。移行時にはデータダンプと検証を行ってください。
- Docker コンテナで Gogs を運用する方法もあります。コンテナ運用ではボリュームとデータ永続化、ネットワーク設定に注意。
有用なヒューリスティック(設計上の考え方)
- 小規模かつ低負荷: SQLite + 単一サーバ
- 中〜大規模: PostgreSQL/MariaDB + Nginx(TLS)+ systemd で冗長化やバックアップを考慮
- 可用性を上げる場合はリポジトリをオフサイトにミラーリング
1行用語集
- GOROOT: Go のインストール先ディレクトリ
- GOPATH: Go の作業ディレクトリ(プロジェクトと bin を格納)
最後に(まとめ)
Gogs は軽量でセットアップが比較的容易なセルフホスト Git サービスです。本ガイドでは CentOS 7 上に PostgreSQL と Nginx を組み合わせて運用する方法を詳しく説明しました。セキュリティ(TLS、パスワード管理、バックアップ)と運用監視を組み合わせて、本番環境で安定稼働させてください。
参考: https://gogs.io/docs/installation
短い告知文(社内展開用、100–200 文字):
Gogs を CentOS 7 上に導入しました。PostgreSQL と Nginx を利用し、リバースプロキシ越しに安全に公開しています。管理者アカウントを作成後、すぐにプライベートリポジトリを利用できます。
重要: ここに示したパスワードやサンプルは参考用です。実運用では安全なパスワード、適切なファイアウォール設定、TLS を必ず使用してください。