Setting Up a Personal Gogs Git Server

Well, if you’re here you must be interested in running your own personal GitHub/GitLab right? I’ll help you get close to that with gogs - the Go Git Service. This will probably take you less than 20 minutes to do. When you’re done, you’ll have a simple private git server just for yourself.

Note that this post doesn’t go over how to setup HTTPS to encrypt your traffic. I’ll be writing about that in part 2, but for now you should only run gogs on your own private network.

Prerequisites

You must have a running server (local or remote) with git installed.

Create a sudo user named ‘git’

This is the user that the gogs service will run under.

sudo adduser git
# ENTER A PASSWORD
# Then, keep hitting Enter for the other prompts
# Add git to the sudoers group
sudo adduser git sudo
# Login as the git user
su - git
cd /home/git

Downloading Gogs

The simplest way to get gogs is by downloading a binary from their site. Since you’re in a server environment most likely, you’ll probably use curl or wget. The code below assumes you’re running a typical 64bit Ubuntu linux server.

This will probably be an old version by the time you’re reading this… Go to gogs’ downloads page and find the latest binary version. The commands below assume you’re running gogs v0.9.13

# Download & extract gogs
GOGS_FILE=gogs_v0.9.13_linux_amd64.tar.gz
curl -O https://dl.gogs.io/$GOGS_FILE
tar -xvzf $GOGS_FILE
cd gogs

That’s it! Now we just run gogs…

# Start gogs on localhost:3000
./gogs web

After you run gogs, direct your browser to http://[server_ip]:3000. You’ll see the setup page.

Setting up gogs

Gogs database settings

For the database type, I simply chose SQLite3. I haven’t had any problems with it so far, but you could choose MySQL or PostgreSQL instead. They might require extra setup.

With SQLite3 selected, you need to store the database somewhere. The default is data/gogs.db but if you want to run gogs as a service (which we’ll do later), they recommend absolute paths. So /home/git/gogs/data/gogs.db it is.

Gogs application settings

Next, you can change the Application Name if you want to. The Repo Path and Run User options are pretty important. You can just keep the defaults if you setup the ‘git’ user above.

Domain is either your server’s IP address or domain name. For example, either 127.0.0.1 or gogs.jakedeichert.com would work here. SSH port is self-explanatory. The HTTP port I left as the gogs default of 3000. Since this is a personal server, I have no issue bookmarking my_sever_ip:3000.

The Application URL is a string used throughout gogs for things such as clone urls. Use the same IP/domain and HTTP port from above. For the Log Path, leaving the default should be fine.

Now, the optional settings. We’re going to skip the email section. It’s a personal git server.. if you need to be notified when you push to your own repo, you may have something similar to the “fear of missing out” or legitimate security concerns.

For the server settings, we’ll choose options that make sense for a personal server. Let’s checkmark Disable Self-registration and Enable Require Sign In to View Pages. We don’t want random people wasting our server resources. Also, if you don’t plan on using Gravatar for yourself, disable that too. Note, you can upload your own image through profile settings later on.

Gogs service settings

Finally, create an admin account. This is the point where you open up INSERT PASSWORD MANAGER APP HERE and generate a password. You could even use that same app to generate a username, but your own name should suffice and is shorter to type most likely. Note, you do not need to enter an email address.

Click Install Gogs. Now you’ll be redirected to your dashboard! If instead gogs gives you an error, you may have specified some directory paths that your user doesn’t actually have access to.

Gogs dashboard screenshot

Enabling Gogs as a service

I’m assuming you’re running Ubuntu, so we’ll enable gogs as an init service.

# Press CTRL-C to stop the running gogs instance
# Copy the gogs init file
sudo cp scripts/init/debian/gogs /etc/init.d
sudo chmod +x /etc/init.d/gogs

I was also still assuming that you are using the ‘git’ user you created earlier and that gogs is in the directory path /home/git/gogs. If either is false, you’ll need to edit that init file to work with your setup.

Finally, start gogs as a service.

sudo service gogs start

Friendly Reminder

Please keep in mind, right now all of your gogs traffic is unencrypted. Any code you pull or push could be viewed by others if you’re on a public network.

I plan on releasing a part 2 which will show you how to setup a self-signed SSL certificate for HTTPS. This will ensure your code is kept private no matter what network you’re on. If you’re waiting for this post, please tweet me and let me know! I’ll try to push it out as soon as possible.


Any questions or comments?
Tweet me @jakedeichert.

Like what I write about? Add my RSS Feed!