テクノロジーガイド

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

3 min read インフラ 更新されました 08 Oct 2025
CentOS 7 に Gogs をインストールして Nginx で公開する方法
CentOS 7 に Gogs をインストールして Nginx で公開する方法

重要: 本手順は 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 が使えること)

主な手順一覧:

  1. EPEL リポジトリの追加
  2. PostgreSQL のインストールと設定
  3. Go と Git のインストール
  4. Gogs のダウンロードとビルド
  5. Gogs の設定(app.ini)
  6. systemd サービス化
  7. Nginx をリバースプロキシとして設定
  8. 動作確認と初期セットアップ

重要なポイント

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 がローカルで稼働しているスクリーンショット

/var/lib/pgsql ディレクトリと PostgreSQL サービスの稼働を示す端末出力

/usr/bin/netstat の出力で 127.0.0.1:5432 が表示されている様子

次に Gogs 用データベースとユーザーを作成します。

su - postgres
psql

psql シェル内で:

CREATE USER git CREATEDB;
\password git
CREATE DATABASE gogs_production OWNER git;
\q

これで gogs_production データベースが作成され、所有者は git ユーザーです。

/psql でデータベースとユーザーを作成しているスクリーンショット

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

/ホームディレクトリの local に Go アーカイブをダウンロードしている画面

アーカイブを展開して削除します。

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

結果例のスクリーンショット:

/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 が見えるはずです。

/Gogs がポート 3000 で起動している様子の端末出力

ブラウザでアクセス例:

http://192.168.33.10:3000/

/ブラウザで Gogs の初期画面が表示されている様子

確認後、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 がローカルバインドで起動している様子

この時点で 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

/systemctl status gogs と netstat の出力を示すスクリーンショット

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

/nginx がポート 80 を LISTEN している様子を示す出力

初回セットアップ画面での設定と動作確認

ブラウザで Gogs の URL(例: http://git.hakase-labs.co/)にアクセスします。トップページでデータベース情報を入力し、管理者アカウントを作成して「Install Gogs」をクリックします。

/Gogs インストール画面で PostgreSQL 情報を入力している様子

管理者アカウント設定:

/Admin アカウント設定フォームのスクリーンショット

インストールが成功するとダッシュボードに遷移します。

/インストール後の Gogs ダッシュボード

管理画面の例:

/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 キーの登録と利用方法を周知
    • プライベート/パブリックリポジトリのポリシー管理

テストケース(受け入れチェック)

  1. ブラウザから http://<ドメイン>/ にアクセスしてインストール画面が表示されること。
  2. 管理者アカウントを作成してログインできること。
  3. レポジトリを作成し、push/pull ができること(SSH または HTTP)。
  4. Nginx を経由したアクセスでページが表示され、ヘッダに X-Forwarded-Proto が含まれること。
  5. 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 を必ず使用してください。

共有する: X/Twitter Facebook LinkedIn Telegram
著者
編集

類似の素材

プライベートInstagramを見る方法(安全ガイド)
ソーシャルメディア

プライベートInstagramを見る方法(安全ガイド)

PCエラー8790を診断・修復する方法
トラブルシューティング

PCエラー8790を診断・修復する方法

No Man’s Sky:FPS低下・パケットロスの原因と対処法
ゲーム

No Man’s Sky:FPS低下・パケットロスの原因と対処法

WhatsAppを複数スマホで同時に使う簡単手順
使い方

WhatsAppを複数スマホで同時に使う簡単手順

カスタム Google 検索エンジンの作り方
ハウツー

カスタム Google 検索エンジンの作り方

CentOS 7 に Gogs をインストールして Nginx で公開する方法
インフラ

CentOS 7 に Gogs をインストールして Nginx で公開する方法