I recently stumbled across the Gogs project whilst looking for self-hosted Git solutions. I run a FreeNAS server at home so I thought I would get the app up and running in a jail. Here is how I did it.

Jail Preparation

Create a new jail named gogs and make sure that the jail is up to date by running.

pkg update && pkg upgrade

Now install the required packages.

pkg install go git gcc

Next add a user git and switch to the new user.

pw useradd git -m
su git -

Set the Go env variables both for this session and for future sessions.

GOPATH=$HOME/go; export GOPATH
echo 'GOPATH=$HOME/go; export GOPATH' >> ~/.profile

Installation and Initial Configuration

Fetch Gogs using the Go package manager.

go get -u --tags sqlite github.com/gogs/gogs

Create a symbolic link to the gogs directory to make it easier to manage.

ln -s ~/go/src/github.com/gogs/gogs ~/gogs

cd into the source directory and issue the build command.

cd ~/gogs
go build --tags sqlite

Issue the following command to start gogs for the first time and then browse to the jails IP address at port 3000 and complete the initial configuration via the web GUI.

./gogs web

Once you have completed the installation terminate the gogs process from the terminal using Ctrl+C.

Finally, we need to switch back to the root user and configure an init script to set the gogs service to start at boot.

exit
cp /home/git/gogs/scripts/init/freebsd/gogs /usr/local/etc/rc.d/
chmod a+x /usr/local/etc/rc.d/gogs

We also need to add gogs_enable="YES" to the /etc/rc.conf file. Now we can start the service and test that it is working via a web browser.

service gogs start

Updating

Updating is a piece of cake! But take a jail snapshot first!!!!

SSH into the gogs jail and run the following commands.

su git
cd /home/git/gogs
go get -u --tags sqlite github.com/gogs/gogs
go build --tags sqlite
exit
service gogs start