Setup Gogs on Debian 9 or Ubuntu 16.04

Published on: Fri, Mar 16, 2018 at 11:27 am EST
Debian Linux Guides System Admin Ubuntu

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 / {
        proxy_pass http://127.0.0.1:3000;
}

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 https://dl.gogs.io/0.11.29/linux_amd64.tar.gz | tar -xz -C /home/git/"

For 32-bit systems.

sudo -u git sh -c "curl https://dl.gogs.io/0.11.29/linux_386.tar.gz | 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 http://example.com 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)
Domain: example.com
Application URL: http://example.com/

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 = 127.0.0.1 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.

[server]
DOMAIN           = example.com
HTTP_ADDR        = 127.0.0.1
HTTP_PORT        = 3000
ROOT_URL         = http://example.com/
DISABLE_SSH      = false
SSH_PORT         = 22
START_SSH_SERVER = false
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