[Debian] gogsの導入とSSL化

09/11/2018 GogsのURLを修正しました。

Google Cloud Platformで無料枠になっていたf1-microの用途に悩んでいたのですが、おひとり様gitサーバーとして使ってみよう、と天啓が下りました。
GitHubのようなOSSで有名なのはGitLabですが、f1-microのスペックでは非常に厳しいです。
(推奨環境がCPU 2コア、メモリ4GB)
他に何かないかなと探してみるとGitBucketやらが出てきましたが、その中でGogsが非常に軽いと聞き、使ってみることにしました。

f1-microの環境は、
f1-micro(vCPU x 1、メモリ 0.6 GB)、
us-west1-c、
HTTP, HTTPSトラフィックの許可、
30GBの標準の永続ディスク、
また、独自ドメインで運用したいのでネットワークに静的 IP アドレスを割り当てています。

今回は、
Gogs, Apache, sqlite,
ssl化にLet's Encryptを使用しています。
必要に応じてiptablesは各自で設定してください。

Contents

準備

インスタンスを作りたて前提です。Gogs導入前にまずは必要な設定等をしていきます。


sudo apt-get update; sudo apt-get upgrade -y;
sudo apt-get install build-essential vim git

swapファイルも作っておきます。(今回は2GB)


sudo dd if=/dev/zero of=/swap bs=1024k count=2000
sudo mkswap /swap
sudo chmod 0600 /swap
sudo swapon /swap
sudo vim /etc/fstab
  + /swap swap swap defaults 0 0

Apache、Certbot、Sqliteをインストールします。


# sudo vim /etc/apt/sources.list #
#  + deb http://deb.debian.org/debian/ stretch-backports main
# sudo apt-get update
sudo apt-get install apache2 certbot python-certbot-apache sqlite3

gitユーザーの追加,Gogsの導入

Gogsのインストールの説明にしたがってGogsを設置していきます。


#Gogs用にgitユーザーの追加
sudo adduser --disabled-login --gecos 'Gogs' git

sudo su - git

# goのインストール
mkdir local
# https://golang.org/dl/
wget https://dl.google.com/go/go1.9.4.linux-amd64.tar.gz
tar -C /home/git/local -xzf go1.9.4.linux-amd64.tar.gz 

# 環境設定
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 $HOME/.bashrc

# gogsのインストール, 通常ではsqliteはないのでtagsで指定しておく。
go get -u -tags "sqlite" github.com/gogs/gogs
# gogsのビルド
cd $GOPATH/src/github.com/gogs/gogs
go build -tags "sqlite"

# Debianのサービスにgogsを登録する
exit
cd /home/git/go/src/github.com/gogs/gogs/scripts/systemd
sudo cp gogs.service /etc/systemd/system
cd /etc/systemd/system
sudo vim gogs.service
 - WorkingDirectory=/home/git/gogs
 - ExecStart=/home/git/gogs/gogs web
 + WorkingDirectory=/home/git/go/src/github.com/gogs/gogs
 + ExecStart=/home/git/go/src/github.com/gogs/gogs/gogs web
sudo systemctl enable gogs

 

Apacheのリバースプロキシの設定をして独自ドメインでアクセスした際にgogsに飛ぶようにします。


cd /etc/apache2/sites-available
sudo vim 000-default.conf
# DocumentRootの下の行ぐらいに追加
 + ProxyPreserveHost On
 + ProxyRequests off
 + ProxyPass / http://127.0.0.1:3000/
 + ProxyPassReverse / http://127.0.0.1:3000/

# Apacheのproxy, proxy_http モジュールの有効化
sudo a2enmod proxy proxy_http

# Apache2とgogsの起動
sudo service apache2 start
sudo service gogs start

設定したドメインでアクセスできることを確認できたら、次はsslの設定をします。


# 質問に従って設定していってください。
sudo service apache2 stop
sudo certbot --apache

sudo service apache2 start
sudo service gogs restart

httpsで接続できることを確認できたらgogsの初期設定をして導入完了です。
おそらく初回アクセスで/installのページに飛ぶのでそこで初期設定を行います。

Certbotの自動更新

certbot (Let's Encrypt)は自動で更新してくれないのでcronに登録して自動更新してくれるようにしておきましょう。
今回は月に一回、証明証を更新する設定にしています。


sudo crontab -e
 + @monthly service apache2 stop && certbot renew --force-renew && service apache2 start

Gogsのカスタム

初期設定後、custom/confにapp.iniが作成されるので、そのファイルからある程度Gogsのカスタムができます。
詳細はhttps://gogs.io/docs/advanced/configuration_cheat_sheetを参照してください。

コメントする