Setup Gogs on Debian 9 or Ubuntu 16.04

Posted on

Using a Different System?

  • Setup Gogs on Linux

Are we missing a guide for your target system? Request one, or submit your own!

Gogs is a painless self-hosted Git service.

This guide uses PostgreSQL for the database and Nginx as a reverse proxy. After following this guide, you will be able to access the Gogs web interface through HTTP and the hosted git repositories through HTTP and SSH. HTTPS access can be added by extending the Nginx configuration.

You should have an up-to-date system and a non-root sudo user.

Setup the Database

This guide uses PostgreSQL. You can alternatively use MySQL/MariaDB, SQLite3, MSSQL, or TiDB.

Install PostgreSQL.

sudo apt-get install -y postgresql

Create the user in which Gogs will connect to the database. This will prompt you to create a password for that user. This password will be entered into Gog’s configuration later.

sudo -u postgres createuser gogs -P

Create the Gogs database.

sudo -u postgres createdb gogs -O gogs -E UTF8

Setup the Reverse Proxy

This guide uses Nginx as a reverse proxy. You can alternatively use another HTTP server that can act as a reverse proxy such as Apache or Caddy.

Install Nginx.

sudo apt-get install -y nginx

Edit /etc/nginx/sites-enabled/default.

sudo nano /etc/nginx/sites-enabled/default

Find the following lines.

location / {
        # First attempt to serve request as file, then
        # as directory, then fall back to displaying a 404.
        try_files $uri $uri/ =404;

Change them to this.

location / {

Reload Nginx to use the new configuration.

sudo systemctl reload nginx

Install Gogs

First, make sure git is installed.

sudo apt-get install -y git

Then create the user Gogs will run as and which will be used for SSH git access.

sudo useradd -m git

Next, download and unpack the Gogs release for your architecture.

For 64-bit systems.

sudo -u git sh -c "curl | tar -xz -C /home/git/"

For 32-bit systems.

sudo -u git sh -c "curl | tar -xz -C /home/git/"

Setup Gogs to run on boot.

sudo cp /home/git/gogs/scripts/systemd/gogs.service /etc/systemd/system
sudo systemctl enable gogs

Start Gogs.

sudo systemctl start gogs

This is the only time you will need to start Gogs this way.

Initial Configuration

Go to in your web browser. You will see: Install Steps For First-time Run

Change the following settings.

Database Type: PostgreSQL
User: gogs
Password: (password you created earlier)
Application URL:

You might want to set the Application Name, the Email Service Settings, and Server and Other Services Settings. All the settings can be changed later by editing /home/git/gogs/custom/conf/app.ini.

Click Install Gogs.

You will be redirected to a sign-in page. Sign up a new user now.

Only Allow HTTP(S) Access Through Nginx

This is mostly useful when using Nginx to terminate HTTPS.

Add HTTP_ADDR = to the [server] section of /home/git/gogs/custom/conf/app.ini.

sudo -u git nano /home/git/gogs/custom/conf/app.ini

After this change, the [server] section will look something like the following.

DOMAIN           =
HTTP_ADDR        =
HTTP_PORT        = 3000
ROOT_URL         =
DISABLE_SSH      = false
SSH_PORT         = 22
OFFLINE_MODE     = false

Restart Gogs to use the updated configuration.

sudo systemctl restart gogs

Want to contribute?

You could earn up to $300 by adding new articles

Submit your article
Suggest an update
Request an article

Leave a Reply

Your email address will not be published. Required fields are marked *